Changeset 61825 in webkit


Ignore:
Timestamp:
Jun 24, 2010 10:36:55 PM (14 years ago)
Author:
abarth@webkit.org
Message:

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

Reviewed by Eric Seidel.

Sketch out AfterHeadMode for tree builder
https://bugs.webkit.org/show_bug.cgi?id=41191

This mode is fairly similar to the others. I needed to change some of
the types around w.r.t. Nodes/Elements.

  • html/HTMLTreeBuilder.cpp: (WebCore::HTMLTreeBuilder::HTMLTreeBuilder): (WebCore::HTMLTreeBuilder::processToken): (WebCore::HTMLTreeBuilder::insertElement):
  • html/HTMLTreeBuilder.h: (WebCore::HTMLTreeBuilder::ElementStack::push): (WebCore::HTMLTreeBuilder::ElementStack::remove):
Location:
trunk/WebCore
Files:
3 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r61824 r61825  
     12010-06-24  Adam Barth  <abarth@webkit.org>
     2
     3        Reviewed by Eric Seidel.
     4
     5        Sketch out AfterHeadMode for tree builder
     6        https://bugs.webkit.org/show_bug.cgi?id=41191
     7
     8        This mode is fairly similar to the others.  I needed to change some of
     9        the types around w.r.t. Nodes/Elements.
     10
     11        * html/HTMLTreeBuilder.cpp:
     12        (WebCore::HTMLTreeBuilder::HTMLTreeBuilder):
     13        (WebCore::HTMLTreeBuilder::processToken):
     14        (WebCore::HTMLTreeBuilder::insertElement):
     15        * html/HTMLTreeBuilder.h:
     16        (WebCore::HTMLTreeBuilder::ElementStack::push):
     17        (WebCore::HTMLTreeBuilder::ElementStack::remove):
     18
    1192010-06-24  Adam Barth  <abarth@webkit.org>
    220
  • trunk/WebCore/html/HTMLTreeBuilder.cpp

    r61824 r61825  
    5656
    5757HTMLTreeBuilder::HTMLTreeBuilder(HTMLTokenizer* tokenizer, HTMLDocument* document, bool reportErrors)
    58     : m_document(document)
     58    : m_framesetOk(true)
     59    , m_document(document)
    5960    , m_reportErrors(reportErrors)
    6061    , m_isPaused(false)
     
    7172// minimize code duplication between these constructors.
    7273HTMLTreeBuilder::HTMLTreeBuilder(HTMLTokenizer* tokenizer, DocumentFragment* fragment, FragmentScriptingPermission scriptingPermission)
    73     : m_document(fragment->document())
     74    : m_framesetOk(true)
     75    , m_document(fragment->document())
    7476    , m_reportErrors(false) // FIXME: Why not report errors in fragments?
    7577    , m_isPaused(false)
     
    440442            parseError(token);
    441443            return 0;
    442             break;
    443444        case HTMLToken::Character:
    444445            notImplemented();
     
    454455        goto reprocessToken;
    455456    }
    456     case AfterHeadMode:
     457    case AfterHeadMode: {
     458        switch (token.type()) {
     459        case HTMLToken::Uninitialized:
     460            ASSERT_NOT_REACHED();
     461            break;
     462        case HTMLToken::Character:
     463            if (isTreeBuilderWhiteSpace(cc)) {
     464                insertCharacter(cc);
     465                return 0;
     466            }
     467            break;
     468        case HTMLToken::Comment:
     469            return insertComment(token);
     470        case HTMLToken::DOCTYPE:
     471            parseError(token);
     472            return 0;
     473        case HTMLToken::StartTag:
     474            if (token.name() == htmlTag) {
     475                notImplemented();
     476                return 0;
     477            }
     478            if (token.name() == bodyTag) {
     479                m_framesetOk = false;
     480                return insertElement(token);
     481            }
     482            if (token.name() == framesetTag) {
     483                PassRefPtr<Node> node = insertElement(token);
     484                setInsertionMode(InFramesetMode);
     485                return node;
     486            }
     487            if (token.name() == baseTag || token.name() == linkTag || token.name() == metaTag || token.name() == noframesTag || token.name() == scriptTag || token.name() == styleTag || token.name() == titleTag) {
     488                parseError(token);
     489                ASSERT(m_headElement);
     490                m_openElements.push(m_headElement.get());
     491                notImplemented();
     492                m_openElements.remove(m_headElement.get());
     493            }
     494            if (token.name() == headTag) {
     495                parseError(token);
     496                return 0;
     497            }
     498            break;
     499        case HTMLToken::EndTag:
     500            if (token.name() == bodyTag || token.name() == htmlTag || token.name() == brTag)   
     501                break;
     502            parseError(token);
     503            return 0;
     504        case HTMLToken::EndOfFile:
     505            break;
     506        }
     507        AtomicHTMLToken fakeBody(HTMLToken::StartTag, bodyTag.localName());
     508        processToken(fakeBody);
     509        m_framesetOk = true;
     510        goto reprocessToken;
     511    }
    457512    case InBodyMode:
    458513    case TextMode:
     
    491546}
    492547
    493 PassRefPtr<Node> HTMLTreeBuilder::insertElement(AtomicHTMLToken& token)
     548PassRefPtr<Element> HTMLTreeBuilder::insertElement(AtomicHTMLToken& token)
    494549{
    495550    ASSERT_UNUSED(token, token.type() == HTMLToken::StartTag);
  • trunk/WebCore/html/HTMLTreeBuilder.h

    r61823 r61825  
    103103    public:
    104104        void pop() { }
     105        void push(Element*) { }
     106        void remove(Element*) { }
    105107        Element* top() const { return 0; }
    106108    };
     
    111113    PassRefPtr<Node> insertDoctype(AtomicHTMLToken&);
    112114    PassRefPtr<Node> insertComment(AtomicHTMLToken&);
    113     PassRefPtr<Node> insertElement(AtomicHTMLToken&);
     115    PassRefPtr<Element> insertElement(AtomicHTMLToken&);
    114116    void insertCharacter(UChar cc);
    115117    PassRefPtr<Node> insertGenericRCDATAElement(AtomicHTMLToken&);
     
    117119    PassRefPtr<Node> insertScriptElement(AtomicHTMLToken&);
    118120
    119     RefPtr<Node> m_headElement;
     121    RefPtr<Element> m_headElement;
    120122    ElementStack m_openElements;
     123    bool m_framesetOk;
    121124
    122125    // FIXME: Implement error reporting.
Note: See TracChangeset for help on using the changeset viewer.