herb 0.7.4 → 0.8.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 (171) hide show
  1. checksums.yaml +4 -4
  2. data/Makefile +8 -5
  3. data/config.yml +40 -20
  4. data/ext/herb/error_helpers.c +57 -3
  5. data/ext/herb/error_helpers.h +1 -1
  6. data/ext/herb/extconf.rb +1 -0
  7. data/ext/herb/extension.c +10 -24
  8. data/ext/herb/extension_helpers.c +12 -18
  9. data/ext/herb/extension_helpers.h +4 -4
  10. data/ext/herb/nodes.c +72 -37
  11. data/herb.gemspec +0 -2
  12. data/lib/herb/ast/helpers.rb +11 -0
  13. data/lib/herb/ast/node.rb +15 -6
  14. data/lib/herb/ast/nodes.rb +609 -392
  15. data/lib/herb/cli.rb +31 -0
  16. data/lib/herb/colors.rb +82 -0
  17. data/lib/herb/engine/compiler.rb +140 -14
  18. data/lib/herb/engine/debug_visitor.rb +1 -5
  19. data/lib/herb/engine/parser_error_overlay.rb +1 -1
  20. data/lib/herb/engine.rb +18 -20
  21. data/lib/herb/errors.rb +166 -56
  22. data/lib/herb/location.rb +2 -2
  23. data/lib/herb/project.rb +86 -21
  24. data/lib/herb/token.rb +14 -2
  25. data/lib/herb/version.rb +1 -1
  26. data/lib/herb.rb +1 -0
  27. data/sig/herb/ast/helpers.rbs +3 -0
  28. data/sig/herb/ast/node.rbs +12 -5
  29. data/sig/herb/ast/nodes.rbs +124 -62
  30. data/sig/herb/colors.rbs +35 -0
  31. data/sig/herb/engine/compiler.rbs +23 -1
  32. data/sig/herb/errors.rbs +74 -20
  33. data/sig/herb/token.rbs +8 -0
  34. data/sig/herb_c_extension.rbs +1 -1
  35. data/sig/serialized_ast_errors.rbs +8 -0
  36. data/src/analyze.c +461 -249
  37. data/src/analyze_helpers.c +5 -0
  38. data/src/analyze_missing_end.c +147 -0
  39. data/src/analyze_transform.c +196 -0
  40. data/src/analyzed_ruby.c +23 -2
  41. data/src/ast_node.c +14 -17
  42. data/src/ast_nodes.c +179 -181
  43. data/src/ast_pretty_print.c +232 -232
  44. data/src/element_source.c +7 -6
  45. data/src/errors.c +272 -152
  46. data/src/extract.c +92 -34
  47. data/src/herb.c +37 -49
  48. data/src/html_util.c +34 -96
  49. data/src/include/analyze.h +10 -2
  50. data/src/include/analyze_helpers.h +3 -0
  51. data/src/include/analyzed_ruby.h +4 -2
  52. data/src/include/ast_node.h +4 -4
  53. data/src/include/ast_nodes.h +68 -67
  54. data/src/include/ast_pretty_print.h +2 -2
  55. data/src/include/element_source.h +3 -1
  56. data/src/include/errors.h +42 -26
  57. data/src/include/extract.h +4 -4
  58. data/src/include/herb.h +6 -7
  59. data/src/include/html_util.h +4 -5
  60. data/src/include/lexer.h +1 -3
  61. data/src/include/lexer_peek_helpers.h +21 -19
  62. data/src/include/lexer_struct.h +12 -10
  63. data/src/include/location.h +10 -13
  64. data/src/include/macros.h +4 -0
  65. data/src/include/parser.h +12 -6
  66. data/src/include/parser_helpers.h +26 -16
  67. data/src/include/position.h +3 -14
  68. data/src/include/pretty_print.h +38 -28
  69. data/src/include/prism_helpers.h +1 -1
  70. data/src/include/range.h +4 -13
  71. data/src/include/token.h +5 -11
  72. data/src/include/token_struct.h +2 -2
  73. data/src/include/utf8.h +3 -2
  74. data/src/include/util/hb_arena.h +31 -0
  75. data/src/include/util/hb_arena_debug.h +8 -0
  76. data/src/include/util/hb_array.h +33 -0
  77. data/src/include/util/hb_buffer.h +34 -0
  78. data/src/include/util/hb_string.h +29 -0
  79. data/src/include/util/hb_system.h +9 -0
  80. data/src/include/util.h +3 -14
  81. data/src/include/version.h +1 -1
  82. data/src/include/visitor.h +1 -1
  83. data/src/io.c +7 -4
  84. data/src/lexer.c +62 -88
  85. data/src/lexer_peek_helpers.c +42 -38
  86. data/src/location.c +9 -37
  87. data/src/main.c +19 -23
  88. data/src/parser.c +373 -313
  89. data/src/parser_helpers.c +60 -54
  90. data/src/parser_match_tags.c +316 -0
  91. data/src/pretty_print.c +88 -117
  92. data/src/prism_helpers.c +7 -7
  93. data/src/range.c +2 -35
  94. data/src/token.c +36 -87
  95. data/src/utf8.c +4 -4
  96. data/src/util/hb_arena.c +179 -0
  97. data/src/util/hb_arena_debug.c +237 -0
  98. data/src/{array.c → util/hb_array.c} +26 -27
  99. data/src/util/hb_buffer.c +203 -0
  100. data/src/util/hb_string.c +85 -0
  101. data/src/util/hb_system.c +30 -0
  102. data/src/util.c +29 -99
  103. data/src/visitor.c +54 -54
  104. data/templates/ext/herb/error_helpers.c.erb +3 -3
  105. data/templates/ext/herb/error_helpers.h.erb +1 -1
  106. data/templates/ext/herb/nodes.c.erb +11 -6
  107. data/templates/java/error_helpers.c.erb +75 -0
  108. data/templates/java/error_helpers.h.erb +20 -0
  109. data/templates/java/nodes.c.erb +97 -0
  110. data/templates/java/nodes.h.erb +23 -0
  111. data/templates/java/org/herb/ast/Errors.java.erb +121 -0
  112. data/templates/java/org/herb/ast/NodeVisitor.java.erb +14 -0
  113. data/templates/java/org/herb/ast/Nodes.java.erb +220 -0
  114. data/templates/java/org/herb/ast/Visitor.java.erb +56 -0
  115. data/templates/javascript/packages/core/src/visitor.ts.erb +29 -1
  116. data/templates/javascript/packages/node/extension/error_helpers.cpp.erb +8 -8
  117. data/templates/javascript/packages/node/extension/error_helpers.h.erb +1 -1
  118. data/templates/javascript/packages/node/extension/nodes.cpp.erb +9 -9
  119. data/templates/javascript/packages/node/extension/nodes.h.erb +1 -1
  120. data/templates/lib/herb/ast/nodes.rb.erb +28 -16
  121. data/templates/lib/herb/errors.rb.erb +17 -12
  122. data/templates/rust/src/ast/nodes.rs.erb +220 -0
  123. data/templates/rust/src/errors.rs.erb +216 -0
  124. data/templates/rust/src/nodes.rs.erb +374 -0
  125. data/templates/src/analyze_missing_end.c.erb +36 -0
  126. data/templates/src/analyze_transform.c.erb +24 -0
  127. data/templates/src/ast_nodes.c.erb +14 -16
  128. data/templates/src/ast_pretty_print.c.erb +36 -36
  129. data/templates/src/errors.c.erb +36 -38
  130. data/templates/src/include/ast_nodes.h.erb +11 -10
  131. data/templates/src/include/ast_pretty_print.h.erb +2 -2
  132. data/templates/src/include/errors.h.erb +9 -9
  133. data/templates/src/parser_match_tags.c.erb +38 -0
  134. data/templates/src/visitor.c.erb +4 -4
  135. data/templates/template.rb +22 -3
  136. data/templates/wasm/error_helpers.cpp.erb +9 -9
  137. data/templates/wasm/error_helpers.h.erb +1 -1
  138. data/templates/wasm/nodes.cpp.erb +9 -9
  139. data/templates/wasm/nodes.h.erb +1 -1
  140. data/vendor/prism/Rakefile +4 -1
  141. data/vendor/prism/config.yml +2 -1
  142. data/vendor/prism/include/prism/ast.h +31 -1
  143. data/vendor/prism/include/prism/diagnostic.h +1 -0
  144. data/vendor/prism/include/prism/version.h +3 -3
  145. data/vendor/prism/src/diagnostic.c +3 -1
  146. data/vendor/prism/src/prism.c +130 -71
  147. data/vendor/prism/src/util/pm_string.c +6 -8
  148. data/vendor/prism/templates/include/prism/ast.h.erb +2 -0
  149. data/vendor/prism/templates/java/org/prism/Loader.java.erb +2 -2
  150. data/vendor/prism/templates/javascript/src/deserialize.js.erb +2 -2
  151. data/vendor/prism/templates/lib/prism/serialize.rb.erb +2 -2
  152. data/vendor/prism/templates/sig/prism.rbs.erb +4 -0
  153. data/vendor/prism/templates/src/diagnostic.c.erb +1 -0
  154. metadata +34 -21
  155. data/lib/herb/libherb/array.rb +0 -51
  156. data/lib/herb/libherb/ast_node.rb +0 -50
  157. data/lib/herb/libherb/buffer.rb +0 -56
  158. data/lib/herb/libherb/extract_result.rb +0 -20
  159. data/lib/herb/libherb/lex_result.rb +0 -32
  160. data/lib/herb/libherb/libherb.rb +0 -52
  161. data/lib/herb/libherb/parse_result.rb +0 -20
  162. data/lib/herb/libherb/token.rb +0 -46
  163. data/lib/herb/libherb.rb +0 -35
  164. data/src/buffer.c +0 -232
  165. data/src/include/array.h +0 -33
  166. data/src/include/buffer.h +0 -39
  167. data/src/include/json.h +0 -28
  168. data/src/include/memory.h +0 -12
  169. data/src/json.c +0 -205
  170. data/src/memory.c +0 -53
  171. data/src/position.c +0 -33
