xdissent-less 0.8.12 → 1.0.0

Sign up to get free protection for your applications and to get access to all the features.
Files changed (66) hide show
  1. data/README.md +10 -1
  2. data/Rakefile +21 -2
  3. data/VERSION +1 -1
  4. data/bin/lessc +0 -8
  5. data/less.gemspec +48 -15
  6. data/lib/less/command.rb +24 -29
  7. data/lib/less/engine/builder.rb +13 -0
  8. data/lib/less/engine/less.tt +379 -0
  9. data/lib/less/engine/nodes/element.rb +153 -0
  10. data/lib/less/engine/nodes/entity.rb +59 -0
  11. data/lib/less/engine/nodes/function.rb +61 -0
  12. data/lib/less/engine/nodes/literal.rb +132 -0
  13. data/lib/less/engine/nodes/property.rb +120 -0
  14. data/lib/less/engine/nodes/selector.rb +39 -0
  15. data/lib/less/engine/nodes.rb +8 -0
  16. data/lib/less/engine/parser.rb +3854 -0
  17. data/lib/less/engine.rb +61 -118
  18. data/lib/less.rb +65 -10
  19. data/spec/command_spec.rb +2 -6
  20. data/spec/css/accessors-1.0.css +20 -0
  21. data/spec/css/big-1.0.css +3770 -0
  22. data/spec/css/comments-1.0.css +11 -0
  23. data/spec/css/css-1.0.css +40 -0
  24. data/spec/css/functions-1.0.css +8 -0
  25. data/spec/css/import-1.0.css +13 -0
  26. data/spec/css/mixins-1.0.css +30 -0
  27. data/spec/css/operations-1.0.css +30 -0
  28. data/spec/css/rulesets-1.0.css +19 -0
  29. data/spec/css/scope-1.0.css +16 -0
  30. data/spec/css/strings-1.0.css +14 -0
  31. data/spec/css/variables-1.0.css +7 -0
  32. data/spec/css/whitespace-1.0.css +11 -0
  33. data/spec/engine_spec.rb +66 -18
  34. data/spec/less/accessors-1.0.less +20 -0
  35. data/spec/less/big-1.0.less +4810 -0
  36. data/spec/less/colors-1.0.less +0 -0
  37. data/spec/less/comments-1.0.less +46 -0
  38. data/spec/less/css-1.0.less +82 -0
  39. data/spec/less/exceptions/mixed-units-error.less +0 -0
  40. data/spec/less/exceptions/name-error-1.0.less +0 -0
  41. data/spec/less/exceptions/syntax-error-1.0.less +0 -0
  42. data/spec/less/functions-1.0.less +6 -0
  43. data/spec/less/import/import-test-a.less +2 -0
  44. data/spec/less/import/import-test-b.less +8 -0
  45. data/spec/less/import/import-test-c.less +5 -0
  46. data/spec/less/import-1.0.less +7 -0
  47. data/spec/less/mixins-1.0.less +43 -0
  48. data/spec/less/operations-1.0.less +39 -0
  49. data/spec/less/rulesets-1.0.less +30 -0
  50. data/spec/less/scope-1.0.less +33 -0
  51. data/spec/less/strings-1.0.less +14 -0
  52. data/spec/less/variables-1.0.less +16 -0
  53. data/spec/less/whitespace-1.0.less +21 -0
  54. data/spec/spec.css +81 -24
  55. data/spec/spec.less +2 -3
  56. data/spec/spec_helper.rb +4 -1
  57. metadata +46 -13
  58. data/lib/less/tree.rb +0 -82
  59. data/spec/css/less-0.8.10.css +0 -30
  60. data/spec/css/less-0.8.11.css +0 -31
  61. data/spec/css/less-0.8.12.css +0 -28
  62. data/spec/css/less-0.8.5.css +0 -24
  63. data/spec/css/less-0.8.6.css +0 -24
  64. data/spec/css/less-0.8.7.css +0 -24
  65. data/spec/css/less-0.8.8.css +0 -25
  66. data/spec/tree_spec.rb +0 -5
