hokusai-zero 0.1.1

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 (166) hide show
  1. checksums.yaml +7 -0
  2. data/Dockerfile +26 -0
  3. data/Gemfile +15 -0
  4. data/Gemfile.lock +91 -0
  5. data/LICENSE +21 -0
  6. data/README.md +28 -0
  7. data/ast/genheader +3 -0
  8. data/ast/include/hashmap.c +1151 -0
  9. data/ast/include/hashmap.c.license +20 -0
  10. data/ast/include/hashmap.h +54 -0
  11. data/ast/src/core/ast.c +448 -0
  12. data/ast/src/core/ast.h +259 -0
  13. data/ast/src/core/common.h +24 -0
  14. data/ast/src/core/component.c +85 -0
  15. data/ast/src/core/component.h +35 -0
  16. data/ast/src/core/hml.c +665 -0
  17. data/ast/src/core/hml.h +11 -0
  18. data/ast/src/core/input.c +458 -0
  19. data/ast/src/core/input.h +118 -0
  20. data/ast/src/core/style.c +101 -0
  21. data/ast/src/core/style.h +41 -0
  22. data/ast/src/core/text.c +784 -0
  23. data/ast/src/core/text.h +93 -0
  24. data/ast/src/core/util.c +140 -0
  25. data/ast/src/core/util.h +48 -0
  26. data/ast/src/hokusai.c +6 -0
  27. data/ast/src/hokusai.h +6 -0
  28. data/ast/test/fixtures/test.ui +13 -0
  29. data/ast/test/greatest.h +1266 -0
  30. data/ast/test/hokusai.c +14 -0
  31. data/ast/test/parser.c +234 -0
  32. data/ast/test/text.c +116 -0
  33. data/ext/extconf.rb +27 -0
  34. data/grammar/Cargo.lock +80 -0
  35. data/grammar/Cargo.toml +26 -0
  36. data/grammar/binding.gyp +20 -0
  37. data/grammar/bindings/node/binding.cc +28 -0
  38. data/grammar/bindings/node/index.js +19 -0
  39. data/grammar/bindings/rust/build.rs +40 -0
  40. data/grammar/bindings/rust/lib.rs +52 -0
  41. data/grammar/corpus/1_document.txt +131 -0
  42. data/grammar/corpus/2_selectors.txt +58 -0
  43. data/grammar/corpus/3_spaces.txt +69 -0
  44. data/grammar/corpus/4_errors.txt +10 -0
  45. data/grammar/corpus/5_macros.txt +175 -0
  46. data/grammar/corpus/6_styles.txt +81 -0
  47. data/grammar/grammar.js +275 -0
  48. data/grammar/package-lock.json +34 -0
  49. data/grammar/package.json +33 -0
  50. data/grammar/src/grammar.json +1269 -0
  51. data/grammar/src/node-types.json +474 -0
  52. data/grammar/src/parser.c +5772 -0
  53. data/grammar/src/scanner.c +258 -0
  54. data/grammar/src/tree_sitter/parser.h +230 -0
  55. data/grammar/src/tree_sitter/scanner.h +12 -0
  56. data/grammar/test.nml +10 -0
  57. data/hokusai.gemspec +19 -0
  58. data/ui/examples/assets/DigitalDisplay.ttf +0 -0
  59. data/ui/examples/assets/OpenSans-Regular.ttf +0 -0
  60. data/ui/examples/assets/addy.png +0 -0
  61. data/ui/examples/assets/baby_sean.png +0 -0
  62. data/ui/examples/assets/football-troll.png +0 -0
  63. data/ui/examples/assets/gear.png +0 -0
  64. data/ui/examples/assets/icecold.ttf +0 -0
  65. data/ui/examples/assets/science-troll.png +0 -0
  66. data/ui/examples/buddy.rb +31 -0
  67. data/ui/examples/clock.rb +58 -0
  68. data/ui/examples/counter.rb +123 -0
  69. data/ui/examples/dynamic.rb +147 -0
  70. data/ui/examples/foobar.rb +236 -0
  71. data/ui/examples/stock.rb +115 -0
  72. data/ui/examples/stock_decider/option.rb +74 -0
  73. data/ui/examples/tic_tac_toe.rb +246 -0
  74. data/ui/lib/lib_hokusai.rb +425 -0
  75. data/ui/spec/hokusai/ast_spec.rb +88 -0
  76. data/ui/spec/hokusai/automation/keys_transcoder_spec.rb +50 -0
  77. data/ui/spec/hokusai/automation/selector_spec.rb +68 -0
  78. data/ui/spec/hokusai/block_spec.rb +126 -0
  79. data/ui/spec/hokusai/directives_spec.rb +327 -0
  80. data/ui/spec/hokusai/e2e/client_spec.rb +58 -0
  81. data/ui/spec/hokusai/e2e/meta_spec.rb +42 -0
  82. data/ui/spec/hokusai/publisher_spec.rb +38 -0
  83. data/ui/spec/hokusai/slots_spec.rb +150 -0
  84. data/ui/spec/hokusai/util/piece_table_spec.rb +90 -0
  85. data/ui/spec/hokusai_spec.rb +0 -0
  86. data/ui/spec/spec_helper.rb +30 -0
  87. data/ui/src/hokusai/ast.rb +446 -0
  88. data/ui/src/hokusai/automation/client.rb +167 -0
  89. data/ui/src/hokusai/automation/constants.rb +98 -0
  90. data/ui/src/hokusai/automation/converters/selector_converter.rb +61 -0
  91. data/ui/src/hokusai/automation/driver.rb +54 -0
  92. data/ui/src/hokusai/automation/driver_command_queue.rb +50 -0
  93. data/ui/src/hokusai/automation/driver_commands/base.rb +79 -0
  94. data/ui/src/hokusai/automation/driver_commands/get_attribute.rb +41 -0
  95. data/ui/src/hokusai/automation/driver_commands/invoke.rb +33 -0
  96. data/ui/src/hokusai/automation/driver_commands/locate.rb +48 -0
  97. data/ui/src/hokusai/automation/driver_commands/trigger_keyboard.rb +94 -0
  98. data/ui/src/hokusai/automation/driver_commands/trigger_mouse.rb +213 -0
  99. data/ui/src/hokusai/automation/keys_transcoder.rb +128 -0
  100. data/ui/src/hokusai/automation/selector.rb +39 -0
  101. data/ui/src/hokusai/automation/server.rb +114 -0
  102. data/ui/src/hokusai/automation.rb +3 -0
  103. data/ui/src/hokusai/backends/raylib/config.rb +47 -0
  104. data/ui/src/hokusai/backends/raylib/font.rb +113 -0
  105. data/ui/src/hokusai/backends/raylib/keys.rb +124 -0
  106. data/ui/src/hokusai/backends/raylib.rb +449 -0
  107. data/ui/src/hokusai/backends/sdl2/Monaco.ttf +0 -0
  108. data/ui/src/hokusai/backends/sdl2/color.rb +12 -0
  109. data/ui/src/hokusai/backends/sdl2/config.rb +31 -0
  110. data/ui/src/hokusai/backends/sdl2/font.rb +127 -0
  111. data/ui/src/hokusai/backends/sdl2/keys.rb +119 -0
  112. data/ui/src/hokusai/backends/sdl2.rb +529 -0
  113. data/ui/src/hokusai/block.rb +237 -0
  114. data/ui/src/hokusai/blocks/button.rb +100 -0
  115. data/ui/src/hokusai/blocks/checkbox.rb +51 -0
  116. data/ui/src/hokusai/blocks/circle.rb +28 -0
  117. data/ui/src/hokusai/blocks/clipped.rb +23 -0
  118. data/ui/src/hokusai/blocks/cursor.rb +49 -0
  119. data/ui/src/hokusai/blocks/dynamic.rb +37 -0
  120. data/ui/src/hokusai/blocks/empty.rb +10 -0
  121. data/ui/src/hokusai/blocks/hblock.rb +35 -0
  122. data/ui/src/hokusai/blocks/image.rb +18 -0
  123. data/ui/src/hokusai/blocks/input.rb +200 -0
  124. data/ui/src/hokusai/blocks/label.rb +39 -0
  125. data/ui/src/hokusai/blocks/panel.rb +126 -0
  126. data/ui/src/hokusai/blocks/rect.rb +24 -0
  127. data/ui/src/hokusai/blocks/scissor_begin.rb +18 -0
  128. data/ui/src/hokusai/blocks/scissor_end.rb +12 -0
  129. data/ui/src/hokusai/blocks/scrollbar.rb +103 -0
  130. data/ui/src/hokusai/blocks/selectable.rb +77 -0
  131. data/ui/src/hokusai/blocks/svg.rb +20 -0
  132. data/ui/src/hokusai/blocks/text.rb +214 -0
  133. data/ui/src/hokusai/blocks/titlebar/osx.rb +145 -0
  134. data/ui/src/hokusai/blocks/toggle.rb +55 -0
  135. data/ui/src/hokusai/blocks/vblock.rb +35 -0
  136. data/ui/src/hokusai/commands/base.rb +22 -0
  137. data/ui/src/hokusai/commands/circle.rb +47 -0
  138. data/ui/src/hokusai/commands/image.rb +45 -0
  139. data/ui/src/hokusai/commands/rect.rb +158 -0
  140. data/ui/src/hokusai/commands/scissor.rb +22 -0
  141. data/ui/src/hokusai/commands/text.rb +92 -0
  142. data/ui/src/hokusai/commands.rb +87 -0
  143. data/ui/src/hokusai/diff.rb +124 -0
  144. data/ui/src/hokusai/error.rb +3 -0
  145. data/ui/src/hokusai/event.rb +54 -0
  146. data/ui/src/hokusai/events/keyboard.rb +84 -0
  147. data/ui/src/hokusai/events/mouse.rb +172 -0
  148. data/ui/src/hokusai/font.rb +280 -0
  149. data/ui/src/hokusai/meta.rb +152 -0
  150. data/ui/src/hokusai/mounting/loop_entry.rb +230 -0
  151. data/ui/src/hokusai/mounting/mount_entry.rb +74 -0
  152. data/ui/src/hokusai/mounting/update_entry.rb +101 -0
  153. data/ui/src/hokusai/node.rb +98 -0
  154. data/ui/src/hokusai/node_mounter.rb +102 -0
  155. data/ui/src/hokusai/painter.rb +214 -0
  156. data/ui/src/hokusai/publisher.rb +32 -0
  157. data/ui/src/hokusai/style.rb +72 -0
  158. data/ui/src/hokusai/types.rb +266 -0
  159. data/ui/src/hokusai/util/clamping_iterator.rb +202 -0
  160. data/ui/src/hokusai/util/piece_table.rb +111 -0
  161. data/ui/src/hokusai/util/selection.rb +145 -0
  162. data/ui/src/hokusai.rb +120 -0
  163. data/ui/vendor/.gitkeep +0 -0
  164. data/vendor/.gitkeep +0 -0
  165. data/xmake.lua +192 -0
  166. metadata +222 -0