metadata CHANGED
@@ -1,13 +1,13 @@
1
1
  --- !ruby/object:Gem::Specification
2
2
  name: herb
3
3
  version: !ruby/object:Gem::Version
4
- version: 0.7.4
4
+ version: 0.8.0
5
5
  platform: ruby
6
6
  authors:
7
7
  - Marco Roth
8
8
  bindir: exe
9
9
  cert_chain: []
10
- date: 2025-09-26 00:00:00.000000000 Z
10
+ date: 1980-01-02 00:00:00.000000000 Z
11
11
  dependencies: []
12
12
  description: Powerful and seamless HTML-aware ERB parsing and tooling.
13
13
  email:
@@ -40,6 +40,7 @@ files:
40
40
  - lib/herb/ast/node.rb
41
41
  - lib/herb/ast/nodes.rb
42
42
  - lib/herb/cli.rb
43
+ - lib/herb/colors.rb
43
44
  - lib/herb/engine.rb
44
45
  - lib/herb/engine/compiler.rb
45
46
  - lib/herb/engine/debug_visitor.rb
@@ -53,15 +54,6 @@ files:
53
54
  - lib/herb/engine/validators/security_validator.rb
54
55
  - lib/herb/errors.rb
55
56
  - lib/herb/lex_result.rb
