Changeset 140877 in webkit
- Timestamp:
- Jan 25, 2013 4:20:45 PM (11 years ago)
- Location:
- trunk
- Files:
-
- 3 added
- 6 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/LayoutTests/ChangeLog
r140868 r140877 1 2013-01-25 Dima Gorbik <dgorbik@apple.com> 2 3 Support language WebVTT Nodes 4 https://bugs.webkit.org/show_bug.cgi?id=107907 5 6 Reviewed by Eric Carlson. 7 8 * media/track/captions-webvtt/styling-lang.vtt: Added. 9 * media/track/track-css-matching-lang-expected.txt: Added. 10 * media/track/track-css-matching-lang.html: Added. 11 1 12 2013-01-25 Emil A Eklund <eae@chromium.org> 2 13 -
trunk/Source/WebCore/ChangeLog
r140875 r140877 1 2013-01-25 Dima Gorbik <dgorbik@apple.com> 2 3 Support language WebVTT Nodes 4 https://bugs.webkit.org/show_bug.cgi?id=107907 5 6 Reviewed by Eric Carlson. 7 8 Language stack and WebVTT language nodes are added as 9 required by specs. 10 11 Test: media/track/track-css-matching-lang.html 12 13 * html/track/TextTrackCue.cpp: 14 (WebCore::TextTrackCue::copyWebVTTNodeToDOMTree): WebVTT language nodes should be 15 spans in DOM and the lang attribute should be set for all nodes if applicable. 16 * html/track/TextTrackCue.h: 17 (WebCore::TextTrackCue::langElementTagName): 18 (TextTrackCue): 19 (WebCore::TextTrackCue::langAttributeName): 20 * html/track/WebVTTParser.cpp: 21 (WebCore::WebVTTParser::createDocumentFragmentFromCueText): clear the language stack in case 22 we use the same parser object for multiple cues that have incorrect syntax. 23 (WebCore::isLangToken): 24 (WebCore): 25 (WebCore::WebVTTParser::constructTreeFromToken): parse lang WebVTT objects. 26 * html/track/WebVTTParser.h: 27 (WebVTTParser): 28 1 29 2013-01-25 Andy Estes <aestes@apple.com> 2 30 -
trunk/Source/WebCore/html/track/TextTrackCue.cpp
r140359 r140877 505 505 RefPtr<Node> clonedNode; 506 506 // Specs require voice and class WebVTT elements to be spans for DOM trees. 507 if (node->hasTagName(voiceElementTagName()) || node->hasTagName(classElementTagName()) ) {507 if (node->hasTagName(voiceElementTagName()) || node->hasTagName(classElementTagName()) || node->hasTagName(langElementTagName())) { 508 508 clonedNode = HTMLSpanElement::create(spanTag, static_cast<Document*>(m_scriptExecutionContext)); 509 509 toElement(clonedNode.get())->setAttribute(classAttr, toElement(node)->getAttribute(classAttr)); 510 510 toElement(clonedNode.get())->setAttribute(titleAttr, toElement(node)->getAttribute(voiceAttributeName())); 511 toElement(clonedNode.get())->setAttribute(langAttr, toElement(node)->getAttribute(langAttributeName())); 511 512 } else 512 513 clonedNode = node->cloneNode(false); -
trunk/Source/WebCore/html/track/TextTrackCue.h
r140505 r140877 86 86 } 87 87 88 static const QualifiedName& langElementTagName() 89 { 90 DEFINE_STATIC_LOCAL(QualifiedName, langTag, (nullAtom, "lang", nullAtom)); 91 return langTag; 92 } 93 88 94 static const QualifiedName& voiceElementTagName() 89 95 { … … 97 103 return cTag; 98 104 } 99 105 100 106 static const QualifiedName& voiceAttributeName() 101 107 { 102 108 DEFINE_STATIC_LOCAL(QualifiedName, voiceAttr, (nullAtom, "voice", nullAtom)); 109 return voiceAttr; 110 } 111 112 static const QualifiedName& langAttributeName() 113 { 114 DEFINE_STATIC_LOCAL(QualifiedName, voiceAttr, (nullAtom, "lang", nullAtom)); 103 115 return voiceAttr; 104 116 } -
trunk/Source/WebCore/html/track/WebVTTParser.cpp
r140231 r140877 252 252 m_token.clear(); 253 253 254 m_languageStack.clear(); 254 255 SegmentedString content(text); 255 256 while (m_tokenizer->nextToken(content, m_token)) … … 342 343 } 343 344 345 static inline bool isLangToken(WebVTTToken& token) 346 { 347 return token.name().size() == 4 && token.name()[0] == 'l' && token.name()[1] == 'a' && token.name()[2] == 'n' && token.name()[3] == 'g'; 348 } 349 344 350 void WebVTTParser::constructTreeFromToken(Document* document) 345 351 { … … 364 370 else if (m_token.name().size() == 1 && m_token.name()[0] == 'v') 365 371 child = WebVTTElement::create(TextTrackCue::voiceElementTagName(), document); 372 else if (isLangToken(m_token)) 373 child = WebVTTElement::create(TextTrackCue::langElementTagName(), document); 366 374 367 375 if (child) { … … 370 378 if (child->hasTagName(TextTrackCue::voiceElementTagName())) 371 379 child->setAttribute(TextTrackCue::voiceAttributeName(), AtomicString(m_token.annotation().data(), m_token.annotation().size())); 380 if (child->hasTagName(TextTrackCue::langElementTagName())) 381 m_languageStack.append(AtomicString(m_token.annotation().data(), m_token.annotation().size())); 382 if (!m_languageStack.isEmpty()) 383 child->setAttribute(TextTrackCue::langAttributeName(), m_languageStack.last()); 372 384 m_currentNode->parserAppendChild(child); 373 385 m_currentNode = child; … … 379 391 || (m_token.name().size() == 1 && m_token.name()[0] == 'c') 380 392 || (m_token.name().size() == 1 && m_token.name()[0] == 'v')) { 393 if (m_currentNode->parentNode()) 394 m_currentNode = m_currentNode->parentNode(); 395 } 396 if (isLangToken(m_token)) { 397 if (m_currentNode->hasTagName(TextTrackCue::langElementTagName())) 398 m_languageStack.removeLast(); 381 399 if (m_currentNode->parentNode()) 382 400 m_currentNode = m_currentNode->parentNode(); -
trunk/Source/WebCore/html/track/WebVTTParser.h
r127300 r140877 134 134 WebVTTParserClient* m_client; 135 135 136 Vector<AtomicString> m_languageStack; 136 137 Vector<RefPtr<TextTrackCue> > m_cuelist; 137 138 };
Note: See TracChangeset
for help on using the changeset viewer.