@@ -0,0 +1,1269 @@
1
+ {
2
+ "name": "hml",
3
+ "rules": {
4
+ "document": {
5
+ "type": "CHOICE",
6
+ "members": [
7
+ {
8
+ "type": "SEQ",
9
+ "members": [
10
+ {
11
+ "type": "SYMBOL",
12
+ "name": "template"
13
+ },
14
+ {
15
+ "type": "SYMBOL",
16
+ "name": "style_template"
17
+ }
18
+ ]
19
+ },
20
+ {
21
+ "type": "SEQ",
22
+ "members": [
23
+ {
24
+ "type": "SYMBOL",
25
+ "name": "style_template"
26
+ },
27
+ {
28
+ "type": "SYMBOL",
29
+ "name": "template"
30
+ }
31
+ ]
32
+ },
33
+ {
34
+ "type": "SYMBOL",
35
+ "name": "template"
36
+ },
37
+ {
38
+ "type": "SYMBOL",
39
+ "name": "style_template"
40
+ }
41
+ ]
42
+ },
43
+ "comment": {
44
+ "type": "SEQ",
45
+ "members": [
46
+ {
47
+ "type": "STRING",
48
+ "value": "#!"
49
+ },
50
+ {
51
+ "type": "PATTERN",
52
+ "value": ".*"
53
+ },
54
+ {
55
+ "type": "STRING",
56
+ "value": "!#"
57
+ }
58
+ ]
59
+ },
60
+ "template": {
61
+ "type": "SEQ",
62
+ "members": [
63
+ {
64
+ "type": "SYMBOL",
65
+ "name": "_template_macro"
66
+ },
67
+ {
68
+ "type": "SYMBOL",
69
+ "name": "_element_body"
70
+ }
71
+ ]
72
+ },
73
+ "style_template": {
74
+ "type": "SEQ",
75
+ "members": [
76
+ {
77
+ "type": "SYMBOL",
78
+ "name": "_style_macro"
79
+ },
80
+ {
81
+ "type": "REPEAT1",
82
+ "content": {
83
+ "type": "ALIAS",
84
+ "content": {
85
+ "type": "SYMBOL",
86
+ "name": "_style_body"
87
+ },
88
+ "named": true,
89
+ "value": "style"
90
+ }
91
+ }
92
+ ]
93
+ },
94
+ "_body": {
95
+ "type": "CHOICE",
96
+ "members": [
97
+ {
98
+ "type": "SYMBOL",
99
+ "name": "_element_body"
100
+ }
101
+ ]
102
+ },
103
+ "element": {
104
+ "type": "SEQ",
105
+ "members": [
106
+ {
107
+ "type": "ALIAS",
108
+ "content": {
109
+ "type": "SYMBOL",
110
+ "name": "_word"
111
+ },
112
+ "named": true,
113
+ "value": "name"
114
+ },
115
+ {
116
+ "type": "CHOICE",
117
+ "members": [
118
+ {
119
+ "type": "SYMBOL",
120
+ "name": "selectors"
121
+ },
122
+ {
123
+ "type": "BLANK"
124
+ }
125
+ ]
126
+ },
127
+ {
128
+ "type": "CHOICE",
129
+ "members": [
130
+ {
131
+ "type": "ALIAS",
132
+ "content": {
133
+ "type": "SYMBOL",
134
+ "name": "_element_attributes"
135
+ },
136
+ "named": true,
137
+ "value": "attributes"
138
+ },
139
+ {
140
+ "type": "BLANK"
141
+ }
142
+ ]
143
+ },
144
+ {
145
+ "type": "CHOICE",
146
+ "members": [
147
+ {
148
+ "type": "ALIAS",
149
+ "content": {
150
+ "type": "SYMBOL",
151
+ "name": "_element_body"
152
+ },
153
+ "named": true,
154
+ "value": "children"
155
+ },
156
+ {
157
+ "type": "BLANK"
158
+ }
159
+ ]
160
+ }
161
+ ]
162
+ },
163
+ "selectors": {
164
+ "type": "CHOICE",
165
+ "members": [
166
+ {
167
+ "type": "SEQ",
168
+ "members": [
169
+ {
170
+ "type": "SYMBOL",
171
+ "name": "_element_id_selctor"
172
+ },
173
+ {
174
+ "type": "REPEAT",
175
+ "content": {
176
+ "type": "SYMBOL",
177
+ "name": "_element_class_selector"
178
+ }
179
+ }
180
+ ]
181
+ },
182
+ {
183
+ "type": "REPEAT1",
184
+ "content": {
185
+ "type": "SYMBOL",
186
+ "name": "_element_class_selector"
187
+ }
188
+ }
189
+ ]
190
+ },
191
+ "_element_body": {
192
+ "type": "CHOICE",
193
+ "members": [
194
+ {
195
+ "type": "SEQ",
196
+ "members": [
197
+ {
198
+ "type": "SYMBOL",
199
+ "name": "_indent"
200
+ },
201
+ {
202
+ "type": "REPEAT",
203
+ "content": {
204
+ "type": "PREC_RIGHT",
205
+ "value": 2,
206
+ "content": {
207
+ "type": "CHOICE",
208
+ "members": [
209
+ {
210
+ "type": "SEQ",
211
+ "members": [
212
+ {
213
+ "type": "SYMBOL",
214
+ "name": "element"
215
+ },
216
+ {
217
+ "type": "SYMBOL",
218
+ "name": "_newline"
219
+ }
220
+ ]
221
+ },
222
+ {
223
+ "type": "SEQ",
224
+ "members": [
225
+ {
226
+ "type": "SYMBOL",
227
+ "name": "for_if_macro"
228
+ },
229
+ {
230
+ "type": "CHOICE",
231
+ "members": [
232
+ {
233
+ "type": "SEQ",
234
+ "members": [
235
+ {
236
+ "type": "SYMBOL",
237
+ "name": "_newline"
238
+ },
239
+ {
240
+ "type": "SYMBOL",
241
+ "name": "else_macro"
242
+ }
243
+ ]
244
+ },
245
+ {
246
+ "type": "BLANK"
247
+ }
248
+ ]
249
+ },
250
+ {
251
+ "type": "SYMBOL",
252
+ "name": "_newline"
253
+ }
254
+ ]
255
+ },
256
+ {
257
+ "type": "SEQ",
258
+ "members": [
259
+ {
260
+ "type": "SYMBOL",
261
+ "name": "for_macro"
262
+ },
263
+ {
264
+ "type": "SYMBOL",
265
+ "name": "_newline"
266
+ }
267
+ ]
268
+ },
269
+ {
270
+ "type": "SEQ",
271
+ "members": [
272
+ {
273
+ "type": "SYMBOL",
274
+ "name": "if_macro"
275
+ },
276
+ {
277
+ "type": "CHOICE",
278
+ "members": [
279
+ {
280
+ "type": "SEQ",
281
+ "members": [
282
+ {
283
+ "type": "SYMBOL",
284
+ "name": "_newline"
285
+ },
286
+ {
287
+ "type": "SYMBOL",
288
+ "name": "else_macro"
289
+ }
290
+ ]
291
+ },
292
+ {
293
+ "type": "BLANK"
294
+ }
295
+ ]
296
+ },
297
+ {
298
+ "type": "SYMBOL",
299
+ "name": "_newline"
300
+ }
301
+ ]
302
+ }
303
+ ]
304
+ }
305
+ }
306
+ },
307
+ {
308
+ "type": "PREC_RIGHT",
309
+ "value": 3,
310
+ "content": {
311
+ "type": "CHOICE",
312
+ "members": [
313
+ {
314
+ "type": "SYMBOL",
315
+ "name": "element"
316
+ },
317
+ {
318
+ "type": "SEQ",
319
+ "members": [
320
+ {
321
+ "type": "SYMBOL",
322
+ "name": "if_macro"
323
+ },
324
+ {
325
+ "type": "CHOICE",
326
+ "members": [
327
+ {
328
+ "type": "SEQ",
329
+ "members": [
330
+ {
331
+ "type": "SYMBOL",
332
+ "name": "_newline"
333
+ },
334
+ {
335
+ "type": "SYMBOL",
336
+ "name": "else_macro"
337
+ }
338
+ ]
339
+ },
340
+ {
341
+ "type": "BLANK"
342
+ }
343
+ ]
344
+ }
345
+ ]
346
+ },
347
+ {
348
+ "type": "SEQ",
349
+ "members": [
350
+ {
351
+ "type": "SYMBOL",
352
+ "name": "for_if_macro"
353
+ },
354
+ {
355
+ "type": "CHOICE",
356
+ "members": [
357
+ {
358
+ "type": "SEQ",
359
+ "members": [
360
+ {
361
+ "type": "SYMBOL",
362
+ "name": "_newline"
363
+ },
364
+ {
365
+ "type": "SYMBOL",
366
+ "name": "else_macro"
367
+ }
368
+ ]
369
+ },
370
+ {
371
+ "type": "BLANK"
372
+ }
373
+ ]
374
+ }
375
+ ]
376
+ },
377
+ {
378
+ "type": "SYMBOL",
379
+ "name": "for_macro"
380
+ }
381
+ ]
382
+ }
383
+ },
384
+ {
385
+ "type": "CHOICE",
386
+ "members": [
387
+ {
388
+ "type": "PATTERN",
389
+ "value": " *\\n\\s*"
390
+ },
391
+ {
392
+ "type": "BLANK"
393
+ }
394
+ ]
395
+ },
396
+ {
397
+ "type": "SYMBOL",
398
+ "name": "_dedent"
399
+ }
400
+ ]
401
+ }
402
+ ]
403
+ },
404
+ "_element_attributes": {
405
+ "type": "SEQ",
406
+ "members": [
407
+ {
408
+ "type": "SYMBOL",
409
+ "name": "_attributes_start"
410
+ },
411
+ {
412
+ "type": "REPEAT",
413
+ "content": {
414
+ "type": "SEQ",
415
+ "members": [
416
+ {
417
+ "type": "CHOICE",
418
+ "members": [
419
+ {
420
+ "type": "SYMBOL",
421
+ "name": "prop"
422
+ },
423
+ {
424
+ "type": "SYMBOL",
425
+ "name": "event"
426
+ },
427
+ {
428
+ "type": "SEQ",
429
+ "members": [
430
+ {
431
+ "type": "SYMBOL",
432
+ "name": "_spread_punctuation"
433
+ },
434
+ {
435
+ "type": "ALIAS",
436
+ "content": {
437
+ "type": "SYMBOL",
438
+ "name": "_spread"
439
+ },
440
+ "named": true,
441
+ "value": "style"
442
+ }
443
+ ]
444
+ }
445
+ ]
446
+ },
447
+ {
448
+ "type": "CHOICE",
449
+ "members": [
450
+ {
451
+ "type": "SYMBOL",
452
+ "name": "_comma"
453
+ },
454
+ {
455
+ "type": "BLANK"
456
+ }
457
+ ]
458
+ }
459
+ ]
460
+ }
461
+ },
462
+ {
463
+ "type": "SYMBOL",
464
+ "name": "_attributes_end"
465
+ }
466
+ ]
467
+ },
468
+ "event": {
469
+ "type": "SEQ",
470
+ "members": [
471
+ {
472
+ "type": "SYMBOL",
473
+ "name": "_at"
474
+ },
475
+ {
476
+ "type": "ALIAS",
477
+ "content": {
478
+ "type": "SYMBOL",
479
+ "name": "_method"
480
+ },
481
+ "named": true,
482
+ "value": "name"
483
+ },
484
+ {
485
+ "type": "SYMBOL",
486
+ "name": "_equal"
487
+ },
488
+ {
489
+ "type": "SYMBOL",
490
+ "name": "_quote"
491
+ },
492
+ {
493
+ "type": "SYMBOL",
494
+ "name": "function"
495
+ },
496
+ {
497
+ "type": "SYMBOL",
498
+ "name": "_quote"
499
+ }
500
+ ]
501
+ },
502
+ "prop": {
503
+ "type": "SEQ",
504
+ "members": [
505
+ {
506
+ "type": "CHOICE",
507
+ "members": [
508
+ {
509
+ "type": "ALIAS",
510
+ "content": {
511
+ "type": "SYMBOL",
512
+ "name": "_colon"
513
+ },
514
+ "named": true,
515
+ "value": "computed"
516
+ },
517
+ {
518
+ "type": "BLANK"
519
+ }
520
+ ]
521
+ },
522
+ {
523
+ "type": "ALIAS",
524
+ "content": {
525
+ "type": "SYMBOL",
526
+ "name": "_method"
527
+ },
528
+ "named": true,
529
+ "value": "name"
530
+ },
531
+ {
532
+ "type": "SYMBOL",
533
+ "name": "_equal"
534
+ },
535
+ {
536
+ "type": "SYMBOL",
537
+ "name": "_quote"
538
+ },
539
+ {
540
+ "type": "SYMBOL",
541
+ "name": "function"
542
+ },
543
+ {
544
+ "type": "SYMBOL",
545
+ "name": "_quote"
546
+ }
547
+ ]
548
+ },
549
+ "function": {
550
+ "type": "SEQ",
551
+ "members": [
552
+ {
553
+ "type": "ALIAS",
554
+ "content": {
555
+ "type": "CHOICE",
556
+ "members": [
557
+ {
558
+ "type": "SYMBOL",
559
+ "name": "_float"
560
+ },
561
+ {
562
+ "type": "SYMBOL",
563
+ "name": "_static_string"
564
+ }
565
+ ]
566
+ },
567
+ "named": true,
568
+ "value": "name"
569
+ },
570
+ {
571
+ "type": "CHOICE",
572
+ "members": [
573
+ {
574
+ "type": "ALIAS",
575
+ "content": {
576
+ "type": "SYMBOL",
577
+ "name": "function_args"
578
+ },
579
+ "named": true,
580
+ "value": "args"
581
+ },
582
+ {
583
+ "type": "BLANK"
584
+ }
585
+ ]
586
+ }
587
+ ]
588
+ },
589
+ "function_args": {
590
+ "type": "SEQ",
591
+ "members": [
592
+ {
593
+ "type": "SYMBOL",
594
+ "name": "_lparen"
595
+ },
596
+ {
597
+ "type": "REPEAT",
598
+ "content": {
599
+ "type": "SEQ",
600
+ "members": [
601
+ {
602
+ "type": "ALIAS",
603
+ "content": {
604
+ "type": "SYMBOL",
605
+ "name": "_word"
606
+ },
607
+ "named": true,
608
+ "value": "arg"
609
+ },
610
+ {
611
+ "type": "SYMBOL",
612
+ "name": "_comma"
613
+ },
614
+ {
615
+ "type": "PATTERN",
616
+ "value": "\\s*"
617
+ }
618
+ ]
619
+ }
620
+ },
621
+ {
622
+ "type": "ALIAS",
623
+ "content": {
624
+ "type": "SYMBOL",
625
+ "name": "_word"
626
+ },
627
+ "named": true,
628
+ "value": "arg"
629
+ },
630
+ {
631
+ "type": "SYMBOL",
632
+ "name": "_rparen"
633
+ }
634
+ ]
635
+ },
636
+ "_element_id_selctor": {
637
+ "type": "SEQ",
638
+ "members": [
639
+ {
640
+ "type": "SYMBOL",
641
+ "name": "_pound"
642
+ },
643
+ {
644
+ "type": "ALIAS",
645
+ "content": {
646
+ "type": "SYMBOL",
647
+ "name": "_word"
648
+ },
649
+ "named": true,
650
+ "value": "id"
651
+ }
652
+ ]
653
+ },
654
+ "_element_class_selector": {
655
+ "type": "SEQ",
656
+ "members": [
657
+ {
658
+ "type": "SYMBOL",
659
+ "name": "_dot"
660
+ },
661
+ {
662
+ "type": "ALIAS",
663
+ "content": {
664
+ "type": "SYMBOL",
665
+ "name": "_word"
666
+ },
667
+ "named": true,
668
+ "value": "class"
669
+ }
670
+ ]
671
+ },
672
+ "_template_macro": {
673
+ "type": "SEQ",
674
+ "members": [
675
+ {
676
+ "type": "SYMBOL",
677
+ "name": "_macro_start"
678
+ },
679
+ {
680
+ "type": "SYMBOL",
681
+ "name": "_template_key"
682
+ },
683
+ {
684
+ "type": "SYMBOL",
685
+ "name": "_macro_end"
686
+ }
687
+ ]
688
+ },
689
+ "_spread": {
690
+ "type": "SEQ",
691
+ "members": [
692
+ {
693
+ "type": "ALIAS",
694
+ "content": {
695
+ "type": "SYMBOL",
696
+ "name": "_method"
697
+ },
698
+ "named": true,
699
+ "value": "name"
700
+ }
701
+ ]
702
+ },
703
+ "_style_macro": {
704
+ "type": "SEQ",
705
+ "members": [
706
+ {
707
+ "type": "SYMBOL",
708
+ "name": "_macro_start"
709
+ },
710
+ {
711
+ "type": "SYMBOL",
712
+ "name": "_style_key"
713
+ },
714
+ {
715
+ "type": "SYMBOL",
716
+ "name": "_macro_end"
717
+ }
718
+ ]
719
+ },
720
+ "_style_body": {
721
+ "type": "SEQ",
722
+ "members": [
723
+ {
724
+ "type": "ALIAS",
725
+ "content": {
726
+ "type": "SYMBOL",
727
+ "name": "_word"
728
+ },
729
+ "named": true,
730
+ "value": "name"
731
+ },
732
+ {
733
+ "type": "SYMBOL",
734
+ "name": "_attributes_start"
735
+ },
736
+ {
737
+ "type": "ALIAS",
738
+ "content": {
739
+ "type": "REPEAT",
740
+ "content": {
741
+ "type": "ALIAS",
742
+ "content": {
743
+ "type": "SYMBOL",
744
+ "name": "_style_element"
745
+ },
746
+ "named": true,
747
+ "value": "element"
748
+ }
749
+ },
750
+ "named": true,
751
+ "value": "children"
752
+ },
753
+ {
754
+ "type": "SYMBOL",
755
+ "name": "_attributes_end"
756
+ }
757
+ ]
758
+ },
759
+ "_style_element": {
760
+ "type": "SEQ",
761
+ "members": [
762
+ {
763
+ "type": "CHOICE",
764
+ "members": [
765
+ {
766
+ "type": "PATTERN",
767
+ "value": "\\s+"
768
+ },
769
+ {
770
+ "type": "BLANK"
771
+ }
772
+ ]
773
+ },
774
+ {
775
+ "type": "ALIAS",
776
+ "content": {
777
+ "type": "SYMBOL",
778
+ "name": "_method"
779
+ },
780
+ "named": true,
781
+ "value": "name"
782
+ },
783
+ {
784
+ "type": "SYMBOL",
785
+ "name": "_colon"
786
+ },
787
+ {
788
+ "type": "CHOICE",
789
+ "members": [
790
+ {
791
+ "type": "PATTERN",
792
+ "value": "\\s+"
793
+ },
794
+ {
795
+ "type": "BLANK"
796
+ }
797
+ ]
798
+ },
799
+ {
800
+ "type": "CHOICE",
801
+ "members": [
802
+ {
803
+ "type": "SEQ",
804
+ "members": [
805
+ {
806
+ "type": "SYMBOL",
807
+ "name": "_quote"
808
+ },
809
+ {
810
+ "type": "ALIAS",
811
+ "content": {
812
+ "type": "SYMBOL",
813
+ "name": "_method"
814
+ },
815
+ "named": true,
816
+ "value": "style_string"
817
+ },
818
+ {
819
+ "type": "SYMBOL",
820
+ "name": "_quote"
821
+ }
822
+ ]
823
+ },
824
+ {
825
+ "type": "SYMBOL",
826
+ "name": "style_float"
827
+ },
828
+ {
829
+ "type": "SYMBOL",
830
+ "name": "style_int"
831
+ },
832
+ {
833
+ "type": "SYMBOL",
834
+ "name": "style_bool"
835
+ },
836
+ {
837
+ "type": "SYMBOL",
838
+ "name": "style_func"
839
+ }
840
+ ]
841
+ },
842
+ {
843
+ "type": "SYMBOL",
844
+ "name": "_semi"
845
+ },
846
+ {
847
+ "type": "CHOICE",
848
+ "members": [
849
+ {
850
+ "type": "PATTERN",
851
+ "value": "\\s*"
852
+ },
853
+ {
854
+ "type": "BLANK"
855
+ }
856
+ ]
857
+ }
858
+ ]
859
+ },
860
+ "style_float": {
861
+ "type": "SYMBOL",
862
+ "name": "_float"
863
+ },
864
+ "style_int": {
865
+ "type": "PATTERN",
866
+ "value": "[0-9]+"
867
+ },
868
+ "style_bool": {
869
+ "type": "PATTERN",
870
+ "value": "true|false"
871
+ },
872
+ "style_func": {
873
+ "type": "SEQ",
874
+ "members": [
875
+ {
876
+ "type": "ALIAS",
877
+ "content": {
878
+ "type": "SYMBOL",
879
+ "name": "_method"
880
+ },
881
+ "named": true,
882
+ "value": "function"
883
+ },
884
+ {
885
+ "type": "SYMBOL",
886
+ "name": "_lparen"
887
+ },
888
+ {
889
+ "type": "ALIAS",
890
+ "content": {
891
+ "type": "SYMBOL",
892
+ "name": "_any"
893
+ },
894
+ "named": true,
895
+ "value": "value"
896
+ },
897
+ {
898
+ "type": "SYMBOL",
899
+ "name": "_rparen"
900
+ }
901
+ ]
902
+ },
903
+ "for_macro": {
904
+ "type": "SEQ",
905
+ "members": [
906
+ {
907
+ "type": "SYMBOL",
908
+ "name": "_macro_start"
909
+ },
910
+ {
911
+ "type": "SYMBOL",
912
+ "name": "_for_key"
913
+ },
914
+ {
915
+ "type": "SYMBOL",
916
+ "name": "_equal"
917
+ },
918
+ {
919
+ "type": "SYMBOL",
920
+ "name": "_quote"
921
+ },
922
+ {
923
+ "type": "ALIAS",
924
+ "content": {
925
+ "type": "SYMBOL",
926
+ "name": "_method"
927
+ },
928
+ "named": true,
929
+ "value": "name"
930
+ },
931
+ {
932
+ "type": "STRING",
933
+ "value": "in"
934
+ },
935
+ {
936
+ "type": "ALIAS",
937
+ "content": {
938
+ "type": "SYMBOL",
939
+ "name": "_method"
940
+ },
941
+ "named": true,
942
+ "value": "list_name"
943
+ },
944
+ {
945
+ "type": "SYMBOL",
946
+ "name": "_quote"
947
+ },
948
+ {
949
+ "type": "SYMBOL",
950
+ "name": "_macro_end"
951
+ },
952
+ {
953
+ "type": "ALIAS",
954
+ "content": {
955
+ "type": "SYMBOL",
956
+ "name": "_element_body"
957
+ },
958
+ "named": true,
959
+ "value": "children"
960
+ }
961
+ ]
962
+ },
963
+ "for_if_macro": {
964
+ "type": "SEQ",
965
+ "members": [
966
+ {
967
+ "type": "SYMBOL",
968
+ "name": "_macro_start"
969
+ },
970
+ {
971
+ "type": "SYMBOL",
972
+ "name": "_for_key"
973
+ },
974
+ {
975
+ "type": "SYMBOL",
976
+ "name": "_equal"
977
+ },
978
+ {
979
+ "type": "SYMBOL",
980
+ "name": "_quote"
981
+ },
982
+ {
983
+ "type": "ALIAS",
984
+ "content": {
985
+ "type": "SYMBOL",
986
+ "name": "_method"
987
+ },
988
+ "named": true,
989
+ "value": "name"
990
+ },
991
+ {
992
+ "type": "STRING",
993
+ "value": "in"
994
+ },
995
+ {
996
+ "type": "ALIAS",
997
+ "content": {
998
+ "type": "SYMBOL",
999
+ "name": "_method"
1000
+ },
1001
+ "named": true,
1002
+ "value": "list_name"
1003
+ },
1004
+ {
1005
+ "type": "SYMBOL",
1006
+ "name": "_quote"
1007
+ },
1008
+ {
1009
+ "type": "SYMBOL",
1010
+ "name": "_macro_end"
1011
+ },
1012
+ {
1013
+ "type": "SYMBOL",
1014
+ "name": "_newline"
1015
+ },
1016
+ {
1017
+ "type": "SYMBOL",
1018
+ "name": "_macro_start"
1019
+ },
1020
+ {
1021
+ "type": "SYMBOL",
1022
+ "name": "_if_key"
1023
+ },
1024
+ {
1025
+ "type": "SYMBOL",
1026
+ "name": "_equal"
1027
+ },
1028
+ {
1029
+ "type": "SYMBOL",
1030
+ "name": "_quote"
1031
+ },
1032
+ {
1033
+ "type": "ALIAS",
1034
+ "content": {
1035
+ "type": "SYMBOL",
1036
+ "name": "function"
1037
+ },
1038
+ "named": true,
1039
+ "value": "if_function"
1040
+ },
1041
+ {
1042
+ "type": "SYMBOL",
1043
+ "name": "_quote"
1044
+ },
1045
+ {
1046
+ "type": "SYMBOL",
1047
+ "name": "_macro_end"
1048
+ },
1049
+ {
1050
+ "type": "ALIAS",
1051
+ "content": {
1052
+ "type": "SYMBOL",
1053
+ "name": "_element_body"
1054
+ },
1055
+ "named": true,
1056
+ "value": "children"
1057
+ }
1058
+ ]
1059
+ },
1060
+ "if_macro": {
1061
+ "type": "SEQ",
1062
+ "members": [
1063
+ {
1064
+ "type": "SYMBOL",
1065
+ "name": "_macro_start"
1066
+ },
1067
+ {
1068
+ "type": "SYMBOL",
1069
+ "name": "_if_key"
1070
+ },
1071
+ {
1072
+ "type": "SYMBOL",
1073
+ "name": "_equal"
1074
+ },
1075
+ {
1076
+ "type": "SYMBOL",
1077
+ "name": "_quote"
1078
+ },
1079
+ {
1080
+ "type": "SYMBOL",
1081
+ "name": "function"
1082
+ },
1083
+ {
1084
+ "type": "SYMBOL",
1085
+ "name": "_quote"
1086
+ },
1087
+ {
1088
+ "type": "SYMBOL",
1089
+ "name": "_macro_end"
1090
+ },
1091
+ {
1092
+ "type": "ALIAS",
1093
+ "content": {
1094
+ "type": "SYMBOL",
1095
+ "name": "_element_body"
1096
+ },
1097
+ "named": true,
1098
+ "value": "children"
1099
+ }
1100
+ ]
1101
+ },
1102
+ "else_macro": {
1103
+ "type": "SEQ",
1104
+ "members": [
1105
+ {
1106
+ "type": "SYMBOL",
1107
+ "name": "_macro_start"
1108
+ },
1109
+ {
1110
+ "type": "SYMBOL",
1111
+ "name": "_else_key"
1112
+ },
1113
+ {
1114
+ "type": "SYMBOL",
1115
+ "name": "_macro_end"
1116
+ },
1117
+ {
1118
+ "type": "ALIAS",
1119
+ "content": {
1120
+ "type": "SYMBOL",
1121
+ "name": "_element_body"
1122
+ },
1123
+ "named": true,
1124
+ "value": "children"
1125
+ }
1126
+ ]
1127
+ },
1128
+ "_spread_punctuation": {
1129
+ "type": "STRING",
1130
+ "value": "..."
1131
+ },
1132
+ "_for_key": {
1133
+ "type": "STRING",
1134
+ "value": "for"
1135
+ },
1136
+ "_if_key": {
1137
+ "type": "STRING",
1138
+ "value": "if"
1139
+ },
1140
+ "_else_key": {
1141
+ "type": "STRING",
1142
+ "value": "else"
1143
+ },
1144
+ "_template_key": {
1145
+ "type": "STRING",
1146
+ "value": "template"
1147
+ },
1148
+ "_style_key": {
1149
+ "type": "STRING",
1150
+ "value": "style"
1151
+ },
1152
+ "_any": {
1153
+ "type": "PATTERN",
1154
+ "value": "[A-Za-z0-9\\,\\_\\-\\=\\*\\&\\^\\%\\.\\$\\#\\s]*"
1155
+ },
1156
+ "_method": {
1157
+ "type": "PATTERN",
1158
+ "value": "[A-Za-z][A-Za-z0-9\\_]*"
1159
+ },
1160
+ "_word": {
1161
+ "type": "PATTERN",
1162
+ "value": "[A-Za-z][A-Za-z0-9_-]*"
1163
+ },
1164
+ "_float": {
1165
+ "type": "PATTERN",
1166
+ "value": "\\d+\\.\\d+"
1167
+ },
1168
+ "_static_string": {
1169
+ "type": "PATTERN",
1170
+ "value": "[A-Za-z0-9_\\-,]*"
1171
+ },
1172
+ "_attributes_start": {
1173
+ "type": "PATTERN",
1174
+ "value": " *\\{"
1175
+ },
1176
+ "_attributes_end": {
1177
+ "type": "PATTERN",
1178
+ "value": "\\} *"
1179
+ },
1180
+ "_macro_start": {
1181
+ "type": "STRING",
1182
+ "value": "["
1183
+ },
1184
+ "_macro_end": {
1185
+ "type": "STRING",
1186
+ "value": "]"
1187
+ },
1188
+ "_lparen": {
1189
+ "type": "STRING",
1190
+ "value": "("
1191
+ },
1192
+ "_rparen": {
1193
+ "type": "STRING",
1194
+ "value": ")"
1195
+ },
1196
+ "_lbrack": {
1197
+ "type": "STRING",
1198
+ "value": "["
1199
+ },
1200
+ "_rbrack": {
1201
+ "type": "STRING",
1202
+ "value": "]"
1203
+ },
1204
+ "_comma": {
1205
+ "type": "STRING",
1206
+ "value": ","
1207
+ },
1208
+ "_semi": {
1209
+ "type": "PATTERN",
1210
+ "value": "\\;"
1211
+ },
1212
+ "_colon": {
1213
+ "type": "PATTERN",
1214
+ "value": "\\:"
1215
+ },
1216
+ "_equal": {
1217
+ "type": "STRING",
1218
+ "value": "="
1219
+ },
1220
+ "_pound": {
1221
+ "type": "STRING",
1222
+ "value": "#"
1223
+ },
1224
+ "_quote": {
1225
+ "type": "STRING",
1226
+ "value": "\""
1227
+ },
1228
+ "_dot": {
1229
+ "type": "STRING",
1230
+ "value": "."
1231
+ },
1232
+ "_at": {
1233
+ "type": "STRING",
1234
+ "value": "@"
1235
+ }
1236
+ },
1237
+ "extras": [
1238
+ {
1239
+ "type": "SYMBOL",
1240
+ "name": "comment"
1241
+ },
1242
+ {
1243
+ "type": "PATTERN",
1244
+ "value": "\\s+"
1245
+ }
1246
+ ],
1247
+ "conflicts": [],
1248
+ "precedences": [],
1249
+ "externals": [
1250
+ {
1251
+ "type": "SYMBOL",
1252
+ "name": "_indent"
1253
+ },
1254
+ {
1255
+ "type": "SYMBOL",
1256
+ "name": "_dedent"
1257
+ },
1258
+ {
1259
+ "type": "SYMBOL",
1260
+ "name": "_newline"
1261
+ },
1262
+ {
1263
+ "type": "SYMBOL",
1264
+ "name": "error_sentinel"
1265
+ }
1266
+ ],
1267
+ "inline": [],
1268
+ "supertypes": []
1269
+ }