less 0.8.13 → 1.0.4

Sign up to get free protection for your applications and to get access to all the features.
Files changed (156) hide show
  1. data/README.md +10 -1
  2. data/Rakefile +21 -3
  3. data/VERSION +1 -1
  4. data/bin/lessc +0 -8
  5. data/less.gemspec +138 -15
  6. data/lib/less.rb +67 -11
  7. data/lib/less/command.rb +24 -25
  8. data/lib/less/engine.rb +36 -140
  9. data/lib/less/engine/builder.rb +8 -0
  10. data/lib/less/engine/less.tt +374 -0
  11. data/lib/less/engine/nodes.rb +8 -0
  12. data/lib/less/engine/nodes/element.rb +150 -0
  13. data/lib/less/engine/nodes/entity.rb +73 -0
  14. data/lib/less/engine/nodes/function.rb +82 -0
  15. data/lib/less/engine/nodes/literal.rb +135 -0
  16. data/lib/less/engine/nodes/property.rb +112 -0
  17. data/lib/less/engine/nodes/selector.rb +39 -0
  18. data/lib/less/engine/parser.rb +3860 -0
  19. data/lib/vendor/treetop/.gitignore +7 -0
  20. data/lib/vendor/treetop/LICENSE +19 -0
  21. data/lib/vendor/treetop/README +164 -0
  22. data/lib/vendor/treetop/Rakefile +19 -0
  23. data/lib/vendor/treetop/benchmark/seqpar.gnuplot +15 -0
  24. data/lib/vendor/treetop/benchmark/seqpar.treetop +16 -0
  25. data/lib/vendor/treetop/benchmark/seqpar_benchmark.rb +107 -0
  26. data/lib/vendor/treetop/bin/tt +28 -0
  27. data/lib/vendor/treetop/lib/treetop.rb +8 -0
  28. data/lib/vendor/treetop/lib/treetop/bootstrap_gen_1_metagrammar.rb +45 -0
  29. data/lib/vendor/treetop/lib/treetop/compiler.rb +6 -0
  30. data/lib/vendor/treetop/lib/treetop/compiler/grammar_compiler.rb +42 -0
  31. data/lib/vendor/treetop/lib/treetop/compiler/lexical_address_space.rb +17 -0
  32. data/lib/vendor/treetop/lib/treetop/compiler/metagrammar.rb +3097 -0
  33. data/lib/vendor/treetop/lib/treetop/compiler/metagrammar.treetop +408 -0
  34. data/lib/vendor/treetop/lib/treetop/compiler/node_classes.rb +19 -0
  35. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/anything_symbol.rb +18 -0
  36. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/atomic_expression.rb +14 -0
  37. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/character_class.rb +23 -0
  38. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/choice.rb +31 -0
  39. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/declaration_sequence.rb +24 -0
  40. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/grammar.rb +28 -0
  41. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/inline_module.rb +27 -0
  42. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/nonterminal.rb +13 -0
  43. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/optional.rb +19 -0
  44. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/parenthesized_expression.rb +9 -0
  45. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/parsing_expression.rb +146 -0
  46. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/parsing_rule.rb +55 -0
  47. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/predicate.rb +45 -0
  48. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/repetition.rb +55 -0
  49. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/sequence.rb +68 -0
  50. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/terminal.rb +20 -0
  51. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/transient_prefix.rb +9 -0
  52. data/lib/vendor/treetop/lib/treetop/compiler/node_classes/treetop_file.rb +9 -0
  53. data/lib/vendor/treetop/lib/treetop/compiler/ruby_builder.rb +113 -0
  54. data/lib/vendor/treetop/lib/treetop/ruby_extensions.rb +2 -0
  55. data/lib/vendor/treetop/lib/treetop/ruby_extensions/string.rb +42 -0
  56. data/lib/vendor/treetop/lib/treetop/runtime.rb +5 -0
  57. data/lib/vendor/treetop/lib/treetop/runtime/compiled_parser.rb +109 -0
  58. data/lib/vendor/treetop/lib/treetop/runtime/interval_skip_list.rb +4 -0
  59. data/lib/vendor/treetop/lib/treetop/runtime/interval_skip_list/head_node.rb +15 -0
  60. data/lib/vendor/treetop/lib/treetop/runtime/interval_skip_list/interval_skip_list.rb +200 -0
  61. data/lib/vendor/treetop/lib/treetop/runtime/interval_skip_list/node.rb +164 -0
  62. data/lib/vendor/treetop/lib/treetop/runtime/syntax_node.rb +90 -0
  63. data/lib/vendor/treetop/lib/treetop/runtime/terminal_parse_failure.rb +16 -0
  64. data/lib/vendor/treetop/lib/treetop/runtime/terminal_syntax_node.rb +17 -0
  65. data/lib/vendor/treetop/lib/treetop/version.rb +9 -0
  66. data/lib/vendor/treetop/spec/compiler/and_predicate_spec.rb +36 -0
  67. data/lib/vendor/treetop/spec/compiler/anything_symbol_spec.rb +44 -0
  68. data/lib/vendor/treetop/spec/compiler/character_class_spec.rb +247 -0
  69. data/lib/vendor/treetop/spec/compiler/choice_spec.rb +80 -0
  70. data/lib/vendor/treetop/spec/compiler/circular_compilation_spec.rb +28 -0
  71. data/lib/vendor/treetop/spec/compiler/failure_propagation_functional_spec.rb +21 -0
  72. data/lib/vendor/treetop/spec/compiler/grammar_compiler_spec.rb +84 -0
  73. data/lib/vendor/treetop/spec/compiler/grammar_spec.rb +41 -0
  74. data/lib/vendor/treetop/spec/compiler/nonterminal_symbol_spec.rb +40 -0
  75. data/lib/vendor/treetop/spec/compiler/not_predicate_spec.rb +38 -0
  76. data/lib/vendor/treetop/spec/compiler/one_or_more_spec.rb +35 -0
  77. data/lib/vendor/treetop/spec/compiler/optional_spec.rb +37 -0
  78. data/lib/vendor/treetop/spec/compiler/parenthesized_expression_spec.rb +19 -0
  79. data/lib/vendor/treetop/spec/compiler/parsing_rule_spec.rb +32 -0
  80. data/lib/vendor/treetop/spec/compiler/sequence_spec.rb +115 -0
  81. data/lib/vendor/treetop/spec/compiler/terminal_spec.rb +81 -0
  82. data/lib/vendor/treetop/spec/compiler/terminal_symbol_spec.rb +37 -0
  83. data/lib/vendor/treetop/spec/compiler/test_grammar.treetop +7 -0
  84. data/lib/vendor/treetop/spec/compiler/test_grammar.tt +7 -0
  85. data/lib/vendor/treetop/spec/compiler/test_grammar_do.treetop +7 -0
  86. data/lib/vendor/treetop/spec/compiler/zero_or_more_spec.rb +56 -0
  87. data/lib/vendor/treetop/spec/composition/a.treetop +11 -0
  88. data/lib/vendor/treetop/spec/composition/b.treetop +11 -0
  89. data/lib/vendor/treetop/spec/composition/c.treetop +10 -0
  90. data/lib/vendor/treetop/spec/composition/d.treetop +10 -0
  91. data/lib/vendor/treetop/spec/composition/f.treetop +17 -0
  92. data/lib/vendor/treetop/spec/composition/grammar_composition_spec.rb +40 -0
  93. data/lib/vendor/treetop/spec/composition/subfolder/e_includes_c.treetop +15 -0
  94. data/lib/vendor/treetop/spec/ruby_extensions/string_spec.rb +32 -0
  95. data/lib/vendor/treetop/spec/runtime/compiled_parser_spec.rb +101 -0
  96. data/lib/vendor/treetop/spec/runtime/interval_skip_list/delete_spec.rb +147 -0
  97. data/lib/vendor/treetop/spec/runtime/interval_skip_list/expire_range_spec.rb +349 -0
  98. data/lib/vendor/treetop/spec/runtime/interval_skip_list/insert_and_delete_node.rb +385 -0
  99. data/lib/vendor/treetop/spec/runtime/interval_skip_list/insert_spec.rb +660 -0
  100. data/lib/vendor/treetop/spec/runtime/interval_skip_list/interval_skip_list_spec.graffle +6175 -0
  101. data/lib/vendor/treetop/spec/runtime/interval_skip_list/interval_skip_list_spec.rb +58 -0
  102. data/lib/vendor/treetop/spec/runtime/interval_skip_list/palindromic_fixture.rb +23 -0
  103. data/lib/vendor/treetop/spec/runtime/interval_skip_list/palindromic_fixture_spec.rb +164 -0
  104. data/lib/vendor/treetop/spec/runtime/interval_skip_list/spec_helper.rb +84 -0
  105. data/lib/vendor/treetop/spec/runtime/syntax_node_spec.rb +68 -0
  106. data/lib/vendor/treetop/spec/spec_helper.rb +106 -0
  107. data/lib/vendor/treetop/spec/spec_suite.rb +4 -0
  108. data/lib/vendor/treetop/treetop.gemspec +17 -0
  109. data/spec/command_spec.rb +2 -6
  110. data/spec/css/accessors-1.0.css +18 -0
  111. data/spec/css/big-1.0.css +3768 -0
  112. data/spec/css/comments-1.0.css +9 -0
  113. data/spec/css/css-1.0.css +40 -0
  114. data/spec/css/functions-1.0.css +6 -0
  115. data/spec/css/import-1.0.css +11 -0
  116. data/spec/css/mixins-1.0.css +28 -0
  117. data/spec/css/operations-1.0.css +28 -0
  118. data/spec/css/rulesets-1.0.css +17 -0
  119. data/spec/css/scope-1.0.css +14 -0
  120. data/spec/css/strings-1.0.css +12 -0
  121. data/spec/css/variables-1.0.css +6 -0
  122. data/spec/css/whitespace-1.0.css +9 -0
  123. data/spec/engine_spec.rb +66 -18
  124. data/spec/less/accessors-1.0.less +20 -0
  125. data/spec/less/big-1.0.less +4810 -0
  126. data/spec/less/colors-1.0.less +0 -0
  127. data/spec/less/comments-1.0.less +46 -0
  128. data/spec/less/css-1.0.less +84 -0
  129. data/spec/less/exceptions/mixed-units-error.less +3 -0
  130. data/spec/less/exceptions/name-error-1.0.less +3 -0
  131. data/spec/less/exceptions/syntax-error-1.0.less +3 -0
  132. data/spec/less/functions-1.0.less +6 -0
  133. data/spec/less/import-1.0.less +7 -0
  134. data/spec/less/import/import-test-a.less +2 -0
  135. data/spec/less/import/import-test-b.less +8 -0
  136. data/spec/less/import/import-test-c.less +5 -0
  137. data/spec/less/mixins-1.0.less +43 -0
  138. data/spec/less/operations-1.0.less +39 -0
  139. data/spec/less/rulesets-1.0.less +30 -0
  140. data/spec/less/scope-1.0.less +33 -0
  141. data/spec/less/strings-1.0.less +14 -0
  142. data/spec/less/variables-1.0.less +18 -0
  143. data/spec/less/whitespace-1.0.less +21 -0
  144. data/spec/spec.css +79 -24
  145. data/spec/spec.less +2 -3
  146. data/spec/spec_helper.rb +4 -1
  147. metadata +136 -13
  148. data/lib/less/tree.rb +0 -82
  149. data/spec/css/less-0.8.10.css +0 -30
  150. data/spec/css/less-0.8.11.css +0 -31
  151. data/spec/css/less-0.8.12.css +0 -28
  152. data/spec/css/less-0.8.5.css +0 -24
  153. data/spec/css/less-0.8.6.css +0 -24
  154. data/spec/css/less-0.8.7.css +0 -24
  155. data/spec/css/less-0.8.8.css +0 -25
  156. data/spec/tree_spec.rb +0 -5
