cloudhead-less 0.8.12 → 1.0.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
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 -25
  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 +42 -139
  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 -23
  55. data/spec/spec.less +3 -4
  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
+