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

Side by Side Diff: utils/css/tree.dart

Issue 8498020: Beginning of CSS parser using frog parsering infrastructure. (Closed) Base URL: https://dart.googlecode.com/svn/branches/bleeding_edge/dart
Patch Set: Incorporated Jim's CR Created 9 years, 1 month 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 | Annotate | Revision Log
OLDNEW
(Empty)
1 // Copyright (c) 2011, the Dart project authors. Please see the AUTHORS file
2 // for details. All rights reserved. Use of this source code is governed by a
3 // BSD-style license that can be found in the LICENSE file.
4 // Generated by scripts/tree_gen.py.
5
6 /////////////////////////////////////////////////////////////////////////
7 // CSS specific types:
8 /////////////////////////////////////////////////////////////////////////
9
10
11 class Identifier extends lang.Node {
jimhug 2011/11/10 17:58:56 I think this is really cool - sharing the same bas
12 String name;
13
14 Identifier(this.name, lang.SourceSpan span): super(span) {}
15
16 visit(TreeVisitor visitor) => visitor.visitIdentifier(this);
17
18 String toString() => name;
19 }
20
21 class SelectorGroup extends lang.Node {
22 // List of SimpleSelector(s) list contain any mix SimpleSelector or
23 // SimpleSlectorName (or class derived from SimpleSelectorName e.g.,
24 // IdSelector, ClassSelector, ElementSelector, PseudoClassSelector,
25 // PseudoElementSelector, NotSelector, or Attribute
26 List<lang.Node> selectors;
27
28 SelectorGroup(this.selectors, lang.SourceSpan span): super(span) {}
29
30 visit(TreeVisitor visitor) => visitor.visitSelectorGroup(this);
31
32 String toString() {
33 StringBuffer buff = new StringBuffer();
34 for (selector in selectors) {
35 buff.add(selector.toString());
36 buff.add(' ');
37 }
38 return buff.toString();
39 }
40
41 /** A multiline string showing the node and its children. */
42 String toDebugString() {
43 var to = new lang.TreeOutput();
44 var tp = new TreePrinter(to);
45 this.visit(tp);
46 return to.buf.toString();
47 }
48 }
49
50 /* All other selectors (element, #id, .class, attribute, pseudo, negation,
51 * namespace, *) are derived from this selector.
52 */
53 class SimpleSelector extends lang.Node {
54 int _combinator; // +, >, ~ or NONE (space)
55
56 // name is of type IdSelector, ClassSelector, ElementSelector,
57 // PseudoClassSelector, PseudoElementSelector, NotSelector, or Attribute
58 var _name;
59
60 SimpleSelector(this._name, [this._combinator = TokenKind.COMBINATOR_NONE]);
61
62 // Wildcard can be a String just return _name otherwise if identifier we'll
63 // drill into the Identifier and return it's name.
64 String get name() => _name is Identifier ? _name.name : _name;
65
66 bool isCombinatorNone() => _combinator == TokenKind.COMBINATOR_NONE;
67 bool isCombinatorPlus() => _combinator == TokenKind.COMBINATOR_PLUS;
68 bool isCombinatorGreater() => _combinator == TokenKind.COMBINATOR_GREATER;
69 bool isCombinatorTilde() => _combinator == TokenKind.COMBINATOR_TILDE;
70
71 visit(TreeVisitor visitor) => visitor.visitSimpleSelectorName(this);
72
73 String toString() => name;
74 }
75
76 // element name
77 class ElementSelector extends SimpleSelector {
78 ElementSelector(String name,
79 [int combinator = TokenKind.COMBINATOR_NONE]) :
80 super(name, combinator);
81
82 bool isWildcard() => name == '*';
83
84 visit(TreeVisitor visitor) => visitor.visitElementSelector(this);
85
86 String toString() => "$name";
87
88 /** A multiline string showing the node and its children. */
89 String toDebugString() {
90 var to = new lang.TreeOutput();
91 var tp = new TreePrinter(to);
92 this.visit(tp);
93 return to.buf.toString();
94 }
95 }
96
97 // namespace|element
98 class NamespaceSelector extends SimpleSelector {
99 var _namespace; // null, '*' or identifier name
100
101 NamespaceSelector(this._namespace, var name,
102 [int combinator = TokenKind.COMBINATOR_NONE]) :
103 super(name, combinator);
104
105 String get namespace() => _namespace is Identifier ?
106 _namespace.name : _namespace;
107
108 bool isWildcardElement() => _name.isWildcard();
109
110 bool isNamespaceWildcard() => _namespace == '*';
111
112 SimpleSelector get nameAsElementSelector() => _name;
113
114 visit(TreeVisitor visitor) => visitor.visitNamespaceSelector(this);
115
116 String toString() => "$namespace|$name";
117 }
118
119 // #id
120 class IdSelector extends SimpleSelector {
121 IdSelector(String name, [int combinator = TokenKind.COMBINATOR_NONE]) :
122 super(name, combinator);
123
124 visit(TreeVisitor visitor) => visitor.visitIdSelector(this);
125
126 String toString() => "#$name";
127 }
128
129 // .class
130 class ClassSelector extends SimpleSelector {
131 ClassSelector(String name,
132 [int combinator = TokenKind.COMBINATOR_NONE]) : super(name, combinator);
133
134 visit(TreeVisitor visitor) => visitor.visitClassSelector(this);
135
136 String toString() => ".$name";
137 }
138
139 // :pseudoClass
140 class PseudoClassSelector extends SimpleSelector {
141 PseudoClassSelector(String name,
142 [int combinator = TokenKind.COMBINATOR_NONE]) :
143 super(name, combinator);
144
145 visit(TreeVisitor visitor) => visitor.visitPseudoClassSelector(this);
146
147 String toString() => ":$name";
148 }
149
150 // ::pseudoElement
151 class PseudoElementSelector extends SimpleSelector {
152 PseudoElementSelector(String name,
153 [int combinator = TokenKind.COMBINATOR_NONE]) :
154 super(name, combinator);
155
156 visit(TreeVisitor visitor) => visitor.visitPseudoElementSelector(this);
157
158 String toString() => "::$name";
159 }
160
161 // TODO(terry): Implement
162 // NOT
163 class NotSelector extends SimpleSelector {
164 NotSelector(String name,
165 [lang.Token combinator = TokenKind.COMBINATOR_NONE]) :
166 super(name, combinator);
167
168 visit(TreeVisitor visitor) => visitor.visitNotSelector(this);
169 }
170
171 // TODO(terry): Implement
172 // [attribute]
173 class Attribute extends lang.Node {
174 var name; // NamespaceSelector or SimpleSelector
175 int matchType; // ~=, |=, ^=, $=, *=, =
176 String value;
177 }
178
179 interface TreeVisitor {
180 void visitSelectorGroup(SelectorGroup node);
181 void visitSimpleSelector(SimpleSelector node);
182 void visitElementSelector(ElementSelector node);
183 void visitNamespaceSelector(NamespaceSelector node);
184 void visitIdSelector(IdSelector node);
185 void visitClassSelector(ClassSelector node);
186 void visitPseudoClassSelector(PseudoClassSelector node);
187 void visitPseudoElementSelector(PseudoElementSelector node);
188 void visitNotSelector(NotSelector node);
189
190 void visitIdentifier(Identifier node);
191
192 // TODO(terry): Defined for ../tree.dart.
193 void visitTypeReference(lang.TypeReference node);
194 }
195
196 class TreePrinter implements TreeVisitor {
197 var output;
198 TreePrinter(this.output) { output.printer = this; }
199
200 void visitSelectorGroup(SelectorGroup node) {
201 output.heading('Selector Group', node.span);
202 output.writeNodeList('selectors', node.selectors);
203 output.writeln('');
204 }
205
206 void visitSimpleSelector(SimpleSelector node) {
207 if (node.isCombinatorNone()) {
208 output.writeValue('combinator', "NONE");
209 } else if (node.isCombinatorPlus()) {
210 output.writeValue('combinator', "+");
211 } else if (node.isCombinatorGreater()) {
212 output.writeValue('combinator', ">");
213 } else if (node.isCombinatorTilde()) {
214 output.writeValue('combinator', "~");
215 } else {
216 output.writeValue('combinator', "ERROR UNKNOWN");
217 }
218 }
219
220 void visitNamespaceSelector(NamespaceSelector node) {
221 output.heading('Namespace Selector', node.span);
222 visitSimpleSelector(node);
223 output.writeValue('namespace', node._namespace);
224 output.writeNode('name', node._name);
225 }
226
227 void visitElementSelector(ElementSelector node) {
228 output.heading('Element Selector', node.span);
229 visitSimpleSelector(node);
230 if (node.isWildcard()) {
231 output.writeValue('name', '*');
232 } else {
233 output.writeValue('name', node.name);
234 }
235 }
236
237 void visitIdSelector(IdSelector node) {
238 output.heading('Id Selector', node.span);
239 visitSimpleSelector(node);
240 output.writeNode('name', node._name);
241 }
242
243 void visitClassSelector(ClassSelector node) {
244 output.heading('Class Selector', node.span);
245 visitSimpleSelector(node);
246 output.writeNode('name', node._name);
247 }
248
249 void visitPseudoClassSelector(PseudoClassSelector node) {
250 output.heading('Pseudo Class Selector', node.span);
251 visitSimpleSelector(node);
252 output.writeNode('name', node._name);
253 }
254
255 void visitPseudoElementSelector(PseudoElementSelector node) {
256 output.heading('Pseudo Element Selector', node.span);
257 visitSimpleSelector(node);
258 output.writeNode('name', node._name);
259 }
260
261 void visitNotSelector(NotSelector node) {
262 visitSimpleSelector(node);
263 output.heading('Not Selector', node.span);
264 }
265
266 void visitIdentifier(Identifier node) {
267 output.heading('Identifier(' + output.toValue(node.name) + ")", node.span);
268 }
269
270 // TODO(terry): Defined for frog/tree.dart.
271 void visitTypeReference(lang.TypeReference node) {
272 output.heading('Unimplemented');
273 }
274 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698