56
- - lib/herb/libherb.rb
57
- - lib/herb/libherb/array.rb
58
- - lib/herb/libherb/ast_node.rb
59
- - lib/herb/libherb/buffer.rb
60
- - lib/herb/libherb/extract_result.rb
61
- - lib/herb/libherb/lex_result.rb
62
- - lib/herb/libherb/libherb.rb
63
- - lib/herb/libherb/parse_result.rb
64
- - lib/herb/libherb/token.rb
65
57
  - lib/herb/location.rb
66
58
  - lib/herb/parse_result.rb
67
59
  - lib/herb/position.rb
@@ -78,6 +70,7 @@ files:
78
70
  - sig/herb/ast/helpers.rbs
79
71
  - sig/herb/ast/node.rbs
80
72
  - sig/herb/ast/nodes.rbs
73
+ - sig/herb/colors.rbs
81
74
  - sig/herb/engine.rbs
82
75
  - sig/herb/engine/compiler.rbs
83
76
  - sig/herb/engine/debug.rbs
@@ -108,12 +101,12 @@ files:
108
101
  - sig/serialized_ast_nodes.rbs
109
102
  - src/analyze.c
110
103
  - src/analyze_helpers.c
104
+ - src/analyze_missing_end.c
105
+ - src/analyze_transform.c
111
106
  - src/analyzed_ruby.c
