Changeset 92709 in webkit


Ignore:
Timestamp:
Aug 9, 2011 2:32:04 PM (13 years ago)
Author:
jpfau@apple.com
Message:

Initial pass at a new XML tree builder
https://bugs.webkit.org/show_bug.cgi?id=65803

Reviewed by Adam Barth.

  • GNUmakefile.list.am:
  • WebCore.gypi:
  • WebCore.pro:
  • WebCore.vcproj/WebCore.vcproj:
  • WebCore.xcodeproj/project.pbxproj:
  • xml/parser/NewXMLDocumentParser.cpp:

(WebCore::NewXMLDocumentParser::NewXMLDocumentParser):
(WebCore::NewXMLDocumentParser::~NewXMLDocumentParser):
(WebCore::NewXMLDocumentParser::append):
(WebCore::NewXMLDocumentParser::finish):
(WebCore::NewXMLDocumentParser::finishWasCalled):

  • xml/parser/NewXMLDocumentParser.h:
  • xml/parser/XMLTreeBuilder.cpp: Added.

(WebCore::XMLTreeBuilder::XMLTreeBuilder):
(WebCore::XMLTreeBuilder::processToken):
(WebCore::XMLTreeBuilder::pushCurrentNode):
(WebCore::XMLTreeBuilder::popCurrentNode):
(WebCore::XMLTreeBuilder::processProcessingInstruction):
(WebCore::XMLTreeBuilder::processXMLDeclaration):
(WebCore::XMLTreeBuilder::processDOCTYPE):
(WebCore::XMLTreeBuilder::processStartTag):
(WebCore::XMLTreeBuilder::processEndTag):
(WebCore::XMLTreeBuilder::processCharacter):
(WebCore::XMLTreeBuilder::processCDATA):
(WebCore::XMLTreeBuilder::processComment):
(WebCore::XMLTreeBuilder::processEntity):
(WebCore::XMLTreeBuilder::processNamespaces):
(WebCore::XMLTreeBuilder::processAttributes):
(WebCore::XMLTreeBuilder::processXMLEntity):
(WebCore::XMLTreeBuilder::processHTMLEntity):
(WebCore::XMLTreeBuilder::add):
(WebCore::XMLTreeBuilder::appendToText):
(WebCore::XMLTreeBuilder::enterText):
(WebCore::XMLTreeBuilder::exitText):
(WebCore::XMLTreeBuilder::NodeStackItem::NodeStackItem):
(WebCore::XMLTreeBuilder::NodeStackItem::hasNamespaceURI):
(WebCore::XMLTreeBuilder::NodeStackItem::namespaceURI):
(WebCore::XMLTreeBuilder::NodeStackItem::setNamespaceURI):
(WebCore::XMLTreeBuilder::NodeStackItem::namespaceForPrefix):

  • xml/parser/XMLTreeBuilder.h: Added.

(WebCore::XMLTreeBuilder::create):
(WebCore::XMLTreeBuilder::NodeStackItem::namespaceURI):
(WebCore::XMLTreeBuilder::NodeStackItem::setNamespaceURI):
(WebCore::XMLTreeBuilder::NodeStackItem::node):
(WebCore::XMLTreeBuilder::NodeStackItem::setNode):

Location:
trunk/Source/WebCore
Files:
2 added
8 edited

Legend:

