Changeset 61823 in webkit
- Timestamp:
- Jun 24, 2010 10:33:35 PM (14 years ago)
- Location:
- trunk/WebCore
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebCore/ChangeLog
r61822 r61823 1 2010-06-24 Adam Barth <abarth@webkit.org> 2 3 Reviewed by Eric Seidel. 4 5 Sketch out InHeadMode for tree builder 6 https://bugs.webkit.org/show_bug.cgi?id=41184 7 8 This state is relatively straightforward. We introduce the stack of 9 open elements to track that notion in the spec. The old tree builder 10 has a nice data structure for that, which we'll probably steal, but I'd 11 like to see what the full API is first. 12 13 * html/HTMLTreeBuilder.cpp: 14 (WebCore::HTMLTreeBuilder::processToken): 15 (WebCore::HTMLTreeBuilder::insertCharacter): 16 (WebCore::HTMLTreeBuilder::insertGenericRCDATAElement): 17 (WebCore::HTMLTreeBuilder::insertGenericRawTextElement): 18 (WebCore::HTMLTreeBuilder::insertScriptElement): 19 * html/HTMLTreeBuilder.h: 20 (WebCore::HTMLTreeBuilder::ElementStack::pop): 21 (WebCore::HTMLTreeBuilder::ElementStack::top): 22 1 23 2010-06-24 Adam Barth <abarth@webkit.org> 2 24 -
trunk/WebCore/html/HTMLTreeBuilder.cpp
r61822 r61823 338 338 goto reprocessToken; 339 339 } 340 case InHeadMode: 340 case InHeadMode: { 341 switch (token.type()) { 342 case HTMLToken::Uninitialized: 343 ASSERT_NOT_REACHED(); 344 break; 345 case HTMLToken::Character: 346 insertCharacter(cc); 347 break; 348 case HTMLToken::Comment: 349 return insertComment(token); 350 case HTMLToken::DOCTYPE: 351 parseError(token); 352 return 0; 353 case HTMLToken::StartTag: 354 if (token.name() == htmlTag) { 355 notImplemented(); 356 return 0; 357 } 358 // FIXME: Atomize "command". 359 if (token.name() == baseTag || token.name() == "command" || token.name() == linkTag) { 360 PassRefPtr<Node> node = insertElement(token); 361 m_openElements.pop(); 362 notImplemented(); 363 return node; 364 } 365 if (token.name() == metaTag) { 366 PassRefPtr<Node> node = insertElement(token); 367 m_openElements.pop(); 368 notImplemented(); 369 return node; 370 } 371 if (token.name() == titleTag) 372 return insertGenericRCDATAElement(token); 373 if (token.name() == noscriptTag) { 374 if (isScriptingFlagEnabled(m_document->frame())) 375 return insertGenericRawTextElement(token); 376 PassRefPtr<Node> node = insertElement(token); 377 setInsertionMode(InHeadNoscriptMode); 378 return node; 379 } 380 if (token.name() == noframesTag || token.name() == styleTag) 381 return insertGenericRawTextElement(token); 382 if (token.name() == scriptTag) 383 return insertScriptElement(token); 384 if (token.name() == headTag) { 385 notImplemented(); 386 return 0; 387 } 388 break; 389 case HTMLToken::EndTag: 390 if (token.name() == headTag) { 391 ASSERT(m_openElements.top()->tagQName() == headTag); 392 m_openElements.pop(); 393 setInsertionMode(AfterHeadMode); 394 return 0; 395 } 396 if (token.name() == bodyTag || token.name() == htmlTag || token.name() == brTag) 397 break; 398 parseError(token); 399 return 0; 400 break; 401 case HTMLToken::EndOfFile: 402 break; 403 } 404 AtomicHTMLToken fakeHead(HTMLToken::EndTag, headTag.localName()); 405 processToken(fakeHead); 406 goto reprocessToken; 407 } 341 408 case InHeadNoscriptMode: 342 409 case AfterHeadMode: … … 383 450 } 384 451 452 void HTMLTreeBuilder::insertCharacter(UChar cc) 453 { 454 ASSERT_UNUSED(cc, cc); 455 } 456 457 PassRefPtr<Node> HTMLTreeBuilder::insertGenericRCDATAElement(AtomicHTMLToken& token) 458 { 459 ASSERT_UNUSED(token, token.type() == HTMLToken::StartTag); 460 return 0; 461 } 462 463 PassRefPtr<Node> HTMLTreeBuilder::insertGenericRawTextElement(AtomicHTMLToken& token) 464 { 465 ASSERT_UNUSED(token, token.type() == HTMLToken::StartTag); 466 return 0; 467 } 468 469 PassRefPtr<Node> HTMLTreeBuilder::insertScriptElement(AtomicHTMLToken& token) 470 { 471 ASSERT_UNUSED(token, token.type() == HTMLToken::StartTag); 472 return 0; 473 } 474 385 475 void HTMLTreeBuilder::finished() 386 476 { -
trunk/WebCore/html/HTMLTreeBuilder.h
r61822 r61823 100 100 }; 101 101 102 class ElementStack : public Noncopyable { 103 public: 104 void pop() { } 105 Element* top() const { return 0; } 106 }; 107 102 108 PassRefPtr<Node> passTokenToLegacyParser(HTMLToken&); 103 109 PassRefPtr<Node> processToken(AtomicHTMLToken&, UChar cc = 0); … … 106 112 PassRefPtr<Node> insertComment(AtomicHTMLToken&); 107 113 PassRefPtr<Node> insertElement(AtomicHTMLToken&); 114 void insertCharacter(UChar cc); 115 PassRefPtr<Node> insertGenericRCDATAElement(AtomicHTMLToken&); 116 PassRefPtr<Node> insertGenericRawTextElement(AtomicHTMLToken&); 117 PassRefPtr<Node> insertScriptElement(AtomicHTMLToken&); 108 118 109 119 RefPtr<Node> m_headElement; 120 ElementStack m_openElements; 110 121 111 122 // FIXME: Implement error reporting.
Note: See TracChangeset
for help on using the changeset viewer.