parsanol 1.3.23 → 1.3.24
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.
- checksums.yaml +4 -4
- data/Cargo.lock +2 -0
- data/lib/parsanol/native.rb +15 -0
- data/lib/parsanol/parser.rb +6 -2
- data/lib/parsanol/version.rb +1 -1
- metadata +1 -1
checksums.yaml
CHANGED
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
---
|
|
2
2
|
SHA256:
|
|
3
|
-
metadata.gz:
|
|
4
|
-
data.tar.gz:
|
|
3
|
+
metadata.gz: 0bc2202f0fc776a4211bfdb92685bef4060456ed45f2dcc7d1a6da101ea43b6d
|
|
4
|
+
data.tar.gz: 9fcbbedcd54b53cee1fdf09ff749f3f61f247288f71c5e74ca7684b357603093
|
|
5
5
|
SHA512:
|
|
6
|
-
metadata.gz:
|
|
7
|
-
data.tar.gz:
|
|
6
|
+
metadata.gz: 959e445f1d28863e471658e332596a0c9ad254cad3272011841e29305c27449760c1330bfd7165d8cd81d7dedc44e48d38c582badf1b1592b5b02a16fcfe45f4
|
|
7
|
+
data.tar.gz: ecbaada2b340858f93b22bd30a0065ec5183e688d14783de1cba0b74ba591b9680eeebbc3798302e069c323467197f38809a9fbbf7422a7e12c72e4693add9e8
|
data/Cargo.lock
CHANGED
|
@@ -253,6 +253,7 @@ checksum = "9f7c3e4beb33f85d45ae3e3a1792185706c8e16d043238c593331cc7cd313b50"
|
|
|
253
253
|
[[package]]
|
|
254
254
|
name = "parsanol"
|
|
255
255
|
version = "0.5.1"
|
|
256
|
+
source = "git+https://github.com/parsanol/parsanol-rs?branch=main#0191b5c95ae0808957bd771a68387599f488cb61"
|
|
256
257
|
dependencies = [
|
|
257
258
|
"ahash",
|
|
258
259
|
"getrandom 0.3.4",
|
|
@@ -269,6 +270,7 @@ dependencies = [
|
|
|
269
270
|
[[package]]
|
|
270
271
|
name = "parsanol-derive"
|
|
271
272
|
version = "0.5.1"
|
|
273
|
+
source = "git+https://github.com/parsanol/parsanol-rs?branch=main#0191b5c95ae0808957bd771a68387599f488cb61"
|
|
272
274
|
dependencies = [
|
|
273
275
|
"proc-macro2",
|
|
274
276
|
"quote",
|
data/lib/parsanol/native.rb
CHANGED
|
@@ -246,6 +246,21 @@ module Parsanol
|
|
|
246
246
|
raise_native_parse_error(e, grammar_json, input)
|
|
247
247
|
end
|
|
248
248
|
|
|
249
|
+
# Prefix-mode parse (partial match allowed): the grammar registers
|
|
250
|
+
# by handle exactly like #parse; the Rust side returns
|
|
251
|
+
# [value, end_pos] with trailing input unconsumed.
|
|
252
|
+
def parse_prefix(grammar, input)
|
|
253
|
+
handle = Parser.grammar_handle(grammar)
|
|
254
|
+
|
|
255
|
+
begin
|
|
256
|
+
value, end_pos = _parse_handle_prefix(handle, input)
|
|
257
|
+
[value, end_pos]
|
|
258
|
+
rescue ArgumentError
|
|
259
|
+
Parser.invalidate_handle(handle)
|
|
260
|
+
_parse_handle_prefix(Parser.grammar_handle(grammar), input)
|
|
261
|
+
end
|
|
262
|
+
end
|
|
263
|
+
|
|
249
264
|
# Grammar-atom path: registers once and parses by Rust-side handle,
|
|
250
265
|
# so steady-state calls marshal no JSON and copy no input string.
|
|
251
266
|
def parse_atom_grammar(grammar, input)
|
data/lib/parsanol/parser.rb
CHANGED
|
@@ -123,8 +123,7 @@ module Parsanol
|
|
|
123
123
|
# forwarding options via super produces; :mode must be honored
|
|
124
124
|
# wherever it appears, or those callers silently get the native path.
|
|
125
125
|
mode = opts.delete(:mode) ||
|
|
126
|
-
(if Parsanol::Native.available? && !opts.key?(:
|
|
127
|
-
!opts.key?(:reporter)
|
|
126
|
+
(if Parsanol::Native.available? && !opts.key?(:reporter)
|
|
128
127
|
:native
|
|
129
128
|
else
|
|
130
129
|
:ruby
|
|
@@ -219,6 +218,11 @@ module Parsanol
|
|
|
219
218
|
#
|
|
220
219
|
def parse_native(input, opts)
|
|
221
220
|
if Parsanol::Native.available?
|
|
221
|
+
if opts.key?(:prefix) && opts[:prefix]
|
|
222
|
+
value, _end_pos = Parsanol::Native.parse_prefix(root, input)
|
|
223
|
+
return value
|
|
224
|
+
end
|
|
225
|
+
|
|
222
226
|
Parsanol::Native.parse(root, input)
|
|
223
227
|
else
|
|
224
228
|
Parsanol::Atoms::Base.instance_method(:parse).bind_call(self, input,
|
data/lib/parsanol/version.rb
CHANGED