Changeset 61982 in webkit


Ignore:
Timestamp:
Jun 28, 2010 12:18:14 AM (14 years ago)
Author:
abarth@webkit.org
Message:

2010-06-27 Adam Barth <abarth@webkit.org>

Reviewed by Eric Seidel.

Sketch out the InBodyMode for the tree builder
https://bugs.webkit.org/show_bug.cgi?id=41271

This gives us some basic behavior for the InBodyMode. I've implemented
some of the easier logic. The more complicated logic will be in
subsequent patches.

  • html/HTMLTreeBuilder.cpp: (WebCore::HTMLTreeBuilder::processStartTag): (WebCore::HTMLTreeBuilder::processEndTag): (WebCore::HTMLTreeBuilder::insertFormatingElement): (WebCore::HTMLTreeBuilder::reconstructTheActiveFormattingElements):
  • html/HTMLTreeBuilder.h:
Location:
trunk/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r61975 r61982  
     12010-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
    1192010-06-25  Yuzo Fujishima  <yuzo@google.com>
    220
  • trunk/WebCore/html/HTMLTreeBuilder.cpp

    r61974 r61982  
    354354    case InBodyMode:
    355355        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);
    357542        break;
    358543    case InHeadNoscriptMode:
     
    427612        ASSERT(insertionMode() == InBodyMode);
    428613        notImplemented();
     614        // FIXME: This implementation is a completely wrong but useful for testing.
     615        m_openElements.pop();
    429616        break;
    430617    case InHeadNoscriptMode:
     
    625812}
    626813
     814void HTMLTreeBuilder::insertFormatingElement(AtomicHTMLToken& token)
     815{
     816    insertElement(token);
     817    m_activeFormattingElements.append(currentElement());
     818}
     819
    627820void HTMLTreeBuilder::insertGenericRCDATAElement(AtomicHTMLToken& token)
    628821{
     
    659852}
    660853
     854void HTMLTreeBuilder::reconstructTheActiveFormattingElements()
     855{
     856    notImplemented();
     857}
     858
    661859void HTMLTreeBuilder::finished()
    662860{
  • trunk/WebCore/html/HTMLTreeBuilder.h

    r61974 r61982  
    180180    void insertElement(AtomicHTMLToken&);
    181181    void insertSelfClosingElement(AtomicHTMLToken&);
     182    void insertFormatingElement(AtomicHTMLToken&);
    182183    void insertGenericRCDATAElement(AtomicHTMLToken&);
    183184    void insertGenericRawTextElement(AtomicHTMLToken&);
     
    188189
    189190    PassRefPtr<Element> createElement(AtomicHTMLToken&);
     191    void reconstructTheActiveFormattingElements();
    190192
    191193    Element* currentElement() { return m_openElements.top(); }
    192194
    193195    RefPtr<Element> m_headElement;
     196    RefPtr<Element> m_formElement;
    194197    ElementStack m_openElements;
     198    Vector<Element*> m_activeFormattingElements;
    195199    bool m_framesetOk;
    196200
Note: See TracChangeset for help on using the changeset viewer.