OLD | NEW |
---|---|
(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 } | |
OLD | NEW |