OLD | NEW |
1 /* | 1 /* |
2 * Copyright (C) 2013 Google Inc. All rights reserved. | 2 * Copyright (C) 2013 Google Inc. All rights reserved. |
3 * | 3 * |
4 * Redistribution and use in source and binary forms, with or without | 4 * Redistribution and use in source and binary forms, with or without |
5 * modification, are permitted provided that the following conditions are | 5 * modification, are permitted provided that the following conditions are |
6 * met: | 6 * met: |
7 * | 7 * |
8 * * Redistributions of source code must retain the above copyright | 8 * * Redistributions of source code must retain the above copyright |
9 * notice, this list of conditions and the following disclaimer. | 9 * notice, this list of conditions and the following disclaimer. |
10 * * Redistributions in binary form must reproduce the above | 10 * * Redistributions in binary form must reproduce the above |
(...skipping 195 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
206 // Scan the name part. | 206 // Scan the name part. |
207 RegionSetting name = scanSettingName(input); | 207 RegionSetting name = scanSettingName(input); |
208 | 208 |
209 // Verify that we're looking at a '='. | 209 // Verify that we're looking at a '='. |
210 if (name == None || !input.scan('=')) { | 210 if (name == None || !input.scan('=')) { |
211 input.skipUntil<VTTParser::isASpace>(); | 211 input.skipUntil<VTTParser::isASpace>(); |
212 continue; | 212 continue; |
213 } | 213 } |
214 | 214 |
215 // Scan the value part. | 215 // Scan the value part. |
216 VTTScanner::Run valueRun = input.collectUntil<VTTParser::isASpace>(); | 216 parseSettingValue(name, input); |
217 parseSettingValue(name, input.extractString(valueRun)); | |
218 input.skipRun(valueRun); | |
219 } | 217 } |
220 } | 218 } |
221 | 219 |
222 VTTRegion::RegionSetting VTTRegion::scanSettingName(VTTScanner& input) | 220 VTTRegion::RegionSetting VTTRegion::scanSettingName(VTTScanner& input) |
223 { | 221 { |
224 if (input.scan("id")) | 222 if (input.scan("id")) |
225 return Id; | 223 return Id; |
226 if (input.scan("height")) | 224 if (input.scan("height")) |
227 return Height; | 225 return Height; |
228 if (input.scan("width")) | 226 if (input.scan("width")) |
229 return Width; | 227 return Width; |
230 if (input.scan("viewportanchor")) | 228 if (input.scan("viewportanchor")) |
231 return ViewportAnchor; | 229 return ViewportAnchor; |
232 if (input.scan("regionanchor")) | 230 if (input.scan("regionanchor")) |
233 return RegionAnchor; | 231 return RegionAnchor; |
234 if (input.scan("scroll")) | 232 if (input.scan("scroll")) |
235 return Scroll; | 233 return Scroll; |
236 | 234 |
237 return None; | 235 return None; |
238 } | 236 } |
239 | 237 |
240 void VTTRegion::parseSettingValue(RegionSetting setting, const String& value) | 238 static inline bool parsedEntireRun(const VTTScanner& input, const VTTScanner::Ru
n& run) |
| 239 { |
| 240 return input.isAt(run.end()); |
| 241 } |
| 242 |
| 243 void VTTRegion::parseSettingValue(RegionSetting setting, VTTScanner& input) |
241 { | 244 { |
242 DEFINE_STATIC_LOCAL(const AtomicString, scrollUpValueKeyword, ("up", AtomicS
tring::ConstructFromLiteral)); | 245 DEFINE_STATIC_LOCAL(const AtomicString, scrollUpValueKeyword, ("up", AtomicS
tring::ConstructFromLiteral)); |
243 | 246 |
| 247 VTTScanner::Run valueRun = input.collectUntil<VTTParser::isASpace>(); |
| 248 |
244 switch (setting) { | 249 switch (setting) { |
245 case Id: | 250 case Id: { |
246 if (value.find("-->") == kNotFound) | 251 String stringValue = input.extractString(valueRun); |
247 m_id = value; | 252 if (stringValue.find("-->") == kNotFound) |
| 253 m_id = stringValue; |
248 break; | 254 break; |
| 255 } |
249 case Width: { | 256 case Width: { |
250 float floatWidth; | 257 float floatWidth; |
251 VTTScanner valueScanner(value); | 258 if (VTTParser::parseFloatPercentageValue(input, floatWidth) && parsedEnt
ireRun(input, valueRun)) |
252 if (VTTParser::parseFloatPercentageValue(valueScanner, floatWidth) && va
lueScanner.isAtEnd()) | |
253 m_width = floatWidth; | 259 m_width = floatWidth; |
254 else | 260 else |
255 WTF_LOG(Media, "VTTRegion::parseSettingValue, invalid Width"); | 261 WTF_LOG(Media, "VTTRegion::parseSettingValue, invalid Width"); |
256 break; | 262 break; |
257 } | 263 } |
258 case Height: { | 264 case Height: { |
259 int number; | 265 int number; |
260 VTTScanner valueScanner(value); | 266 if (input.scanDigits(number) && parsedEntireRun(input, valueRun)) |
261 if (valueScanner.scanDigits(number) && valueScanner.isAtEnd()) | |
262 m_heightInLines = number; | 267 m_heightInLines = number; |
263 else | 268 else |
264 WTF_LOG(Media, "VTTRegion::parseSettingValue, invalid Height"); | 269 WTF_LOG(Media, "VTTRegion::parseSettingValue, invalid Height"); |
265 break; | 270 break; |
266 } | 271 } |
267 case RegionAnchor: { | 272 case RegionAnchor: { |
268 VTTScanner valueScanner(value); | |
269 FloatPoint anchor; | 273 FloatPoint anchor; |
270 if (VTTParser::parseFloatPercentageValuePair(valueScanner, ',', anchor)
&& valueScanner.isAtEnd()) | 274 if (VTTParser::parseFloatPercentageValuePair(input, ',', anchor) && pars
edEntireRun(input, valueRun)) |
271 m_regionAnchor = anchor; | 275 m_regionAnchor = anchor; |
272 else | 276 else |
273 WTF_LOG(Media, "VTTRegion::parseSettingValue, invalid RegionAnchor")
; | 277 WTF_LOG(Media, "VTTRegion::parseSettingValue, invalid RegionAnchor")
; |
274 break; | 278 break; |
275 } | 279 } |
276 case ViewportAnchor: { | 280 case ViewportAnchor: { |
277 VTTScanner valueScanner(value); | |
278 FloatPoint anchor; | 281 FloatPoint anchor; |
279 if (VTTParser::parseFloatPercentageValuePair(valueScanner, ',', anchor)
&& valueScanner.isAtEnd()) | 282 if (VTTParser::parseFloatPercentageValuePair(input, ',', anchor) && pars
edEntireRun(input, valueRun)) |
280 m_viewportAnchor = anchor; | 283 m_viewportAnchor = anchor; |
281 else | 284 else |
282 WTF_LOG(Media, "VTTRegion::parseSettingValue, invalid ViewportAnchor
"); | 285 WTF_LOG(Media, "VTTRegion::parseSettingValue, invalid ViewportAnchor
"); |
283 break; | 286 break; |
284 } | 287 } |
285 case Scroll: | 288 case Scroll: |
286 if (value == scrollUpValueKeyword) | 289 if (input.scanRun(valueRun, scrollUpValueKeyword)) |
287 m_scroll = true; | 290 m_scroll = true; |
288 else | 291 else |
289 WTF_LOG(Media, "VTTRegion::parseSettingValue, invalid Scroll"); | 292 WTF_LOG(Media, "VTTRegion::parseSettingValue, invalid Scroll"); |
290 break; | 293 break; |
291 case None: | 294 case None: |
292 break; | 295 break; |
293 } | 296 } |
| 297 |
| 298 input.skipRun(valueRun); |
294 } | 299 } |
295 | 300 |
296 const AtomicString& VTTRegion::textTrackCueContainerShadowPseudoId() | 301 const AtomicString& VTTRegion::textTrackCueContainerShadowPseudoId() |
297 { | 302 { |
298 DEFINE_STATIC_LOCAL(const AtomicString, trackRegionCueContainerPseudoId, | 303 DEFINE_STATIC_LOCAL(const AtomicString, trackRegionCueContainerPseudoId, |
299 ("-webkit-media-text-track-region-container", AtomicString::ConstructFro
mLiteral)); | 304 ("-webkit-media-text-track-region-container", AtomicString::ConstructFro
mLiteral)); |
300 | 305 |
301 return trackRegionCueContainerPseudoId; | 306 return trackRegionCueContainerPseudoId; |
302 } | 307 } |
303 | 308 |
(...skipping 156 matching lines...) Expand 10 before | Expand all | Expand 10 after Loading... |
460 | 465 |
461 void VTTRegion::scrollTimerFired(Timer<VTTRegion>*) | 466 void VTTRegion::scrollTimerFired(Timer<VTTRegion>*) |
462 { | 467 { |
463 WTF_LOG(Media, "VTTRegion::scrollTimerFired"); | 468 WTF_LOG(Media, "VTTRegion::scrollTimerFired"); |
464 | 469 |
465 stopTimer(); | 470 stopTimer(); |
466 displayLastVTTCueBox(); | 471 displayLastVTTCueBox(); |
467 } | 472 } |
468 | 473 |
469 } // namespace WebCore | 474 } // namespace WebCore |
OLD | NEW |