2010-07-23 Adam Barth <abarth@webkit.org>
[WebKit-https.git] / WebCore / dom / DocumentParser.h
1 /*
2  * Copyright (C) 2000 Peter Kelly (pmk@post.com)
3  * Copyright (C) 2005, 2006 Apple Computer, Inc.
4  * Copyright (C) 2007 Samuel Weinig (sam@webkit.org)
5  * Copyright (C) 2010 Google, Inc.
6  *
7  * This library is free software; you can redistribute it and/or
8  * modify it under the terms of the GNU Library General Public
9  * License as published by the Free Software Foundation; either
10  * version 2 of the License, or (at your option) any later version.
11  *
12  * This library is distributed in the hope that it will be useful,
13  * but WITHOUT ANY WARRANTY; without even the implied warranty of
14  * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the GNU
15  * Library General Public License for more details.
16  *
17  * You should have received a copy of the GNU Library General Public License
18  * along with this library; see the file COPYING.LIB.  If not, write to
19  * the Free Software Foundation, Inc., 51 Franklin Street, Fifth Floor,
20  * Boston, MA 02110-1301, USA.
21  *
22  */
23
24 #ifndef DocumentParser_h
25 #define DocumentParser_h
26
27 #include <wtf/Noncopyable.h>
28
29 namespace WebCore {
30
31 class Document;
32 class DocumentWriter;
33 class LegacyHTMLTreeBuilder;
34 class SegmentedString;
35 class ScriptableDocumentParser;
36
37 class DocumentParser : public Noncopyable {
38 public:
39     virtual ~DocumentParser() { }
40
41     virtual ScriptableDocumentParser* asScriptableDocumentParser() { return 0; }
42
43     // http://www.whatwg.org/specs/web-apps/current-work/#insertion-point
44     virtual bool hasInsertionPoint() { return true; }
45
46     // insert is used by document.write
47     virtual void insert(const SegmentedString&) = 0;
48
49     // appendBytes is used by DocumentWriter (the loader)
50     virtual void appendBytes(DocumentWriter*, const char* bytes, int length, bool flush) = 0;
51
52     // FIXME: append() should be private, but DocumentWriter::replaceDocument
53     // uses it for now.
54     virtual void append(const SegmentedString&) = 0;
55
56     virtual void finish() = 0;
57     virtual bool finishWasCalled() = 0;
58
59     virtual void stopParsing() { m_parserStopped = true; }
60     // FIXME: processingData() is only used by DocumentLoader::isLoadingInAPISense
61     // and is very unclear as to what it actually means.  Only LegacyHTMLDocumentParser
62     // actually implements it.
63     virtual bool processingData() const { return false; }
64
65     // FIXME: Exposed for HTMLFormControlElement::removedFromTree.  HTML DOM
66     // code should not need to reach into implementation details of the parser.
67     virtual LegacyHTMLTreeBuilder* htmlTreeBuilder() const { return 0; }
68
69     Document* document() const { return m_document; }
70
71 protected:
72     DocumentParser(Document*);
73
74     // The parser has buffers, so parsing may continue even after
75     // it stops receiving data. We use m_parserStopped to stop the parser
76     // even when it has buffered data.
77     bool m_parserStopped;
78
79     // Every DocumentParser needs a pointer back to the document.
80     Document* m_document;
81 };
82
83 } // namespace WebCore
84
85 #endif // DocumentParser_h