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

Side by Side Diff: frog/css/tree_css.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: 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 // TODO(terry): Type and TypeParameter defined for frog/tree.dart.
12 class Type { }
13 class TypeParameter extends Node { }
14
15
16 class Identifier extends Node {
17 String name;
18
19 Identifier(this.name, SourceSpan span): super(span) {}
20
21 visit(TreeVisitor visitor) => visitor.visitIdentifier(this);
22
23 String toString() => name;
24 }
25
26 class SelectorGroup extends Node {
27 // List of SimpleSelector(s) list contain any mix SimpleSelector or
28 // SimpleSlectorName (or class derived from SimpleSelectorName e.g.,
29 // IdSelector, ClassSelector, ElementSelector, PseudoClassSelector,
30 // PseudoElementSelector, NotSelector, or Attribute
31 List<Node> selectors;
nweiz 2011/11/10 00:04:39 Why isn't this List<SimpleSelector>?
terry 2011/11/22 16:40:47 Should be. Done.
32
33 SelectorGroup(this.selectors, SourceSpan span): super(span) {}
34
35 visit(TreeVisitor visitor) => visitor.visitSelectorGroup(this);
36
37 String toString() {
38 StringBuffer buff = new StringBuffer();
39 for (selector in selectors) {
40 buff.add(selector.toString());
41 buff.add(' ');
42 }
43 return buff.toString();
44 }
45 }
46
nweiz 2011/11/10 00:04:39 As mentioned elsewhere, there should be a represen
terry 2011/11/22 16:40:47 Yep added combinator descendant (space) and NONE.
47 /* All other selectors (element, #id, .class, attribute, pseudo, negation,
48 * namespace, *) are derived from this selector.
49 */
50 class SimpleSelector extends Node {
51 Token _combinator; // +, >, ~ or NONE (space)
nweiz 2011/11/10 00:04:39 Related to the sequence of simple selector issue,
terry 2011/11/22 16:40:47 I have for now maybe I'm being too pedantic (even
52
53 // name is of type IdSelector, ClassSelector, ElementSelector,
54 // PseudoClassSelector, PseudoElementSelector, NotSelector, or Attribute
nweiz 2011/11/10 00:04:39 Is this really true? Aren't all these subclasses o
terry 2011/11/22 16:40:47 No comment is outdated. On 2011/11/10 00:04:39, nw
55 var _name;
56
57 SimpleSelector(this._name, [this._combinator = TokenKind.COMBINATOR_NONE]);
58
59 // Wildcard can be a String just return _name otherwise if identifier we'll
60 // drill into the Identifier and return it's name.
61 String get name() => _name is Identifier ? _name.name : _name;
nweiz 2011/11/10 00:04:39 Ah, so _name is an Identifier or a String. Why doe
terry 2011/11/22 16:40:47 It's an identifier or wildcard nothing else String
62
63 bool isCombinatorNone() => _combinator == TokenKind.COMBINATOR_NONE;
64 bool isCombinatorPlus() => _combinator == TokenKind.COMBINATOR_PLUS;
65 bool isCombinatorGreater() => _combinator == TokenKind.COMBINATOR_GREATER;
66 bool isCombinatorTilde() => _combinator == TokenKind.COMBINATOR_TILDE;
67
68 visit(TreeVisitor visitor) => visitor.visitSimpleSelectorName(this);
69
70 String toString() => name;
71 }
72
73 // element name
74 class ElementSelector extends SimpleSelector {
75 ElementSelector(String name, [Token combinator = TokenKind.COMBINATOR_NONE]) :
76 super(name, combinator);
77
78 bool isWildcard() => name == '*';
nweiz 2011/11/10 00:04:39 A universal selector is not really the same thing
terry 2011/11/22 16:40:47 Your right I removed it when I added notion of wil
79
80 visit(TreeVisitor visitor) => visitor.visitElementSelector(this);
81
82 String toString() => "$name";
83 }
84
85 // namespace|element
86 class NamespaceSelector extends SimpleSelector {
87 var _namespace; // null, '*' or identifier name
88
89 NamespaceSelector(this._namespace, String name,
90 [Token combinator = TokenKind.COMBINATOR_NONE]) : super(name, combinator);
nweiz 2011/11/10 00:04:39 I really don't like the overloading of _name that'
terry 2011/11/22 16:40:47 Right it's an identifier or wildcard. On 2011/11/1
91
92 String get namespace() => _namespace is Identifier ?
nweiz 2011/11/10 00:04:39 Same comment as SimpleSelector._name above.
terry 2011/11/22 16:40:47 namespace is never a string either Identifier or W
93 _namespace.name : _namespace;
94
95 bool isWildcardElement() => _name.isWildcard();
nweiz 2011/11/10 00:04:39 Why is this something that goes through NamespaceS
terry 2011/11/22 16:40:47 Shouldn't it's on simpleSelector. On 2011/11/10 00
96
97 bool isNamespaceWildcard() => _namespace == '*';
98
99 SimpleSelector get nameAsElementSelector() => _name;
100
101 visit(TreeVisitor visitor) => visitor.visitNamespaceSelector(this);
102
103 String toString() => "$namespace|$name";
104 }
105
106 // #id
107 class IdSelector extends SimpleSelector {
108 IdSelector(String name, [Token combinator = TokenKind.COMBINATOR_NONE]) :
109 super(name, combinator);
110
111 visit(TreeVisitor visitor) => visitor.visitIdSelector(this);
112
113 String toString() => "#$name";
114 }
115
116 // .class
117 class ClassSelector extends SimpleSelector {
118 ClassSelector(String name, [Token combinator = TokenKind.COMBINATOR_NONE]) :
119 super(name, combinator);
120
121 visit(TreeVisitor visitor) => visitor.visitClassSelector(this);
122
123 String toString() => ".$name";
124 }
125
126 // :pseudoClass
127 class PseudoClassSelector extends SimpleSelector {
128 PseudoClassSelector(String name,
129 [Token combinator = TokenKind.COMBINATOR_NONE]) : super(name, combinator);
130
131 visit(TreeVisitor visitor) => visitor.visitPseudoClassSelector(this);
132
133 String toString() => ":$name";
134 }
135
136 // ::pseudoElement
137 class PseudoElementSelector extends SimpleSelector {
138 PseudoElementSelector(String name,
139 [Token combinator = TokenKind.COMBINATOR_NONE]) : super(name, combinator);
140
141 visit(TreeVisitor visitor) => visitor.visitPseudoElementSelector(this);
142
143 String toString() => "::$name";
144 }
145
146 // TODO(terry): Implement
147 // NOT
148 class NotSelector extends SimpleSelector {
149 NotSelector(String name, [Token combinator = TokenKind.COMBINATOR_NONE]) :
150 super(name, combinator);
151
152 visit(TreeVisitor visitor) => visitor.visitNotSelector(this);
153 }
154
155 // TODO(terry): Implement
156 // [attribute]
157 class Attribute extends Node {
158 var name; // NamespaceSelector or SimpleSelector
159 int matchType; // ~=, |=, ^=, $=, *=, =
160 String value;
161 }
162
163 interface TreeVisitor {
164 void visitSelectorGroup(SelectorGroup node);
165 void visitSimpleSelector(SimpleSelector node);
166 void visitElementSelector(ElementSelector node);
167 void visitNamespaceSelector(NamespaceSelector node);
168 void visitIdSelector(IdSelector node);
169 void visitClassSelector(ClassSelector node);
170 void visitPseudoClassSelector(PseudoClassSelector node);
171 void visitPseudoElementSelector(PseudoElementSelector node);
172 void visitNotSelector(NotSelector node);
173
174 void visitIdentifier(Identifier node);
175
176 // TODO(terry): Defined for ../tree.dart.
177 void visitTypeReference(TypeReference node);
178 }
179
180 class TreePrinter implements TreeVisitor {
181 var output;
182 TreePrinter(this.output) { output.printer = this; }
183
184 void visitSelectorGroup(SelectorGroup node) {
185 output.heading('Selector Group', node.span);
186 output.writeNodeList('selectors', node.selectors);
187 output.writeln('');
188 }
189
190 void visitSimpleSelector(SimpleSelector node) {
191 if (node.isCombinatorNone()) {
192 output.writeValue('combinator', "NONE");
193 } else if (node.isCombinatorPlus()) {
194 output.writeValue('combinator', "+");
195 } else if (node.isCombinatorGreater()) {
196 output.writeValue('combinator', ">");
197 } else if (node.isCombinatorTilde()) {
198 output.writeValue('combinator', "~");
199 } else {
200 output.writeValue('combinator', "ERROR UNKNOWN");
201 }
202 }
203
204 void visitNamespaceSelector(NamespaceSelector node) {
205 output.heading('Namespace Selector', node.span);
206 visitSimpleSelector(node);
207 output.writeValue('namespace', node._namespace);
208 output.writeNode('name', node._name);
209 }
210
211 void visitElementSelector(ElementSelector node) {
212 output.heading('Element Selector', node.span);
213 visitSimpleSelector(node);
214 if (node.isWildcard()) {
215 output.writeValue('name', '*');
216 } else {
217 output.writeNode('name', node.name);
218 }
219 }
220
221 void visitIdSelector(IdSelector node) {
222 output.heading('Id Selector', node.span);
223 visitSimpleSelector(node);
224 output.writeNode('name', node._name);
225 }
226
227 void visitClassSelector(ClassSelector node) {
228 output.heading('Class Selector', node.span);
229 visitSimpleSelector(node);
230 output.writeNode('name', node._name);
231 }
232
233 void visitPseudoClassSelector(PseudoClassSelector node) {
234 output.heading('Pseudo Class Selector', node.span);
235 visitSimpleSelector(node);
236 output.writeNode('name', node._name);
237 }
238
239 void visitPseudoElementSelector(PseudoElementSelector node) {
240 output.heading('Pseudo Element Selector', node.span);
241 visitSimpleSelector(node);
242 output.writeNode('name', node._name);
243 }
244
245 void visitNotSelector(NotSelector node) {
246 visitSimpleSelector(node);
247 output.heading('Not Selector', node.span);
248 }
249
250 void visitIdentifier(Identifier node) {
251 output.heading('Identifier(' + output.toValue(node.name) + ")", node.span);
252 }
253
254 // TODO(terry): Defined for frog/tree.dart.
255 void visitTypeReference(TypeReference node) {
256 output.heading('Unimplemented');
257 }
258 }
OLDNEW

Powered by Google App Engine
This is Rietveld 408576698