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,131 @@
1
+ ===========
2
+ Happy path document
3
+ ===========
4
+
5
+ [ template ]
6
+ first
7
+ second
8
+ third
9
+ fourth
10
+
11
+ -----
12
+
13
+ (document
14
+ (template
15
+ (element
16
+ (name)
17
+ (children
18
+ (element
19
+ (name))
20
+ (element
21
+ (name))))
22
+ (element
23
+ (name))))
24
+
25
+ ===========
26
+ Newlines at end of element
27
+ ===========
28
+
29
+ [ template ]
30
+ first
31
+
32
+ second
33
+
34
+ -----------
35
+
36
+ (document
37
+ (template
38
+ (element
39
+ (name)
40
+ (children
41
+ (element
42
+ (name))))))
43
+
44
+ =================
45
+ Attributes
46
+ =================
47
+
48
+ [ template ]
49
+ first { :prop="value", @event="value" }
50
+ second { @event="value(arg1, arg2)" }
51
+
52
+ -------
53
+
54
+ (document
55
+ (template
56
+ (element
57
+ (name)
58
+ (attributes
59
+ (prop
60
+ (computed)
61
+ (name)
62
+ (function
63
+ (name)))
64
+ (event
65
+ (name)
66
+ (function
67
+ (name))))
68
+ (children
69
+ (element
70
+ (name)
71
+ (attributes
72
+ (event
73
+ (name)
74
+ (function
75
+ (name)
76
+ (args
77
+ (arg)
78
+ (arg))))))))))
79
+
80
+ =======================
81
+ Attributes (Multiline)
82
+ =======================
83
+
84
+ [ template ]
85
+ top
86
+ child {
87
+ @foo="bar"
88
+ }
89
+ child2 {
90
+ :foo="bar",
91
+ bar="baz"
92
+ }
93
+ child3 {
94
+ :foo="bar"
95
+ }
96
+
97
+ ------------
98
+
99
+ (document
100
+ (template
101
+ (element
102
+ (name)
103
+ (children
104
+ (element
105
+ (name)
106
+ (attributes
107
+ (event
108
+ (name)
109
+ (function
110
+ (name))))
111
+ (children
112
+ (element
113
+ (name)
114
+ (attributes
115
+ (prop
116
+ (computed)
117
+ (name)
118
+ (function
119
+ (name)))
120
+ (prop
121
+ (name)
122
+ (function
123
+ (name)))))))
124
+ (element
125
+ (name)
126
+ (attributes
127
+ (prop
128
+ (computed)
129
+ (name)
130
+ (function
131
+ (name)))))))))
@@ -0,0 +1,58 @@
1
+
2
+ =============
3
+ Selectors
4
+ =============
5
+
6
+ [ template ]
7
+ node#top.class1.class2
8
+ node.class2.class3
9
+
10
+ ------------
11
+
12
+ (document
13
+ (template
14
+ (element
15
+ (name)
16
+ (selectors
17
+ (id)
18
+ (class)
19
+ (class))
20
+ (children
21
+ (element
22
+ (name)
23
+ (selectors
24
+ (class)
25
+ (class)))))))
26
+
27
+ ===============
28
+ Selectors (id only)
29
+ ===============
30
+
31
+ [ template ]
32
+ node#id
33
+ node2#id2
34
+ node3#id3
35
+ node4#id4
36
+
37
+ ---------------
38
+
39
+ (document
40
+ (template
41
+ (element
42
+ (name)
43
+ (selectors
44
+ (id))
45
+ (children
46
+ (element
47
+ (name)
48
+ (selectors
49
+ (id))
50
+ (children
51
+ (element
52
+ (name)
53
+ (selectors
54
+ (id)))))
55
+ (element
56
+ (name)
57
+ (selectors
58
+ (id)))))))
@@ -0,0 +1,69 @@
1
+ ==============
2
+ Space at end of element
3
+ ==============
4
+
5
+ [ template ]
6
+ first
7
+ second
8
+ third
9
+
10
+ --------------
11
+
12
+ (document
13
+ (template
14
+ (element
15
+ (name)
16
+ (children
17
+ (element
18
+ (name))
19
+ (element
20
+ (name))))))
21
+
22
+ ==============
23
+ Space at the end of template
24
+ ==============
25
+
26
+ [ template ]
27
+ first
28
+ second
29
+ third
30
+
31
+ -----------
32
+
33
+ (document
34
+ (template
35
+ (element
36
+ (name)
37
+ (children
38
+ (element
39
+ (name))))
40
+ (element
41
+ (name))))
42
+
43
+ =================
44
+ Trailing Newlines
45
+ ==================
46
+
47
+ [ template ]
48
+ first
49
+ second
50
+ third
51
+ third
52
+ third
53
+
54
+ -----------
55
+
56
+ (document
57
+ (template
58
+ (element
59
+ (name)
60
+ (children
61
+ (element
62
+ (name)
63
+ (children
64
+ (element
65
+ (name))
66
+ (element
67
+ (name))
68
+ (element
69
+ (name))))))))
@@ -0,0 +1,10 @@
1
+ ============
2
+ Missing template error
3
+ ============
4
+ one
5
+
6
+ -------------
7
+
8
+ (ERROR
9
+ (name))
10
+
@@ -0,0 +1,175 @@
1
+ =======
2
+ top level if condition
3
+ =======
4
+ [template]
5
+ [if="baz"]
6
+ one
7
+ ------
8
+
9
+ (document
10
+ (template
11
+ (if_macro
12
+ (function
13
+ (name))
14
+ (children
15
+ (element
16
+ (name))))))
17
+
18
+ ========
19
+ nested if condition
20
+ ========
21
+ [ template ]
22
+ one
23
+ [ if="foobar" ]
24
+ two
25
+ -------
26
+
27
+ (document
28
+ (template
29
+ (element
30
+ (name)
31
+ (children
32
+ (if_macro
33
+ (function
34
+ (name))
35
+ (children
36
+ (element
37
+ (name))))))))
38
+
39
+ ==========
40
+ else condition
41
+ ==========
42
+ [ template ]
43
+ one
44
+ [if="foobar"]
45
+ two
46
+ [else]
47
+ three
48
+
49
+ -------
50
+
51
+ (document
52
+ (template
53
+ (element
54
+ (name)
55
+ (children
56
+ (if_macro
57
+ (function
58
+ (name))
59
+ (children
60
+ (element
61
+ (name))))
62
+ (else_macro
63
+ (children
64
+ (element
65
+ (name))))))))
66
+
67
+ ============
68
+ top level iteration
69
+ ============
70
+
71
+ [template]
72
+ [for="post in posts"]
73
+ one
74
+
75
+ -------
76
+
77
+ (document
78
+ (template
79
+ (for_macro
80
+ (name)
81
+ (list_name)
82
+ (children
83
+ (element
84
+ (name))))))
85
+
86
+ =============
87
+ iteration
88
+ =============
89
+ [ template ]
90
+ one
91
+ [ for="post in posts" ]
92
+ two
93
+
94
+ ----------
95
+
96
+ (document
97
+ (template
98
+ (element
99
+ (name)
100
+ (children
101
+ (for_macro
102
+ (name)
103
+ (list_name)
104
+ (children
105
+ (element
106
+ (name))))))))
107
+
108
+ ===========
109
+ combo iteration
110
+ ===========
111
+ [template]
112
+ one
113
+ [for="post in posts"]
114
+ two
115
+ [if="true"]
116
+ three
117
+ [else]
118
+ four
119
+
120
+ ----------
121
+
122
+ (document
123
+ (template
124
+ (element
125
+ (name)
126
+ (children
127
+ (for_macro
128
+ (name)
129
+ (list_name)
130
+ (children
131
+ (element
132
+ (name)
133
+ (children
134
+ (if_macro
135
+ (function
136
+ (name))
137
+ (children
138
+ (element
139
+ (name))))
140
+ (else_macro
141
+ (children
142
+ (element
143
+ (name))))))))))))
144
+
145
+ =========
146
+ Sibling macros
147
+ ===========
148
+ [template]
149
+ [for="post in posts"]
150
+ two
151
+ [if="true"]
152
+ three
153
+ [else]
154
+ four
155
+
156
+ ------------
157
+
158
+ (document
159
+ (template
160
+ (for_macro
161
+ (name)
162
+ (list_name)
163
+ (children
164
+ (element
165
+ (name))
166
+ (if_macro
167
+ (function
168
+ (name))
169
+ (children
170
+ (element
171
+ (name))))
172
+ (else_macro
173
+ (children
174
+ (element
175
+ (name))))))))
@@ -0,0 +1,81 @@
1
+ =======
2
+ style declaration
3
+ =======
4
+ [style]
5
+ mainContainer {
6
+ int: 38;
7
+ bool: true;
8
+ float: 0.3;
9
+ string: "foobar";
10
+ func: outline(0, 0, 1, 0);
11
+ }
12
+
13
+ other {
14
+ bool: false;
15
+ }
16
+ ------
17
+
18
+ (document
19
+ (style_template
20
+ (style
21
+ (name)
22
+ (children
23
+ (element
24
+ (name)
25
+ (style_int))
26
+ (element
27
+ (name)
28
+ (style_bool))
29
+ (element
30
+ (name)
31
+ (style_float))
32
+ (element
33
+ (name)
34
+ (style_string))
35
+ (element
36
+ (name)
37
+ (style_func
38
+ (function)
39
+ (value)))))
40
+ (style
41
+ (name)
42
+ (children
43
+ (element
44
+ (name)
45
+ (style_bool))))))
46
+
47
+ =========
48
+ style with template
49
+ =========
50
+ [template]
51
+ vblock {
52
+ ...styleSpread
53
+ }
54
+
55
+ [style]
56
+ styleSpread {
57
+ background: rgb(86, 116, 25);
58
+ outline_color: rgba(191, 112, 112, 0.67);
59
+ }
60
+ ---------
61
+ (document
62
+ (template
63
+ (element
64
+ (name)
65
+ (attributes
66
+ (style
67
+ (name)))))
68
+ (style_template
69
+ (style
70
+ (name)
71
+ (children
72
+ (element
73
+ (name)
74
+ (style_func
75
+ (function)
76
+ (value)))
77
+ (element
78
+ (name)
79
+ (style_func
80
+ (function)
81
+ (value)))))))