112
- - src/array.c
113
107
  - src/ast_node.c
114
108
  - src/ast_nodes.c
115
109
  - src/ast_pretty_print.c
116
- - src/buffer.c
117
110
  - src/element_source.c
118
111
  - src/errors.c
119
112
  - src/extract.c
@@ -122,24 +115,20 @@ files:
122
115
  - src/include/analyze.h
123
116
  - src/include/analyze_helpers.h
124
117
  - src/include/analyzed_ruby.h
125
- - src/include/array.h
126
118
  - src/include/ast_node.h
127
119
  - src/include/ast_nodes.h
128
120
  - src/include/ast_pretty_print.h
129
- - src/include/buffer.h
130
121
  - src/include/element_source.h
131
122
  - src/include/errors.h
132
123
  - src/include/extract.h
133
124
  - src/include/herb.h
134
125
  - src/include/html_util.h
135
126
  - src/include/io.h
136
- - src/include/json.h
137
127
  - src/include/lexer.h
138
128
  - src/include/lexer_peek_helpers.h
139
129
  - src/include/lexer_struct.h
140
130
  - src/include/location.h
141
131
  - src/include/macros.h
142
- - src/include/memory.h
143
132
  - src/include/parser.h
144
133
  - src/include/parser_helpers.h
145
134
  - src/include/position.h
@@ -152,18 +141,22 @@ files:
152
141
  - src/include/token_struct.h
153
142
  - src/include/utf8.h
154
143
  - src/include/util.h
144
+ - src/include/util/hb_arena.h
145
+ - src/include/util/hb_arena_debug.h
146
+ - src/include/util/hb_array.h
147
+ - src/include/util/hb_buffer.h
148
+ - src/include/util/hb_string.h
149
+ - src/include/util/hb_system.h
155
150
  - src/include/version.h
156
151
  - src/include/visitor.h
157
152
  - src/io.c
158
- - src/json.c
159
153
  - src/lexer.c
160
154
  - src/lexer_peek_helpers.c
161
155
  - src/location.c
162
156
  - src/main.c
163
- - src/memory.c
164
157
  - src/parser.c
165
158
  - src/parser_helpers.c
166
- - src/position.c
159
+ - src/parser_match_tags.c
167
160
  - src/pretty_print.c
168
161
  - src/prism_helpers.c
169
162
  - src/range.c
@@ -172,11 +165,25 @@ files:
172
165
  - src/token_matchers.c
173
166
  - src/utf8.c
174
167
  - src/util.c
168
+ - src/util/hb_arena.c
169
+ - src/util/hb_arena_debug.c
170
+ - src/util/hb_array.c
171
+ - src/util/hb_buffer.c
172
+ - src/util/hb_string.c
173
+ - src/util/hb_system.c
175
174
  - src/visitor.c
176
175
  - templates/ext/herb/error_helpers.c.erb
177
176
  - templates/ext/herb/error_helpers.h.erb
178
177
  - templates/ext/herb/nodes.c.erb
179
178
  - templates/ext/herb/nodes.h.erb
179
+ - templates/java/error_helpers.c.erb
180
+ - templates/java/error_helpers.h.erb
181
+ - templates/java/nodes.c.erb
182
+ - templates/java/nodes.h.erb
183
+ - templates/java/org/herb/ast/Errors.java.erb
184
+ - templates/java/org/herb/ast/NodeVisitor.java.erb
185
+ - templates/java/org/herb/ast/Nodes.java.erb
186
+ - templates/java/org/herb/ast/Visitor.java.erb
180
187
  - templates/javascript/packages/core/src/errors.ts.erb
181
188
  - templates/javascript/packages/core/src/node-type-guards.ts.erb
182
189
  - templates/javascript/packages/core/src/nodes.ts.erb