Unmodified
Added
Removed
  • trunk/Source/WebCore/ChangeLog

    r92706 r92709  
     12011-08-09  Jeffrey Pfau  <jpfau@apple.com>
     2
     3        Initial pass at a new XML tree builder
     4        https://bugs.webkit.org/show_bug.cgi?id=65803
     5
     6        Reviewed by Adam Barth.
     7
     8        * GNUmakefile.list.am:
     9        * WebCore.gypi:
     10        * WebCore.pro:
     11        * WebCore.vcproj/WebCore.vcproj:
     12        * WebCore.xcodeproj/project.pbxproj:
     13        * xml/parser/NewXMLDocumentParser.cpp:
     14        (WebCore::NewXMLDocumentParser::NewXMLDocumentParser):
     15        (WebCore::NewXMLDocumentParser::~NewXMLDocumentParser):
     16        (WebCore::NewXMLDocumentParser::append):
     17        (WebCore::NewXMLDocumentParser::finish):
     18        (WebCore::NewXMLDocumentParser::finishWasCalled):
     19        * xml/parser/NewXMLDocumentParser.h:
     20        * xml/parser/XMLTreeBuilder.cpp: Added.
     21        (WebCore::XMLTreeBuilder::XMLTreeBuilder):
     22        (WebCore::XMLTreeBuilder::processToken):
     23        (WebCore::XMLTreeBuilder::pushCurrentNode):
     24        (WebCore::XMLTreeBuilder::popCurrentNode):
     25        (WebCore::XMLTreeBuilder::processProcessingInstruction):
     26        (WebCore::XMLTreeBuilder::processXMLDeclaration):
     27        (WebCore::XMLTreeBuilder::processDOCTYPE):
     28        (WebCore::XMLTreeBuilder::processStartTag):
     29        (WebCore::XMLTreeBuilder::processEndTag):
     30        (WebCore::XMLTreeBuilder::processCharacter):
     31        (WebCore::XMLTreeBuilder::processCDATA):
     32        (WebCore::XMLTreeBuilder::processComment):
     33        (WebCore::XMLTreeBuilder::processEntity):
     34        (WebCore::XMLTreeBuilder::processNamespaces):
     35        (WebCore::XMLTreeBuilder::processAttributes):
     36        (WebCore::XMLTreeBuilder::processXMLEntity):
     37        (WebCore::XMLTreeBuilder::processHTMLEntity):
     38        (WebCore::XMLTreeBuilder::add):
     39        (WebCore::XMLTreeBuilder::appendToText):
     40        (WebCore::XMLTreeBuilder::enterText):
     41        (WebCore::XMLTreeBuilder::exitText):
     42        (WebCore::XMLTreeBuilder::NodeStackItem::NodeStackItem):
     43        (WebCore::XMLTreeBuilder::NodeStackItem::hasNamespaceURI):
     44        (WebCore::XMLTreeBuilder::NodeStackItem::namespaceURI):
     45        (WebCore::XMLTreeBuilder::NodeStackItem::setNamespaceURI):
     46        (WebCore::XMLTreeBuilder::NodeStackItem::namespaceForPrefix):
     47        * xml/parser/XMLTreeBuilder.h: Added.
     48        (WebCore::XMLTreeBuilder::create):
     49        (WebCore::XMLTreeBuilder::NodeStackItem::namespaceURI):
     50        (WebCore::XMLTreeBuilder::NodeStackItem::setNamespaceURI):
     51        (WebCore::XMLTreeBuilder::NodeStackItem::node):
     52        (WebCore::XMLTreeBuilder::NodeStackItem::setNode):
     53
    1542011-08-09  Mark Hahnenberg  <mhahnenberg@apple.com>
    255
  • trunk/Source/WebCore/GNUmakefile.list.am

    r92693 r92709  
    38373837        Source/WebCore/xml/parser/XMLTokenizer.h \
    38383838        Source/WebCore/xml/parser/XMLToken.h \
     3839        Source/WebCore/xml/parser/XMLTreeBuilder.cpp \
     3840        Source/WebCore/xml/parser/XMLTreeBuilder.h \
    38393841        Source/WebCore/xml/DOMParser.cpp \
    38403842        Source/WebCore/xml/DOMParser.h \
  • trunk/Source/WebCore/WebCore.gypi

    r92693 r92709  
    51365136            'xml/parser/XMLTokenizer.h',
    51375137            'xml/parser/XMLToken.h',
     5138            'xml/parser/XMLTreeBuilder.cpp',
     5139            'xml/parser/XMLTreeBuilder.h',
    51385140            'xml/DOMParser.cpp',
    51395141            'xml/DOMParser.h',
  • trunk/Source/WebCore/WebCore.pro

    r92677 r92709  
    12091209    xml/parser/XMLCharacterReferenceParser.cpp \
    12101210    xml/parser/XMLDocumentParser.cpp \
    1211     xml/parser/XMLTokenizer.cpp
     1211    xml/parser/XMLTokenizer.cpp \
     1212    xml/parser/XMLTreeBuilder.cpp
    12121213
    12131214HEADERS += \
     
    25212522    xml/parser/XMLTokenizer.h \
    25222523    xml/parser/XMLToken.h \
     2524    xml/parser/XMLTreeBuilder.h \
    25232525    xml/DOMParser.h \
    25242526    xml/NativeXPathNSResolver.h \
  • trunk/Source/WebCore/WebCore.vcproj/WebCore.vcproj

    r92677 r92709  
    4274642746                                </File>
    4274742747                                <File
     42748                                        RelativePath="..\xml\parser\NewXMLDocumentParser.h"
     42749                                        >
     42750                                </File>
     42751                                <File
     42752                                        RelativePath="..\xml\parser\NewXMLDocumentParser.cpp"
     42753                                        >
     42754                                </File>
     42755                                <File
    4274842756                                        RelativePath="..\xml\parser\XMLDocumentParser.cpp"
    4274942757                                        >
     
    4286742875                                <File
    4286842876                                        RelativePath="..\xml\parser\XMLTokenizer.h"
     42877                                        >
     42878                                </File>
     42879                                <File
     42880                                        RelativePath="..\xml\parser\XMLTreeBuilder.h"
     42881                                        >
     42882                                </File>
     42883                                <File
     42884                                        RelativePath="..\xml\parser\XMLTreeBuilder.cpp"
    4286942885                                        >
    4287042886                                </File>
  • trunk/Source/WebCore/WebCore.xcodeproj/project.pbxproj

    r92696 r92709  
    5252                0014628A103CD1DE000B20DB /* OriginAccessEntry.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 00146288103CD1DE000B20DB /* OriginAccessEntry.cpp */; };
    5353                0014628B103CD1DE000B20DB /* OriginAccessEntry.h in Headers */ = {isa = PBXBuildFile; fileRef = 00146289103CD1DE000B20DB /* OriginAccessEntry.h */; };
     54                0035EBBB13F06FF200A56089 /* XMLTreeBuilder.h in Headers */ = {isa = PBXBuildFile; fileRef = 0035EBBA13F06FF200A56089 /* XMLTreeBuilder.h */; };
     55                0035EBBE13F0713C00A56089 /* XMLTreeBuilder.cpp in Sources */ = {isa = PBXBuildFile; fileRef = 0035EBBD13F0713C00A56089 /* XMLTreeBuilder.cpp */; };
    5456                003F1FEA11E6AB43008258D9 /* UserContentTypes.h in Headers */ = {isa = PBXBuildFile; fileRef = 003F1FE911E6AB43008258D9 /* UserContentTypes.h */; settings = {ATTRIBUTES = (Private, ); }; };
    5557                00A629C113D0BEC70050AC52 /* MarkupTokenBase.h in Headers */ = {isa = PBXBuildFile; fileRef = 00A629C013D0BEC70050AC52 /* MarkupTokenBase.h */; };
     
    64896491                00146288103CD1DE000B20DB /* OriginAccessEntry.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = OriginAccessEntry.cpp; sourceTree = "<group>"; };
    64906492                00146289103CD1DE000B20DB /* OriginAccessEntry.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = OriginAccessEntry.h; sourceTree = "<group>"; };
     6493                0035EBBA13F06FF200A56089 /* XMLTreeBuilder.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = XMLTreeBuilder.h; sourceTree = "<group>"; };
     6494                0035EBBD13F0713C00A56089 /* XMLTreeBuilder.cpp */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.cpp.cpp; path = XMLTreeBuilder.cpp; sourceTree = "<group>"; };
    64916495                003F1FE911E6AB43008258D9 /* UserContentTypes.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = UserContentTypes.h; sourceTree = "<group>"; };
    64926496                00A629C013D0BEC70050AC52 /* MarkupTokenBase.h */ = {isa = PBXFileReference; fileEncoding = 4; lastKnownFileType = sourcecode.c.h; path = MarkupTokenBase.h; sourceTree = "<group>"; };
     
    1286912873                                0002EC5613C3F67D00040D47 /* XMLTokenizer.cpp */,
    1287012874                                0002EC5713C3F67D00040D47 /* XMLTokenizer.h */,
     12875                                0035EBBD13F0713C00A56089 /* XMLTreeBuilder.cpp */,
     12876                                0035EBBA13F06FF200A56089 /* XMLTreeBuilder.h */,
    1287112877                        );
    1287212878                        path = parser;
     
    2333723343                                0002EC5813C3F67D00040D47 /* XMLToken.h in Headers */,
    2333823344                                0002EC5A13C3F67D00040D47 /* XMLTokenizer.h in Headers */,
     23345                                0035EBBB13F06FF200A56089 /* XMLTreeBuilder.h in Headers */,
    2333923346                                5905ADC01302F3CE00F116DF /* XMLTreeViewer.h in Headers */,
    2334023347                                1AB7FC690A8B92EC00D9D37B /* XPathEvaluator.h in Headers */,
     
    2614926156                                1ACE53EA0A8D18E70022947D /* XMLSerializer.cpp in Sources */,
    2615026157                                0002EC5913C3F67D00040D47 /* XMLTokenizer.cpp in Sources */,
     26158                                0035EBBE13F0713C00A56089 /* XMLTreeBuilder.cpp in Sources */,
    2615126159                                5905ADBF1302F3CE00F116DF /* XMLTreeViewer.cpp in Sources */,
    2615226160                                1AB7FC680A8B92EC00D9D37B /* XPathEvaluator.cpp in Sources */,
  • trunk/Source/WebCore/xml/parser/NewXMLDocumentParser.cpp

    r91811 r92709  
    2828
    2929#include "SegmentedString.h"
     30#include "XMLTreeBuilder.h"
    3031
    3132namespace WebCore {
     
    3435    : ScriptableDocumentParser(document)
    3536    , m_tokenizer(XMLTokenizer::create())
     37    , m_finishWasCalled(false)
     38    , m_treeBuilder(XMLTreeBuilder::create(this, document))
     39{
     40}
     41
     42NewXMLDocumentParser::~NewXMLDocumentParser()
    3643{
    3744}
     
    6471#endif
    6572
    66         if (m_token.type() == XMLTokenTypes::EndOfFile)
     73        AtomicXMLToken token(m_token);
     74        m_treeBuilder->processToken(token);
     75
     76        if (m_token.type() == XMLTokenTypes::EndOfFile || !isParsing())
    6777            break;
    6878
     
    7484void NewXMLDocumentParser::finish()
    7585{
    76 }
     86    ASSERT(!m_finishWasCalled);
     87    m_finishWasCalled = true;
    7788
    78 void NewXMLDocumentParser::detach()
    79 {
    80     ScriptableDocumentParser::detach();
     89    if (isParsing())
     90        prepareToStopParsing();
     91    document()->setReadyState(Document::Interactive);
     92    document()->finishedParsing();
    8193}
    8294
     
    88100bool NewXMLDocumentParser::finishWasCalled()
    89101{
    90     return false;
    91 }
    92 
    93 bool NewXMLDocumentParser::processingData() const
    94 {
    95     return false;
    96 }
    97 
    98 void NewXMLDocumentParser::prepareToStopParsing()
    99 {
    100 }
    101 
    102 void NewXMLDocumentParser::stopParsing()
    103 {
     102    return m_finishWasCalled;
    104103}
    105104
  • trunk/Source/WebCore/xml/parser/NewXMLDocumentParser.h

    r91811 r92709  
    3737
    3838class Document;
     39class ContainerNode;
     40class XMLTreeBuilder;
    3941
    4042class NewXMLDocumentParser : public ScriptableDocumentParser {
     
    4547        return adoptRef(new NewXMLDocumentParser(document));
    4648    }
    47    
     49
    4850    virtual TextPosition0 textPosition() const;
    4951    virtual int lineNumber() const;
     52
     53    // DocumentParser
     54    virtual bool hasInsertionPoint();
     55    virtual bool finishWasCalled();
     56    virtual bool isWaitingForScripts() const;
     57    virtual bool isExecutingScript() const;
     58    virtual void executeScriptsWaitingForStylesheets();
    5059
    5160protected:
     
    5463    virtual void finish();
    5564
    56 
    5765private:
    5866    NewXMLDocumentParser(Document*);
    59 
    60     // DocumentParser
    61     virtual void detach();
    62     virtual bool hasInsertionPoint();
    63     virtual bool finishWasCalled();
    64     virtual bool processingData() const;
    65     virtual void prepareToStopParsing();
    66     virtual void stopParsing();
    67     virtual bool isWaitingForScripts() const;
    68     virtual bool isExecutingScript() const;
    69     virtual void executeScriptsWaitingForStylesheets();
     67    virtual ~NewXMLDocumentParser();
    7068
    7169    OwnPtr<XMLTokenizer> m_tokenizer;
    7270    XMLToken m_token;
     71
     72    bool m_finishWasCalled;
     73
     74    OwnPtr<XMLTreeBuilder> m_treeBuilder;
    7375};
    7476
Note: See TracChangeset for help on using the changeset viewer.