Chromium Code Reviews
chromiumcodereview-hr@appspot.gserviceaccount.com (chromiumcodereview-hr) | Please choose your nickname with Settings | Help | Chromium Project | Gerrit Changes | Sign out
(14)

Side by Side Diff: sky/engine/core/html/parser/HTMLTreeBuilder.h

Issue 1215103007: Remove remaining HTML elements (Closed) Base URL: git@github.com:domokit/mojo.git@master
Patch Set: Created 5 years, 5 months ago
Use n/p to move between diff chunks; N/P to move between comments. Draft comments are only viewable by you.
Jump to:
View unified diff | Download patch
OLDNEW
(Empty)
1 /*
2 * Copyright (C) 2010 Google, Inc. All Rights Reserved.
3 * Copyright (C) 2011 Apple Inc. All rights reserved.
4 *
5 * Redistribution and use in source and binary forms, with or without
6 * modification, are permitted provided that the following conditions
7 * are met:
8 * 1. Redistributions of source code must retain the above copyright
9 * notice, this list of conditions and the following disclaimer.
10 * 2. Redistributions in binary form must reproduce the above copyright
11 * notice, this list of conditions and the following disclaimer in the
12 * documentation and/or other materials provided with the distribution.
13 *
14 * THIS SOFTWARE IS PROVIDED BY GOOGLE INC. ``AS IS'' AND ANY
15 * EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
16 * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR
17 * PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL GOOGLE INC. OR
18 * CONTRIBUTORS BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL,
19 * EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO,
20 * PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR
21 * PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY
22 * OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT
23 * (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE
24 * OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.
25 */
26
27 #ifndef SKY_ENGINE_CORE_HTML_PARSER_HTMLTREEBUILDER_H_
28 #define SKY_ENGINE_CORE_HTML_PARSER_HTMLTREEBUILDER_H_
29
30 #include "sky/engine/core/html/parser/HTMLConstructionSite.h"
31 #include "sky/engine/core/html/parser/HTMLElementStack.h"
32 #include "sky/engine/platform/heap/Handle.h"
33 #include "sky/engine/wtf/Noncopyable.h"
34 #include "sky/engine/wtf/PassOwnPtr.h"
35 #include "sky/engine/wtf/PassRefPtr.h"
36 #include "sky/engine/wtf/RefPtr.h"
37 #include "sky/engine/wtf/Vector.h"
38 #include "sky/engine/wtf/text/StringBuilder.h"
39 #include "sky/engine/wtf/text/TextPosition.h"
40
41 namespace blink {
42
43 class AtomicHTMLToken;
44 class Document;
45 class DocumentFragment;
46 class Element;
47 class LocalFrame;
48 class HTMLToken;
49 class Node;
50 class HTMLDocumentParser;
51
52 class HTMLTreeBuilder final {
53 WTF_MAKE_NONCOPYABLE(HTMLTreeBuilder); WTF_MAKE_FAST_ALLOCATED;
54 public:
55 static PassOwnPtr<HTMLTreeBuilder> create(HTMLDocumentParser* parser, Docume nt* document, bool reportErrors)
56 {
57 return adoptPtr(new HTMLTreeBuilder(parser, document, reportErrors));
58 }
59 ~HTMLTreeBuilder();
60
61 const HTMLElementStack* openElements() const { return m_tree.openElements(); }
62
63 bool isParsingFragment() const { return !!m_fragmentContext.fragment(); }
64
65 void detach();
66
67 void constructTree(AtomicHTMLToken*);
68
69 bool hasParserBlockingScript() const { return !!m_scriptToProcess; }
70 // Must be called to take the parser-blocking script before calling the pars er again.
71 PassRefPtr<Element> takeScriptToProcess(TextPosition& scriptStartPosition);
72
73 // Done, close any open tags, etc.
74 void finished();
75
76 // Synchronously empty any queues, possibly creating more DOM nodes.
77 void flush() { m_tree.flush(); }
78
79 private:
80 class CharacterTokenBuffer;
81 // Represents HTML5 "insertion mode"
82 // http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html# insertion-mode
83 enum InsertionMode {
84 HTMLMode,
85 TextMode,
86 };
87
88 HTMLTreeBuilder(HTMLDocumentParser*, Document*, bool reportErrors);
89
90 void processStartTag(AtomicHTMLToken*);
91 void processEndTag(AtomicHTMLToken*);
92 void processCharacter(AtomicHTMLToken*);
93 void processEndOfFile(AtomicHTMLToken*);
94
95 void processGenericRawTextStartTag(AtomicHTMLToken*);
96 void processScriptStartTag(AtomicHTMLToken*);
97
98 InsertionMode insertionMode() const { return m_insertionMode; }
99 void setInsertionMode(InsertionMode mode) { m_insertionMode = mode; }
100
101 class FragmentParsingContext {
102 WTF_MAKE_NONCOPYABLE(FragmentParsingContext);
103 DISALLOW_ALLOCATION();
104 public:
105 FragmentParsingContext();
106 FragmentParsingContext(DocumentFragment*, Element* contextElement);
107 ~FragmentParsingContext();
108
109 DocumentFragment* fragment() const { return m_fragment; }
110
111 private:
112 RawPtr<DocumentFragment> m_fragment;
113 };
114
115 #if ENABLE(ASSERT)
116 bool m_isAttached;
117 #endif
118 FragmentParsingContext m_fragmentContext;
119 HTMLConstructionSite m_tree;
120
121 // http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html# insertion-mode
122 InsertionMode m_insertionMode;
123
124 // http://www.whatwg.org/specs/web-apps/current-work/multipage/parsing.html# original-insertion-mode
125 InsertionMode m_originalInsertionMode;
126
127 // We access parser because HTML5 spec requires that we be able to change th e state of the tokenizer
128 // from within parser actions. We also need it to track the current position .
129 RawPtr<HTMLDocumentParser> m_parser;
130
131 RefPtr<Element> m_scriptToProcess; // <script> tag which needs processing be fore resuming the parser.
132 TextPosition m_scriptToProcessStartPosition; // Starting line number of the script tag needing processing.
133 };
134
135 }
136
137 #endif // SKY_ENGINE_CORE_HTML_PARSER_HTMLTREEBUILDER_H_
OLDNEW
« no previous file with comments | « sky/engine/core/html/parser/HTMLTokenizer.cpp ('k') | sky/engine/core/html/parser/HTMLTreeBuilder.cpp » ('j') | no next file with comments »

Powered by Google App Engine
This is Rietveld 408576698