@@ -188,14 +195,20 @@ files:
188
195
  - templates/lib/herb/ast/nodes.rb.erb
189
196
  - templates/lib/herb/errors.rb.erb
190
197
  - templates/lib/herb/visitor.rb.erb
198
+ - templates/rust/src/ast/nodes.rs.erb
199
+ - templates/rust/src/errors.rs.erb
200
+ - templates/rust/src/nodes.rs.erb
191
201
  - templates/sig/serialized_ast_errors.rbs.erb
192
202
  - templates/sig/serialized_ast_nodes.rbs.erb
203
+ - templates/src/analyze_missing_end.c.erb
204
+ - templates/src/analyze_transform.c.erb
193
205
  - templates/src/ast_nodes.c.erb
194
206
  - templates/src/ast_pretty_print.c.erb
195
207
  - templates/src/errors.c.erb
196
208
  - templates/src/include/ast_nodes.h.erb
197
209
  - templates/src/include/ast_pretty_print.h.erb
198
210
  - templates/src/include/errors.h.erb
211
+ - templates/src/parser_match_tags.c.erb
199
212
  - templates/src/visitor.c.erb
200
213
  - templates/template.rb
201
214
  - templates/wasm/error_helpers.cpp.erb
@@ -307,7 +320,7 @@ required_rubygems_version: !ruby/object:Gem::Requirement
307
320
  - !ruby/object:Gem::Version
308
321
  version: '0'
309
322
  requirements: []
310
- rubygems_version: 3.6.2
323
+ rubygems_version: 3.6.9
311
324
  specification_version: 4
312
325
  summary: Powerful and seamless HTML-aware ERB parsing and tooling.
313
326
  test_files: []
