Changeset 61822 in webkit


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

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

Reviewed by Eric Seidel.

Sketch out BeforeHeadMode tree builder state
https://bugs.webkit.org/show_bug.cgi?id=41183

This makes procesToken recursive, which might not be the best idea.
Also, we can now make fake AtomicHTMLTokens for use by the algorithm.

  • html/HTMLToken.h: (WebCore::AtomicHTMLToken::AtomicHTMLToken):
  • html/HTMLTreeBuilder.cpp: (WebCore::HTMLTreeBuilder::processToken): (WebCore::HTMLTreeBuilder::insertElement):
  • html/HTMLTreeBuilder.h:
Location:
trunk/WebCore
Files:
4 edited

Legend:

Unmodified
Added
Removed
  • trunk/WebCore/ChangeLog

    r61818 r61822  
     12010-06-24  Adam Barth  <abarth@webkit.org>
     2
     3        Reviewed by Eric Seidel.
     4
     5        Sketch out BeforeHeadMode tree builder state
     6        https://bugs.webkit.org/show_bug.cgi?id=41183
     7
     8        This makes procesToken recursive, which might not be the best idea.
     9        Also, we can now make fake AtomicHTMLTokens for use by the algorithm.
     10
     11        * html/HTMLToken.h:
     12        (WebCore::AtomicHTMLToken::AtomicHTMLToken):
     13        * html/HTMLTreeBuilder.cpp:
     14        (WebCore::HTMLTreeBuilder::processToken):
     15        (WebCore::HTMLTreeBuilder::insertElement):
     16        * html/HTMLTreeBuilder.h:
     17
    1182010-06-22 Antonio Gomes <tonikitoo@webkit.org>
    219
  • trunk/WebCore/html/HTMLToken.h

    r61791 r61822  
    323323    }
    324324
     325    AtomicHTMLToken(HTMLToken::Type type, AtomicString name)
     326        : m_type(type)
     327        , m_name(name)
     328    {
     329    }
     330
    325331    HTMLToken::Type type() const { return m_type; }
    326332
  • trunk/WebCore/html/HTMLTreeBuilder.cpp

    r61793 r61822  
    4545
    4646static const int uninitializedLineNumberValue = -1;
     47
     48namespace {
     49
     50inline bool isTreeBuilderWhiteSpace(UChar cc)
     51{
     52    return cc == '\t' || cc == '\x0A' || cc == '\x0C' || cc == '\x0D' || cc == ' ';
     53}
     54
     55} // namespace
    4756
    4857HTMLTreeBuilder::HTMLTreeBuilder(HTMLTokenizer* tokenizer, HTMLDocument* document, bool reportErrors)
     
    243252            return insertComment(token);
    244253        case HTMLToken::Character:
    245             if (cc == '\t' || cc == '\x0A' || cc == '\x0C' || cc == '\x0D' || cc == ' ')
     254            if (isTreeBuilderWhiteSpace(cc))
    246255                return 0;
    247256            break;
     
    267276            return insertComment(token);
    268277        case HTMLToken::Character:
    269             if (cc == '\t' || cc == '\x0A' || cc == '\x0C' || cc == '\x0D' || cc == ' ')
     278            if (isTreeBuilderWhiteSpace(cc))
    270279                return 0;
    271280            break;
     
    289298        goto reprocessToken;
    290299    }
    291     case BeforeHeadMode:
     300    case BeforeHeadMode: {
     301        switch (token.type()) {
     302        case HTMLToken::Uninitialized:
     303            ASSERT_NOT_REACHED();
     304            break;
     305        case HTMLToken::Character:
     306            if (isTreeBuilderWhiteSpace(cc))
     307                return 0;
     308            break;
     309        case HTMLToken::Comment:
     310            return insertComment(token);
     311        case HTMLToken::DOCTYPE:
     312            parseError(token);
     313            return 0;
     314        case HTMLToken::StartTag:
     315            if (token.name() == htmlTag) {
     316                notImplemented();
     317                return 0;
     318            }
     319            if (token.name() == headTag) {
     320                m_headElement = insertElement(token);
     321                setInsertionMode(InHeadMode);
     322                return m_headElement;
     323            }
     324            break;
     325        case HTMLToken::EndTag:
     326            if (token.name() == headTag || token.name() == bodyTag || token.name() == brTag) {
     327                AtomicHTMLToken fakeHead(HTMLToken::StartTag, headTag.localName());
     328                processToken(fakeHead);
     329                goto reprocessToken;
     330            }
     331            parseError(token);
     332            return 0;
     333        case HTMLToken::EndOfFile:
     334            break;
     335        }
     336        AtomicHTMLToken fakeHead(HTMLToken::StartTag, headTag.localName());
     337        processToken(fakeHead);
     338        goto reprocessToken;
     339    }
    292340    case InHeadMode:
    293341    case InHeadNoscriptMode:
     
    329377}
    330378
     379PassRefPtr<Node> HTMLTreeBuilder::insertElement(AtomicHTMLToken& token)
     380{
     381    ASSERT_UNUSED(token, token.type() == HTMLToken::StartTag);
     382    return 0;
     383}
     384
    331385void HTMLTreeBuilder::finished()
    332386{
  • trunk/WebCore/html/HTMLTreeBuilder.h

    r61793 r61822  
    105105    PassRefPtr<Node> insertDoctype(AtomicHTMLToken&);
    106106    PassRefPtr<Node> insertComment(AtomicHTMLToken&);
     107    PassRefPtr<Node> insertElement(AtomicHTMLToken&);
     108
     109    RefPtr<Node> m_headElement;
    107110
    108111    // FIXME: Implement error reporting.
Note: See TracChangeset for help on using the changeset viewer.