@@ -0,0 +1,112 @@
1
+ module Less
2
+ module Node
3
+ class Property < ::String
4
+ include Entity
5
+
6
+ attr_accessor :value
7
+
8
+ def initialize key, value = nil
9
+ super key
10
+ @value = Expression.new(value ? [value] : [])
11
+ @eval = false # Store the first evaluation in here
12
+ end
13
+
14
+ def << token
15
+ token = Node::Anonymous.new(*token) unless token.is_a? Entity or token.is_a? Operator
16
+ @value << token
17
+ end
18
+
19
+ def empty?; !@value || @value.empty? end
20
+ def eval?; @eval end
21
+
22
+ def inspect
23
+ self + (empty?? "" : ": `#{value.map {|i| i.to_s } * ' | '}`")
24
+ end
25
+
26
+ def to_s
27
+ super
28
+ end
29
+
30
+ # TODO: @eval and @value should be merged
31
+ def evaluate
32
+ @eval || @eval = value.evaluate
33
+ end
34
+
35
+ def to_css
36
+ "#{self}: #{evaluate.to_css};"
37
+ end
38
+ end
39
+
40
+ class Variable < Property
41
+ def initialize key, value = nil
42
+ super key.delete('@'), value
43
+ end
44
+
45
+ def inspect
46
+ "@#{super}"
47
+ end
48
+
49
+ def to_s
50
+ "@#{super}"
51
+ end
52
+
53
+ def to_ruby
54
+ value.evaluate.to_ruby
55
+ end
56
+
57
+ def to_css
58
+ value.evaluate.to_css
59
+ end
60
+ end
61
+
62
+ class Expression < Array
63
+ def operators; select {|i| i.is_a? Operator } end
64
+ def entities; select {|i| i.kind_of? Entity } end
65
+ def literals; select {|i| i.kind_of? Literal } end
66
+
67
+ def inspect
68
+ '[' + map {|i| i.inspect }.join(', ') + ']'
69
+ end
70
+
71
+ def to_css
72
+ map {|i| i.to_css } * ' '
73
+ end
74
+
75
+ #
76
+ # Evaluates the expression and instantiates a new Literal with the result
77
+ # ex: [#111, +, #111] will evaluate to a Color node, with value #222
78
+ #
79
+ # TODO: refactor the conditionals
80
+ def evaluate
81
+ if size > 2 && (entities.size == operators.size + 1)
82
+
83
+ # Create a sub-expression with all the variables/properties evaluated
84
+ evaluated = Expression.new map {|e| e.respond_to?(:evaluate) ? e.evaluate : e }
85
+
86
+ unit = evaluated.literals.map do |node|
87
+ node.unit
88
+ end.compact.uniq.tap do |ary|
89
+ raise MixedUnitsError, self * ' ' if ary.size > 1
90
+ end.join
91
+
92
+ entity = evaluated.literals.find {|e| e.unit == unit } || evaluated.first
93
+ ruby = map {|e| e.to_ruby if e.respond_to? :to_ruby }
94
+
95
+ unless ruby.include? nil
96
+ if entity
97
+ entity.class.new(eval(ruby.join), *(unit if entity.class == Node::Number))
98
+ else
99
+ first
100
+ end
101
+ else
102
+ self
103
+ end
104
+ elsif size == 1
105
+ first
106
+ else
107
+ self
108
+ end
109
+ end
110
+ end
111
+ end
112
+ end
@@ -0,0 +1,39 @@
1
+ module Less
2
+ module Node
3
+ class Selector < ::String
4
+ include Entity
5
+
6
+ Selectors = {
7
+ :Descendant => '',
8
+ :Child => '>',
9
+ :Adjacent => '+',
10
+ :Pseudo => ':',
11
+ :Sibling => '~'
12
+ }
13
+
14
+ def initialize
15
+ super Selectors[ self.class.to_s.split('::').last.to_sym ]
16
+ end
17
+
18
+ def self.[] key
19
+ Node.const_get(Selectors.find {|k, v| v == key }.first)
20
+ end
21
+ end
22
+
23
+ class Descendant < Selector
24
+ def to_css; " " end
25
+ end
26
+
27
+ class Child < Selector
28
+ def to_css; " #{self} " end
29
+ end
30
+
31
+ class Adjacent < Selector
32
+ def to_css; " #{self} " end
33
+ end
34
+
35
+ class Pseudo < Selector
36
+ def to_css; self end
37
+ end
38
+ end
39
+ end
@@ -0,0 +1,3860 @@
1
+ module Less
2
+ include Treetop::Runtime
3
+
4
+ def root
5
+ @root || :primary
6
+ end
7
+
8
+ def _nt_primary
9
+ start_index = index
10
+ if node_cache[:primary].has_key?(index)
11
+ cached = node_cache[:primary][index]
12
+ @index = cached.interval.end if cached
13
+ return cached
14
+ end
15
+
16
+ i0 = index
17
+ s1, i1 = [], index
18
+ loop do
19
+ i2 = index
20
+ r3 = _nt_declaration
21
+ if r3
22
+ r2 = r3
23
+ else
24
+ r4 = _nt_ruleset
25
+ if r4
26
+ r2 = r4
27
+ else
28
+ r5 = _nt_import
29
+ if r5
30
+ r2 = r5
31
+ else
32
+ r6 = _nt_comment
33
+ if r6
34
+ r2 = r6
35
+ else
36
+ @index = i2
37
+ r2 = nil
38
+ end
39
+ end
40
+ end
41
+ end
42
+ if r2
43
+ s1 << r2
44
+ else
45
+ break
46
+ end
47
+ end
48
+ if s1.empty?
49
+ @index = i1
50
+ r1 = nil
51
+ else
52
+ r1 = instantiate_node(Builder,input, i1...index, s1)
53
+ end
54
+ if r1
55
+ r0 = r1
56
+ else
57
+ s7, i7 = [], index
58
+ loop do
59
+ r8 = _nt_declaration
60
+ if r8
61
+ s7 << r8
62
+ else
63
+ break
64
+ end
65
+ end
66
+ r7 = instantiate_node(Builder,input, i7...index, s7)
67
+ if r7
68
+ r0 = r7
69
+ else
70
+ s9, i9 = [], index
71
+ loop do
72
+ r10 = _nt_import
73
+ if r10
74
+ s9 << r10
75
+ else
76
+ break
77
+ end
78
+ end
79
+ r9 = instantiate_node(Builder,input, i9...index, s9)
80
+ if r9
81
+ r0 = r9
82
+ else
83
+ s11, i11 = [], index
84
+ loop do
85
+ r12 = _nt_comment
86
+ if r12
87
+ s11 << r12
88
+ else
89
+ break
90
+ end
91
+ end
92
+ r11 = instantiate_node(SyntaxNode,input, i11...index, s11)
93
+ if r11
94
+ r0 = r11
95
+ else
96
+ @index = i0
97
+ r0 = nil
98
+ end
99
+ end
100
+ end
101
+ end
102
+
103
+ node_cache[:primary][start_index] = r0
104
+
105
+ r0
106
+ end
107
+
108
+ module Comment0
109
+ end
110
+
111
+ module Comment1
112
+ def ws
113
+ elements[0]
114
+ end
115
+
116
+ def ws
117
+ elements[4]
118
+ end
119
+ end
120
+
121
+ module Comment2
122
+ end
123
+
124
+ module Comment3
125
+ def ws
126
+ elements[0]
127
+ end
128
+
129
+ def ws
130
+ elements[4]
131
+ end
132
+ end
133
+
134
+ def _nt_comment
135
+ start_index = index
136
+ if node_cache[:comment].has_key?(index)
137
+ cached = node_cache[:comment][index]
138
+ @index = cached.interval.end if cached
139
+ return cached
140
+ end
141
+
142
+ i0 = index
143
+ i1, s1 = index, []
144
+ r2 = _nt_ws
145
+ s1 << r2
146
+ if r2
147
+ if has_terminal?('/*', false, index)
148
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 2))
149
+ @index += 2
150
+ else
151
+ terminal_parse_failure('/*')
152
+ r3 = nil
153
+ end
154
+ s1 << r3
155
+ if r3
156
+ s4, i4 = [], index
157
+ loop do
158
+ i5, s5 = index, []
159
+ i6 = index
160
+ if has_terminal?('*/', false, index)
161
+ r7 = instantiate_node(SyntaxNode,input, index...(index + 2))
162
+ @index += 2
163
+ else
164
+ terminal_parse_failure('*/')
165
+ r7 = nil
166
+ end
167
+ if r7
168
+ r6 = nil
169
+ else
170
+ @index = i6
171
+ r6 = instantiate_node(SyntaxNode,input, index...index)
172
+ end
173
+ s5 << r6
174
+ if r6
175
+ if index < input_length
176
+ r8 = instantiate_node(SyntaxNode,input, index...(index + 1))
177
+ @index += 1
178
+ else
179
+ terminal_parse_failure("any character")
180
+ r8 = nil
181
+ end
182
+ s5 << r8
183
+ end
184
+ if s5.last
185
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
186
+ r5.extend(Comment0)
187
+ else
188
+ @index = i5
189
+ r5 = nil
190
+ end
191
+ if r5
192
+ s4 << r5
193
+ else
194
+ break
195
+ end
196
+ end
197
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
198
+ s1 << r4
199
+ if r4
200
+ if has_terminal?('*/', false, index)
201
+ r9 = instantiate_node(SyntaxNode,input, index...(index + 2))
202
+ @index += 2
203
+ else
204
+ terminal_parse_failure('*/')
205
+ r9 = nil
206
+ end
207
+ s1 << r9
208
+ if r9
209
+ r10 = _nt_ws
210
+ s1 << r10
211
+ end
212
+ end
213
+ end
214
+ end
215
+ if s1.last
216
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
217
+ r1.extend(Comment1)
218
+ else
219
+ @index = i1
220
+ r1 = nil
221
+ end
222
+ if r1
223
+ r0 = r1
224
+ else
225
+ i11, s11 = index, []
226
+ r12 = _nt_ws
227
+ s11 << r12
228
+ if r12
229
+ if has_terminal?('//', false, index)
230
+ r13 = instantiate_node(SyntaxNode,input, index...(index + 2))
231
+ @index += 2
232
+ else
233
+ terminal_parse_failure('//')
234
+ r13 = nil
235
+ end
236
+ s11 << r13
237
+ if r13
238
+ s14, i14 = [], index
239
+ loop do
240
+ i15, s15 = index, []
241
+ i16 = index
242
+ if has_terminal?("\n", false, index)
243
+ r17 = instantiate_node(SyntaxNode,input, index...(index + 1))
244
+ @index += 1
245
+ else
246
+ terminal_parse_failure("\n")
247
+ r17 = nil
248
+ end
249
+ if r17
250
+ r16 = nil
251
+ else
252
+ @index = i16
253
+ r16 = instantiate_node(SyntaxNode,input, index...index)
254
+ end
255
+ s15 << r16
256
+ if r16
257
+ if index < input_length
258
+ r18 = instantiate_node(SyntaxNode,input, index...(index + 1))
259
+ @index += 1
260
+ else
261
+ terminal_parse_failure("any character")
262
+ r18 = nil
263
+ end
264
+ s15 << r18
265
+ end
266
+ if s15.last
267
+ r15 = instantiate_node(SyntaxNode,input, i15...index, s15)
268
+ r15.extend(Comment2)
269
+ else
270
+ @index = i15
271
+ r15 = nil
272
+ end
273
+ if r15
274
+ s14 << r15
275
+ else
276
+ break
277
+ end
278
+ end
279
+ r14 = instantiate_node(SyntaxNode,input, i14...index, s14)
280
+ s11 << r14
281
+ if r14
282
+ if has_terminal?("\n", false, index)
283
+ r19 = instantiate_node(SyntaxNode,input, index...(index + 1))
284
+ @index += 1
285
+ else
286
+ terminal_parse_failure("\n")
287
+ r19 = nil
288
+ end
289
+ s11 << r19
290
+ if r19
291
+ r20 = _nt_ws
292
+ s11 << r20
293
+ end
294
+ end
295
+ end
296
+ end
297
+ if s11.last
298
+ r11 = instantiate_node(SyntaxNode,input, i11...index, s11)
299
+ r11.extend(Comment3)
300
+ else
301
+ @index = i11
302
+ r11 = nil
303
+ end
304
+ if r11
305
+ r0 = r11
306
+ else
307
+ @index = i0
308
+ r0 = nil
309
+ end
310
+ end
311
+
312
+ node_cache[:comment][start_index] = r0
313
+
314
+ r0
315
+ end
316
+
317
+ module Ruleset0
318
+ def selectors
319
+ elements[0]
320
+ end
321
+
322
+ def ws
323
+ elements[2]
324
+ end
325
+
326
+ def primary
327
+ elements[3]
328
+ end
329
+
330
+ def ws
331
+ elements[4]
332
+ end
333
+
334
+ def ws
335
+ elements[6]
336
+ end
337
+ end
338
+
339
+ module Ruleset1
340
+ def build env
341
+ # Build the ruleset for each selector
342
+ selectors.build(env, :tree).each do |sel|
343
+ primary.build sel
344
+ end
345
+ end
346
+ end
347
+
348
+ module Ruleset2
349
+ def ws
350
+ elements[0]
351
+ end
352
+
353
+ def selectors
354
+ elements[1]
355
+ end
356
+
357
+ def ws
358
+ elements[3]
359
+ end
360
+ end
361
+
362
+ module Ruleset3
363
+ def build env
364
+ selectors.build(env, :path).each do |path|
365
+ rules = path.inject(env.root) do |current, node|
366
+ current.descend(node.selector, node) or raise MixinNameError, path.join
367
+ end.rules
368
+ env.rules += rules
369
+ end
370
+ end
371
+ end
372
+
373
+ def _nt_ruleset
374
+ start_index = index
375
+ if node_cache[:ruleset].has_key?(index)
376
+ cached = node_cache[:ruleset][index]
377
+ @index = cached.interval.end if cached
378
+ return cached
379
+ end
380
+
381
+ i0 = index
382
+ i1, s1 = index, []
383
+ r2 = _nt_selectors
384
+ s1 << r2
385
+ if r2
386
+ if has_terminal?("{", false, index)
387
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
388
+ @index += 1
389
+ else
390
+ terminal_parse_failure("{")
391
+ r3 = nil
392
+ end
393
+ s1 << r3
394
+ if r3
395
+ r4 = _nt_ws
396
+ s1 << r4
397
+ if r4
398
+ r5 = _nt_primary
399
+ s1 << r5
400
+ if r5
401
+ r6 = _nt_ws
402
+ s1 << r6
403
+ if r6
404
+ if has_terminal?("}", false, index)
405
+ r7 = instantiate_node(SyntaxNode,input, index...(index + 1))
406
+ @index += 1
407
+ else
408
+ terminal_parse_failure("}")
409
+ r7 = nil
410
+ end
411
+ s1 << r7
412
+ if r7
413
+ r8 = _nt_ws
414
+ s1 << r8
415
+ end
416
+ end
417
+ end
418
+ end
419
+ end
420
+ end
421
+ if s1.last
422
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
423
+ r1.extend(Ruleset0)
424
+ r1.extend(Ruleset1)
425
+ else
426
+ @index = i1
427
+ r1 = nil
428
+ end
429
+ if r1
430
+ r0 = r1
431
+ else
432
+ i9, s9 = index, []
433
+ r10 = _nt_ws
434
+ s9 << r10
435
+ if r10
436
+ r11 = _nt_selectors
437
+ s9 << r11
438
+ if r11
439
+ if has_terminal?(';', false, index)
440
+ r12 = instantiate_node(SyntaxNode,input, index...(index + 1))
441
+ @index += 1
442
+ else
443
+ terminal_parse_failure(';')
444
+ r12 = nil
445
+ end
446
+ s9 << r12
447
+ if r12
448
+ r13 = _nt_ws
449
+ s9 << r13
450
+ end
451
+ end
452
+ end
453
+ if s9.last
454
+ r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
455
+ r9.extend(Ruleset2)
456
+ r9.extend(Ruleset3)
457
+ else
458
+ @index = i9
459
+ r9 = nil
460
+ end
461
+ if r9
462
+ r0 = r9
463
+ else
464
+ @index = i0
465
+ r0 = nil
466
+ end
467
+ end
468
+
469
+ node_cache[:ruleset][start_index] = r0
470
+
471
+ r0
472
+ end
473
+
474
+ module Import0
475
+ def S
476
+ elements[1]
477
+ end
478
+
479
+ def url
480
+ elements[2]
481
+ end
482
+
483
+ def s
484
+ elements[4]
485
+ end
486
+
487
+ def ws
488
+ elements[6]
489
+ end
490
+ end
491
+
492
+ module Import1
493
+ def build env
494
+ path = File.join(env.root.file, url.value)
495
+ path += '.less' unless path =~ /\.less$/
496
+ if File.exist? path
497
+ imported = Less::Engine.new(File.new path).to_tree
498
+ env.rules += imported.rules
499
+ else
500
+ raise ImportError, path
501
+ end
502
+ end
503
+ end
504
+
505
+ def _nt_import
506
+ start_index = index
507
+ if node_cache[:import].has_key?(index)
508
+ cached = node_cache[:import][index]
509
+ @index = cached.interval.end if cached
510
+ return cached
511
+ end
512
+
513
+ i0, s0 = index, []
514
+ if has_terminal?("@import", false, index)
515
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 7))
516
+ @index += 7
517
+ else
518
+ terminal_parse_failure("@import")
519
+ r1 = nil
520
+ end
521
+ s0 << r1
522
+ if r1
523
+ r2 = _nt_S
524
+ s0 << r2
525
+ if r2
526
+ i3 = index
527
+ r4 = _nt_string
528
+ if r4
529
+ r3 = r4
530
+ else
531
+ r5 = _nt_url
532
+ if r5
533
+ r3 = r5
534
+ else
535
+ @index = i3
536
+ r3 = nil
537
+ end
538
+ end
539
+ s0 << r3
540
+ if r3
541
+ r7 = _nt_medias
542
+ if r7
543
+ r6 = r7
544
+ else
545
+ r6 = instantiate_node(SyntaxNode,input, index...index)
546
+ end
547
+ s0 << r6
548
+ if r6
549
+ r8 = _nt_s
550
+ s0 << r8
551
+ if r8
552
+ if has_terminal?(';', false, index)
553
+ r9 = instantiate_node(SyntaxNode,input, index...(index + 1))
554
+ @index += 1
555
+ else
556
+ terminal_parse_failure(';')
557
+ r9 = nil
558
+ end
559
+ s0 << r9
560
+ if r9
561
+ r10 = _nt_ws
562
+ s0 << r10
563
+ end
564
+ end
565
+ end
566
+ end
567
+ end
568
+ end
569
+ if s0.last
570
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
571
+ r0.extend(Import0)
572
+ r0.extend(Import1)
573
+ else
574
+ @index = i0
575
+ r0 = nil
576
+ end
577
+
578
+ node_cache[:import][start_index] = r0
579
+
580
+ r0
581
+ end
582
+
583
+ module Url0
584
+ def path
585
+ elements[1]
586
+ end
587
+
588
+ end
589
+
590
+ module Url1
591
+ def build env = nil
592
+ Node::String.new(CGI.unescape path.text_value)
593
+ end
594
+
595
+ def value
596
+ build
597
+ end
598
+ end
599
+
600
+ def _nt_url
601
+ start_index = index
602
+ if node_cache[:url].has_key?(index)
603
+ cached = node_cache[:url][index]
604
+ @index = cached.interval.end if cached
605
+ return cached
606
+ end
607
+
608
+ i0, s0 = index, []
609
+ if has_terminal?('url(', false, index)
610
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 4))
611
+ @index += 4
612
+ else
613
+ terminal_parse_failure('url(')
614
+ r1 = nil
615
+ end
616
+ s0 << r1
617
+ if r1
618
+ i2 = index
619
+ r3 = _nt_string
620
+ if r3
621
+ r2 = r3
622
+ else
623
+ s4, i4 = [], index
624
+ loop do
625
+ if has_terminal?('[-a-zA-Z0-9_%$/.&=:;#+?]', true, index)
626
+ r5 = true
627
+ @index += 1
628
+ else
629
+ r5 = nil
630
+ end
631
+ if r5
632
+ s4 << r5
633
+ else
634
+ break
635
+ end
636
+ end
637
+ if s4.empty?
638
+ @index = i4
639
+ r4 = nil
640
+ else
641
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
642
+ end
643
+ if r4
644
+ r2 = r4
645
+ else
646
+ @index = i2
647
+ r2 = nil
648
+ end
649
+ end
650
+ s0 << r2
651
+ if r2
652
+ if has_terminal?(')', false, index)
653
+ r6 = instantiate_node(SyntaxNode,input, index...(index + 1))
654
+ @index += 1
655
+ else
656
+ terminal_parse_failure(')')
657
+ r6 = nil
658
+ end
659
+ s0 << r6
660
+ end
661
+ end
662
+ if s0.last
663
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
664
+ r0.extend(Url0)
665
+ r0.extend(Url1)
666
+ else
667
+ @index = i0
668
+ r0 = nil
669
+ end
670
+
671
+ node_cache[:url][start_index] = r0
672
+
673
+ r0
674
+ end
675
+
676
+ module Medias0
677
+ def s
678
+ elements[0]
679
+ end
680
+
681
+ def s
682
+ elements[2]
683
+ end
684
+
685
+ end
686
+
687
+ module Medias1
688
+ end
689
+
690
+ def _nt_medias
691
+ start_index = index
692
+ if node_cache[:medias].has_key?(index)
693
+ cached = node_cache[:medias][index]
694
+ @index = cached.interval.end if cached
695
+ return cached
696
+ end
697
+
698
+ i0, s0 = index, []
699
+ s1, i1 = [], index
700
+ loop do
701
+ if has_terminal?('[-a-z]', true, index)
702
+ r2 = true
703
+ @index += 1
704
+ else
705
+ r2 = nil
706
+ end
707
+ if r2
708
+ s1 << r2
709
+ else
710
+ break
711
+ end
712
+ end
713
+ if s1.empty?
714
+ @index = i1
715
+ r1 = nil
716
+ else
717
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
718
+ end
719
+ s0 << r1
720
+ if r1
721
+ s3, i3 = [], index
722
+ loop do
723
+ i4, s4 = index, []
724
+ r5 = _nt_s
725
+ s4 << r5
726
+ if r5
727
+ if has_terminal?(',', false, index)
728
+ r6 = instantiate_node(SyntaxNode,input, index...(index + 1))
729
+ @index += 1
730
+ else
731
+ terminal_parse_failure(',')
732
+ r6 = nil
733
+ end
734
+ s4 << r6
735
+ if r6
736
+ r7 = _nt_s
737
+ s4 << r7
738
+ if r7
739
+ s8, i8 = [], index
740
+ loop do
741
+ if has_terminal?('[a-z]', true, index)
742
+ r9 = true
743
+ @index += 1
744
+ else
745
+ r9 = nil
746
+ end
747
+ if r9
748
+ s8 << r9
749
+ else
750
+ break
751
+ end
752
+ end
753
+ if s8.empty?
754
+ @index = i8
755
+ r8 = nil
756
+ else
757
+ r8 = instantiate_node(SyntaxNode,input, i8...index, s8)
758
+ end
759
+ s4 << r8
760
+ end
761
+ end
762
+ end
763
+ if s4.last
764
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
765
+ r4.extend(Medias0)
766
+ else
767
+ @index = i4
768
+ r4 = nil
769
+ end
770
+ if r4
771
+ s3 << r4
772
+ else
773
+ break
774
+ end
775
+ end
776
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
777
+ s0 << r3
778
+ end
779
+ if s0.last
780
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
781
+ r0.extend(Medias1)
782
+ else
783
+ @index = i0
784
+ r0 = nil
785
+ end
786
+
787
+ node_cache[:medias][start_index] = r0
788
+
789
+ r0
790
+ end
791
+
792
+ module Selectors0
793
+ def s
794
+ elements[0]
795
+ end
796
+
797
+ def ws
798
+ elements[2]
799
+ end
800
+
801
+ def selector
802
+ elements[3]
803
+ end
804
+ end
805
+
806
+ module Selectors1
807
+ def ws
808
+ elements[0]
809
+ end
810
+
811
+ def selector
812
+ elements[1]
813
+ end
814
+
815
+ def tail
816
+ elements[2]
817
+ end
818
+
819
+ def ws
820
+ elements[3]
821
+ end
822
+ end
823
+
824
+ module Selectors2
825
+ def build env, method
826
+ all.map do |e|
827
+ e.send(method, env) if e.respond_to? method
828
+ end.compact
829
+ end
830
+
831
+ def all
832
+ [selector] + tail.elements.map {|e| e.selector }
833
+ end
834
+ end
835
+
836
+ def _nt_selectors
837
+ start_index = index
838
+ if node_cache[:selectors].has_key?(index)
839
+ cached = node_cache[:selectors][index]
840
+ @index = cached.interval.end if cached
841
+ return cached
842
+ end
843
+
844
+ i0, s0 = index, []
845
+ r1 = _nt_ws
846
+ s0 << r1
847
+ if r1
848
+ r2 = _nt_selector
849
+ s0 << r2
850
+ if r2
851
+ s3, i3 = [], index
852
+ loop do
853
+ i4, s4 = index, []
854
+ r5 = _nt_s
855
+ s4 << r5
856
+ if r5
857
+ if has_terminal?(',', false, index)
858
+ r6 = instantiate_node(SyntaxNode,input, index...(index + 1))
859
+ @index += 1
860
+ else
861
+ terminal_parse_failure(',')
862
+ r6 = nil
863
+ end
864
+ s4 << r6
865
+ if r6
866
+ r7 = _nt_ws
867
+ s4 << r7
868
+ if r7
869
+ r8 = _nt_selector
870
+ s4 << r8
871
+ end
872
+ end
873
+ end
874
+ if s4.last
875
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
876
+ r4.extend(Selectors0)
877
+ else
878
+ @index = i4
879
+ r4 = nil
880
+ end
881
+ if r4
882
+ s3 << r4
883
+ else
884
+ break
885
+ end
886
+ end
887
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
888
+ s0 << r3
889
+ if r3
890
+ r9 = _nt_ws
891
+ s0 << r9
892
+ end
893
+ end
894
+ end
895
+ if s0.last
896
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
897
+ r0.extend(Selectors1)
898
+ r0.extend(Selectors2)
899
+ else
900
+ @index = i0
901
+ r0 = nil
902
+ end
903
+
904
+ node_cache[:selectors][start_index] = r0
905
+
906
+ r0
907
+ end
908
+
909
+ module Selector0
910
+ def s
911
+ elements[0]
912
+ end
913
+
914
+ def select
915
+ elements[1]
916
+ end
917
+
918
+ def element
919
+ elements[2]
920
+ end
921
+
922
+ def s
923
+ elements[3]
924
+ end
925
+ end
926
+
927
+ module Selector1
928
+ def tree env
929
+ elements.inject(env) do |node, e|
930
+ node << Node::Element.new(e.element.text_value, e.select.text_value)
931
+ node.last
932
+ end
933
+ end
934
+
935
+ def path env
936
+ elements.map do |e|
937
+ Node::Element.new(e.element.text_value, e.select.text_value)
938
+ end
939
+ end
940
+ end
941
+
942
+ def _nt_selector
943
+ start_index = index
944
+ if node_cache[:selector].has_key?(index)
945
+ cached = node_cache[:selector][index]
946
+ @index = cached.interval.end if cached
947
+ return cached
948
+ end
949
+
950
+ s0, i0 = [], index
951
+ loop do
952
+ i1, s1 = index, []
953
+ r2 = _nt_s
954
+ s1 << r2
955
+ if r2
956
+ r3 = _nt_select
957
+ s1 << r3
958
+ if r3
959
+ r4 = _nt_element
960
+ s1 << r4
961
+ if r4
962
+ r5 = _nt_s
963
+ s1 << r5
964
+ end
965
+ end
966
+ end
967
+ if s1.last
968
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
969
+ r1.extend(Selector0)
970
+ else
971
+ @index = i1
972
+ r1 = nil
973
+ end
974
+ if r1
975
+ s0 << r1
976
+ else
977
+ break
978
+ end
979
+ end
980
+ if s0.empty?
981
+ @index = i0
982
+ r0 = nil
983
+ else
984
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
985
+ r0.extend(Selector1)
986
+ end
987
+
988
+ node_cache[:selector][start_index] = r0
989
+
990
+ r0
991
+ end
992
+
993
+ module Declaration0
994
+ def ws
995
+ elements[0]
996
+ end
997
+
998
+ end
999
+
1000
+ module Declaration1
1001
+ def ws
1002
+ elements[0]
1003
+ end
1004
+
1005
+ def name
1006
+ elements[1]
1007
+ end
1008
+
1009
+ def s
1010
+ elements[2]
1011
+ end
1012
+
1013
+ def s
1014
+ elements[4]
1015
+ end
1016
+
1017
+ def expression
1018
+ elements[5]
1019
+ end
1020
+
1021
+ def s
1022
+ elements[6]
1023
+ end
1024
+
1025
+ def ws
1026
+ elements[8]
1027
+ end
1028
+ end
1029
+
1030
+ module Declaration2
1031
+ def build env
1032
+ env << (name.text_value =~ /^@/ ? Node::Variable : Node::Property).new(name.text_value)
1033
+ expression.build env
1034
+ end
1035
+ # Empty rule
1036
+ end
1037
+
1038
+ module Declaration3
1039
+ def ws
1040
+ elements[0]
1041
+ end
1042
+
1043
+ def ident
1044
+ elements[1]
1045
+ end
1046
+
1047
+ def s
1048
+ elements[2]
1049
+ end
1050
+
1051
+ def s
1052
+ elements[4]
1053
+ end
1054
+
1055
+ def ws
1056
+ elements[6]
1057
+ end
1058
+ end
1059
+
1060
+ def _nt_declaration
1061
+ start_index = index
1062
+ if node_cache[:declaration].has_key?(index)
1063
+ cached = node_cache[:declaration][index]
1064
+ @index = cached.interval.end if cached
1065
+ return cached
1066
+ end
1067
+
1068
+ i0 = index
1069
+ i1, s1 = index, []
1070
+ r2 = _nt_ws
1071
+ s1 << r2
1072
+ if r2
1073
+ i3 = index
1074
+ r4 = _nt_ident
1075
+ if r4
1076
+ r3 = r4
1077
+ else
1078
+ r5 = _nt_variable
1079
+ if r5
1080
+ r3 = r5
1081
+ else
1082
+ @index = i3
1083
+ r3 = nil
1084
+ end
1085
+ end
1086
+ s1 << r3
1087
+ if r3
1088
+ r6 = _nt_s
1089
+ s1 << r6
1090
+ if r6
1091
+ if has_terminal?(':', false, index)
1092
+ r7 = instantiate_node(SyntaxNode,input, index...(index + 1))
1093
+ @index += 1
1094
+ else
1095
+ terminal_parse_failure(':')
1096
+ r7 = nil
1097
+ end
1098
+ s1 << r7
1099
+ if r7
1100
+ r8 = _nt_s
1101
+ s1 << r8
1102
+ if r8
1103
+ r9 = _nt_expression
1104
+ s1 << r9
1105
+ if r9
1106
+ r10 = _nt_s
1107
+ s1 << r10
1108
+ if r10
1109
+ i11 = index
1110
+ if has_terminal?(';', false, index)
1111
+ r12 = instantiate_node(SyntaxNode,input, index...(index + 1))
1112
+ @index += 1
1113
+ else
1114
+ terminal_parse_failure(';')
1115
+ r12 = nil
1116
+ end
1117
+ if r12
1118
+ r11 = r12
1119
+ else
1120
+ i13, s13 = index, []
1121
+ r14 = _nt_ws
1122
+ s13 << r14
1123
+ if r14
1124
+ i15 = index
1125
+ if has_terminal?('}', false, index)
1126
+ r16 = instantiate_node(SyntaxNode,input, index...(index + 1))
1127
+ @index += 1
1128
+ else
1129
+ terminal_parse_failure('}')
1130
+ r16 = nil
1131
+ end
1132
+ if r16
1133
+ @index = i15
1134
+ r15 = instantiate_node(SyntaxNode,input, index...index)
1135
+ else
1136
+ r15 = nil
1137
+ end
1138
+ s13 << r15
1139
+ end
1140
+ if s13.last
1141
+ r13 = instantiate_node(SyntaxNode,input, i13...index, s13)
1142
+ r13.extend(Declaration0)
1143
+ else
1144
+ @index = i13
1145
+ r13 = nil
1146
+ end
1147
+ if r13
1148
+ r11 = r13
1149
+ else
1150
+ @index = i11
1151
+ r11 = nil
1152
+ end
1153
+ end
1154
+ s1 << r11
1155
+ if r11
1156
+ r17 = _nt_ws
1157
+ s1 << r17
1158
+ end
1159
+ end
1160
+ end
1161
+ end
1162
+ end
1163
+ end
1164
+ end
1165
+ end
1166
+ if s1.last
1167
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
1168
+ r1.extend(Declaration1)
1169
+ r1.extend(Declaration2)
1170
+ else
1171
+ @index = i1
1172
+ r1 = nil
1173
+ end
1174
+ if r1
1175
+ r0 = r1
1176
+ else
1177
+ i18, s18 = index, []
1178
+ r19 = _nt_ws
1179
+ s18 << r19
1180
+ if r19
1181
+ r20 = _nt_ident
1182
+ s18 << r20
1183
+ if r20
1184
+ r21 = _nt_s
1185
+ s18 << r21
1186
+ if r21
1187
+ if has_terminal?(':', false, index)
1188
+ r22 = instantiate_node(SyntaxNode,input, index...(index + 1))
1189
+ @index += 1
1190
+ else
1191
+ terminal_parse_failure(':')
1192
+ r22 = nil
1193
+ end
1194
+ s18 << r22
1195
+ if r22
1196
+ r23 = _nt_s
1197
+ s18 << r23
1198
+ if r23
1199
+ if has_terminal?(';', false, index)
1200
+ r24 = instantiate_node(SyntaxNode,input, index...(index + 1))
1201
+ @index += 1
1202
+ else
1203
+ terminal_parse_failure(';')
1204
+ r24 = nil
1205
+ end
1206
+ s18 << r24
1207
+ if r24
1208
+ r25 = _nt_ws
1209
+ s18 << r25
1210
+ end
1211
+ end
1212
+ end
1213
+ end
1214
+ end
1215
+ end
1216
+ if s18.last
1217
+ r18 = instantiate_node(SyntaxNode,input, i18...index, s18)
1218
+ r18.extend(Declaration3)
1219
+ else
1220
+ @index = i18
1221
+ r18 = nil
1222
+ end
1223
+ if r18
1224
+ r0 = r18
1225
+ else
1226
+ @index = i0
1227
+ r0 = nil
1228
+ end
1229
+ end
1230
+
1231
+ node_cache[:declaration][start_index] = r0
1232
+
1233
+ r0
1234
+ end
1235
+
1236
+ module Expression0
1237
+ def entity
1238
+ elements[0]
1239
+ end
1240
+
1241
+ def expression
1242
+ elements[2]
1243
+ end
1244
+ end
1245
+
1246
+ def _nt_expression
1247
+ start_index = index
1248
+ if node_cache[:expression].has_key?(index)
1249
+ cached = node_cache[:expression][index]
1250
+ @index = cached.interval.end if cached
1251
+ return cached
1252
+ end
1253
+
1254
+ i0 = index
1255
+ i1, s1 = index, []
1256
+ r2 = _nt_entity
1257
+ s1 << r2
1258
+ if r2
1259
+ i3 = index
1260
+ r4 = _nt_operator
1261
+ if r4
1262
+ r3 = r4
1263
+ else
1264
+ r5 = _nt_S
1265
+ if r5
1266
+ r3 = r5
1267
+ else
1268
+ @index = i3
1269
+ r3 = nil
1270
+ end
1271
+ end
1272
+ s1 << r3
1273
+ if r3
1274
+ r6 = _nt_expression
1275
+ s1 << r6
1276
+ end
1277
+ end
1278
+ if s1.last
1279
+ r1 = instantiate_node(Builder,input, i1...index, s1)
1280
+ r1.extend(Expression0)
1281
+ else
1282
+ @index = i1
1283
+ r1 = nil
1284
+ end
1285
+ if r1
1286
+ r0 = r1
1287
+ else
1288
+ r7 = _nt_entity
1289
+ if r7
1290
+ r0 = r7
1291
+ else
1292
+ @index = i0
1293
+ r0 = nil
1294
+ end
1295
+ end
1296
+
1297
+ node_cache[:expression][start_index] = r0
1298
+
1299
+ r0
1300
+ end
1301
+
1302
+ def _nt_entity
1303
+ start_index = index
1304
+ if node_cache[:entity].has_key?(index)
1305
+ cached = node_cache[:entity][index]
1306
+ @index = cached.interval.end if cached
1307
+ return cached
1308
+ end
1309
+
1310
+ i0 = index
1311
+ r1 = _nt_function
1312
+ if r1
1313
+ r0 = r1
1314
+ else
1315
+ r2 = _nt_fonts
1316
+ if r2
1317
+ r0 = r2
1318
+ else
1319
+ r3 = _nt_keyword
1320
+ if r3
1321
+ r0 = r3
1322
+ else
1323
+ r4 = _nt_accessor
1324
+ if r4
1325
+ r0 = r4
1326
+ else
1327
+ r5 = _nt_variable
1328
+ if r5
1329
+ r0 = r5
1330
+ else
1331
+ r6 = _nt_literal
1332
+ if r6
1333
+ r0 = r6
1334
+ else
1335
+ r7 = _nt_important
1336
+ if r7
1337
+ r0 = r7
1338
+ else
1339
+ @index = i0
1340
+ r0 = nil
1341
+ end
1342
+ end
1343
+ end
1344
+ end
1345
+ end
1346
+ end
1347
+ end
1348
+
1349
+ node_cache[:entity][start_index] = r0
1350
+
1351
+ r0
1352
+ end
1353
+
1354
+ module Fonts0
1355
+ def s
1356
+ elements[0]
1357
+ end
1358
+
1359
+ def s
1360
+ elements[2]
1361
+ end
1362
+
1363
+ def font
1364
+ elements[3]
1365
+ end
1366
+ end
1367
+
1368
+ module Fonts1
1369
+ def font
1370
+ elements[0]
1371
+ end
1372
+
1373
+ def family
1374
+ elements[1]
1375
+ end
1376
+ end
1377
+
1378
+ module Fonts2
1379
+ def build env
1380
+ fonts = ([font] + family.elements.map {|f| f.font }).map do |font|
1381
+ font.build env
1382
+ end
1383
+ env.identifiers.last << Node::FontFamily.new(fonts)
1384
+ end
1385
+ end
1386
+
1387
+ def _nt_fonts
1388
+ start_index = index
1389
+ if node_cache[:fonts].has_key?(index)
1390
+ cached = node_cache[:fonts][index]
1391
+ @index = cached.interval.end if cached
1392
+ return cached
1393
+ end
1394
+
1395
+ i0, s0 = index, []
1396
+ r1 = _nt_font
1397
+ s0 << r1
1398
+ if r1
1399
+ s2, i2 = [], index
1400
+ loop do
1401
+ i3, s3 = index, []
1402
+ r4 = _nt_s
1403
+ s3 << r4
1404
+ if r4
1405
+ if has_terminal?(',', false, index)
1406
+ r5 = instantiate_node(SyntaxNode,input, index...(index + 1))
1407
+ @index += 1
1408
+ else
1409
+ terminal_parse_failure(',')
1410
+ r5 = nil
1411
+ end
1412
+ s3 << r5
1413
+ if r5
1414
+ r6 = _nt_s
1415
+ s3 << r6
1416
+ if r6
1417
+ r7 = _nt_font
1418
+ s3 << r7
1419
+ end
1420
+ end
1421
+ end
1422
+ if s3.last
1423
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
1424
+ r3.extend(Fonts0)
1425
+ else
1426
+ @index = i3
1427
+ r3 = nil
1428
+ end
1429
+ if r3
1430
+ s2 << r3
1431
+ else
1432
+ break
1433
+ end
1434
+ end
1435
+ if s2.empty?
1436
+ @index = i2
1437
+ r2 = nil
1438
+ else
1439
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1440
+ end
1441
+ s0 << r2
1442
+ end
1443
+ if s0.last
1444
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1445
+ r0.extend(Fonts1)
1446
+ r0.extend(Fonts2)
1447
+ else
1448
+ @index = i0
1449
+ r0 = nil
1450
+ end
1451
+
1452
+ node_cache[:fonts][start_index] = r0
1453
+
1454
+ r0
1455
+ end
1456
+
1457
+ module Font0
1458
+ end
1459
+
1460
+ module Font1
1461
+ def build env
1462
+ Node::Keyword.new(text_value)
1463
+ end
1464
+ end
1465
+
1466
+ module Font2
1467
+ def build env
1468
+ Node::String.new(text_value)
1469
+ end
1470
+ end
1471
+
1472
+ def _nt_font
1473
+ start_index = index
1474
+ if node_cache[:font].has_key?(index)
1475
+ cached = node_cache[:font][index]
1476
+ @index = cached.interval.end if cached
1477
+ return cached
1478
+ end
1479
+
1480
+ i0 = index
1481
+ i1, s1 = index, []
1482
+ if has_terminal?('[a-zA-Z]', true, index)
1483
+ r2 = true
1484
+ @index += 1
1485
+ else
1486
+ r2 = nil
1487
+ end
1488
+ s1 << r2
1489
+ if r2
1490
+ s3, i3 = [], index
1491
+ loop do
1492
+ if has_terminal?('[-a-zA-Z0-9]', true, index)
1493
+ r4 = true
1494
+ @index += 1
1495
+ else
1496
+ r4 = nil
1497
+ end
1498
+ if r4
1499
+ s3 << r4
1500
+ else
1501
+ break
1502
+ end
1503
+ end
1504
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
1505
+ s1 << r3
1506
+ end
1507
+ if s1.last
1508
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
1509
+ r1.extend(Font0)
1510
+ r1.extend(Font1)
1511
+ else
1512
+ @index = i1
1513
+ r1 = nil
1514
+ end
1515
+ if r1
1516
+ r0 = r1
1517
+ else
1518
+ r5 = _nt_string
1519
+ r5.extend(Font2)
1520
+ if r5
1521
+ r0 = r5
1522
+ else
1523
+ @index = i0
1524
+ r0 = nil
1525
+ end
1526
+ end
1527
+
1528
+ node_cache[:font][start_index] = r0
1529
+
1530
+ r0
1531
+ end
1532
+
1533
+ module Ident0
1534
+ end
1535
+
1536
+ def _nt_ident
1537
+ start_index = index
1538
+ if node_cache[:ident].has_key?(index)
1539
+ cached = node_cache[:ident][index]
1540
+ @index = cached.interval.end if cached
1541
+ return cached
1542
+ end
1543
+
1544
+ i0, s0 = index, []
1545
+ if has_terminal?('-', false, index)
1546
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 1))
1547
+ @index += 1
1548
+ else
1549
+ terminal_parse_failure('-')
1550
+ r2 = nil
1551
+ end
1552
+ if r2
1553
+ r1 = r2
1554
+ else
1555
+ r1 = instantiate_node(SyntaxNode,input, index...index)
1556
+ end
1557
+ s0 << r1
1558
+ if r1
1559
+ s3, i3 = [], index
1560
+ loop do
1561
+ if has_terminal?('[-a-z0-9_]', true, index)
1562
+ r4 = true
1563
+ @index += 1
1564
+ else
1565
+ r4 = nil
1566
+ end
1567
+ if r4
1568
+ s3 << r4
1569
+ else
1570
+ break
1571
+ end
1572
+ end
1573
+ if s3.empty?
1574
+ @index = i3
1575
+ r3 = nil
1576
+ else
1577
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
1578
+ end
1579
+ s0 << r3
1580
+ end
1581
+ if s0.last
1582
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1583
+ r0.extend(Ident0)
1584
+ else
1585
+ @index = i0
1586
+ r0 = nil
1587
+ end
1588
+
1589
+ node_cache[:ident][start_index] = r0
1590
+
1591
+ r0
1592
+ end
1593
+
1594
+ module Variable0
1595
+ end
1596
+
1597
+ module Variable1
1598
+ def build env
1599
+ env.identifiers.last << env.nearest(text_value)
1600
+ end
1601
+ end
1602
+
1603
+ def _nt_variable
1604
+ start_index = index
1605
+ if node_cache[:variable].has_key?(index)
1606
+ cached = node_cache[:variable][index]
1607
+ @index = cached.interval.end if cached
1608
+ return cached
1609
+ end
1610
+
1611
+ i0, s0 = index, []
1612
+ if has_terminal?('@', false, index)
1613
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
1614
+ @index += 1
1615
+ else
1616
+ terminal_parse_failure('@')
1617
+ r1 = nil
1618
+ end
1619
+ s0 << r1
1620
+ if r1
1621
+ s2, i2 = [], index
1622
+ loop do
1623
+ if has_terminal?('[-a-zA-Z0-9_]', true, index)
1624
+ r3 = true
1625
+ @index += 1
1626
+ else
1627
+ r3 = nil
1628
+ end
1629
+ if r3
1630
+ s2 << r3
1631
+ else
1632
+ break
1633
+ end
1634
+ end
1635
+ if s2.empty?
1636
+ @index = i2
1637
+ r2 = nil
1638
+ else
1639
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1640
+ end
1641
+ s0 << r2
1642
+ end
1643
+ if s0.last
1644
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1645
+ r0.extend(Variable0)
1646
+ r0.extend(Variable1)
1647
+ else
1648
+ @index = i0
1649
+ r0 = nil
1650
+ end
1651
+
1652
+ node_cache[:variable][start_index] = r0
1653
+
1654
+ r0
1655
+ end
1656
+
1657
+ module Element0
1658
+ def ident
1659
+ elements[1]
1660
+ end
1661
+
1662
+ end
1663
+
1664
+ module Element1
1665
+ end
1666
+
1667
+ def _nt_element
1668
+ start_index = index
1669
+ if node_cache[:element].has_key?(index)
1670
+ cached = node_cache[:element][index]
1671
+ @index = cached.interval.end if cached
1672
+ return cached
1673
+ end
1674
+
1675
+ i0 = index
1676
+ i1, s1 = index, []
1677
+ i2 = index
1678
+ r3 = _nt_class_id
1679
+ if r3
1680
+ r2 = r3
1681
+ else
1682
+ r4 = _nt_tag
1683
+ if r4
1684
+ r2 = r4
1685
+ else
1686
+ r5 = _nt_ident
1687
+ if r5
1688
+ r2 = r5
1689
+ else
1690
+ @index = i2
1691
+ r2 = nil
1692
+ end
1693
+ end
1694
+ end
1695
+ s1 << r2
1696
+ if r2
1697
+ s6, i6 = [], index
1698
+ loop do
1699
+ r7 = _nt_attribute
1700
+ if r7
1701
+ s6 << r7
1702
+ else
1703
+ break
1704
+ end
1705
+ end
1706
+ r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
1707
+ s1 << r6
1708
+ if r6
1709
+ i9, s9 = index, []
1710
+ if has_terminal?('(', false, index)
1711
+ r10 = instantiate_node(SyntaxNode,input, index...(index + 1))
1712
+ @index += 1
1713
+ else
1714
+ terminal_parse_failure('(')
1715
+ r10 = nil
1716
+ end
1717
+ s9 << r10
1718
+ if r10
1719
+ r11 = _nt_ident
1720
+ s9 << r11
1721
+ if r11
1722
+ if has_terminal?(')', false, index)
1723
+ r12 = instantiate_node(SyntaxNode,input, index...(index + 1))
1724
+ @index += 1
1725
+ else
1726
+ terminal_parse_failure(')')
1727
+ r12 = nil
1728
+ end
1729
+ s9 << r12
1730
+ end
1731
+ end
1732
+ if s9.last
1733
+ r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
1734
+ r9.extend(Element0)
1735
+ else
1736
+ @index = i9
1737
+ r9 = nil
1738
+ end
1739
+ if r9
1740
+ r8 = r9
1741
+ else
1742
+ r8 = instantiate_node(SyntaxNode,input, index...index)
1743
+ end
1744
+ s1 << r8
1745
+ end
1746
+ end
1747
+ if s1.last
1748
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
1749
+ r1.extend(Element1)
1750
+ else
1751
+ @index = i1
1752
+ r1 = nil
1753
+ end
1754
+ if r1
1755
+ r0 = r1
1756
+ else
1757
+ if has_terminal?('@media', false, index)
1758
+ r13 = instantiate_node(SyntaxNode,input, index...(index + 6))
1759
+ @index += 6
1760
+ else
1761
+ terminal_parse_failure('@media')
1762
+ r13 = nil
1763
+ end
1764
+ if r13
1765
+ r0 = r13
1766
+ else
1767
+ if has_terminal?('@font-face', false, index)
1768
+ r14 = instantiate_node(SyntaxNode,input, index...(index + 10))
1769
+ @index += 10
1770
+ else
1771
+ terminal_parse_failure('@font-face')
1772
+ r14 = nil
1773
+ end
1774
+ if r14
1775
+ r0 = r14
1776
+ else
1777
+ @index = i0
1778
+ r0 = nil
1779
+ end
1780
+ end
1781
+ end
1782
+
1783
+ node_cache[:element][start_index] = r0
1784
+
1785
+ r0
1786
+ end
1787
+
1788
+ module ClassId0
1789
+ end
1790
+
1791
+ module ClassId1
1792
+ def id
1793
+ elements[1]
1794
+ end
1795
+ end
1796
+
1797
+ def _nt_class_id
1798
+ start_index = index
1799
+ if node_cache[:class_id].has_key?(index)
1800
+ cached = node_cache[:class_id][index]
1801
+ @index = cached.interval.end if cached
1802
+ return cached
1803
+ end
1804
+
1805
+ i0 = index
1806
+ i1, s1 = index, []
1807
+ r3 = _nt_tag
1808
+ if r3
1809
+ r2 = r3
1810
+ else
1811
+ r2 = instantiate_node(SyntaxNode,input, index...index)
1812
+ end
1813
+ s1 << r2
1814
+ if r2
1815
+ s4, i4 = [], index
1816
+ loop do
1817
+ r5 = _nt_class
1818
+ if r5
1819
+ s4 << r5
1820
+ else
1821
+ break
1822
+ end
1823
+ end
1824
+ if s4.empty?
1825
+ @index = i4
1826
+ r4 = nil
1827
+ else
1828
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
1829
+ end
1830
+ s1 << r4
1831
+ end
1832
+ if s1.last
1833
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
1834
+ r1.extend(ClassId0)
1835
+ else
1836
+ @index = i1
1837
+ r1 = nil
1838
+ end
1839
+ if r1
1840
+ r0 = r1
1841
+ else
1842
+ i6, s6 = index, []
1843
+ r8 = _nt_tag
1844
+ if r8
1845
+ r7 = r8
1846
+ else
1847
+ r7 = instantiate_node(SyntaxNode,input, index...index)
1848
+ end
1849
+ s6 << r7
1850
+ if r7
1851
+ r9 = _nt_id
1852
+ s6 << r9
1853
+ end
1854
+ if s6.last
1855
+ r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
1856
+ r6.extend(ClassId1)
1857
+ else
1858
+ @index = i6
1859
+ r6 = nil
1860
+ end
1861
+ if r6
1862
+ r0 = r6
1863
+ else
1864
+ @index = i0
1865
+ r0 = nil
1866
+ end
1867
+ end
1868
+
1869
+ node_cache[:class_id][start_index] = r0
1870
+
1871
+ r0
1872
+ end
1873
+
1874
+ module Attribute0
1875
+ end
1876
+
1877
+ module Attribute1
1878
+ end
1879
+
1880
+ def _nt_attribute
1881
+ start_index = index
1882
+ if node_cache[:attribute].has_key?(index)
1883
+ cached = node_cache[:attribute][index]
1884
+ @index = cached.interval.end if cached
1885
+ return cached
1886
+ end
1887
+
1888
+ i0, s0 = index, []
1889
+ if has_terminal?('[', false, index)
1890
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
1891
+ @index += 1
1892
+ else
1893
+ terminal_parse_failure('[')
1894
+ r1 = nil
1895
+ end
1896
+ s0 << r1
1897
+ if r1
1898
+ s2, i2 = [], index
1899
+ loop do
1900
+ if has_terminal?('[a-z]', true, index)
1901
+ r3 = true
1902
+ @index += 1
1903
+ else
1904
+ r3 = nil
1905
+ end
1906
+ if r3
1907
+ s2 << r3
1908
+ else
1909
+ break
1910
+ end
1911
+ end
1912
+ if s2.empty?
1913
+ @index = i2
1914
+ r2 = nil
1915
+ else
1916
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1917
+ end
1918
+ s0 << r2
1919
+ if r2
1920
+ i5, s5 = index, []
1921
+ if has_terminal?('[|~]', true, index)
1922
+ r7 = true
1923
+ @index += 1
1924
+ else
1925
+ r7 = nil
1926
+ end
1927
+ if r7
1928
+ r6 = r7
1929
+ else
1930
+ r6 = instantiate_node(SyntaxNode,input, index...index)
1931
+ end
1932
+ s5 << r6
1933
+ if r6
1934
+ if has_terminal?('=', false, index)
1935
+ r8 = instantiate_node(SyntaxNode,input, index...(index + 1))
1936
+ @index += 1
1937
+ else
1938
+ terminal_parse_failure('=')
1939
+ r8 = nil
1940
+ end
1941
+ s5 << r8
1942
+ end
1943
+ if s5.last
1944
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
1945
+ r5.extend(Attribute0)
1946
+ else
1947
+ @index = i5
1948
+ r5 = nil
1949
+ end
1950
+ if r5
1951
+ r4 = r5
1952
+ else
1953
+ r4 = instantiate_node(SyntaxNode,input, index...index)
1954
+ end
1955
+ s0 << r4
1956
+ if r4
1957
+ i9 = index
1958
+ r10 = _nt_tag
1959
+ if r10
1960
+ r9 = r10
1961
+ else
1962
+ r11 = _nt_string
1963
+ if r11
1964
+ r9 = r11
1965
+ else
1966
+ @index = i9
1967
+ r9 = nil
1968
+ end
1969
+ end
1970
+ s0 << r9
1971
+ if r9
1972
+ if has_terminal?(']', false, index)
1973
+ r12 = instantiate_node(SyntaxNode,input, index...(index + 1))
1974
+ @index += 1
1975
+ else
1976
+ terminal_parse_failure(']')
1977
+ r12 = nil
1978
+ end
1979
+ s0 << r12
1980
+ end
1981
+ end
1982
+ end
1983
+ end
1984
+ if s0.last
1985
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1986
+ r0.extend(Attribute1)
1987
+ else
1988
+ @index = i0
1989
+ r0 = nil
1990
+ end
1991
+
1992
+ node_cache[:attribute][start_index] = r0
1993
+
1994
+ r0
1995
+ end
1996
+
1997
+ module Class0
1998
+ end
1999
+
2000
+ def _nt_class
2001
+ start_index = index
2002
+ if node_cache[:class].has_key?(index)
2003
+ cached = node_cache[:class][index]
2004
+ @index = cached.interval.end if cached
2005
+ return cached
2006
+ end
2007
+
2008
+ i0, s0 = index, []
2009
+ if has_terminal?('.', false, index)
2010
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
2011
+ @index += 1
2012
+ else
2013
+ terminal_parse_failure('.')
2014
+ r1 = nil
2015
+ end
2016
+ s0 << r1
2017
+ if r1
2018
+ if has_terminal?('[_a-z]', true, index)
2019
+ r2 = true
2020
+ @index += 1
2021
+ else
2022
+ r2 = nil
2023
+ end
2024
+ s0 << r2
2025
+ if r2
2026
+ s3, i3 = [], index
2027
+ loop do
2028
+ if has_terminal?('[-a-zA-Z0-9_]', true, index)
2029
+ r4 = true
2030
+ @index += 1
2031
+ else
2032
+ r4 = nil
2033
+ end
2034
+ if r4
2035
+ s3 << r4
2036
+ else
2037
+ break
2038
+ end
2039
+ end
2040
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
2041
+ s0 << r3
2042
+ end
2043
+ end
2044
+ if s0.last
2045
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
2046
+ r0.extend(Class0)
2047
+ else
2048
+ @index = i0
2049
+ r0 = nil
2050
+ end
2051
+
2052
+ node_cache[:class][start_index] = r0
2053
+
2054
+ r0
2055
+ end
2056
+
2057
+ module Id0
2058
+ end
2059
+
2060
+ def _nt_id
2061
+ start_index = index
2062
+ if node_cache[:id].has_key?(index)
2063
+ cached = node_cache[:id][index]
2064
+ @index = cached.interval.end if cached
2065
+ return cached
2066
+ end
2067
+
2068
+ i0, s0 = index, []
2069
+ if has_terminal?('#', false, index)
2070
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
2071
+ @index += 1
2072
+ else
2073
+ terminal_parse_failure('#')
2074
+ r1 = nil
2075
+ end
2076
+ s0 << r1
2077
+ if r1
2078
+ if has_terminal?('[_a-z]', true, index)
2079
+ r2 = true
2080
+ @index += 1
2081
+ else
2082
+ r2 = nil
2083
+ end
2084
+ s0 << r2
2085
+ if r2
2086
+ s3, i3 = [], index
2087
+ loop do
2088
+ if has_terminal?('[-a-zA-Z0-9_]', true, index)
2089
+ r4 = true
2090
+ @index += 1
2091
+ else
2092
+ r4 = nil
2093
+ end
2094
+ if r4
2095
+ s3 << r4
2096
+ else
2097
+ break
2098
+ end
2099
+ end
2100
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
2101
+ s0 << r3
2102
+ end
2103
+ end
2104
+ if s0.last
2105
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
2106
+ r0.extend(Id0)
2107
+ else
2108
+ @index = i0
2109
+ r0 = nil
2110
+ end
2111
+
2112
+ node_cache[:id][start_index] = r0
2113
+
2114
+ r0
2115
+ end
2116
+
2117
+ module Tag0
2118
+ end
2119
+
2120
+ def _nt_tag
2121
+ start_index = index
2122
+ if node_cache[:tag].has_key?(index)
2123
+ cached = node_cache[:tag][index]
2124
+ @index = cached.interval.end if cached
2125
+ return cached
2126
+ end
2127
+
2128
+ i0 = index
2129
+ i1, s1 = index, []
2130
+ if has_terminal?('[a-zA-Z]', true, index)
2131
+ r2 = true
2132
+ @index += 1
2133
+ else
2134
+ r2 = nil
2135
+ end
2136
+ s1 << r2
2137
+ if r2
2138
+ s3, i3 = [], index
2139
+ loop do
2140
+ if has_terminal?('[-a-zA-Z]', true, index)
2141
+ r4 = true
2142
+ @index += 1
2143
+ else
2144
+ r4 = nil
2145
+ end
2146
+ if r4
2147
+ s3 << r4
2148
+ else
2149
+ break
2150
+ end
2151
+ end
2152
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
2153
+ s1 << r3
2154
+ if r3
2155
+ if has_terminal?('[0-9]', true, index)
2156
+ r6 = true
2157
+ @index += 1
2158
+ else
2159
+ r6 = nil
2160
+ end
2161
+ if r6
2162
+ r5 = r6
2163
+ else
2164
+ r5 = instantiate_node(SyntaxNode,input, index...index)
2165
+ end
2166
+ s1 << r5
2167
+ end
2168
+ end
2169
+ if s1.last
2170
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
2171
+ r1.extend(Tag0)
2172
+ else
2173
+ @index = i1
2174
+ r1 = nil
2175
+ end
2176
+ if r1
2177
+ r0 = r1
2178
+ else
2179
+ if has_terminal?('*', false, index)
2180
+ r7 = instantiate_node(SyntaxNode,input, index...(index + 1))
2181
+ @index += 1
2182
+ else
2183
+ terminal_parse_failure('*')
2184
+ r7 = nil
2185
+ end
2186
+ if r7
2187
+ r0 = r7
2188
+ else
2189
+ @index = i0
2190
+ r0 = nil
2191
+ end
2192
+ end
2193
+
2194
+ node_cache[:tag][start_index] = r0
2195
+
2196
+ r0
2197
+ end
2198
+
2199
+ module Select0
2200
+ def s
2201
+ elements[0]
2202
+ end
2203
+
2204
+ def s
2205
+ elements[2]
2206
+ end
2207
+ end
2208
+
2209
+ def _nt_select
2210
+ start_index = index
2211
+ if node_cache[:select].has_key?(index)
2212
+ cached = node_cache[:select][index]
2213
+ @index = cached.interval.end if cached
2214
+ return cached
2215
+ end
2216
+
2217
+ i1 = index
2218
+ i2, s2 = index, []
2219
+ r3 = _nt_s
2220
+ s2 << r3
2221
+ if r3
2222
+ if has_terminal?('[:+>]', true, index)
2223
+ r4 = true
2224
+ @index += 1
2225
+ else
2226
+ r4 = nil
2227
+ end
2228
+ s2 << r4
2229
+ if r4
2230
+ r5 = _nt_s
2231
+ s2 << r5
2232
+ end
2233
+ end
2234
+ if s2.last
2235
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
2236
+ r2.extend(Select0)
2237
+ else
2238
+ @index = i2
2239
+ r2 = nil
2240
+ end
2241
+ if r2
2242
+ r1 = r2
2243
+ else
2244
+ r6 = _nt_S
2245
+ if r6
2246
+ r1 = r6
2247
+ else
2248
+ @index = i1
2249
+ r1 = nil
2250
+ end
2251
+ end
2252
+ if r1
2253
+ r0 = r1
2254
+ else
2255
+ r0 = instantiate_node(SyntaxNode,input, index...index)
2256
+ end
2257
+
2258
+ node_cache[:select][start_index] = r0
2259
+
2260
+ r0
2261
+ end
2262
+
2263
+ module Accessor0
2264
+ def ident
2265
+ elements[0]
2266
+ end
2267
+
2268
+ def attr
2269
+ elements[2]
2270
+ end
2271
+
2272
+ end
2273
+
2274
+ module Accessor1
2275
+ def build env
2276
+ env.identifiers.last << env.nearest(ident.text_value)[attr.text_value.delete(%q["'])].evaluate
2277
+ end
2278
+ end
2279
+
2280
+ def _nt_accessor
2281
+ start_index = index
2282
+ if node_cache[:accessor].has_key?(index)
2283
+ cached = node_cache[:accessor][index]
2284
+ @index = cached.interval.end if cached
2285
+ return cached
2286
+ end
2287
+
2288
+ i0, s0 = index, []
2289
+ i1 = index
2290
+ r2 = _nt_class_id
2291
+ if r2
2292
+ r1 = r2
2293
+ else
2294
+ r3 = _nt_tag
2295
+ if r3
2296
+ r1 = r3
2297
+ else
2298
+ @index = i1
2299
+ r1 = nil
2300
+ end
2301
+ end
2302
+ s0 << r1
2303
+ if r1
2304
+ if has_terminal?('[', false, index)
2305
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
2306
+ @index += 1
2307
+ else
2308
+ terminal_parse_failure('[')
2309
+ r4 = nil
2310
+ end
2311
+ s0 << r4
2312
+ if r4
2313
+ i5 = index
2314
+ r6 = _nt_string
2315
+ if r6
2316
+ r5 = r6
2317
+ else
2318
+ r7 = _nt_variable
2319
+ if r7
2320
+ r5 = r7
2321
+ else
2322
+ @index = i5
2323
+ r5 = nil
2324
+ end
2325
+ end
2326
+ s0 << r5
2327
+ if r5
2328
+ if has_terminal?(']', false, index)
2329
+ r8 = instantiate_node(SyntaxNode,input, index...(index + 1))
2330
+ @index += 1
2331
+ else
2332
+ terminal_parse_failure(']')
2333
+ r8 = nil
2334
+ end
2335
+ s0 << r8
2336
+ end
2337
+ end
2338
+ end
2339
+ if s0.last
2340
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
2341
+ r0.extend(Accessor0)
2342
+ r0.extend(Accessor1)
2343
+ else
2344
+ @index = i0
2345
+ r0 = nil
2346
+ end
2347
+
2348
+ node_cache[:accessor][start_index] = r0
2349
+
2350
+ r0
2351
+ end
2352
+
2353
+ module Operator0
2354
+ def S
2355
+ elements[0]
2356
+ end
2357
+
2358
+ def S
2359
+ elements[2]
2360
+ end
2361
+ end
2362
+
2363
+ module Operator1
2364
+ def build env
2365
+ env.identifiers.last << Node::Operator.new(text_value.strip)
2366
+ end
2367
+ end
2368
+
2369
+ module Operator2
2370
+ def build env
2371
+ env.identifiers.last << Node::Operator.new(text_value)
2372
+ end
2373
+ end
2374
+
2375
+ def _nt_operator
2376
+ start_index = index
2377
+ if node_cache[:operator].has_key?(index)
2378
+ cached = node_cache[:operator][index]
2379
+ @index = cached.interval.end if cached
2380
+ return cached
2381
+ end
2382
+
2383
+ i0 = index
2384
+ i1, s1 = index, []
2385
+ r2 = _nt_S
2386
+ s1 << r2
2387
+ if r2
2388
+ if has_terminal?('[-+*/]', true, index)
2389
+ r3 = true
2390
+ @index += 1
2391
+ else
2392
+ r3 = nil
2393
+ end
2394
+ s1 << r3
2395
+ if r3
2396
+ r4 = _nt_S
2397
+ s1 << r4
2398
+ end
2399
+ end
2400
+ if s1.last
2401
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
2402
+ r1.extend(Operator0)
2403
+ r1.extend(Operator1)
2404
+ else
2405
+ @index = i1
2406
+ r1 = nil
2407
+ end
2408
+ if r1
2409
+ r0 = r1
2410
+ else
2411
+ if has_terminal?('[-+*/]', true, index)
2412
+ r5 = instantiate_node(SyntaxNode,input, index...(index + 1))
2413
+ r5.extend(Operator2)
2414
+ @index += 1
2415
+ else
2416
+ r5 = nil
2417
+ end
2418
+ if r5
2419
+ r0 = r5
2420
+ else
2421
+ @index = i0
2422
+ r0 = nil
2423
+ end
2424
+ end
2425
+
2426
+ node_cache[:operator][start_index] = r0
2427
+
2428
+ r0
2429
+ end
2430
+
2431
+ module Literal0
2432
+ def dimension
2433
+ elements[2]
2434
+ end
2435
+ end
2436
+
2437
+ module Literal1
2438
+ def build env
2439
+ env.identifiers.last << Node::Anonymous.new(text_value)
2440
+ end
2441
+ end
2442
+
2443
+ module Literal2
2444
+ def number
2445
+ elements[0]
2446
+ end
2447
+
2448
+ def unit
2449
+ elements[1]
2450
+ end
2451
+ end
2452
+
2453
+ module Literal3
2454
+ def build env
2455
+ env.identifiers.last << Node::Number.new(number.text_value, unit.text_value)
2456
+ end
2457
+ end
2458
+
2459
+ module Literal4
2460
+ def build env
2461
+ env.identifiers.last << Node::String.new(text_value)
2462
+ end
2463
+ end
2464
+
2465
+ def _nt_literal
2466
+ start_index = index
2467
+ if node_cache[:literal].has_key?(index)
2468
+ cached = node_cache[:literal][index]
2469
+ @index = cached.interval.end if cached
2470
+ return cached
2471
+ end
2472
+
2473
+ i0 = index
2474
+ r1 = _nt_color
2475
+ if r1
2476
+ r0 = r1
2477
+ else
2478
+ i2, s2 = index, []
2479
+ i3 = index
2480
+ r4 = _nt_dimension
2481
+ if r4
2482
+ r3 = r4
2483
+ else
2484
+ s5, i5 = [], index
2485
+ loop do
2486
+ if has_terminal?('[-a-z]', true, index)
2487
+ r6 = true
2488
+ @index += 1
2489
+ else
2490
+ r6 = nil
2491
+ end
2492
+ if r6
2493
+ s5 << r6
2494
+ else
2495
+ break
2496
+ end
2497
+ end
2498
+ if s5.empty?
2499
+ @index = i5
2500
+ r5 = nil
2501
+ else
2502
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
2503
+ end
2504
+ if r5
2505
+ r3 = r5
2506
+ else
2507
+ @index = i3
2508
+ r3 = nil
2509
+ end
2510
+ end
2511
+ s2 << r3
2512
+ if r3
2513
+ if has_terminal?('/', false, index)
2514
+ r7 = instantiate_node(SyntaxNode,input, index...(index + 1))
2515
+ @index += 1
2516
+ else
2517
+ terminal_parse_failure('/')
2518
+ r7 = nil
2519
+ end
2520
+ s2 << r7
2521
+ if r7
2522
+ r8 = _nt_dimension
2523
+ s2 << r8
2524
+ end
2525
+ end
2526
+ if s2.last
2527
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
2528
+ r2.extend(Literal0)
2529
+ r2.extend(Literal1)
2530
+ else
2531
+ @index = i2
2532
+ r2 = nil
2533
+ end
2534
+ if r2
2535
+ r0 = r2
2536
+ else
2537
+ i9, s9 = index, []
2538
+ r10 = _nt_number
2539
+ s9 << r10
2540
+ if r10
2541
+ r11 = _nt_unit
2542
+ s9 << r11
2543
+ end
2544
+ if s9.last
2545
+ r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
2546
+ r9.extend(Literal2)
2547
+ r9.extend(Literal3)
2548
+ else
2549
+ @index = i9
2550
+ r9 = nil
2551
+ end
2552
+ if r9
2553
+ r0 = r9
2554
+ else
2555
+ r12 = _nt_string
2556
+ r12.extend(Literal4)
2557
+ if r12
2558
+ r0 = r12
2559
+ else
2560
+ @index = i0
2561
+ r0 = nil
2562
+ end
2563
+ end
2564
+ end
2565
+ end
2566
+
2567
+ node_cache[:literal][start_index] = r0
2568
+
2569
+ r0
2570
+ end
2571
+
2572
+ module Important0
2573
+ def build env
2574
+ env.identifiers.last << Node::Keyword.new(text_value)
2575
+ end
2576
+ end
2577
+
2578
+ def _nt_important
2579
+ start_index = index
2580
+ if node_cache[:important].has_key?(index)
2581
+ cached = node_cache[:important][index]
2582
+ @index = cached.interval.end if cached
2583
+ return cached
2584
+ end
2585
+
2586
+ if has_terminal?('!important', false, index)
2587
+ r0 = instantiate_node(SyntaxNode,input, index...(index + 10))
2588
+ r0.extend(Important0)
2589
+ @index += 10
2590
+ else
2591
+ terminal_parse_failure('!important')
2592
+ r0 = nil
2593
+ end
2594
+
2595
+ node_cache[:important][start_index] = r0
2596
+
2597
+ r0
2598
+ end
2599
+
2600
+ module Keyword0
2601
+ end
2602
+
2603
+ module Keyword1
2604
+ def build env
2605
+ env.identifiers.last << Node::Keyword.new(text_value)
2606
+ end
2607
+ end
2608
+
2609
+ def _nt_keyword
2610
+ start_index = index
2611
+ if node_cache[:keyword].has_key?(index)
2612
+ cached = node_cache[:keyword][index]
2613
+ @index = cached.interval.end if cached
2614
+ return cached
2615
+ end
2616
+
2617
+ i0, s0 = index, []
2618
+ if has_terminal?('[a-zA-Z]', true, index)
2619
+ r1 = true
2620
+ @index += 1
2621
+ else
2622
+ r1 = nil
2623
+ end
2624
+ s0 << r1
2625
+ if r1
2626
+ s2, i2 = [], index
2627
+ loop do
2628
+ if has_terminal?('[-a-zA-Z]', true, index)
2629
+ r3 = true
2630
+ @index += 1
2631
+ else
2632
+ r3 = nil
2633
+ end
2634
+ if r3
2635
+ s2 << r3
2636
+ else
2637
+ break
2638
+ end
2639
+ end
2640
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
2641
+ s0 << r2
2642
+ if r2
2643
+ i4 = index
2644
+ r5 = _nt_ns
2645
+ if r5
2646
+ r4 = nil
2647
+ else
2648
+ @index = i4
2649
+ r4 = instantiate_node(SyntaxNode,input, index...index)
2650
+ end
2651
+ s0 << r4
2652
+ end
2653
+ end
2654
+ if s0.last
2655
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
2656
+ r0.extend(Keyword0)
2657
+ r0.extend(Keyword1)
2658
+ else
2659
+ @index = i0
2660
+ r0 = nil
2661
+ end
2662
+
2663
+ node_cache[:keyword][start_index] = r0
2664
+
2665
+ r0
2666
+ end
2667
+
2668
+ module String0
2669
+ end
2670
+
2671
+ module String1
2672
+ def content
2673
+ elements[1]
2674
+ end
2675
+
2676
+ end
2677
+
2678
+ module String2
2679
+ def value
2680
+ text_value[1...-1]
2681
+ end
2682
+ end
2683
+
2684
+ module String3
2685
+ end
2686
+
2687
+ module String4
2688
+ def content
2689
+ elements[1]
2690
+ end
2691
+
2692
+ end
2693
+
2694
+ module String5
2695
+ def value
2696
+ text_value[1...-1]
2697
+ end
2698
+ end
2699
+
2700
+ def _nt_string
2701
+ start_index = index
2702
+ if node_cache[:string].has_key?(index)
2703
+ cached = node_cache[:string][index]
2704
+ @index = cached.interval.end if cached
2705
+ return cached
2706
+ end
2707
+
2708
+ i0 = index
2709
+ i1, s1 = index, []
2710
+ if has_terminal?("'", false, index)
2711
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 1))
2712
+ @index += 1
2713
+ else
2714
+ terminal_parse_failure("'")
2715
+ r2 = nil
2716
+ end
2717
+ s1 << r2
2718
+ if r2
2719
+ s3, i3 = [], index
2720
+ loop do
2721
+ i4, s4 = index, []
2722
+ i5 = index
2723
+ if has_terminal?("'", false, index)
2724
+ r6 = instantiate_node(SyntaxNode,input, index...(index + 1))
2725
+ @index += 1
2726
+ else
2727
+ terminal_parse_failure("'")
2728
+ r6 = nil
2729
+ end
2730
+ if r6
2731
+ r5 = nil
2732
+ else
2733
+ @index = i5
2734
+ r5 = instantiate_node(SyntaxNode,input, index...index)
2735
+ end
2736
+ s4 << r5
2737
+ if r5
2738
+ if index < input_length
2739
+ r7 = instantiate_node(SyntaxNode,input, index...(index + 1))
2740
+ @index += 1
2741
+ else
2742
+ terminal_parse_failure("any character")
2743
+ r7 = nil
2744
+ end
2745
+ s4 << r7
2746
+ end
2747
+ if s4.last
2748
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
2749
+ r4.extend(String0)
2750
+ else
2751
+ @index = i4
2752
+ r4 = nil
2753
+ end
2754
+ if r4
2755
+ s3 << r4
2756
+ else
2757
+ break
2758
+ end
2759
+ end
2760
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
2761
+ s1 << r3
2762
+ if r3
2763
+ if has_terminal?("'", false, index)
2764
+ r8 = instantiate_node(SyntaxNode,input, index...(index + 1))
2765
+ @index += 1
2766
+ else
2767
+ terminal_parse_failure("'")
2768
+ r8 = nil
2769
+ end
2770
+ s1 << r8
2771
+ end
2772
+ end
2773
+ if s1.last
2774
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
2775
+ r1.extend(String1)
2776
+ r1.extend(String2)
2777
+ else
2778
+ @index = i1
2779
+ r1 = nil
2780
+ end
2781
+ if r1
2782
+ r0 = r1
2783
+ else
2784
+ i9, s9 = index, []
2785
+ if has_terminal?('["]', true, index)
2786
+ r10 = true
2787
+ @index += 1
2788
+ else
2789
+ r10 = nil
2790
+ end
2791
+ s9 << r10
2792
+ if r10
2793
+ s11, i11 = [], index
2794
+ loop do
2795
+ i12, s12 = index, []
2796
+ i13 = index
2797
+ if has_terminal?('["]', true, index)
2798
+ r14 = true
2799
+ @index += 1
2800
+ else
2801
+ r14 = nil
2802
+ end
2803
+ if r14
2804
+ r13 = nil
2805
+ else
2806
+ @index = i13
2807
+ r13 = instantiate_node(SyntaxNode,input, index...index)
2808
+ end
2809
+ s12 << r13
2810
+ if r13
2811
+ if index < input_length
2812
+ r15 = instantiate_node(SyntaxNode,input, index...(index + 1))
2813
+ @index += 1
2814
+ else
2815
+ terminal_parse_failure("any character")
2816
+ r15 = nil
2817
+ end
2818
+ s12 << r15
2819
+ end
2820
+ if s12.last
2821
+ r12 = instantiate_node(SyntaxNode,input, i12...index, s12)
2822
+ r12.extend(String3)
2823
+ else
2824
+ @index = i12
2825
+ r12 = nil
2826
+ end
2827
+ if r12
2828
+ s11 << r12
2829
+ else
2830
+ break
2831
+ end
2832
+ end
2833
+ r11 = instantiate_node(SyntaxNode,input, i11...index, s11)
2834
+ s9 << r11
2835
+ if r11
2836
+ if has_terminal?('["]', true, index)
2837
+ r16 = true
2838
+ @index += 1
2839
+ else
2840
+ r16 = nil
2841
+ end
2842
+ s9 << r16
2843
+ end
2844
+ end
2845
+ if s9.last
2846
+ r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
2847
+ r9.extend(String4)
2848
+ r9.extend(String5)
2849
+ else
2850
+ @index = i9
2851
+ r9 = nil
2852
+ end
2853
+ if r9
2854
+ r0 = r9
2855
+ else
2856
+ @index = i0
2857
+ r0 = nil
2858
+ end
2859
+ end
2860
+
2861
+ node_cache[:string][start_index] = r0
2862
+
2863
+ r0
2864
+ end
2865
+
2866
+ module Dimension0
2867
+ def number
2868
+ elements[0]
2869
+ end
2870
+
2871
+ def unit
2872
+ elements[1]
2873
+ end
2874
+ end
2875
+
2876
+ def _nt_dimension
2877
+ start_index = index
2878
+ if node_cache[:dimension].has_key?(index)
2879
+ cached = node_cache[:dimension][index]
2880
+ @index = cached.interval.end if cached
2881
+ return cached
2882
+ end
2883
+
2884
+ i0, s0 = index, []
2885
+ r1 = _nt_number
2886
+ s0 << r1
2887
+ if r1
2888
+ r2 = _nt_unit
2889
+ s0 << r2
2890
+ end
2891
+ if s0.last
2892
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
2893
+ r0.extend(Dimension0)
2894
+ else
2895
+ @index = i0
2896
+ r0 = nil
2897
+ end
2898
+
2899
+ node_cache[:dimension][start_index] = r0
2900
+
2901
+ r0
2902
+ end
2903
+
2904
+ module Number0
2905
+ end
2906
+
2907
+ module Number1
2908
+ end
2909
+
2910
+ def _nt_number
2911
+ start_index = index
2912
+ if node_cache[:number].has_key?(index)
2913
+ cached = node_cache[:number][index]
2914
+ @index = cached.interval.end if cached
2915
+ return cached
2916
+ end
2917
+
2918
+ i0 = index
2919
+ i1, s1 = index, []
2920
+ if has_terminal?('-', false, index)
2921
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
2922
+ @index += 1
2923
+ else
2924
+ terminal_parse_failure('-')
2925
+ r3 = nil
2926
+ end
2927
+ if r3
2928
+ r2 = r3
2929
+ else
2930
+ r2 = instantiate_node(SyntaxNode,input, index...index)
2931
+ end
2932
+ s1 << r2
2933
+ if r2
2934
+ s4, i4 = [], index
2935
+ loop do
2936
+ if has_terminal?('[0-9]', true, index)
2937
+ r5 = true
2938
+ @index += 1
2939
+ else
2940
+ r5 = nil
2941
+ end
2942
+ if r5
2943
+ s4 << r5
2944
+ else
2945
+ break
2946
+ end
2947
+ end
2948
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
2949
+ s1 << r4
2950
+ if r4
2951
+ if has_terminal?('.', false, index)
2952
+ r6 = instantiate_node(SyntaxNode,input, index...(index + 1))
2953
+ @index += 1
2954
+ else
2955
+ terminal_parse_failure('.')
2956
+ r6 = nil
2957
+ end
2958
+ s1 << r6
2959
+ if r6
2960
+ s7, i7 = [], index
2961
+ loop do
2962
+ if has_terminal?('[0-9]', true, index)
2963
+ r8 = true
2964
+ @index += 1
2965
+ else
2966
+ r8 = nil
2967
+ end
2968
+ if r8
2969
+ s7 << r8
2970
+ else
2971
+ break
2972
+ end
2973
+ end
2974
+ if s7.empty?
2975
+ @index = i7
2976
+ r7 = nil
2977
+ else
2978
+ r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
2979
+ end
2980
+ s1 << r7
2981
+ end
2982
+ end
2983
+ end
2984
+ if s1.last
2985
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
2986
+ r1.extend(Number0)
2987
+ else
2988
+ @index = i1
2989
+ r1 = nil
2990
+ end
2991
+ if r1
2992
+ r0 = r1
2993
+ else
2994
+ i9, s9 = index, []
2995
+ if has_terminal?('-', false, index)
2996
+ r11 = instantiate_node(SyntaxNode,input, index...(index + 1))
2997
+ @index += 1
2998
+ else
2999
+ terminal_parse_failure('-')
3000
+ r11 = nil
3001
+ end
3002
+ if r11
3003
+ r10 = r11
3004
+ else
3005
+ r10 = instantiate_node(SyntaxNode,input, index...index)
3006
+ end
3007
+ s9 << r10
3008
+ if r10
3009
+ s12, i12 = [], index
3010
+ loop do
3011
+ if has_terminal?('[0-9]', true, index)
3012
+ r13 = true
3013
+ @index += 1
3014
+ else
3015
+ r13 = nil
3016
+ end
3017
+ if r13
3018
+ s12 << r13
3019
+ else
3020
+ break
3021
+ end
3022
+ end
3023
+ if s12.empty?
3024
+ @index = i12
3025
+ r12 = nil
3026
+ else
3027
+ r12 = instantiate_node(SyntaxNode,input, i12...index, s12)
3028
+ end
3029
+ s9 << r12
3030
+ end
3031
+ if s9.last
3032
+ r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
3033
+ r9.extend(Number1)
3034
+ else
3035
+ @index = i9
3036
+ r9 = nil
3037
+ end
3038
+ if r9
3039
+ r0 = r9
3040
+ else
3041
+ @index = i0
3042
+ r0 = nil
3043
+ end
3044
+ end
3045
+
3046
+ node_cache[:number][start_index] = r0
3047
+
3048
+ r0
3049
+ end
3050
+
3051
+ def _nt_unit
3052
+ start_index = index
3053
+ if node_cache[:unit].has_key?(index)
3054
+ cached = node_cache[:unit][index]
3055
+ @index = cached.interval.end if cached
3056
+ return cached
3057
+ end
3058
+
3059
+ i1 = index
3060
+ if has_terminal?('px', false, index)
3061
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 2))
3062
+ @index += 2
3063
+ else
3064
+ terminal_parse_failure('px')
3065
+ r2 = nil
3066
+ end
3067
+ if r2
3068
+ r1 = r2
3069
+ else
3070
+ if has_terminal?('em', false, index)
3071
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 2))
3072
+ @index += 2
3073
+ else
3074
+ terminal_parse_failure('em')
3075
+ r3 = nil
3076
+ end
3077
+ if r3
3078
+ r1 = r3
3079
+ else
3080
+ if has_terminal?('pc', false, index)
3081
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 2))
3082
+ @index += 2
3083
+ else
3084
+ terminal_parse_failure('pc')
3085
+ r4 = nil
3086
+ end
3087
+ if r4
3088
+ r1 = r4
3089
+ else
3090
+ if has_terminal?('%', false, index)
3091
+ r5 = instantiate_node(SyntaxNode,input, index...(index + 1))
3092
+ @index += 1
3093
+ else
3094
+ terminal_parse_failure('%')
3095
+ r5 = nil
3096
+ end
3097
+ if r5
3098
+ r1 = r5
3099
+ else
3100
+ if has_terminal?('pt', false, index)
3101
+ r6 = instantiate_node(SyntaxNode,input, index...(index + 2))
3102
+ @index += 2
3103
+ else
3104
+ terminal_parse_failure('pt')
3105
+ r6 = nil
3106
+ end
3107
+ if r6
3108
+ r1 = r6
3109
+ else
3110
+ if has_terminal?('cm', false, index)
3111
+ r7 = instantiate_node(SyntaxNode,input, index...(index + 2))
3112
+ @index += 2
3113
+ else
3114
+ terminal_parse_failure('cm')
3115
+ r7 = nil
3116
+ end
3117
+ if r7
3118
+ r1 = r7
3119
+ else
3120
+ if has_terminal?('mm', false, index)
3121
+ r8 = instantiate_node(SyntaxNode,input, index...(index + 2))
3122
+ @index += 2
3123
+ else
3124
+ terminal_parse_failure('mm')
3125
+ r8 = nil
3126
+ end
3127
+ if r8
3128
+ r1 = r8
3129
+ else
3130
+ @index = i1
3131
+ r1 = nil
3132
+ end
3133
+ end
3134
+ end
3135
+ end
3136
+ end
3137
+ end
3138
+ end
3139
+ if r1
3140
+ r0 = r1
3141
+ else
3142
+ r0 = instantiate_node(SyntaxNode,input, index...index)
3143
+ end
3144
+
3145
+ node_cache[:unit][start_index] = r0
3146
+
3147
+ r0
3148
+ end
3149
+
3150
+ module Color0
3151
+ def hex
3152
+ elements[1]
3153
+ end
3154
+ end
3155
+
3156
+ module Color1
3157
+ def build env
3158
+ env.identifiers.last << Node::Color.new(hex.text_value)
3159
+ end
3160
+ end
3161
+
3162
+ module Color2
3163
+ end
3164
+
3165
+ module Color3
3166
+ def fn
3167
+ elements[0]
3168
+ end
3169
+
3170
+ def arguments
3171
+ elements[2]
3172
+ end
3173
+
3174
+ end
3175
+
3176
+ module Color4
3177
+ def build env
3178
+ args = arguments.build env
3179
+ env.identifiers.last << Node::Function.new(fn.text_value, args.flatten)
3180
+ end
3181
+ end
3182
+
3183
+ def _nt_color
3184
+ start_index = index
3185
+ if node_cache[:color].has_key?(index)
3186
+ cached = node_cache[:color][index]
3187
+ @index = cached.interval.end if cached
3188
+ return cached
3189
+ end
3190
+
3191
+ i0 = index
3192
+ i1, s1 = index, []
3193
+ if has_terminal?('#', false, index)
3194
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 1))
3195
+ @index += 1
3196
+ else
3197
+ terminal_parse_failure('#')
3198
+ r2 = nil
3199
+ end
3200
+ s1 << r2
3201
+ if r2
3202
+ r3 = _nt_hex
3203
+ s1 << r3
3204
+ end
3205
+ if s1.last
3206
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
3207
+ r1.extend(Color0)
3208
+ r1.extend(Color1)
3209
+ else
3210
+ @index = i1
3211
+ r1 = nil
3212
+ end
3213
+ if r1
3214
+ r0 = r1
3215
+ else
3216
+ i4, s4 = index, []
3217
+ i5, s5 = index, []
3218
+ i6 = index
3219
+ if has_terminal?('hsl', false, index)
3220
+ r7 = instantiate_node(SyntaxNode,input, index...(index + 3))
3221
+ @index += 3
3222
+ else
3223
+ terminal_parse_failure('hsl')
3224
+ r7 = nil
3225
+ end
3226
+ if r7
3227
+ r6 = r7
3228
+ else
3229
+ if has_terminal?('rgb', false, index)
3230
+ r8 = instantiate_node(SyntaxNode,input, index...(index + 3))
3231
+ @index += 3
3232
+ else
3233
+ terminal_parse_failure('rgb')
3234
+ r8 = nil
3235
+ end
3236
+ if r8
3237
+ r6 = r8
3238
+ else
3239
+ @index = i6
3240
+ r6 = nil
3241
+ end
3242
+ end
3243
+ s5 << r6
3244
+ if r6
3245
+ if has_terminal?('a', false, index)
3246
+ r10 = instantiate_node(SyntaxNode,input, index...(index + 1))
3247
+ @index += 1
3248
+ else
3249
+ terminal_parse_failure('a')
3250
+ r10 = nil
3251
+ end
3252
+ if r10
3253
+ r9 = r10
3254
+ else
3255
+ r9 = instantiate_node(SyntaxNode,input, index...index)
3256
+ end
3257
+ s5 << r9
3258
+ end
3259
+ if s5.last
3260
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
3261
+ r5.extend(Color2)
3262
+ else
3263
+ @index = i5
3264
+ r5 = nil
3265
+ end
3266
+ s4 << r5
3267
+ if r5
3268
+ if has_terminal?('(', false, index)
3269
+ r11 = instantiate_node(SyntaxNode,input, index...(index + 1))
3270
+ @index += 1
3271
+ else
3272
+ terminal_parse_failure('(')
3273
+ r11 = nil
3274
+ end
3275
+ s4 << r11
3276
+ if r11
3277
+ r12 = _nt_arguments
3278
+ s4 << r12
3279
+ if r12
3280
+ if has_terminal?(')', false, index)
3281
+ r13 = instantiate_node(SyntaxNode,input, index...(index + 1))
3282
+ @index += 1
3283
+ else
3284
+ terminal_parse_failure(')')
3285
+ r13 = nil
3286
+ end
3287
+ s4 << r13
3288
+ end
3289
+ end
3290
+ end
3291
+ if s4.last
3292
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
3293
+ r4.extend(Color3)
3294
+ r4.extend(Color4)
3295
+ else
3296
+ @index = i4
3297
+ r4 = nil
3298
+ end
3299
+ if r4
3300
+ r0 = r4
3301
+ else
3302
+ @index = i0
3303
+ r0 = nil
3304
+ end
3305
+ end
3306
+
3307
+ node_cache[:color][start_index] = r0
3308
+
3309
+ r0
3310
+ end
3311
+
3312
+ module Hex0
3313
+ end
3314
+
3315
+ def _nt_hex
3316
+ start_index = index
3317
+ if node_cache[:hex].has_key?(index)
3318
+ cached = node_cache[:hex][index]
3319
+ @index = cached.interval.end if cached
3320
+ return cached
3321
+ end
3322
+
3323
+ i0, s0 = index, []
3324
+ if has_terminal?('[a-fA-F0-9]', true, index)
3325
+ r1 = true
3326
+ @index += 1
3327
+ else
3328
+ r1 = nil
3329
+ end
3330
+ s0 << r1
3331
+ if r1
3332
+ if has_terminal?('[a-fA-F0-9]', true, index)
3333
+ r2 = true
3334
+ @index += 1
3335
+ else
3336
+ r2 = nil
3337
+ end
3338
+ s0 << r2
3339
+ if r2
3340
+ s3, i3 = [], index
3341
+ loop do
3342
+ if has_terminal?('[a-fA-F0-9]', true, index)
3343
+ r4 = true
3344
+ @index += 1
3345
+ else
3346
+ r4 = nil
3347
+ end
3348
+ if r4
3349
+ s3 << r4
3350
+ else
3351
+ break
3352
+ end
3353
+ end
3354
+ if s3.empty?
3355
+ @index = i3
3356
+ r3 = nil
3357
+ else
3358
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
3359
+ end
3360
+ s0 << r3
3361
+ end
3362
+ end
3363
+ if s0.last
3364
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
3365
+ r0.extend(Hex0)
3366
+ else
3367
+ @index = i0
3368
+ r0 = nil
3369
+ end
3370
+
3371
+ node_cache[:hex][start_index] = r0
3372
+
3373
+ r0
3374
+ end
3375
+
3376
+ module Function0
3377
+ def name
3378
+ elements[0]
3379
+ end
3380
+
3381
+ def arguments
3382
+ elements[2]
3383
+ end
3384
+
3385
+ end
3386
+
3387
+ module Function1
3388
+ def build env
3389
+ args = arguments.build env
3390
+ env.identifiers.last << Node::Function.new(name.text_value, [args].flatten)
3391
+ end
3392
+ end
3393
+
3394
+ def _nt_function
3395
+ start_index = index
3396
+ if node_cache[:function].has_key?(index)
3397
+ cached = node_cache[:function][index]
3398
+ @index = cached.interval.end if cached
3399
+ return cached
3400
+ end
3401
+
3402
+ i0, s0 = index, []
3403
+ s1, i1 = [], index
3404
+ loop do
3405
+ if has_terminal?('[-a-zA-Z_]', true, index)
3406
+ r2 = true
3407
+ @index += 1
3408
+ else
3409
+ r2 = nil
3410
+ end
3411
+ if r2
3412
+ s1 << r2
3413
+ else
3414
+ break
3415
+ end
3416
+ end
3417
+ if s1.empty?
3418
+ @index = i1
3419
+ r1 = nil
3420
+ else
3421
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
3422
+ end
3423
+ s0 << r1
3424
+ if r1
3425
+ if has_terminal?('(', false, index)
3426
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
3427
+ @index += 1
3428
+ else
3429
+ terminal_parse_failure('(')
3430
+ r3 = nil
3431
+ end
3432
+ s0 << r3
3433
+ if r3
3434
+ r4 = _nt_arguments
3435
+ s0 << r4
3436
+ if r4
3437
+ if has_terminal?(')', false, index)
3438
+ r5 = instantiate_node(SyntaxNode,input, index...(index + 1))
3439
+ @index += 1
3440
+ else
3441
+ terminal_parse_failure(')')
3442
+ r5 = nil
3443
+ end
3444
+ s0 << r5
3445
+ end
3446
+ end
3447
+ end
3448
+ if s0.last
3449
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
3450
+ r0.extend(Function0)
3451
+ r0.extend(Function1)
3452
+ else
3453
+ @index = i0
3454
+ r0 = nil
3455
+ end
3456
+
3457
+ node_cache[:function][start_index] = r0
3458
+
3459
+ r0
3460
+ end
3461
+
3462
+ module Arguments0
3463
+ def argument
3464
+ elements[0]
3465
+ end
3466
+
3467
+ def s
3468
+ elements[1]
3469
+ end
3470
+
3471
+ def s
3472
+ elements[3]
3473
+ end
3474
+
3475
+ def arguments
3476
+ elements[4]
3477
+ end
3478
+ end
3479
+
3480
+ module Arguments1
3481
+ def build env
3482
+ elements.map do |e|
3483
+ e.build env if e.respond_to? :build
3484
+ end.compact
3485
+ end
3486
+ end
3487
+
3488
+ def _nt_arguments
3489
+ start_index = index
3490
+ if node_cache[:arguments].has_key?(index)
3491
+ cached = node_cache[:arguments][index]
3492
+ @index = cached.interval.end if cached
3493
+ return cached
3494
+ end
3495
+
3496
+ i0 = index
3497
+ i1, s1 = index, []
3498
+ r2 = _nt_argument
3499
+ s1 << r2
3500
+ if r2
3501
+ r3 = _nt_s
3502
+ s1 << r3
3503
+ if r3
3504
+ if has_terminal?(',', false, index)
3505
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
3506
+ @index += 1
3507
+ else
3508
+ terminal_parse_failure(',')
3509
+ r4 = nil
3510
+ end
3511
+ s1 << r4
3512
+ if r4
3513
+ r5 = _nt_s
3514
+ s1 << r5
3515
+ if r5
3516
+ r6 = _nt_arguments
3517
+ s1 << r6
3518
+ end
3519
+ end
3520
+ end
3521
+ end
3522
+ if s1.last
3523
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
3524
+ r1.extend(Arguments0)
3525
+ r1.extend(Arguments1)
3526
+ else
3527
+ @index = i1
3528
+ r1 = nil
3529
+ end
3530
+ if r1
3531
+ r0 = r1
3532
+ else
3533
+ r7 = _nt_argument
3534
+ if r7
3535
+ r0 = r7
3536
+ else
3537
+ @index = i0
3538
+ r0 = nil
3539
+ end
3540
+ end
3541
+
3542
+ node_cache[:arguments][start_index] = r0
3543
+
3544
+ r0
3545
+ end
3546
+
3547
+ module Argument0
3548
+ def build env
3549
+ Node::Color.new text_value
3550
+ end
3551
+ end
3552
+
3553
+ module Argument1
3554
+ def number
3555
+ elements[0]
3556
+ end
3557
+
3558
+ def unit
3559
+ elements[1]
3560
+ end
3561
+ end
3562
+
3563
+ module Argument2
3564
+ def build env
3565
+ Node::Number.new number.text_value, unit.text_value
3566
+ end
3567
+ end
3568
+
3569
+ module Argument3
3570
+ def build env
3571
+ Node::String.new text_value
3572
+ end
3573
+ end
3574
+
3575
+ module Argument4
3576
+ def dimension
3577
+ elements[2]
3578
+ end
3579
+ end
3580
+
3581
+ module Argument5
3582
+ def build env
3583
+ Node::Anonymous.new text_value
3584
+ end
3585
+ end
3586
+
3587
+ module Argument6
3588
+ def build env
3589
+ Node::String.new text_value
3590
+ end
3591
+ end
3592
+
3593
+ def _nt_argument
3594
+ start_index = index
3595
+ if node_cache[:argument].has_key?(index)
3596
+ cached = node_cache[:argument][index]
3597
+ @index = cached.interval.end if cached
3598
+ return cached
3599
+ end
3600
+
3601
+ i0 = index
3602
+ r1 = _nt_color
3603
+ r1.extend(Argument0)
3604
+ if r1
3605
+ r0 = r1
3606
+ else
3607
+ i2, s2 = index, []
3608
+ r3 = _nt_number
3609
+ s2 << r3
3610
+ if r3
3611
+ r4 = _nt_unit
3612
+ s2 << r4
3613
+ end
3614
+ if s2.last
3615
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
3616
+ r2.extend(Argument1)
3617
+ r2.extend(Argument2)
3618
+ else
3619
+ @index = i2
3620
+ r2 = nil
3621
+ end
3622
+ if r2
3623
+ r0 = r2
3624
+ else
3625
+ r5 = _nt_string
3626
+ r5.extend(Argument3)
3627
+ if r5
3628
+ r0 = r5
3629
+ else
3630
+ i6, s6 = index, []
3631
+ s7, i7 = [], index
3632
+ loop do
3633
+ if has_terminal?('[a-zA-Z]', true, index)
3634
+ r8 = true
3635
+ @index += 1
3636
+ else
3637
+ r8 = nil
3638
+ end
3639
+ if r8
3640
+ s7 << r8
3641
+ else
3642
+ break
3643
+ end
3644
+ end
3645
+ if s7.empty?
3646
+ @index = i7
3647
+ r7 = nil
3648
+ else
3649
+ r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
3650
+ end
3651
+ s6 << r7
3652
+ if r7
3653
+ if has_terminal?('=', false, index)
3654
+ r9 = instantiate_node(SyntaxNode,input, index...(index + 1))
3655
+ @index += 1
3656
+ else
3657
+ terminal_parse_failure('=')
3658
+ r9 = nil
3659
+ end
3660
+ s6 << r9
3661
+ if r9
3662
+ r10 = _nt_dimension
3663
+ s6 << r10
3664
+ end
3665
+ end
3666
+ if s6.last
3667
+ r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
3668
+ r6.extend(Argument4)
3669
+ r6.extend(Argument5)
3670
+ else
3671
+ @index = i6
3672
+ r6 = nil
3673
+ end
3674
+ if r6
3675
+ r0 = r6
3676
+ else
3677
+ s11, i11 = [], index
3678
+ loop do
3679
+ if has_terminal?('[-a-zA-Z0-9_%$/.&=:;#+?]', true, index)
3680
+ r12 = true
3681
+ @index += 1
3682
+ else
3683
+ r12 = nil
3684
+ end
3685
+ if r12
3686
+ s11 << r12
3687
+ else
3688
+ break
3689
+ end
3690
+ end
3691
+ if s11.empty?
3692
+ @index = i11
3693
+ r11 = nil
3694
+ else
3695
+ r11 = instantiate_node(SyntaxNode,input, i11...index, s11)
3696
+ r11.extend(Argument6)
3697
+ end
3698
+ if r11
3699
+ r0 = r11
3700
+ else
3701
+ @index = i0
3702
+ r0 = nil
3703
+ end
3704
+ end
3705
+ end
3706
+ end
3707
+ end
3708
+
3709
+ node_cache[:argument][start_index] = r0
3710
+
3711
+ r0
3712
+ end
3713
+
3714
+ def _nt_s
3715
+ start_index = index
3716
+ if node_cache[:s].has_key?(index)
3717
+ cached = node_cache[:s][index]
3718
+ @index = cached.interval.end if cached
3719
+ return cached
3720
+ end
3721
+
3722
+ s0, i0 = [], index
3723
+ loop do
3724
+ if has_terminal?('[ ]', true, index)
3725
+ r1 = true
3726
+ @index += 1
3727
+ else
3728
+ r1 = nil
3729
+ end
3730
+ if r1
3731
+ s0 << r1
3732
+ else
3733
+ break
3734
+ end
3735
+ end
3736
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
3737
+
3738
+ node_cache[:s][start_index] = r0
3739
+
3740
+ r0
3741
+ end
3742
+
3743
+ def _nt_S
3744
+ start_index = index
3745
+ if node_cache[:S].has_key?(index)
3746
+ cached = node_cache[:S][index]
3747
+ @index = cached.interval.end if cached
3748
+ return cached
3749
+ end
3750
+
3751
+ s0, i0 = [], index
3752
+ loop do
3753
+ if has_terminal?('[ ]', true, index)
3754
+ r1 = true
3755
+ @index += 1
3756
+ else
3757
+ r1 = nil
3758
+ end
3759
+ if r1
3760
+ s0 << r1
3761
+ else
3762
+ break
3763
+ end
3764
+ end
3765
+ if s0.empty?
3766
+ @index = i0
3767
+ r0 = nil
3768
+ else
3769
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
3770
+ end
3771
+
3772
+ node_cache[:S][start_index] = r0
3773
+
3774
+ r0
3775
+ end
3776
+
3777
+ def _nt_ws
3778
+ start_index = index
3779
+ if node_cache[:ws].has_key?(index)
3780
+ cached = node_cache[:ws][index]
3781
+ @index = cached.interval.end if cached
3782
+ return cached
3783
+ end
3784
+
3785
+ s0, i0 = [], index
3786
+ loop do
3787
+ if has_terminal?('[\\n ]', true, index)
3788
+ r1 = true
3789
+ @index += 1
3790
+ else
3791
+ r1 = nil
3792
+ end
3793
+ if r1
3794
+ s0 << r1
3795
+ else
3796
+ break
3797
+ end
3798
+ end
3799
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
3800
+
3801
+ node_cache[:ws][start_index] = r0
3802
+
3803
+ r0
3804
+ end
3805
+
3806
+ module Ns0
3807
+ end
3808
+
3809
+ def _nt_ns
3810
+ start_index = index
3811
+ if node_cache[:ns].has_key?(index)
3812
+ cached = node_cache[:ns][index]
3813
+ @index = cached.interval.end if cached
3814
+ return cached
3815
+ end
3816
+
3817
+ i0, s0 = index, []
3818
+ i1 = index
3819
+ if has_terminal?('[ ;]', true, index)
3820
+ r2 = true
3821
+ @index += 1
3822
+ else
3823
+ r2 = nil
3824
+ end
3825
+ if r2
3826
+ r1 = nil
3827
+ else
3828
+ @index = i1
3829
+ r1 = instantiate_node(SyntaxNode,input, index...index)
3830
+ end
3831
+ s0 << r1
3832
+ if r1
3833
+ if index < input_length
3834
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
3835
+ @index += 1
3836
+ else
3837
+ terminal_parse_failure("any character")
3838
+ r3 = nil
3839
+ end
3840
+ s0 << r3
3841
+ end
3842
+ if s0.last
3843
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
3844
+ r0.extend(Ns0)
3845
+ else
3846
+ @index = i0
3847
+ r0 = nil
3848
+ end
3849
+
3850
+ node_cache[:ns][start_index] = r0
3851
+
3852
+ r0
3853
+ end
3854
+
3855
+ end
3856
+
3857
+ class LessParser < Treetop::Runtime::CompiledParser
3858
+ include Less
3859
+ end
3860
+