@@ -0,0 +1,3854 @@
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
+ log "[mixin]: #{selectors.text_value}"
365
+ selectors.build(env, :path).each do |path|
366
+
367
+ rules = path.inject(env.root) do |current, node|
368
+ current.descend(node.selector, node) or raise MixinNameError, path.join
369
+ end.rules
370
+
371
+ env.rules += rules
372
+ end
373
+ end
374
+ end
375
+
376
+ def _nt_ruleset
377
+ start_index = index
378
+ if node_cache[:ruleset].has_key?(index)
379
+ cached = node_cache[:ruleset][index]
380
+ @index = cached.interval.end if cached
381
+ return cached
382
+ end
383
+
384
+ i0 = index
385
+ i1, s1 = index, []
386
+ r2 = _nt_selectors
387
+ s1 << r2
388
+ if r2
389
+ if has_terminal?("{", false, index)
390
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
391
+ @index += 1
392
+ else
393
+ terminal_parse_failure("{")
394
+ r3 = nil
395
+ end
396
+ s1 << r3
397
+ if r3
398
+ r4 = _nt_ws
399
+ s1 << r4
400
+ if r4
401
+ r5 = _nt_primary
402
+ s1 << r5
403
+ if r5
404
+ r6 = _nt_ws
405
+ s1 << r6
406
+ if r6
407
+ if has_terminal?("}", false, index)
408
+ r7 = instantiate_node(SyntaxNode,input, index...(index + 1))
409
+ @index += 1
410
+ else
411
+ terminal_parse_failure("}")
412
+ r7 = nil
413
+ end
414
+ s1 << r7
415
+ if r7
416
+ r8 = _nt_ws
417
+ s1 << r8
418
+ end
419
+ end
420
+ end
421
+ end
422
+ end
423
+ end
424
+ if s1.last
425
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
426
+ r1.extend(Ruleset0)
427
+ r1.extend(Ruleset1)
428
+ else
429
+ @index = i1
430
+ r1 = nil
431
+ end
432
+ if r1
433
+ r0 = r1
434
+ else
435
+ i9, s9 = index, []
436
+ r10 = _nt_ws
437
+ s9 << r10
438
+ if r10
439
+ r11 = _nt_selectors
440
+ s9 << r11
441
+ if r11
442
+ if has_terminal?(';', false, index)
443
+ r12 = instantiate_node(SyntaxNode,input, index...(index + 1))
444
+ @index += 1
445
+ else
446
+ terminal_parse_failure(';')
447
+ r12 = nil
448
+ end
449
+ s9 << r12
450
+ if r12
451
+ r13 = _nt_ws
452
+ s9 << r13
453
+ end
454
+ end
455
+ end
456
+ if s9.last
457
+ r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
458
+ r9.extend(Ruleset2)
459
+ r9.extend(Ruleset3)
460
+ else
461
+ @index = i9
462
+ r9 = nil
463
+ end
464
+ if r9
465
+ r0 = r9
466
+ else
467
+ @index = i0
468
+ r0 = nil
469
+ end
470
+ end
471
+
472
+ node_cache[:ruleset][start_index] = r0
473
+
474
+ r0
475
+ end
476
+
477
+ module Import0
478
+ def S
479
+ elements[1]
480
+ end
481
+
482
+ def url
483
+ elements[2]
484
+ end
485
+
486
+ def s
487
+ elements[4]
488
+ end
489
+
490
+ def ws
491
+ elements[6]
492
+ end
493
+ end
494
+
495
+ module Import1
496
+ def build env
497
+ path = File.join(env.root.file, url.value)
498
+ path += '.less' unless path =~ /\.less$/
499
+ if File.exist? path
500
+ log "\nimporting #{path}"
501
+ imported = Less::Engine.new(File.new path).to_tree
502
+ env.rules += imported.rules
503
+ else
504
+ raise ImportError, path
505
+ end
506
+ end
507
+ end
508
+
509
+ def _nt_import
510
+ start_index = index
511
+ if node_cache[:import].has_key?(index)
512
+ cached = node_cache[:import][index]
513
+ @index = cached.interval.end if cached
514
+ return cached
515
+ end
516
+
517
+ i0, s0 = index, []
518
+ if has_terminal?("@import", false, index)
519
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 7))
520
+ @index += 7
521
+ else
522
+ terminal_parse_failure("@import")
523
+ r1 = nil
524
+ end
525
+ s0 << r1
526
+ if r1
527
+ r2 = _nt_S
528
+ s0 << r2
529
+ if r2
530
+ i3 = index
531
+ r4 = _nt_string
532
+ if r4
533
+ r3 = r4
534
+ else
535
+ r5 = _nt_url
536
+ if r5
537
+ r3 = r5
538
+ else
539
+ @index = i3
540
+ r3 = nil
541
+ end
542
+ end
543
+ s0 << r3
544
+ if r3
545
+ r7 = _nt_medias
546
+ if r7
547
+ r6 = r7
548
+ else
549
+ r6 = instantiate_node(SyntaxNode,input, index...index)
550
+ end
551
+ s0 << r6
552
+ if r6
553
+ r8 = _nt_s
554
+ s0 << r8
555
+ if r8
556
+ if has_terminal?(';', false, index)
557
+ r9 = instantiate_node(SyntaxNode,input, index...(index + 1))
558
+ @index += 1
559
+ else
560
+ terminal_parse_failure(';')
561
+ r9 = nil
562
+ end
563
+ s0 << r9
564
+ if r9
565
+ r10 = _nt_ws
566
+ s0 << r10
567
+ end
568
+ end
569
+ end
570
+ end
571
+ end
572
+ end
573
+ if s0.last
574
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
575
+ r0.extend(Import0)
576
+ r0.extend(Import1)
577
+ else
578
+ @index = i0
579
+ r0 = nil
580
+ end
581
+
582
+ node_cache[:import][start_index] = r0
583
+
584
+ r0
585
+ end
586
+
587
+ module Url0
588
+ def path
589
+ elements[1]
590
+ end
591
+
592
+ end
593
+
594
+ module Url1
595
+ def build env = nil
596
+ Node::String.new(CGI.unescape path.text_value)
597
+ end
598
+
599
+ def value
600
+ build
601
+ end
602
+ end
603
+
604
+ def _nt_url
605
+ start_index = index
606
+ if node_cache[:url].has_key?(index)
607
+ cached = node_cache[:url][index]
608
+ @index = cached.interval.end if cached
609
+ return cached
610
+ end
611
+
612
+ i0, s0 = index, []
613
+ if has_terminal?('url(', false, index)
614
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 4))
615
+ @index += 4
616
+ else
617
+ terminal_parse_failure('url(')
618
+ r1 = nil
619
+ end
620
+ s0 << r1
621
+ if r1
622
+ i2 = index
623
+ r3 = _nt_string
624
+ if r3
625
+ r2 = r3
626
+ else
627
+ s4, i4 = [], index
628
+ loop do
629
+ if has_terminal?('[-a-zA-Z0-9_%$/.&=:;#+?]', true, index)
630
+ r5 = instantiate_node(SyntaxNode,input, index...(index + 1))
631
+ @index += 1
632
+ else
633
+ r5 = nil
634
+ end
635
+ if r5
636
+ s4 << r5
637
+ else
638
+ break
639
+ end
640
+ end
641
+ if s4.empty?
642
+ @index = i4
643
+ r4 = nil
644
+ else
645
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
646
+ end
647
+ if r4
648
+ r2 = r4
649
+ else
650
+ @index = i2
651
+ r2 = nil
652
+ end
653
+ end
654
+ s0 << r2
655
+ if r2
656
+ if has_terminal?(')', false, index)
657
+ r6 = instantiate_node(SyntaxNode,input, index...(index + 1))
658
+ @index += 1
659
+ else
660
+ terminal_parse_failure(')')
661
+ r6 = nil
662
+ end
663
+ s0 << r6
664
+ end
665
+ end
666
+ if s0.last
667
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
668
+ r0.extend(Url0)
669
+ r0.extend(Url1)
670
+ else
671
+ @index = i0
672
+ r0 = nil
673
+ end
674
+
675
+ node_cache[:url][start_index] = r0
676
+
677
+ r0
678
+ end
679
+
680
+ module Medias0
681
+ def s
682
+ elements[0]
683
+ end
684
+
685
+ def s
686
+ elements[2]
687
+ end
688
+
689
+ end
690
+
691
+ module Medias1
692
+ end
693
+
694
+ def _nt_medias
695
+ start_index = index
696
+ if node_cache[:medias].has_key?(index)
697
+ cached = node_cache[:medias][index]
698
+ @index = cached.interval.end if cached
699
+ return cached
700
+ end
701
+
702
+ i0, s0 = index, []
703
+ s1, i1 = [], index
704
+ loop do
705
+ if has_terminal?('[-a-z]', true, index)
706
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 1))
707
+ @index += 1
708
+ else
709
+ r2 = nil
710
+ end
711
+ if r2
712
+ s1 << r2
713
+ else
714
+ break
715
+ end
716
+ end
717
+ if s1.empty?
718
+ @index = i1
719
+ r1 = nil
720
+ else
721
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
722
+ end
723
+ s0 << r1
724
+ if r1
725
+ s3, i3 = [], index
726
+ loop do
727
+ i4, s4 = index, []
728
+ r5 = _nt_s
729
+ s4 << r5
730
+ if r5
731
+ if has_terminal?(',', false, index)
732
+ r6 = instantiate_node(SyntaxNode,input, index...(index + 1))
733
+ @index += 1
734
+ else
735
+ terminal_parse_failure(',')
736
+ r6 = nil
737
+ end
738
+ s4 << r6
739
+ if r6
740
+ r7 = _nt_s
741
+ s4 << r7
742
+ if r7
743
+ s8, i8 = [], index
744
+ loop do
745
+ if has_terminal?('[a-z]', true, index)
746
+ r9 = instantiate_node(SyntaxNode,input, index...(index + 1))
747
+ @index += 1
748
+ else
749
+ r9 = nil
750
+ end
751
+ if r9
752
+ s8 << r9
753
+ else
754
+ break
755
+ end
756
+ end
757
+ if s8.empty?
758
+ @index = i8
759
+ r8 = nil
760
+ else
761
+ r8 = instantiate_node(SyntaxNode,input, i8...index, s8)
762
+ end
763
+ s4 << r8
764
+ end
765
+ end
766
+ end
767
+ if s4.last
768
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
769
+ r4.extend(Medias0)
770
+ else
771
+ @index = i4
772
+ r4 = nil
773
+ end
774
+ if r4
775
+ s3 << r4
776
+ else
777
+ break
778
+ end
779
+ end
780
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
781
+ s0 << r3
782
+ end
783
+ if s0.last
784
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
785
+ r0.extend(Medias1)
786
+ else
787
+ @index = i0
788
+ r0 = nil
789
+ end
790
+
791
+ node_cache[:medias][start_index] = r0
792
+
793
+ r0
794
+ end
795
+
796
+ module Selectors0
797
+ def s
798
+ elements[0]
799
+ end
800
+
801
+ def ws
802
+ elements[2]
803
+ end
804
+
805
+ def selector
806
+ elements[3]
807
+ end
808
+ end
809
+
810
+ module Selectors1
811
+ def ws
812
+ elements[0]
813
+ end
814
+
815
+ def selector
816
+ elements[1]
817
+ end
818
+
819
+ def tail
820
+ elements[2]
821
+ end
822
+
823
+ def ws
824
+ elements[3]
825
+ end
826
+ end
827
+
828
+ module Selectors2
829
+ def build env, method
830
+ all.map do |e|
831
+ e.send(method, env) if e.respond_to? method
832
+ end.compact
833
+ end
834
+
835
+ def all
836
+ [selector] + tail.elements.map {|e| e.selector }
837
+ end
838
+ end
839
+
840
+ def _nt_selectors
841
+ start_index = index
842
+ if node_cache[:selectors].has_key?(index)
843
+ cached = node_cache[:selectors][index]
844
+ @index = cached.interval.end if cached
845
+ return cached
846
+ end
847
+
848
+ i0, s0 = index, []
849
+ r1 = _nt_ws
850
+ s0 << r1
851
+ if r1
852
+ r2 = _nt_selector
853
+ s0 << r2
854
+ if r2
855
+ s3, i3 = [], index
856
+ loop do
857
+ i4, s4 = index, []
858
+ r5 = _nt_s
859
+ s4 << r5
860
+ if r5
861
+ if has_terminal?(',', false, index)
862
+ r6 = instantiate_node(SyntaxNode,input, index...(index + 1))
863
+ @index += 1
864
+ else
865
+ terminal_parse_failure(',')
866
+ r6 = nil
867
+ end
868
+ s4 << r6
869
+ if r6
870
+ r7 = _nt_ws
871
+ s4 << r7
872
+ if r7
873
+ r8 = _nt_selector
874
+ s4 << r8
875
+ end
876
+ end
877
+ end
878
+ if s4.last
879
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
880
+ r4.extend(Selectors0)
881
+ else
882
+ @index = i4
883
+ r4 = nil
884
+ end
885
+ if r4
886
+ s3 << r4
887
+ else
888
+ break
889
+ end
890
+ end
891
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
892
+ s0 << r3
893
+ if r3
894
+ r9 = _nt_ws
895
+ s0 << r9
896
+ end
897
+ end
898
+ end
899
+ if s0.last
900
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
901
+ r0.extend(Selectors1)
902
+ r0.extend(Selectors2)
903
+ else
904
+ @index = i0
905
+ r0 = nil
906
+ end
907
+
908
+ node_cache[:selectors][start_index] = r0
909
+
910
+ r0
911
+ end
912
+
913
+ module Selector0
914
+ def s
915
+ elements[0]
916
+ end
917
+
918
+ def select
919
+ elements[1]
920
+ end
921
+
922
+ def element
923
+ elements[2]
924
+ end
925
+
926
+ def s
927
+ elements[3]
928
+ end
929
+ end
930
+
931
+ module Selector1
932
+ def tree env
933
+ log "\n% element: #{text_value}\n"
934
+ elements.inject(env) do |node, e|
935
+ node << Node::Element.new(e.element.text_value, e.select.text_value)
936
+ node.last
937
+ end
938
+ end
939
+
940
+ def path env
941
+ elements.map do |e|
942
+ Node::Element.new(e.element.text_value, e.select.text_value)
943
+ end
944
+ end
945
+ end
946
+
947
+ def _nt_selector
948
+ start_index = index
949
+ if node_cache[:selector].has_key?(index)
950
+ cached = node_cache[:selector][index]
951
+ @index = cached.interval.end if cached
952
+ return cached
953
+ end
954
+
955
+ s0, i0 = [], index
956
+ loop do
957
+ i1, s1 = index, []
958
+ r2 = _nt_s
959
+ s1 << r2
960
+ if r2
961
+ r3 = _nt_select
962
+ s1 << r3
963
+ if r3
964
+ r4 = _nt_element
965
+ s1 << r4
966
+ if r4
967
+ r5 = _nt_s
968
+ s1 << r5
969
+ end
970
+ end
971
+ end
972
+ if s1.last
973
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
974
+ r1.extend(Selector0)
975
+ else
976
+ @index = i1
977
+ r1 = nil
978
+ end
979
+ if r1
980
+ s0 << r1
981
+ else
982
+ break
983
+ end
984
+ end
985
+ if s0.empty?
986
+ @index = i0
987
+ r0 = nil
988
+ else
989
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
990
+ r0.extend(Selector1)
991
+ end
992
+
993
+ node_cache[:selector][start_index] = r0
994
+
995
+ r0
996
+ end
997
+
998
+ module Declaration0
999
+ def ws
1000
+ elements[0]
1001
+ end
1002
+
1003
+ end
1004
+
1005
+ module Declaration1
1006
+ def ws
1007
+ elements[0]
1008
+ end
1009
+
1010
+ def name
1011
+ elements[1]
1012
+ end
1013
+
1014
+ def s
1015
+ elements[2]
1016
+ end
1017
+
1018
+ def s
1019
+ elements[4]
1020
+ end
1021
+
1022
+ def expression
1023
+ elements[5]
1024
+ end
1025
+
1026
+ def s
1027
+ elements[6]
1028
+ end
1029
+
1030
+ def ws
1031
+ elements[8]
1032
+ end
1033
+ end
1034
+
1035
+ module Declaration2
1036
+ def build env
1037
+ env << (name.text_value =~ /^@/ ? Node::Variable : Node::Property).new(name.text_value)
1038
+ expression.build env
1039
+ end
1040
+ # Empty rule
1041
+ end
1042
+
1043
+ module Declaration3
1044
+ def ws
1045
+ elements[0]
1046
+ end
1047
+
1048
+ def ident
1049
+ elements[1]
1050
+ end
1051
+
1052
+ def s
1053
+ elements[2]
1054
+ end
1055
+
1056
+ def s
1057
+ elements[4]
1058
+ end
1059
+
1060
+ def ws
1061
+ elements[6]
1062
+ end
1063
+ end
1064
+
1065
+ def _nt_declaration
1066
+ start_index = index
1067
+ if node_cache[:declaration].has_key?(index)
1068
+ cached = node_cache[:declaration][index]
1069
+ @index = cached.interval.end if cached
1070
+ return cached
1071
+ end
1072
+
1073
+ i0 = index
1074
+ i1, s1 = index, []
1075
+ r2 = _nt_ws
1076
+ s1 << r2
1077
+ if r2
1078
+ i3 = index
1079
+ r4 = _nt_ident
1080
+ if r4
1081
+ r3 = r4
1082
+ else
1083
+ r5 = _nt_variable
1084
+ if r5
1085
+ r3 = r5
1086
+ else
1087
+ @index = i3
1088
+ r3 = nil
1089
+ end
1090
+ end
1091
+ s1 << r3
1092
+ if r3
1093
+ r6 = _nt_s
1094
+ s1 << r6
1095
+ if r6
1096
+ if has_terminal?(':', false, index)
1097
+ r7 = instantiate_node(SyntaxNode,input, index...(index + 1))
1098
+ @index += 1
1099
+ else
1100
+ terminal_parse_failure(':')
1101
+ r7 = nil
1102
+ end
1103
+ s1 << r7
1104
+ if r7
1105
+ r8 = _nt_s
1106
+ s1 << r8
1107
+ if r8
1108
+ r9 = _nt_expression
1109
+ s1 << r9
1110
+ if r9
1111
+ r10 = _nt_s
1112
+ s1 << r10
1113
+ if r10
1114
+ i11 = index
1115
+ if has_terminal?(';', false, index)
1116
+ r12 = instantiate_node(SyntaxNode,input, index...(index + 1))
1117
+ @index += 1
1118
+ else
1119
+ terminal_parse_failure(';')
1120
+ r12 = nil
1121
+ end
1122
+ if r12
1123
+ r11 = r12
1124
+ else
1125
+ i13, s13 = index, []
1126
+ r14 = _nt_ws
1127
+ s13 << r14
1128
+ if r14
1129
+ i15 = index
1130
+ if has_terminal?('}', false, index)
1131
+ r16 = instantiate_node(SyntaxNode,input, index...(index + 1))
1132
+ @index += 1
1133
+ else
1134
+ terminal_parse_failure('}')
1135
+ r16 = nil
1136
+ end
1137
+ if r16
1138
+ @index = i15
1139
+ r15 = instantiate_node(SyntaxNode,input, index...index)
1140
+ else
1141
+ r15 = nil
1142
+ end
1143
+ s13 << r15
1144
+ end
1145
+ if s13.last
1146
+ r13 = instantiate_node(SyntaxNode,input, i13...index, s13)
1147
+ r13.extend(Declaration0)
1148
+ else
1149
+ @index = i13
1150
+ r13 = nil
1151
+ end
1152
+ if r13
1153
+ r11 = r13
1154
+ else
1155
+ @index = i11
1156
+ r11 = nil
1157
+ end
1158
+ end
1159
+ s1 << r11
1160
+ if r11
1161
+ r17 = _nt_ws
1162
+ s1 << r17
1163
+ end
1164
+ end
1165
+ end
1166
+ end
1167
+ end
1168
+ end
1169
+ end
1170
+ end
1171
+ if s1.last
1172
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
1173
+ r1.extend(Declaration1)
1174
+ r1.extend(Declaration2)
1175
+ else
1176
+ @index = i1
1177
+ r1 = nil
1178
+ end
1179
+ if r1
1180
+ r0 = r1
1181
+ else
1182
+ i18, s18 = index, []
1183
+ r19 = _nt_ws
1184
+ s18 << r19
1185
+ if r19
1186
+ r20 = _nt_ident
1187
+ s18 << r20
1188
+ if r20
1189
+ r21 = _nt_s
1190
+ s18 << r21
1191
+ if r21
1192
+ if has_terminal?(':', false, index)
1193
+ r22 = instantiate_node(SyntaxNode,input, index...(index + 1))
1194
+ @index += 1
1195
+ else
1196
+ terminal_parse_failure(':')
1197
+ r22 = nil
1198
+ end
1199
+ s18 << r22
1200
+ if r22
1201
+ r23 = _nt_s
1202
+ s18 << r23
1203
+ if r23
1204
+ if has_terminal?(';', false, index)
1205
+ r24 = instantiate_node(SyntaxNode,input, index...(index + 1))
1206
+ @index += 1
1207
+ else
1208
+ terminal_parse_failure(';')
1209
+ r24 = nil
1210
+ end
1211
+ s18 << r24
1212
+ if r24
1213
+ r25 = _nt_ws
1214
+ s18 << r25
1215
+ end
1216
+ end
1217
+ end
1218
+ end
1219
+ end
1220
+ end
1221
+ if s18.last
1222
+ r18 = instantiate_node(SyntaxNode,input, i18...index, s18)
1223
+ r18.extend(Declaration3)
1224
+ else
1225
+ @index = i18
1226
+ r18 = nil
1227
+ end
1228
+ if r18
1229
+ r0 = r18
1230
+ else
1231
+ @index = i0
1232
+ r0 = nil
1233
+ end
1234
+ end
1235
+
1236
+ node_cache[:declaration][start_index] = r0
1237
+
1238
+ r0
1239
+ end
1240
+
1241
+ module Expression0
1242
+ def entity
1243
+ elements[0]
1244
+ end
1245
+
1246
+ def expression
1247
+ elements[2]
1248
+ end
1249
+ end
1250
+
1251
+ def _nt_expression
1252
+ start_index = index
1253
+ if node_cache[:expression].has_key?(index)
1254
+ cached = node_cache[:expression][index]
1255
+ @index = cached.interval.end if cached
1256
+ return cached
1257
+ end
1258
+
1259
+ i0 = index
1260
+ i1, s1 = index, []
1261
+ r2 = _nt_entity
1262
+ s1 << r2
1263
+ if r2
1264
+ i3 = index
1265
+ r4 = _nt_operator
1266
+ if r4
1267
+ r3 = r4
1268
+ else
1269
+ r5 = _nt_S
1270
+ if r5
1271
+ r3 = r5
1272
+ else
1273
+ @index = i3
1274
+ r3 = nil
1275
+ end
1276
+ end
1277
+ s1 << r3
1278
+ if r3
1279
+ r6 = _nt_expression
1280
+ s1 << r6
1281
+ end
1282
+ end
1283
+ if s1.last
1284
+ r1 = instantiate_node(Builder,input, i1...index, s1)
1285
+ r1.extend(Expression0)
1286
+ else
1287
+ @index = i1
1288
+ r1 = nil
1289
+ end
1290
+ if r1
1291
+ r0 = r1
1292
+ else
1293
+ r7 = _nt_entity
1294
+ if r7
1295
+ r0 = r7
1296
+ else
1297
+ @index = i0
1298
+ r0 = nil
1299
+ end
1300
+ end
1301
+
1302
+ node_cache[:expression][start_index] = r0
1303
+
1304
+ r0
1305
+ end
1306
+
1307
+ def _nt_entity
1308
+ start_index = index
1309
+ if node_cache[:entity].has_key?(index)
1310
+ cached = node_cache[:entity][index]
1311
+ @index = cached.interval.end if cached
1312
+ return cached
1313
+ end
1314
+
1315
+ i0 = index
1316
+ r1 = _nt_function
1317
+ if r1
1318
+ r0 = r1
1319
+ else
1320
+ r2 = _nt_fonts
1321
+ if r2
1322
+ r0 = r2
1323
+ else
1324
+ r3 = _nt_keyword
1325
+ if r3
1326
+ r0 = r3
1327
+ else
1328
+ r4 = _nt_accessor
1329
+ if r4
1330
+ r0 = r4
1331
+ else
1332
+ r5 = _nt_variable
1333
+ if r5
1334
+ r0 = r5
1335
+ else
1336
+ r6 = _nt_literal
1337
+ if r6
1338
+ r0 = r6
1339
+ else
1340
+ r7 = _nt_important
1341
+ if r7
1342
+ r0 = r7
1343
+ else
1344
+ @index = i0
1345
+ r0 = nil
1346
+ end
1347
+ end
1348
+ end
1349
+ end
1350
+ end
1351
+ end
1352
+ end
1353
+
1354
+ node_cache[:entity][start_index] = r0
1355
+
1356
+ r0
1357
+ end
1358
+
1359
+ module Fonts0
1360
+ def s
1361
+ elements[0]
1362
+ end
1363
+
1364
+ def s
1365
+ elements[2]
1366
+ end
1367
+
1368
+ def font
1369
+ elements[3]
1370
+ end
1371
+ end
1372
+
1373
+ module Fonts1
1374
+ def font
1375
+ elements[0]
1376
+ end
1377
+
1378
+ def family
1379
+ elements[1]
1380
+ end
1381
+ end
1382
+
1383
+ module Fonts2
1384
+ def build env
1385
+ fonts = ([font] + family.elements.map {|f| f.font }).map do |font|
1386
+ font.build env
1387
+ end
1388
+ env.identifiers.last << Node::FontFamily.new(fonts)
1389
+ end
1390
+ end
1391
+
1392
+ def _nt_fonts
1393
+ start_index = index
1394
+ if node_cache[:fonts].has_key?(index)
1395
+ cached = node_cache[:fonts][index]
1396
+ @index = cached.interval.end if cached
1397
+ return cached
1398
+ end
1399
+
1400
+ i0, s0 = index, []
1401
+ r1 = _nt_font
1402
+ s0 << r1
1403
+ if r1
1404
+ s2, i2 = [], index
1405
+ loop do
1406
+ i3, s3 = index, []
1407
+ r4 = _nt_s
1408
+ s3 << r4
1409
+ if r4
1410
+ if has_terminal?(',', false, index)
1411
+ r5 = instantiate_node(SyntaxNode,input, index...(index + 1))
1412
+ @index += 1
1413
+ else
1414
+ terminal_parse_failure(',')
1415
+ r5 = nil
1416
+ end
1417
+ s3 << r5
1418
+ if r5
1419
+ r6 = _nt_s
1420
+ s3 << r6
1421
+ if r6
1422
+ r7 = _nt_font
1423
+ s3 << r7
1424
+ end
1425
+ end
1426
+ end
1427
+ if s3.last
1428
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
1429
+ r3.extend(Fonts0)
1430
+ else
1431
+ @index = i3
1432
+ r3 = nil
1433
+ end
1434
+ if r3
1435
+ s2 << r3
1436
+ else
1437
+ break
1438
+ end
1439
+ end
1440
+ if s2.empty?
1441
+ @index = i2
1442
+ r2 = nil
1443
+ else
1444
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1445
+ end
1446
+ s0 << r2
1447
+ end
1448
+ if s0.last
1449
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1450
+ r0.extend(Fonts1)
1451
+ r0.extend(Fonts2)
1452
+ else
1453
+ @index = i0
1454
+ r0 = nil
1455
+ end
1456
+
1457
+ node_cache[:fonts][start_index] = r0
1458
+
1459
+ r0
1460
+ end
1461
+
1462
+ module Font0
1463
+ end
1464
+
1465
+ module Font1
1466
+ def build env
1467
+ Node::Keyword.new(text_value)
1468
+ end
1469
+ end
1470
+
1471
+ module Font2
1472
+ def build env
1473
+ Node::String.new(text_value)
1474
+ end
1475
+ end
1476
+
1477
+ def _nt_font
1478
+ start_index = index
1479
+ if node_cache[:font].has_key?(index)
1480
+ cached = node_cache[:font][index]
1481
+ @index = cached.interval.end if cached
1482
+ return cached
1483
+ end
1484
+
1485
+ i0 = index
1486
+ i1, s1 = index, []
1487
+ if has_terminal?('[a-zA-Z]', true, index)
1488
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 1))
1489
+ @index += 1
1490
+ else
1491
+ r2 = nil
1492
+ end
1493
+ s1 << r2
1494
+ if r2
1495
+ s3, i3 = [], index
1496
+ loop do
1497
+ if has_terminal?('[-a-zA-Z0-9]', true, index)
1498
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
1499
+ @index += 1
1500
+ else
1501
+ r4 = nil
1502
+ end
1503
+ if r4
1504
+ s3 << r4
1505
+ else
1506
+ break
1507
+ end
1508
+ end
1509
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
1510
+ s1 << r3
1511
+ end
1512
+ if s1.last
1513
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
1514
+ r1.extend(Font0)
1515
+ r1.extend(Font1)
1516
+ else
1517
+ @index = i1
1518
+ r1 = nil
1519
+ end
1520
+ if r1
1521
+ r0 = r1
1522
+ else
1523
+ r5 = _nt_string
1524
+ r5.extend(Font2)
1525
+ if r5
1526
+ r0 = r5
1527
+ else
1528
+ @index = i0
1529
+ r0 = nil
1530
+ end
1531
+ end
1532
+
1533
+ node_cache[:font][start_index] = r0
1534
+
1535
+ r0
1536
+ end
1537
+
1538
+ module Ident0
1539
+ end
1540
+
1541
+ def _nt_ident
1542
+ start_index = index
1543
+ if node_cache[:ident].has_key?(index)
1544
+ cached = node_cache[:ident][index]
1545
+ @index = cached.interval.end if cached
1546
+ return cached
1547
+ end
1548
+
1549
+ i0, s0 = index, []
1550
+ if has_terminal?('-', false, index)
1551
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 1))
1552
+ @index += 1
1553
+ else
1554
+ terminal_parse_failure('-')
1555
+ r2 = nil
1556
+ end
1557
+ if r2
1558
+ r1 = r2
1559
+ else
1560
+ r1 = instantiate_node(SyntaxNode,input, index...index)
1561
+ end
1562
+ s0 << r1
1563
+ if r1
1564
+ s3, i3 = [], index
1565
+ loop do
1566
+ if has_terminal?('[-a-z0-9_]', true, index)
1567
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
1568
+ @index += 1
1569
+ else
1570
+ r4 = nil
1571
+ end
1572
+ if r4
1573
+ s3 << r4
1574
+ else
1575
+ break
1576
+ end
1577
+ end
1578
+ if s3.empty?
1579
+ @index = i3
1580
+ r3 = nil
1581
+ else
1582
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
1583
+ end
1584
+ s0 << r3
1585
+ end
1586
+ if s0.last
1587
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1588
+ r0.extend(Ident0)
1589
+ else
1590
+ @index = i0
1591
+ r0 = nil
1592
+ end
1593
+
1594
+ node_cache[:ident][start_index] = r0
1595
+
1596
+ r0
1597
+ end
1598
+
1599
+ module Variable0
1600
+ end
1601
+
1602
+ module Variable1
1603
+ def build env
1604
+ env.identifiers.last << env.nearest(text_value)
1605
+ end
1606
+ end
1607
+
1608
+ def _nt_variable
1609
+ start_index = index
1610
+ if node_cache[:variable].has_key?(index)
1611
+ cached = node_cache[:variable][index]
1612
+ @index = cached.interval.end if cached
1613
+ return cached
1614
+ end
1615
+
1616
+ i0, s0 = index, []
1617
+ if has_terminal?('@', false, index)
1618
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
1619
+ @index += 1
1620
+ else
1621
+ terminal_parse_failure('@')
1622
+ r1 = nil
1623
+ end
1624
+ s0 << r1
1625
+ if r1
1626
+ s2, i2 = [], index
1627
+ loop do
1628
+ if has_terminal?('[-a-zA-Z0-9_]', true, index)
1629
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
1630
+ @index += 1
1631
+ else
1632
+ r3 = nil
1633
+ end
1634
+ if r3
1635
+ s2 << r3
1636
+ else
1637
+ break
1638
+ end
1639
+ end
1640
+ if s2.empty?
1641
+ @index = i2
1642
+ r2 = nil
1643
+ else
1644
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
1645
+ end
1646
+ s0 << r2
1647
+ end
1648
+ if s0.last
1649
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
1650
+ r0.extend(Variable0)
1651
+ r0.extend(Variable1)
1652
+ else
1653
+ @index = i0
1654
+ r0 = nil
1655
+ end
1656
+
1657
+ node_cache[:variable][start_index] = r0
1658
+
1659
+ r0
1660
+ end
1661
+
1662
+ module Element0
1663
+ def ident
1664
+ elements[1]
1665
+ end
1666
+
1667
+ end
1668
+
1669
+ module Element1
1670
+ end
1671
+
1672
+ def _nt_element
1673
+ start_index = index
1674
+ if node_cache[:element].has_key?(index)
1675
+ cached = node_cache[:element][index]
1676
+ @index = cached.interval.end if cached
1677
+ return cached
1678
+ end
1679
+
1680
+ i0 = index
1681
+ i1, s1 = index, []
1682
+ i2 = index
1683
+ r3 = _nt_class_id
1684
+ if r3
1685
+ r2 = r3
1686
+ else
1687
+ r4 = _nt_tag
1688
+ if r4
1689
+ r2 = r4
1690
+ else
1691
+ @index = i2
1692
+ r2 = nil
1693
+ end
1694
+ end
1695
+ s1 << r2
1696
+ if r2
1697
+ s5, i5 = [], index
1698
+ loop do
1699
+ r6 = _nt_attribute
1700
+ if r6
1701
+ s5 << r6
1702
+ else
1703
+ break
1704
+ end
1705
+ end
1706
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
1707
+ s1 << r5
1708
+ if r5
1709
+ i8, s8 = index, []
1710
+ if has_terminal?('(', false, index)
1711
+ r9 = instantiate_node(SyntaxNode,input, index...(index + 1))
1712
+ @index += 1
1713
+ else
1714
+ terminal_parse_failure('(')
1715
+ r9 = nil
1716
+ end
1717
+ s8 << r9
1718
+ if r9
1719
+ r10 = _nt_ident
1720
+ s8 << r10
1721
+ if r10
1722
+ if has_terminal?(')', false, index)
1723
+ r11 = instantiate_node(SyntaxNode,input, index...(index + 1))
1724
+ @index += 1
1725
+ else
1726
+ terminal_parse_failure(')')
1727
+ r11 = nil
1728
+ end
1729
+ s8 << r11
1730
+ end
1731
+ end
1732
+ if s8.last
1733
+ r8 = instantiate_node(SyntaxNode,input, i8...index, s8)
1734
+ r8.extend(Element0)
1735
+ else
1736
+ @index = i8
1737
+ r8 = nil
1738
+ end
1739
+ if r8
1740
+ r7 = r8
1741
+ else
1742
+ r7 = instantiate_node(SyntaxNode,input, index...index)
1743
+ end
1744
+ s1 << r7
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
+ r12 = instantiate_node(SyntaxNode,input, index...(index + 6))
1759
+ @index += 6
1760
+ else
1761
+ terminal_parse_failure('@media')
1762
+ r12 = nil
1763
+ end
1764
+ if r12
1765
+ r0 = r12
1766
+ else
1767
+ if has_terminal?('@font-face', false, index)
1768
+ r13 = instantiate_node(SyntaxNode,input, index...(index + 10))
1769
+ @index += 10
1770
+ else
1771
+ terminal_parse_failure('@font-face')
1772
+ r13 = nil
1773
+ end
1774
+ if r13
1775
+ r0 = r13
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 = instantiate_node(SyntaxNode,input, index...(index + 1))
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 = instantiate_node(SyntaxNode,input, index...(index + 1))
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 = instantiate_node(SyntaxNode,input, index...(index + 1))
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 = instantiate_node(SyntaxNode,input, index...(index + 1))
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 = instantiate_node(SyntaxNode,input, index...(index + 1))
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 = instantiate_node(SyntaxNode,input, index...(index + 1))
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 = instantiate_node(SyntaxNode,input, index...(index + 1))
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 = instantiate_node(SyntaxNode,input, index...(index + 1))
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 = instantiate_node(SyntaxNode,input, index...(index + 1))
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 = instantiate_node(SyntaxNode,input, index...(index + 1))
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 op
2359
+ elements[1]
2360
+ end
2361
+
2362
+ def S
2363
+ elements[2]
2364
+ end
2365
+ end
2366
+
2367
+ module Operator1
2368
+ def build env
2369
+ env.identifiers.last << Node::Operator.new(op.text_value)
2370
+ end
2371
+ end
2372
+
2373
+ module Operator2
2374
+ def build env
2375
+ env.identifiers.last << Node::Operator.new(text_value)
2376
+ end
2377
+ end
2378
+
2379
+ def _nt_operator
2380
+ start_index = index
2381
+ if node_cache[:operator].has_key?(index)
2382
+ cached = node_cache[:operator][index]
2383
+ @index = cached.interval.end if cached
2384
+ return cached
2385
+ end
2386
+
2387
+ i0 = index
2388
+ i1, s1 = index, []
2389
+ r2 = _nt_S
2390
+ s1 << r2
2391
+ if r2
2392
+ if has_terminal?('[-+*/]', true, index)
2393
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
2394
+ @index += 1
2395
+ else
2396
+ r3 = nil
2397
+ end
2398
+ s1 << r3
2399
+ if r3
2400
+ r4 = _nt_S
2401
+ s1 << r4
2402
+ end
2403
+ end
2404
+ if s1.last
2405
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
2406
+ r1.extend(Operator0)
2407
+ r1.extend(Operator1)
2408
+ else
2409
+ @index = i1
2410
+ r1 = nil
2411
+ end
2412
+ if r1
2413
+ r0 = r1
2414
+ else
2415
+ if has_terminal?('[-+*/]', true, index)
2416
+ r5 = instantiate_node(SyntaxNode,input, index...(index + 1))
2417
+ r5.extend(Operator2)
2418
+ @index += 1
2419
+ else
2420
+ r5 = nil
2421
+ end
2422
+ if r5
2423
+ r0 = r5
2424
+ else
2425
+ @index = i0
2426
+ r0 = nil
2427
+ end
2428
+ end
2429
+
2430
+ node_cache[:operator][start_index] = r0
2431
+
2432
+ r0
2433
+ end
2434
+
2435
+ module Literal0
2436
+ def dimension
2437
+ elements[2]
2438
+ end
2439
+ end
2440
+
2441
+ module Literal1
2442
+ def build env
2443
+ env.identifiers.last << Node::Anonymous.new(text_value)
2444
+ end
2445
+ end
2446
+
2447
+ module Literal2
2448
+ def number
2449
+ elements[0]
2450
+ end
2451
+
2452
+ def unit
2453
+ elements[1]
2454
+ end
2455
+ end
2456
+
2457
+ module Literal3
2458
+ def build env
2459
+ env.identifiers.last << Node::Number.new(number.text_value, unit.text_value)
2460
+ end
2461
+ end
2462
+
2463
+ module Literal4
2464
+ def build env
2465
+ env.identifiers.last << Node::String.new(text_value)
2466
+ end
2467
+ end
2468
+
2469
+ def _nt_literal
2470
+ start_index = index
2471
+ if node_cache[:literal].has_key?(index)
2472
+ cached = node_cache[:literal][index]
2473
+ @index = cached.interval.end if cached
2474
+ return cached
2475
+ end
2476
+
2477
+ i0 = index
2478
+ r1 = _nt_color
2479
+ if r1
2480
+ r0 = r1
2481
+ else
2482
+ i2, s2 = index, []
2483
+ i3 = index
2484
+ r4 = _nt_dimension
2485
+ if r4
2486
+ r3 = r4
2487
+ else
2488
+ s5, i5 = [], index
2489
+ loop do
2490
+ if has_terminal?('[-a-z]', true, index)
2491
+ r6 = instantiate_node(SyntaxNode,input, index...(index + 1))
2492
+ @index += 1
2493
+ else
2494
+ r6 = nil
2495
+ end
2496
+ if r6
2497
+ s5 << r6
2498
+ else
2499
+ break
2500
+ end
2501
+ end
2502
+ if s5.empty?
2503
+ @index = i5
2504
+ r5 = nil
2505
+ else
2506
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
2507
+ end
2508
+ if r5
2509
+ r3 = r5
2510
+ else
2511
+ @index = i3
2512
+ r3 = nil
2513
+ end
2514
+ end
2515
+ s2 << r3
2516
+ if r3
2517
+ if has_terminal?('/', false, index)
2518
+ r7 = instantiate_node(SyntaxNode,input, index...(index + 1))
2519
+ @index += 1
2520
+ else
2521
+ terminal_parse_failure('/')
2522
+ r7 = nil
2523
+ end
2524
+ s2 << r7
2525
+ if r7
2526
+ r8 = _nt_dimension
2527
+ s2 << r8
2528
+ end
2529
+ end
2530
+ if s2.last
2531
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
2532
+ r2.extend(Literal0)
2533
+ r2.extend(Literal1)
2534
+ else
2535
+ @index = i2
2536
+ r2 = nil
2537
+ end
2538
+ if r2
2539
+ r0 = r2
2540
+ else
2541
+ i9, s9 = index, []
2542
+ r10 = _nt_number
2543
+ s9 << r10
2544
+ if r10
2545
+ r11 = _nt_unit
2546
+ s9 << r11
2547
+ end
2548
+ if s9.last
2549
+ r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
2550
+ r9.extend(Literal2)
2551
+ r9.extend(Literal3)
2552
+ else
2553
+ @index = i9
2554
+ r9 = nil
2555
+ end
2556
+ if r9
2557
+ r0 = r9
2558
+ else
2559
+ r12 = _nt_string
2560
+ r12.extend(Literal4)
2561
+ if r12
2562
+ r0 = r12
2563
+ else
2564
+ @index = i0
2565
+ r0 = nil
2566
+ end
2567
+ end
2568
+ end
2569
+ end
2570
+
2571
+ node_cache[:literal][start_index] = r0
2572
+
2573
+ r0
2574
+ end
2575
+
2576
+ module Important0
2577
+ def build env
2578
+ env.identifiers.last << Node::Keyword.new(text_value)
2579
+ end
2580
+ end
2581
+
2582
+ def _nt_important
2583
+ start_index = index
2584
+ if node_cache[:important].has_key?(index)
2585
+ cached = node_cache[:important][index]
2586
+ @index = cached.interval.end if cached
2587
+ return cached
2588
+ end
2589
+
2590
+ if has_terminal?('!important', false, index)
2591
+ r0 = instantiate_node(SyntaxNode,input, index...(index + 10))
2592
+ r0.extend(Important0)
2593
+ @index += 10
2594
+ else
2595
+ terminal_parse_failure('!important')
2596
+ r0 = nil
2597
+ end
2598
+
2599
+ node_cache[:important][start_index] = r0
2600
+
2601
+ r0
2602
+ end
2603
+
2604
+ def _nt_empty
2605
+ start_index = index
2606
+ if node_cache[:empty].has_key?(index)
2607
+ cached = node_cache[:empty][index]
2608
+ @index = cached.interval.end if cached
2609
+ return cached
2610
+ end
2611
+
2612
+ if has_terminal?("", false, index)
2613
+ r0 = instantiate_node(Empty,input, index...(index + 0))
2614
+ @index += 0
2615
+ else
2616
+ terminal_parse_failure("")
2617
+ r0 = nil
2618
+ end
2619
+
2620
+ node_cache[:empty][start_index] = r0
2621
+
2622
+ r0
2623
+ end
2624
+
2625
+ module Keyword0
2626
+ end
2627
+
2628
+ module Keyword1
2629
+ def build env
2630
+ env.identifiers.last << Node::Keyword.new(text_value)
2631
+ end
2632
+ end
2633
+
2634
+ def _nt_keyword
2635
+ start_index = index
2636
+ if node_cache[:keyword].has_key?(index)
2637
+ cached = node_cache[:keyword][index]
2638
+ @index = cached.interval.end if cached
2639
+ return cached
2640
+ end
2641
+
2642
+ i0, s0 = index, []
2643
+ if has_terminal?('[a-zA-Z]', true, index)
2644
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
2645
+ @index += 1
2646
+ else
2647
+ r1 = nil
2648
+ end
2649
+ s0 << r1
2650
+ if r1
2651
+ s2, i2 = [], index
2652
+ loop do
2653
+ if has_terminal?('[-a-zA-Z]', true, index)
2654
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
2655
+ @index += 1
2656
+ else
2657
+ r3 = nil
2658
+ end
2659
+ if r3
2660
+ s2 << r3
2661
+ else
2662
+ break
2663
+ end
2664
+ end
2665
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
2666
+ s0 << r2
2667
+ if r2
2668
+ i4 = index
2669
+ r5 = _nt_ns
2670
+ if r5
2671
+ r4 = nil
2672
+ else
2673
+ @index = i4
2674
+ r4 = instantiate_node(SyntaxNode,input, index...index)
2675
+ end
2676
+ s0 << r4
2677
+ end
2678
+ end
2679
+ if s0.last
2680
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
2681
+ r0.extend(Keyword0)
2682
+ r0.extend(Keyword1)
2683
+ else
2684
+ @index = i0
2685
+ r0 = nil
2686
+ end
2687
+
2688
+ node_cache[:keyword][start_index] = r0
2689
+
2690
+ r0
2691
+ end
2692
+
2693
+ module String0
2694
+ end
2695
+
2696
+ module String1
2697
+ def content
2698
+ elements[1]
2699
+ end
2700
+
2701
+ end
2702
+
2703
+ module String2
2704
+ def value
2705
+ content.text_value
2706
+ end
2707
+ end
2708
+
2709
+ module String3
2710
+ end
2711
+
2712
+ module String4
2713
+ def content
2714
+ elements[1]
2715
+ end
2716
+
2717
+ end
2718
+
2719
+ module String5
2720
+ def value
2721
+ content.text_value
2722
+ end
2723
+ end
2724
+
2725
+ def _nt_string
2726
+ start_index = index
2727
+ if node_cache[:string].has_key?(index)
2728
+ cached = node_cache[:string][index]
2729
+ @index = cached.interval.end if cached
2730
+ return cached
2731
+ end
2732
+
2733
+ i0 = index
2734
+ i1, s1 = index, []
2735
+ if has_terminal?("'", false, index)
2736
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 1))
2737
+ @index += 1
2738
+ else
2739
+ terminal_parse_failure("'")
2740
+ r2 = nil
2741
+ end
2742
+ s1 << r2
2743
+ if r2
2744
+ s3, i3 = [], index
2745
+ loop do
2746
+ i4, s4 = index, []
2747
+ i5 = index
2748
+ if has_terminal?("'", false, index)
2749
+ r6 = instantiate_node(SyntaxNode,input, index...(index + 1))
2750
+ @index += 1
2751
+ else
2752
+ terminal_parse_failure("'")
2753
+ r6 = nil
2754
+ end
2755
+ if r6
2756
+ r5 = nil
2757
+ else
2758
+ @index = i5
2759
+ r5 = instantiate_node(SyntaxNode,input, index...index)
2760
+ end
2761
+ s4 << r5
2762
+ if r5
2763
+ if index < input_length
2764
+ r7 = instantiate_node(SyntaxNode,input, index...(index + 1))
2765
+ @index += 1
2766
+ else
2767
+ terminal_parse_failure("any character")
2768
+ r7 = nil
2769
+ end
2770
+ s4 << r7
2771
+ end
2772
+ if s4.last
2773
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
2774
+ r4.extend(String0)
2775
+ else
2776
+ @index = i4
2777
+ r4 = nil
2778
+ end
2779
+ if r4
2780
+ s3 << r4
2781
+ else
2782
+ break
2783
+ end
2784
+ end
2785
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
2786
+ s1 << r3
2787
+ if r3
2788
+ if has_terminal?("'", false, index)
2789
+ r8 = instantiate_node(SyntaxNode,input, index...(index + 1))
2790
+ @index += 1
2791
+ else
2792
+ terminal_parse_failure("'")
2793
+ r8 = nil
2794
+ end
2795
+ s1 << r8
2796
+ end
2797
+ end
2798
+ if s1.last
2799
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
2800
+ r1.extend(String1)
2801
+ r1.extend(String2)
2802
+ else
2803
+ @index = i1
2804
+ r1 = nil
2805
+ end
2806
+ if r1
2807
+ r0 = r1
2808
+ else
2809
+ i9, s9 = index, []
2810
+ if has_terminal?('["]', true, index)
2811
+ r10 = instantiate_node(SyntaxNode,input, index...(index + 1))
2812
+ @index += 1
2813
+ else
2814
+ r10 = nil
2815
+ end
2816
+ s9 << r10
2817
+ if r10
2818
+ s11, i11 = [], index
2819
+ loop do
2820
+ i12, s12 = index, []
2821
+ i13 = index
2822
+ if has_terminal?('["]', true, index)
2823
+ r14 = instantiate_node(SyntaxNode,input, index...(index + 1))
2824
+ @index += 1
2825
+ else
2826
+ r14 = nil
2827
+ end
2828
+ if r14
2829
+ r13 = nil
2830
+ else
2831
+ @index = i13
2832
+ r13 = instantiate_node(SyntaxNode,input, index...index)
2833
+ end
2834
+ s12 << r13
2835
+ if r13
2836
+ if index < input_length
2837
+ r15 = instantiate_node(SyntaxNode,input, index...(index + 1))
2838
+ @index += 1
2839
+ else
2840
+ terminal_parse_failure("any character")
2841
+ r15 = nil
2842
+ end
2843
+ s12 << r15
2844
+ end
2845
+ if s12.last
2846
+ r12 = instantiate_node(SyntaxNode,input, i12...index, s12)
2847
+ r12.extend(String3)
2848
+ else
2849
+ @index = i12
2850
+ r12 = nil
2851
+ end
2852
+ if r12
2853
+ s11 << r12
2854
+ else
2855
+ break
2856
+ end
2857
+ end
2858
+ r11 = instantiate_node(SyntaxNode,input, i11...index, s11)
2859
+ s9 << r11
2860
+ if r11
2861
+ if has_terminal?('["]', true, index)
2862
+ r16 = instantiate_node(SyntaxNode,input, index...(index + 1))
2863
+ @index += 1
2864
+ else
2865
+ r16 = nil
2866
+ end
2867
+ s9 << r16
2868
+ end
2869
+ end
2870
+ if s9.last
2871
+ r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
2872
+ r9.extend(String4)
2873
+ r9.extend(String5)
2874
+ else
2875
+ @index = i9
2876
+ r9 = nil
2877
+ end
2878
+ if r9
2879
+ r0 = r9
2880
+ else
2881
+ @index = i0
2882
+ r0 = nil
2883
+ end
2884
+ end
2885
+
2886
+ node_cache[:string][start_index] = r0
2887
+
2888
+ r0
2889
+ end
2890
+
2891
+ module Dimension0
2892
+ def number
2893
+ elements[0]
2894
+ end
2895
+
2896
+ def unit
2897
+ elements[1]
2898
+ end
2899
+ end
2900
+
2901
+ def _nt_dimension
2902
+ start_index = index
2903
+ if node_cache[:dimension].has_key?(index)
2904
+ cached = node_cache[:dimension][index]
2905
+ @index = cached.interval.end if cached
2906
+ return cached
2907
+ end
2908
+
2909
+ i0, s0 = index, []
2910
+ r1 = _nt_number
2911
+ s0 << r1
2912
+ if r1
2913
+ r2 = _nt_unit
2914
+ s0 << r2
2915
+ end
2916
+ if s0.last
2917
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
2918
+ r0.extend(Dimension0)
2919
+ else
2920
+ @index = i0
2921
+ r0 = nil
2922
+ end
2923
+
2924
+ node_cache[:dimension][start_index] = r0
2925
+
2926
+ r0
2927
+ end
2928
+
2929
+ module Number0
2930
+ end
2931
+
2932
+ module Number1
2933
+ end
2934
+
2935
+ def _nt_number
2936
+ start_index = index
2937
+ if node_cache[:number].has_key?(index)
2938
+ cached = node_cache[:number][index]
2939
+ @index = cached.interval.end if cached
2940
+ return cached
2941
+ end
2942
+
2943
+ i0 = index
2944
+ i1, s1 = index, []
2945
+ if has_terminal?('-', false, index)
2946
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
2947
+ @index += 1
2948
+ else
2949
+ terminal_parse_failure('-')
2950
+ r3 = nil
2951
+ end
2952
+ if r3
2953
+ r2 = r3
2954
+ else
2955
+ r2 = instantiate_node(SyntaxNode,input, index...index)
2956
+ end
2957
+ s1 << r2
2958
+ if r2
2959
+ s4, i4 = [], index
2960
+ loop do
2961
+ if has_terminal?('[0-9]', true, index)
2962
+ r5 = instantiate_node(SyntaxNode,input, index...(index + 1))
2963
+ @index += 1
2964
+ else
2965
+ r5 = nil
2966
+ end
2967
+ if r5
2968
+ s4 << r5
2969
+ else
2970
+ break
2971
+ end
2972
+ end
2973
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
2974
+ s1 << r4
2975
+ if r4
2976
+ if has_terminal?('.', false, index)
2977
+ r6 = instantiate_node(SyntaxNode,input, index...(index + 1))
2978
+ @index += 1
2979
+ else
2980
+ terminal_parse_failure('.')
2981
+ r6 = nil
2982
+ end
2983
+ s1 << r6
2984
+ if r6
2985
+ s7, i7 = [], index
2986
+ loop do
2987
+ if has_terminal?('[0-9]', true, index)
2988
+ r8 = instantiate_node(SyntaxNode,input, index...(index + 1))
2989
+ @index += 1
2990
+ else
2991
+ r8 = nil
2992
+ end
2993
+ if r8
2994
+ s7 << r8
2995
+ else
2996
+ break
2997
+ end
2998
+ end
2999
+ if s7.empty?
3000
+ @index = i7
3001
+ r7 = nil
3002
+ else
3003
+ r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
3004
+ end
3005
+ s1 << r7
3006
+ end
3007
+ end
3008
+ end
3009
+ if s1.last
3010
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
3011
+ r1.extend(Number0)
3012
+ else
3013
+ @index = i1
3014
+ r1 = nil
3015
+ end
3016
+ if r1
3017
+ r0 = r1
3018
+ else
3019
+ i9, s9 = index, []
3020
+ if has_terminal?('-', false, index)
3021
+ r11 = instantiate_node(SyntaxNode,input, index...(index + 1))
3022
+ @index += 1
3023
+ else
3024
+ terminal_parse_failure('-')
3025
+ r11 = nil
3026
+ end
3027
+ if r11
3028
+ r10 = r11
3029
+ else
3030
+ r10 = instantiate_node(SyntaxNode,input, index...index)
3031
+ end
3032
+ s9 << r10
3033
+ if r10
3034
+ s12, i12 = [], index
3035
+ loop do
3036
+ if has_terminal?('[0-9]', true, index)
3037
+ r13 = instantiate_node(SyntaxNode,input, index...(index + 1))
3038
+ @index += 1
3039
+ else
3040
+ r13 = nil
3041
+ end
3042
+ if r13
3043
+ s12 << r13
3044
+ else
3045
+ break
3046
+ end
3047
+ end
3048
+ if s12.empty?
3049
+ @index = i12
3050
+ r12 = nil
3051
+ else
3052
+ r12 = instantiate_node(SyntaxNode,input, i12...index, s12)
3053
+ end
3054
+ s9 << r12
3055
+ end
3056
+ if s9.last
3057
+ r9 = instantiate_node(SyntaxNode,input, i9...index, s9)
3058
+ r9.extend(Number1)
3059
+ else
3060
+ @index = i9
3061
+ r9 = nil
3062
+ end
3063
+ if r9
3064
+ r0 = r9
3065
+ else
3066
+ @index = i0
3067
+ r0 = nil
3068
+ end
3069
+ end
3070
+
3071
+ node_cache[:number][start_index] = r0
3072
+
3073
+ r0
3074
+ end
3075
+
3076
+ def _nt_unit
3077
+ start_index = index
3078
+ if node_cache[:unit].has_key?(index)
3079
+ cached = node_cache[:unit][index]
3080
+ @index = cached.interval.end if cached
3081
+ return cached
3082
+ end
3083
+
3084
+ i1 = index
3085
+ if has_terminal?('px', false, index)
3086
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 2))
3087
+ @index += 2
3088
+ else
3089
+ terminal_parse_failure('px')
3090
+ r2 = nil
3091
+ end
3092
+ if r2
3093
+ r1 = r2
3094
+ else
3095
+ if has_terminal?('em', false, index)
3096
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 2))
3097
+ @index += 2
3098
+ else
3099
+ terminal_parse_failure('em')
3100
+ r3 = nil
3101
+ end
3102
+ if r3
3103
+ r1 = r3
3104
+ else
3105
+ if has_terminal?('pc', false, index)
3106
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 2))
3107
+ @index += 2
3108
+ else
3109
+ terminal_parse_failure('pc')
3110
+ r4 = nil
3111
+ end
3112
+ if r4
3113
+ r1 = r4
3114
+ else
3115
+ if has_terminal?('%', false, index)
3116
+ r5 = instantiate_node(SyntaxNode,input, index...(index + 1))
3117
+ @index += 1
3118
+ else
3119
+ terminal_parse_failure('%')
3120
+ r5 = nil
3121
+ end
3122
+ if r5
3123
+ r1 = r5
3124
+ else
3125
+ if has_terminal?('pt', false, index)
3126
+ r6 = instantiate_node(SyntaxNode,input, index...(index + 2))
3127
+ @index += 2
3128
+ else
3129
+ terminal_parse_failure('pt')
3130
+ r6 = nil
3131
+ end
3132
+ if r6
3133
+ r1 = r6
3134
+ else
3135
+ if has_terminal?('cm', false, index)
3136
+ r7 = instantiate_node(SyntaxNode,input, index...(index + 2))
3137
+ @index += 2
3138
+ else
3139
+ terminal_parse_failure('cm')
3140
+ r7 = nil
3141
+ end
3142
+ if r7
3143
+ r1 = r7
3144
+ else
3145
+ if has_terminal?('mm', false, index)
3146
+ r8 = instantiate_node(SyntaxNode,input, index...(index + 2))
3147
+ @index += 2
3148
+ else
3149
+ terminal_parse_failure('mm')
3150
+ r8 = nil
3151
+ end
3152
+ if r8
3153
+ r1 = r8
3154
+ else
3155
+ @index = i1
3156
+ r1 = nil
3157
+ end
3158
+ end
3159
+ end
3160
+ end
3161
+ end
3162
+ end
3163
+ end
3164
+ if r1
3165
+ r0 = r1
3166
+ else
3167
+ r0 = instantiate_node(SyntaxNode,input, index...index)
3168
+ end
3169
+
3170
+ node_cache[:unit][start_index] = r0
3171
+
3172
+ r0
3173
+ end
3174
+
3175
+ module Color0
3176
+ def hex
3177
+ elements[1]
3178
+ end
3179
+ end
3180
+
3181
+ module Color1
3182
+ def build env
3183
+ env.identifiers.last << Node::Color.new(hex.text_value)
3184
+ end
3185
+ end
3186
+
3187
+ module Color2
3188
+ end
3189
+
3190
+ module Color3
3191
+ def fn
3192
+ elements[0]
3193
+ end
3194
+
3195
+ def arguments
3196
+ elements[2]
3197
+ end
3198
+
3199
+ end
3200
+
3201
+ module Color4
3202
+ def build env
3203
+ args = arguments.build env
3204
+ env.identifiers.last << Node::Function.new(fn.text_value, args.flatten)
3205
+ end
3206
+ end
3207
+
3208
+ def _nt_color
3209
+ start_index = index
3210
+ if node_cache[:color].has_key?(index)
3211
+ cached = node_cache[:color][index]
3212
+ @index = cached.interval.end if cached
3213
+ return cached
3214
+ end
3215
+
3216
+ i0 = index
3217
+ i1, s1 = index, []
3218
+ if has_terminal?('#', false, index)
3219
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 1))
3220
+ @index += 1
3221
+ else
3222
+ terminal_parse_failure('#')
3223
+ r2 = nil
3224
+ end
3225
+ s1 << r2
3226
+ if r2
3227
+ r3 = _nt_hex
3228
+ s1 << r3
3229
+ end
3230
+ if s1.last
3231
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
3232
+ r1.extend(Color0)
3233
+ r1.extend(Color1)
3234
+ else
3235
+ @index = i1
3236
+ r1 = nil
3237
+ end
3238
+ if r1
3239
+ r0 = r1
3240
+ else
3241
+ i4, s4 = index, []
3242
+ i5, s5 = index, []
3243
+ i6 = index
3244
+ if has_terminal?('hsl', false, index)
3245
+ r7 = instantiate_node(SyntaxNode,input, index...(index + 3))
3246
+ @index += 3
3247
+ else
3248
+ terminal_parse_failure('hsl')
3249
+ r7 = nil
3250
+ end
3251
+ if r7
3252
+ r6 = r7
3253
+ else
3254
+ if has_terminal?('rgb', false, index)
3255
+ r8 = instantiate_node(SyntaxNode,input, index...(index + 3))
3256
+ @index += 3
3257
+ else
3258
+ terminal_parse_failure('rgb')
3259
+ r8 = nil
3260
+ end
3261
+ if r8
3262
+ r6 = r8
3263
+ else
3264
+ @index = i6
3265
+ r6 = nil
3266
+ end
3267
+ end
3268
+ s5 << r6
3269
+ if r6
3270
+ if has_terminal?('a', false, index)
3271
+ r10 = instantiate_node(SyntaxNode,input, index...(index + 1))
3272
+ @index += 1
3273
+ else
3274
+ terminal_parse_failure('a')
3275
+ r10 = nil
3276
+ end
3277
+ if r10
3278
+ r9 = r10
3279
+ else
3280
+ r9 = instantiate_node(SyntaxNode,input, index...index)
3281
+ end
3282
+ s5 << r9
3283
+ end
3284
+ if s5.last
3285
+ r5 = instantiate_node(SyntaxNode,input, i5...index, s5)
3286
+ r5.extend(Color2)
3287
+ else
3288
+ @index = i5
3289
+ r5 = nil
3290
+ end
3291
+ s4 << r5
3292
+ if r5
3293
+ if has_terminal?('(', false, index)
3294
+ r11 = instantiate_node(SyntaxNode,input, index...(index + 1))
3295
+ @index += 1
3296
+ else
3297
+ terminal_parse_failure('(')
3298
+ r11 = nil
3299
+ end
3300
+ s4 << r11
3301
+ if r11
3302
+ r12 = _nt_arguments
3303
+ s4 << r12
3304
+ if r12
3305
+ if has_terminal?(')', false, index)
3306
+ r13 = instantiate_node(SyntaxNode,input, index...(index + 1))
3307
+ @index += 1
3308
+ else
3309
+ terminal_parse_failure(')')
3310
+ r13 = nil
3311
+ end
3312
+ s4 << r13
3313
+ end
3314
+ end
3315
+ end
3316
+ if s4.last
3317
+ r4 = instantiate_node(SyntaxNode,input, i4...index, s4)
3318
+ r4.extend(Color3)
3319
+ r4.extend(Color4)
3320
+ else
3321
+ @index = i4
3322
+ r4 = nil
3323
+ end
3324
+ if r4
3325
+ r0 = r4
3326
+ else
3327
+ @index = i0
3328
+ r0 = nil
3329
+ end
3330
+ end
3331
+
3332
+ node_cache[:color][start_index] = r0
3333
+
3334
+ r0
3335
+ end
3336
+
3337
+ module Hex0
3338
+ end
3339
+
3340
+ def _nt_hex
3341
+ start_index = index
3342
+ if node_cache[:hex].has_key?(index)
3343
+ cached = node_cache[:hex][index]
3344
+ @index = cached.interval.end if cached
3345
+ return cached
3346
+ end
3347
+
3348
+ i0, s0 = index, []
3349
+ if has_terminal?('[a-fA-F0-9]', true, index)
3350
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
3351
+ @index += 1
3352
+ else
3353
+ r1 = nil
3354
+ end
3355
+ s0 << r1
3356
+ if r1
3357
+ if has_terminal?('[a-fA-F0-9]', true, index)
3358
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 1))
3359
+ @index += 1
3360
+ else
3361
+ r2 = nil
3362
+ end
3363
+ s0 << r2
3364
+ if r2
3365
+ s3, i3 = [], index
3366
+ loop do
3367
+ if has_terminal?('[a-fA-F0-9]', true, index)
3368
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
3369
+ @index += 1
3370
+ else
3371
+ r4 = nil
3372
+ end
3373
+ if r4
3374
+ s3 << r4
3375
+ else
3376
+ break
3377
+ end
3378
+ end
3379
+ if s3.empty?
3380
+ @index = i3
3381
+ r3 = nil
3382
+ else
3383
+ r3 = instantiate_node(SyntaxNode,input, i3...index, s3)
3384
+ end
3385
+ s0 << r3
3386
+ end
3387
+ end
3388
+ if s0.last
3389
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
3390
+ r0.extend(Hex0)
3391
+ else
3392
+ @index = i0
3393
+ r0 = nil
3394
+ end
3395
+
3396
+ node_cache[:hex][start_index] = r0
3397
+
3398
+ r0
3399
+ end
3400
+
3401
+ module Function0
3402
+ def name
3403
+ elements[0]
3404
+ end
3405
+
3406
+ def arguments
3407
+ elements[2]
3408
+ end
3409
+
3410
+ end
3411
+
3412
+ module Function1
3413
+ def build env
3414
+ args = arguments.build env
3415
+ env.identifiers.last << Node::Function.new(name.text_value, [args].flatten)
3416
+ end
3417
+ end
3418
+
3419
+ def _nt_function
3420
+ start_index = index
3421
+ if node_cache[:function].has_key?(index)
3422
+ cached = node_cache[:function][index]
3423
+ @index = cached.interval.end if cached
3424
+ return cached
3425
+ end
3426
+
3427
+ i0, s0 = index, []
3428
+ s1, i1 = [], index
3429
+ loop do
3430
+ if has_terminal?('[-a-zA-Z_]', true, index)
3431
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 1))
3432
+ @index += 1
3433
+ else
3434
+ r2 = nil
3435
+ end
3436
+ if r2
3437
+ s1 << r2
3438
+ else
3439
+ break
3440
+ end
3441
+ end
3442
+ if s1.empty?
3443
+ @index = i1
3444
+ r1 = nil
3445
+ else
3446
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
3447
+ end
3448
+ s0 << r1
3449
+ if r1
3450
+ if has_terminal?('(', false, index)
3451
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
3452
+ @index += 1
3453
+ else
3454
+ terminal_parse_failure('(')
3455
+ r3 = nil
3456
+ end
3457
+ s0 << r3
3458
+ if r3
3459
+ r4 = _nt_arguments
3460
+ s0 << r4
3461
+ if r4
3462
+ if has_terminal?(')', false, index)
3463
+ r5 = instantiate_node(SyntaxNode,input, index...(index + 1))
3464
+ @index += 1
3465
+ else
3466
+ terminal_parse_failure(')')
3467
+ r5 = nil
3468
+ end
3469
+ s0 << r5
3470
+ end
3471
+ end
3472
+ end
3473
+ if s0.last
3474
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
3475
+ r0.extend(Function0)
3476
+ r0.extend(Function1)
3477
+ else
3478
+ @index = i0
3479
+ r0 = nil
3480
+ end
3481
+
3482
+ node_cache[:function][start_index] = r0
3483
+
3484
+ r0
3485
+ end
3486
+
3487
+ module Arguments0
3488
+ def argument
3489
+ elements[0]
3490
+ end
3491
+
3492
+ def s
3493
+ elements[1]
3494
+ end
3495
+
3496
+ def s
3497
+ elements[3]
3498
+ end
3499
+
3500
+ def arguments
3501
+ elements[4]
3502
+ end
3503
+ end
3504
+
3505
+ module Arguments1
3506
+ def build env
3507
+ elements.map do |e|
3508
+ e.build env if e.respond_to? :build
3509
+ end.compact
3510
+ end
3511
+ end
3512
+
3513
+ def _nt_arguments
3514
+ start_index = index
3515
+ if node_cache[:arguments].has_key?(index)
3516
+ cached = node_cache[:arguments][index]
3517
+ @index = cached.interval.end if cached
3518
+ return cached
3519
+ end
3520
+
3521
+ i0 = index
3522
+ i1, s1 = index, []
3523
+ r2 = _nt_argument
3524
+ s1 << r2
3525
+ if r2
3526
+ r3 = _nt_s
3527
+ s1 << r3
3528
+ if r3
3529
+ if has_terminal?(',', false, index)
3530
+ r4 = instantiate_node(SyntaxNode,input, index...(index + 1))
3531
+ @index += 1
3532
+ else
3533
+ terminal_parse_failure(',')
3534
+ r4 = nil
3535
+ end
3536
+ s1 << r4
3537
+ if r4
3538
+ r5 = _nt_s
3539
+ s1 << r5
3540
+ if r5
3541
+ r6 = _nt_arguments
3542
+ s1 << r6
3543
+ end
3544
+ end
3545
+ end
3546
+ end
3547
+ if s1.last
3548
+ r1 = instantiate_node(SyntaxNode,input, i1...index, s1)
3549
+ r1.extend(Arguments0)
3550
+ r1.extend(Arguments1)
3551
+ else
3552
+ @index = i1
3553
+ r1 = nil
3554
+ end
3555
+ if r1
3556
+ r0 = r1
3557
+ else
3558
+ r7 = _nt_argument
3559
+ if r7
3560
+ r0 = r7
3561
+ else
3562
+ @index = i0
3563
+ r0 = nil
3564
+ end
3565
+ end
3566
+
3567
+ node_cache[:arguments][start_index] = r0
3568
+
3569
+ r0
3570
+ end
3571
+
3572
+ module Argument0
3573
+ def build env
3574
+ Node::Color.new text_value
3575
+ end
3576
+ end
3577
+
3578
+ module Argument1
3579
+ def number
3580
+ elements[0]
3581
+ end
3582
+
3583
+ def unit
3584
+ elements[1]
3585
+ end
3586
+ end
3587
+
3588
+ module Argument2
3589
+ def build env
3590
+ Node::Number.new number.text_value, unit.text_value
3591
+ end
3592
+ end
3593
+
3594
+ module Argument3
3595
+ def build env
3596
+ Node::String.new text_value
3597
+ end
3598
+ end
3599
+
3600
+ module Argument4
3601
+ def dimension
3602
+ elements[2]
3603
+ end
3604
+ end
3605
+
3606
+ module Argument5
3607
+ def build env
3608
+ Node::Anonymous.new text_value
3609
+ end
3610
+ end
3611
+
3612
+ def _nt_argument
3613
+ start_index = index
3614
+ if node_cache[:argument].has_key?(index)
3615
+ cached = node_cache[:argument][index]
3616
+ @index = cached.interval.end if cached
3617
+ return cached
3618
+ end
3619
+
3620
+ i0 = index
3621
+ r1 = _nt_color
3622
+ r1.extend(Argument0)
3623
+ if r1
3624
+ r0 = r1
3625
+ else
3626
+ i2, s2 = index, []
3627
+ r3 = _nt_number
3628
+ s2 << r3
3629
+ if r3
3630
+ r4 = _nt_unit
3631
+ s2 << r4
3632
+ end
3633
+ if s2.last
3634
+ r2 = instantiate_node(SyntaxNode,input, i2...index, s2)
3635
+ r2.extend(Argument1)
3636
+ r2.extend(Argument2)
3637
+ else
3638
+ @index = i2
3639
+ r2 = nil
3640
+ end
3641
+ if r2
3642
+ r0 = r2
3643
+ else
3644
+ r5 = _nt_string
3645
+ r5.extend(Argument3)
3646
+ if r5
3647
+ r0 = r5
3648
+ else
3649
+ i6, s6 = index, []
3650
+ s7, i7 = [], index
3651
+ loop do
3652
+ if has_terminal?('[a-zA-Z]', true, index)
3653
+ r8 = instantiate_node(SyntaxNode,input, index...(index + 1))
3654
+ @index += 1
3655
+ else
3656
+ r8 = nil
3657
+ end
3658
+ if r8
3659
+ s7 << r8
3660
+ else
3661
+ break
3662
+ end
3663
+ end
3664
+ if s7.empty?
3665
+ @index = i7
3666
+ r7 = nil
3667
+ else
3668
+ r7 = instantiate_node(SyntaxNode,input, i7...index, s7)
3669
+ end
3670
+ s6 << r7
3671
+ if r7
3672
+ if has_terminal?('=', false, index)
3673
+ r9 = instantiate_node(SyntaxNode,input, index...(index + 1))
3674
+ @index += 1
3675
+ else
3676
+ terminal_parse_failure('=')
3677
+ r9 = nil
3678
+ end
3679
+ s6 << r9
3680
+ if r9
3681
+ r10 = _nt_dimension
3682
+ s6 << r10
3683
+ end
3684
+ end
3685
+ if s6.last
3686
+ r6 = instantiate_node(SyntaxNode,input, i6...index, s6)
3687
+ r6.extend(Argument4)
3688
+ r6.extend(Argument5)
3689
+ else
3690
+ @index = i6
3691
+ r6 = nil
3692
+ end
3693
+ if r6
3694
+ r0 = r6
3695
+ else
3696
+ @index = i0
3697
+ r0 = nil
3698
+ end
3699
+ end
3700
+ end
3701
+ end
3702
+
3703
+ node_cache[:argument][start_index] = r0
3704
+
3705
+ r0
3706
+ end
3707
+
3708
+ def _nt_s
3709
+ start_index = index
3710
+ if node_cache[:s].has_key?(index)
3711
+ cached = node_cache[:s][index]
3712
+ @index = cached.interval.end if cached
3713
+ return cached
3714
+ end
3715
+
3716
+ s0, i0 = [], index
3717
+ loop do
3718
+ if has_terminal?('[ ]', true, index)
3719
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
3720
+ @index += 1
3721
+ else
3722
+ r1 = nil
3723
+ end
3724
+ if r1
3725
+ s0 << r1
3726
+ else
3727
+ break
3728
+ end
3729
+ end
3730
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
3731
+
3732
+ node_cache[:s][start_index] = r0
3733
+
3734
+ r0
3735
+ end
3736
+
3737
+ def _nt_S
3738
+ start_index = index
3739
+ if node_cache[:S].has_key?(index)
3740
+ cached = node_cache[:S][index]
3741
+ @index = cached.interval.end if cached
3742
+ return cached
3743
+ end
3744
+
3745
+ s0, i0 = [], index
3746
+ loop do
3747
+ if has_terminal?('[ ]', true, index)
3748
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
3749
+ @index += 1
3750
+ else
3751
+ r1 = nil
3752
+ end
3753
+ if r1
3754
+ s0 << r1
3755
+ else
3756
+ break
3757
+ end
3758
+ end
3759
+ if s0.empty?
3760
+ @index = i0
3761
+ r0 = nil
3762
+ else
3763
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
3764
+ end
3765
+
3766
+ node_cache[:S][start_index] = r0
3767
+
3768
+ r0
3769
+ end
3770
+
3771
+ def _nt_ws
3772
+ start_index = index
3773
+ if node_cache[:ws].has_key?(index)
3774
+ cached = node_cache[:ws][index]
3775
+ @index = cached.interval.end if cached
3776
+ return cached
3777
+ end
3778
+
3779
+ s0, i0 = [], index
3780
+ loop do
3781
+ if has_terminal?('[\\n ]', true, index)
3782
+ r1 = instantiate_node(SyntaxNode,input, index...(index + 1))
3783
+ @index += 1
3784
+ else
3785
+ r1 = nil
3786
+ end
3787
+ if r1
3788
+ s0 << r1
3789
+ else
3790
+ break
3791
+ end
3792
+ end
3793
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
3794
+
3795
+ node_cache[:ws][start_index] = r0
3796
+
3797
+ r0
3798
+ end
3799
+
3800
+ module Ns0
3801
+ end
3802
+
3803
+ def _nt_ns
3804
+ start_index = index
3805
+ if node_cache[:ns].has_key?(index)
3806
+ cached = node_cache[:ns][index]
3807
+ @index = cached.interval.end if cached
3808
+ return cached
3809
+ end
3810
+
3811
+ i0, s0 = index, []
3812
+ i1 = index
3813
+ if has_terminal?('[ ;]', true, index)
3814
+ r2 = instantiate_node(SyntaxNode,input, index...(index + 1))
3815
+ @index += 1
3816
+ else
3817
+ r2 = nil
3818
+ end
3819
+ if r2
3820
+ r1 = nil
3821
+ else
3822
+ @index = i1
3823
+ r1 = instantiate_node(SyntaxNode,input, index...index)
3824
+ end
3825
+ s0 << r1
3826
+ if r1
3827
+ if index < input_length
3828
+ r3 = instantiate_node(SyntaxNode,input, index...(index + 1))
3829
+ @index += 1
3830
+ else
3831
+ terminal_parse_failure("any character")
3832
+ r3 = nil
3833
+ end
3834
+ s0 << r3
3835
+ end
3836
+ if s0.last
3837
+ r0 = instantiate_node(SyntaxNode,input, i0...index, s0)
3838
+ r0.extend(Ns0)
3839
+ else
3840
+ @index = i0
3841
+ r0 = nil
3842
+ end
3843
+
3844
+ node_cache[:ns][start_index] = r0
3845
+
3846
+ r0
3847
+ end
3848
+
3849
+ end
3850
+
3851
+ class LessParser < Treetop::Runtime::CompiledParser
3852
+ include Less
3853
+ end
3854
+