now ethically opposed to special casing forced termination. users can just append whitespace
This commit is contained in:
parent
2a2275136a
commit
60943446c0
2 changed files with 9 additions and 25 deletions
|
@ -59,10 +59,6 @@ start(<<S, Rest/binary>>, Stack, Callbacks, Opts) when ?is_nonzero(S) ->
|
||||||
integer(Rest, Stack, Callbacks, Opts, [S]);
|
integer(Rest, Stack, Callbacks, Opts, [S]);
|
||||||
start(<<?solidus, Rest/binary>>, Stack, Callbacks, ?comments_true(Opts)) ->
|
start(<<?solidus, Rest/binary>>, Stack, Callbacks, ?comments_true(Opts)) ->
|
||||||
maybe_comment(Rest, fun(Resume) -> start(Resume, Stack, Callbacks, Opts) end);
|
maybe_comment(Rest, fun(Resume) -> start(Resume, Stack, Callbacks, Opts) end);
|
||||||
start(<<>>, [], Callbacks, Opts) ->
|
|
||||||
fun(<<>>) -> {fold(completed_parse, Callbacks), <<>>}
|
|
||||||
; (Stream) -> start(Stream, [], Callbacks, Opts)
|
|
||||||
end;
|
|
||||||
start(<<>>, Stack, Callbacks, Opts) ->
|
start(<<>>, Stack, Callbacks, Opts) ->
|
||||||
fun(Stream) -> start(Stream, Stack, Callbacks, Opts) end.
|
fun(Stream) -> start(Stream, Stack, Callbacks, Opts) end.
|
||||||
|
|
||||||
|
@ -278,9 +274,7 @@ zero(<<S, Rest/binary>>, Stack, Callbacks, Opts, Acc) when ?is_whitespace(S) ->
|
||||||
zero(<<?solidus, Rest/binary>>, Stack, Callbacks, ?comments_true(Opts), Acc) ->
|
zero(<<?solidus, Rest/binary>>, Stack, Callbacks, ?comments_true(Opts), Acc) ->
|
||||||
maybe_comment(Rest, fun(Resume) -> zero(Resume, Stack, Callbacks, Opts, Acc) end);
|
maybe_comment(Rest, fun(Resume) -> zero(Resume, Stack, Callbacks, Opts, Acc) end);
|
||||||
zero(<<>>, Stack, Callbacks, Opts, Acc) ->
|
zero(<<>>, Stack, Callbacks, Opts, Acc) ->
|
||||||
fun(<<>>) -> maybe_done(<<>>, Stack, fold({number, lists:reverse(Acc)}, Callbacks), Opts)
|
fun(Stream) -> zero(Stream, Stack, Callbacks, Opts, Acc) end.
|
||||||
; (Stream) -> zero(Stream, Stack, Callbacks, Opts, Acc)
|
|
||||||
end.
|
|
||||||
|
|
||||||
|
|
||||||
integer(<<S, Rest/binary>>, Stack, Callbacks, Opts, Acc) when ?is_nonzero(S) ->
|
integer(<<S, Rest/binary>>, Stack, Callbacks, Opts, Acc) when ?is_nonzero(S) ->
|
||||||
|
@ -306,9 +300,7 @@ integer(<<S, Rest/binary>>, Stack, Callbacks, Opts, Acc) when ?is_whitespace(S)
|
||||||
integer(<<?solidus, Rest/binary>>, Stack, Callbacks, ?comments_true(Opts), Acc) ->
|
integer(<<?solidus, Rest/binary>>, Stack, Callbacks, ?comments_true(Opts), Acc) ->
|
||||||
maybe_comment(Rest, fun(Resume) -> integer(Resume, Stack, Callbacks, Opts, Acc) end);
|
maybe_comment(Rest, fun(Resume) -> integer(Resume, Stack, Callbacks, Opts, Acc) end);
|
||||||
integer(<<>>, Stack, Callbacks, Opts, Acc) ->
|
integer(<<>>, Stack, Callbacks, Opts, Acc) ->
|
||||||
fun(<<>>) -> maybe_done(<<>>, Stack, fold({number, lists:reverse(Acc)}, Callbacks), Opts)
|
fun(Stream) -> integer(Stream, Stack, Callbacks, Opts, Acc) end.
|
||||||
; (Stream) -> integer(Stream, Stack, Callbacks, Opts, Acc)
|
|
||||||
end.
|
|
||||||
|
|
||||||
fraction(<<S, Rest/binary>>, Stack, Callbacks, Opts, Acc) when ?is_nonzero(S) ->
|
fraction(<<S, Rest/binary>>, Stack, Callbacks, Opts, Acc) when ?is_nonzero(S) ->
|
||||||
fraction(Rest, Stack, Callbacks, Opts, [S] ++ Acc);
|
fraction(Rest, Stack, Callbacks, Opts, [S] ++ Acc);
|
||||||
|
@ -331,9 +323,7 @@ fraction(<<S, Rest/binary>>, Stack, Callbacks, Opts, Acc) when ?is_whitespace(S)
|
||||||
fraction(<<?solidus, Rest/binary>>, Stack, Callbacks, ?comments_true(Opts), Acc) ->
|
fraction(<<?solidus, Rest/binary>>, Stack, Callbacks, ?comments_true(Opts), Acc) ->
|
||||||
maybe_comment(Rest, fun(Resume) -> fraction(Resume, Stack, Callbacks, Opts, Acc) end);
|
maybe_comment(Rest, fun(Resume) -> fraction(Resume, Stack, Callbacks, Opts, Acc) end);
|
||||||
fraction(<<>>, Stack, Callbacks, Opts, Acc) ->
|
fraction(<<>>, Stack, Callbacks, Opts, Acc) ->
|
||||||
fun(<<>>) -> maybe_done(<<>>, Stack, fold({number, lists:reverse(Acc)}, Callbacks), Opts)
|
fun(Stream) -> fraction(Stream, Stack, Callbacks, Opts, Acc) end.
|
||||||
; (Stream) -> fraction(Stream, Stack, Callbacks, Opts, Acc)
|
|
||||||
end.
|
|
||||||
|
|
||||||
|
|
||||||
e(<<S, Rest/binary>>, Stack, Callbacks, Opts, Acc) when S =:= ?zero; ?is_nonzero(S) ->
|
e(<<S, Rest/binary>>, Stack, Callbacks, Opts, Acc) when S =:= ?zero; ?is_nonzero(S) ->
|
||||||
|
@ -367,9 +357,7 @@ exp(<<?solidus, Rest/binary>>, Stack, Callbacks, ?comments_true(Opts), Acc) ->
|
||||||
exp(<<S, Rest/binary>>, Stack, Callbacks, Opts, Acc) when ?is_whitespace(S) ->
|
exp(<<S, Rest/binary>>, Stack, Callbacks, Opts, Acc) when ?is_whitespace(S) ->
|
||||||
maybe_done(Rest, Stack, fold({number, lists:reverse(Acc)}, Callbacks), Opts);
|
maybe_done(Rest, Stack, fold({number, lists:reverse(Acc)}, Callbacks), Opts);
|
||||||
exp(<<>>, Stack, Callbacks, Opts, Acc) ->
|
exp(<<>>, Stack, Callbacks, Opts, Acc) ->
|
||||||
fun(<<>>) -> maybe_done(<<>>, Stack, fold({number, lists:reverse(Acc)}, Callbacks), Opts)
|
fun(Stream) -> exp(Stream, Stack, Callbacks, Opts, Acc) end.
|
||||||
; (Stream) -> exp(Stream, Stack, Callbacks, Opts, Acc)
|
|
||||||
end.
|
|
||||||
|
|
||||||
|
|
||||||
tr(<<$r, Rest/binary>>, Stack, Callbacks, Opts) ->
|
tr(<<$r, Rest/binary>>, Stack, Callbacks, Opts) ->
|
||||||
|
@ -465,6 +453,8 @@ fold(completed_parse, {F, State}) ->
|
||||||
F(completed_parse, State);
|
F(completed_parse, State);
|
||||||
fold(Event, {F, State}) when is_function(F) ->
|
fold(Event, {F, State}) when is_function(F) ->
|
||||||
{F, F(Event, State)}.
|
{F, F(Event, State)}.
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
||||||
|
|
|
@ -61,13 +61,8 @@ test_body(TestSpec, Dir) ->
|
||||||
end.
|
end.
|
||||||
|
|
||||||
incremental_decode(F, <<>>) ->
|
incremental_decode(F, <<>>) ->
|
||||||
case F(<<>>) of
|
{Result, Rest} = F(<<" "/utf8>>),
|
||||||
G when is_function(G) ->
|
Result;
|
||||||
{Result, <<>>} = G(<<>>),
|
|
||||||
Result
|
|
||||||
; {Result, Rest} ->
|
|
||||||
Result
|
|
||||||
end;
|
|
||||||
incremental_decode(F, <<A/utf8, Rest/binary>>) ->
|
incremental_decode(F, <<A/utf8, Rest/binary>>) ->
|
||||||
case F(<<A/utf8>>) of
|
case F(<<A/utf8>>) of
|
||||||
G when is_function(G) ->
|
G when is_function(G) ->
|
||||||
|
@ -79,10 +74,9 @@ incremental_decode(F, <<A/utf8, Rest/binary>>) ->
|
||||||
decode(F, JSON) ->
|
decode(F, JSON) ->
|
||||||
case F(JSON) of
|
case F(JSON) of
|
||||||
G when is_function(G) ->
|
G when is_function(G) ->
|
||||||
{Result, <<>>} = G(<<>>),
|
{Result, <<>>} = G(<<" "/utf8>>),
|
||||||
Result
|
Result
|
||||||
; {Result, Rest} ->
|
; {Result, Rest} ->
|
||||||
{_, <<>>} = (F(Rest))(<<>>),
|
|
||||||
Result
|
Result
|
||||||
end.
|
end.
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue