Changeset 61982 in webkit
- Timestamp:
- Jun 28, 2010 12:18:14 AM (14 years ago)
- Location:
- trunk/WebCore
- Files:
-
- 3 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/WebCore/ChangeLog
r61975 r61982 1 2010-06-27 Adam Barth <abarth@webkit.org> 2 3 Reviewed by Eric Seidel. 4 5 Sketch out the InBodyMode for the tree builder 6 https://bugs.webkit.org/show_bug.cgi?id=41271 7 8 This gives us some basic behavior for the InBodyMode. I've implemented 9 some of the easier logic. The more complicated logic will be in 10 subsequent patches. 11 12 * html/HTMLTreeBuilder.cpp: 13 (WebCore::HTMLTreeBuilder::processStartTag): 14 (WebCore::HTMLTreeBuilder::processEndTag): 15 (WebCore::HTMLTreeBuilder::insertFormatingElement): 16 (WebCore::HTMLTreeBuilder::reconstructTheActiveFormattingElements): 17 * html/HTMLTreeBuilder.h: 18 1 19 2010-06-25 Yuzo Fujishima <yuzo@google.com> 2 20 -
trunk/WebCore/html/HTMLTreeBuilder.cpp
r61974 r61982 354 354 case InBodyMode: 355 355 ASSERT(insertionMode() == InBodyMode); 356 notImplemented(); 356 if (token.name() == htmlTag) { 357 insertHTMLStartTagInBody(token); 358 return; 359 } 360 if (token.name() == baseTag || token.name() == "command" || token.name() == linkTag || token.name() == metaTag || token.name() == noframesTag || token.name() == scriptTag || token.name() == styleTag || token.name() == titleTag) { 361 bool didProcess = processStartTagForInHead(token); 362 ASSERT_UNUSED(didProcess, didProcess); 363 return; 364 } 365 if (token.name() == bodyTag) { 366 parseError(token); 367 notImplemented(); 368 return; 369 } 370 if (token.name() == framesetTag) { 371 notImplemented(); 372 return; 373 } 374 if (token.name() == addressTag || token.name() == articleTag || token.name() == asideTag || token.name() == blockquoteTag || token.name() == centerTag || token.name() == "details" || token.name() == dirTag || token.name() == divTag || token.name() == dlTag || token.name() == fieldsetTag || token.name() == "figure" || token.name() == footerTag || token.name() == headerTag || token.name() == hgroupTag || token.name() == menuTag || token.name() == navTag || token.name() == olTag || token.name() == pTag || token.name() == sectionTag || token.name() == ulTag) { 375 notImplemented(); 376 insertElement(token); 377 return; 378 } 379 if (token.name() == h1Tag || token.name() == h2Tag || token.name() == h3Tag || token.name() == h4Tag || token.name() == h5Tag || token.name() == h6Tag) { 380 notImplemented(); 381 insertElement(token); 382 return; 383 } 384 if (token.name() == preTag || token.name() == listingTag) { 385 notImplemented(); 386 insertElement(token); 387 m_tokenizer->skipLeadingNewLineForListing(); 388 m_framesetOk = false; 389 return; 390 } 391 if (token.name() == formTag) { 392 notImplemented(); 393 insertElement(token); 394 m_formElement = currentElement(); 395 return; 396 } 397 if (token.name() == liTag) { 398 notImplemented(); 399 insertElement(token); 400 return; 401 } 402 if (token.name() == ddTag || token.name() == dtTag) { 403 notImplemented(); 404 insertElement(token); 405 return; 406 } 407 if (token.name() == plaintextTag) { 408 notImplemented(); 409 insertElement(token); 410 m_tokenizer->setState(HTMLTokenizer::PLAINTEXTState); 411 return; 412 } 413 if (token.name() == buttonTag) { 414 notImplemented(); 415 reconstructTheActiveFormattingElements(); 416 insertElement(token); 417 m_framesetOk = false; 418 return; 419 } 420 if (token.name() == aTag) { 421 notImplemented(); 422 reconstructTheActiveFormattingElements(); 423 insertFormatingElement(token); 424 return; 425 } 426 if (token.name() == bTag || token.name() == bigTag || token.name() == codeTag || token.name() == emTag || token.name() == fontTag || token.name() == iTag || token.name() == sTag || token.name() == smallTag || token.name() == strikeTag || token.name() == strongTag || token.name() == ttTag || token.name() == uTag) { 427 reconstructTheActiveFormattingElements(); 428 insertFormatingElement(token); 429 return; 430 } 431 if (token.name() == nobrTag) { 432 reconstructTheActiveFormattingElements(); 433 notImplemented(); 434 insertFormatingElement(token); 435 return; 436 } 437 if (token.name() == appletTag || token.name() == marqueeTag || token.name() == objectTag) { 438 reconstructTheActiveFormattingElements(); 439 insertElement(token); 440 notImplemented(); 441 m_framesetOk = false; 442 return; 443 } 444 if (token.name() == tableTag) { 445 notImplemented(); 446 insertElement(token); 447 m_framesetOk = false; 448 m_insertionMode = InTableMode; 449 return; 450 } 451 if (token.name() == areaTag || token.name() == basefontTag || token.name() == "bgsound" || token.name() == brTag || token.name() == embedTag || token.name() == imgTag || token.name() == inputTag || token.name() == keygenTag || token.name() == wbrTag) { 452 reconstructTheActiveFormattingElements(); 453 insertSelfClosingElement(token); 454 m_framesetOk = false; 455 return; 456 } 457 if (token.name() == paramTag || token.name() == sourceTag || token.name() == "track") { 458 insertSelfClosingElement(token); 459 return; 460 } 461 if (token.name() == hrTag) { 462 notImplemented(); 463 insertSelfClosingElement(token); 464 m_framesetOk = false; 465 return; 466 } 467 if (token.name() == imageTag) { 468 parseError(token); 469 notImplemented(); 470 // Apparently we're not supposed to ask. 471 return; 472 } 473 if (token.name() == isindexTag) { 474 parseError(token); 475 notImplemented(); 476 return; 477 } 478 if (token.name() == textareaTag) { 479 insertElement(token); 480 m_tokenizer->skipLeadingNewLineForListing(); 481 m_tokenizer->setState(HTMLTokenizer::RCDATAState); 482 m_originalInsertionMode = m_insertionMode; 483 m_framesetOk = false; 484 m_insertionMode = TextMode; 485 return; 486 } 487 if (token.name() == xmpTag) { 488 notImplemented(); 489 reconstructTheActiveFormattingElements(); 490 m_framesetOk = false; 491 insertGenericRawTextElement(token); 492 return; 493 } 494 if (token.name() == iframeTag) { 495 m_framesetOk = false; 496 insertGenericRawTextElement(token); 497 return; 498 } 499 if (token.name() == noembedTag) { 500 insertGenericRawTextElement(token); 501 return; 502 } 503 if (token.name() == noscriptTag && isScriptingFlagEnabled(m_document->frame())) { 504 insertGenericRawTextElement(token); 505 return; 506 } 507 if (token.name() == selectTag) { 508 reconstructTheActiveFormattingElements(); 509 insertElement(token); 510 m_framesetOk = false; 511 if (m_insertionMode == InTableMode || m_insertionMode == InCaptionMode || m_insertionMode == InColumnGroupMode || m_insertionMode == InTableBodyMode || m_insertionMode == InRowMode || m_insertionMode == InCellMode) 512 m_insertionMode = InSelectInTableMode; 513 else 514 m_insertionMode = InSelectMode; 515 return; 516 } 517 if (token.name() == optgroupTag || token.name() == optionTag) { 518 notImplemented(); 519 reconstructTheActiveFormattingElements(); 520 insertElement(token); 521 return; 522 } 523 if (token.name() == rpTag || token.name() == rtTag) { 524 notImplemented(); 525 insertElement(token); 526 return; 527 } 528 if (token.name() == "math") { 529 // This is the MathML foreign content branch point. 530 notImplemented(); 531 } 532 if (token.name() == "svg") { 533 // This is the SVG foreign content branch point. 534 notImplemented(); 535 } 536 if (token.name() == captionTag || token.name() == colTag || token.name() == colgroupTag || token.name() == frameTag || token.name() == headTag || token.name() == tbodyTag || token.name() == tdTag || token.name() == tfootTag || token.name() == thTag || token.name() == theadTag || token.name() == trTag) { 537 parseError(token); 538 return; 539 } 540 reconstructTheActiveFormattingElements(); 541 insertElement(token); 357 542 break; 358 543 case InHeadNoscriptMode: … … 427 612 ASSERT(insertionMode() == InBodyMode); 428 613 notImplemented(); 614 // FIXME: This implementation is a completely wrong but useful for testing. 615 m_openElements.pop(); 429 616 break; 430 617 case InHeadNoscriptMode: … … 625 812 } 626 813 814 void HTMLTreeBuilder::insertFormatingElement(AtomicHTMLToken& token) 815 { 816 insertElement(token); 817 m_activeFormattingElements.append(currentElement()); 818 } 819 627 820 void HTMLTreeBuilder::insertGenericRCDATAElement(AtomicHTMLToken& token) 628 821 { … … 659 852 } 660 853 854 void HTMLTreeBuilder::reconstructTheActiveFormattingElements() 855 { 856 notImplemented(); 857 } 858 661 859 void HTMLTreeBuilder::finished() 662 860 { -
trunk/WebCore/html/HTMLTreeBuilder.h
r61974 r61982 180 180 void insertElement(AtomicHTMLToken&); 181 181 void insertSelfClosingElement(AtomicHTMLToken&); 182 void insertFormatingElement(AtomicHTMLToken&); 182 183 void insertGenericRCDATAElement(AtomicHTMLToken&); 183 184 void insertGenericRawTextElement(AtomicHTMLToken&); … … 188 189 189 190 PassRefPtr<Element> createElement(AtomicHTMLToken&); 191 void reconstructTheActiveFormattingElements(); 190 192 191 193 Element* currentElement() { return m_openElements.top(); } 192 194 193 195 RefPtr<Element> m_headElement; 196 RefPtr<Element> m_formElement; 194 197 ElementStack m_openElements; 198 Vector<Element*> m_activeFormattingElements; 195 199 bool m_framesetOk; 196 200
Note: See TracChangeset
for help on using the changeset viewer.