@@ -1,51 +0,0 @@
1
- # frozen_string_literal: true
2
- # typed: ignore
3
-
4
- # rbs_inline: disabled
5
-
6
- require "forwardable"
7
-
8
- module Herb
9
- module LibHerb
10
- attach_function :array_get, [:pointer, :int], :pointer
11
- attach_function :array_capacity, [:pointer], :size_t
12
- attach_function :array_size, [:pointer], :size_t
13
-
14
- class Array
15
- extend Forwardable
16
-
17
- attr_reader :pointer, :item_class
18
-
19
- def_delegators :items, :first, :last, :[]
20
-
21
- def initialize(pointer, item_class)
22
- @pointer = pointer
23
- @item_class = item_class
24
- end
25
-
26
- def capacity
27
- LibHerb.array_capacity(pointer)
28
- end
29
-
30
- def size
31
- LibHerb.array_size(pointer)
32
- end
33
-
34
- def item_pointers
35
- size.times.map { |item|
36
- LibHerb.array_get(pointer, item)
37
- }
38
- end
39
-
40
- def items
41
- item_pointers.map { |item_pointer|
42
- item_class.new(item_pointer)
43
- }
44
- end
45
-
46
- def inspect
47
- %(#<#{self.class} size=#{size} capacity=#{capacity} item_class=#{item_class} pointer=#{pointer}>)
48
- end
49
- end
50
- end
51
- end
@@ -1,50 +0,0 @@
1
- # frozen_string_literal: true
2
- # typed: ignore
3
-
4
- # rbs_inline: disabled
5
-
6
- module Herb
7
- module LibHerb
8
- attach_function :ast_node_type, [:pointer], :int
9
- attach_function :ast_node_type_to_string, [:pointer], :string
10
- attach_function :ast_node_children, [:pointer], :pointer
11
- attach_function :ast_node_child_count, [:pointer], :size_t
12
- attach_function :ast_pretty_print_node, [:pointer, :size_t, :size_t, :pointer], :void
13
- attach_function :ast_node_free, [:pointer], :void
14
-
15
- class ASTNode
16
- attr_reader :pointer
17
-
18
- def initialize(pointer)
19
- @pointer = pointer
20
- end
21
-
22
- def type_int
23
- LibHerb.ast_node_type(pointer)
24
- end
25
-
26
- def type
27
- LibHerb.ast_node_type_to_string(pointer)
28
- end
29
-
30
- def child_count
31
- LibHerb.ast_node_child_count(pointer)
32
- end
33
-
34
- def children
35
- LibHerb::Array.new(
36
- LibHerb.ast_node_children(pointer),
37
- ASTNode
38
- )
39
- end
40
-
41
- def inspect
42
- LibHerb::Buffer.with do |output|
43
- LibHerb.ast_pretty_print_node(pointer, 0, 0, output.pointer)
44
-
45
- output.read.force_encoding("utf-8") # TODO: remove force_encoding
46
- end
47
- end
48
- end
49
- end
50
- end
@@ -1,56 +0,0 @@
1
- # frozen_string_literal: true
2
- # typed: ignore
3
-
4
- # rbs_inline: disabled
5
-
6
- module Herb
7
- module LibHerb
8
- attach_function :buffer_init, [:pointer], :bool
9
- attach_function :buffer_free, [:pointer], :void
10
- attach_function :buffer_value, [:pointer], :pointer
11
- attach_function :buffer_length, [:pointer], :size_t
12
- attach_function :buffer_capacity, [:pointer], :size_t
13
- attach_function :buffer_sizeof, [], :size_t
14
- attach_function :buffer_append, [:pointer, :pointer], :void
15
-
16
- class Buffer
17
- SIZEOF = LibHerb.buffer_sizeof
18
-
19
- attr_reader :pointer
20
-
21
- def initialize(pointer)
22
- @pointer = pointer
23
- end
24
-
25
- def append(string)
26
- LibHerb.buffer_append(pointer, string)
27
- end
28
-
29
- def value
30
- LibHerb.buffer_value(pointer)
31
- end
32
-
33
- def length
34
- LibHerb.buffer_length(pointer)
35
- end
36
-
37
- def capacity
38
- LibHerb.buffer_capacity(pointer)
39
- end
40
-
41
- def read
42
- value.read_string(length)
43
- end
44
-
45
- def self.with
46
- FFI::MemoryPointer.new(SIZEOF) do |pointer|
47
- raise "couldn't allocate Buffer" unless LibHerb.buffer_init(pointer)
48
-
49
- return yield new(pointer)
50
- ensure
51
- LibHerb.buffer_free(pointer)
52
- end
53
- end
54
- end
55
- end
56
- end
@@ -1,20 +0,0 @@
1
- # frozen_string_literal: true
2
- # typed: ignore
3
-
4
- # rbs_inline: disabled
5
-
6
- require "forwardable"
7
-
8
- module Herb
9
- class ExtractResult
10
- extend Forwardable
11
-
12
- def_delegators :@buffer, :read
13
-
14
- attr_accessor :buffer
15
-
16
- def initialize(pointer)
17
- @buffer = LibHerb::Buffer.new(pointer)
18
- end
19
- end
20
- end
@@ -1,32 +0,0 @@
1
- # frozen_string_literal: true
2
- # typed: ignore
3
-
4
- # rbs_inline: disabled
5
-
6
- require "forwardable"
7
-
8
- module Herb
9
- class LexResult
10
- extend Forwardable
11
-
12
- def_delegators :@array, :items, :size, :capacity
13
-
14
- attr_accessor :array
15
-
16
- def initialize(pointer)
17
- @array = LibHerb::Array.new(pointer, LibHerb::Token)
18
- end
19
-
20
- def as_json
21
- JSON.parse(to_json)
22
- end
23
-
24
- def to_json(*_args)
25
- "[#{@array.items.map(&:to_json).join(", ")}]"
26
- end
27
-
28
- def inspect
29
- @array.items.map(&:inspect).join("\n")
30
- end
31
- end
32
- end
@@ -1,52 +0,0 @@
1
- # frozen_string_literal: true
2
- # typed: ignore
3
-
4
- # rbs_inline: disabled
5
-
6
- require "herb/libherb/ast_node"
7
- require "herb/libherb/buffer"
8
- require "herb/libherb/array"
9
- require "herb/libherb/token"
10
-
11
- require "herb/libherb/lex_result"
12
- require "herb/libherb/parse_result"
13
-
14
- module Herb
15
- VERSION = LibHerb.herb_version.read_string
16
-
17
- def self.parse(source)
18
- ParseResult.new(
19
- LibHerb.herb_parse(source)
20
- )
21
- end
22
-
23
- def self.lex(source)
24
- LexResult.new(
25
- LibHerb.herb_lex(source)
26
- )
27
- end
28
-
29
- def self.lex_to_json(source)
30
- LibHerb::Buffer.with do |output|
31
- LibHerb.herb_lex_json_to_buffer(source, output.pointer)
32
-
33
- JSON.parse(output.read.force_encoding("utf-8"))
34
- end
35
- end
36
-
37
- def self.extract_ruby(source)
38
- LibHerb::Buffer.with do |output|
39
- LibHerb.herb_extract_ruby_to_buffer(source, output.pointer)
40
-
41
- output.read
42
- end
43
- end
44
-
45
- def self.extract_html(source)
46
- LibHerb::Buffer.with do |output|
47
- LibHerb.herb_extract_html_to_buffer(source, output.pointer)
48
-
49
- output.read
50
- end
51
- end
52
- end
@@ -1,20 +0,0 @@
1
- # frozen_string_literal: true
2
- # typed: ignore
3
-
4
- # rbs_inline: disabled
5
-
6
- require "forwardable"
7
-
8
- module Herb
9
- class ParseResult
10
- extend Forwardable
11
-
12
- def_delegators :@root_node, :type, :child_count
13
-
14
- attr_accessor :root_node
15
-
16
- def initialize(pointer)
17
- @root_node = LibHerb::ASTNode.new(pointer)
18
- end
19
- end
20
- end
@@ -1,46 +0,0 @@
1
- # frozen_string_literal: true
2
- # typed: ignore
3
-
4
- # rbs_inline: disabled
5
-
6
- module Herb
7
- module LibHerb
8
- attach_function :token_to_string, [:pointer], :string
9
- attach_function :token_to_json, [:pointer], :string
10
- attach_function :token_type_to_string, [:int], :pointer
11
- attach_function :token_value, [:pointer], :pointer
12
- attach_function :token_type, [:pointer], :int
13
-
14
- class Token
15
- attr_reader :pointer
16
-
17
- def initialize(pointer)
18
- @pointer = pointer
19
- end
20
-
21
- def value
22
- @value ||= LibHerb.token_value(pointer).read_string
23
- end
24
-
25
- def type
26
- @type ||= LibHerb.token_type_to_string(type_int).read_string
27
- end
28
-
29
- def type_int
30
- @type_int ||= LibHerb.token_type(pointer)
31
- end
32
-
33
- def inspect
34
- LibHerb.token_to_string(pointer).force_encoding("utf-8")
35
- end
36
-
37
- def as_json
38
- JSON.parse(to_json)
39
- end
40
-
41
- def to_json(*_args)
42
- LibHerb.token_to_json(pointer).force_encoding("utf-8")
43
- end
44
- end
45
- end
46
- end
data/lib/herb/libherb.rb DELETED
@@ -1,35 +0,0 @@
1
- # frozen_string_literal: true
2
- # typed: ignore
3
-
4
- # rbs_inline: disabled
5
-
6
- require "ffi"
7
- require "rbconfig"
8
-
9
- module Herb
10
- module LibHerb
11
- extend FFI::Library
12
-
13
- def self.library_extension
14
- RbConfig::CONFIG["DLEXT"]
15
- end
16
-
17
- def self.library_name
18
- "libherb.#{library_extension}"
19
- end
20
-
21
- def self.library_path
22
- File.expand_path("../../#{library_name}", __dir__)
23
- end
24
-
25
- ffi_lib(library_path)
26
-
27
- attach_function :herb_lex_to_buffer, [:pointer, :pointer], :void
28
- attach_function :herb_lex_json_to_buffer, [:pointer, :pointer], :void
29
- attach_function :herb_lex, [:pointer], :pointer
30
- attach_function :herb_parse, [:pointer], :pointer
31
- attach_function :herb_extract_ruby_to_buffer, [:pointer, :pointer], :void
32
- attach_function :herb_extract_html_to_buffer, [:pointer, :pointer], :void
33
- attach_function :herb_version, [], :pointer
34
- end
35
- end