refactors out extraction of parser opts, generalizes use of specific parsers by processors

This commit is contained in:
alisdair sullivan 2011-11-29 19:39:01 -08:00
parent 55d0259c89
commit 6dacf64620
7 changed files with 57 additions and 80 deletions

View file

@ -40,13 +40,10 @@
to_json(Source, Opts) when (is_binary(Source) andalso is_list(Opts))
orelse (is_list(Source) andalso is_list(Opts)) ->
(gen_json:parser(?MODULE, Opts, extract_opts(Opts)))(Source).
(gen_json:parser(?MODULE, Opts, jsx_utils:extract_opts(Opts)))(Source).
init(Opts) -> {start, [], parse_opts(Opts)}.
parse_opts(Opts) -> parse_opts(Opts, #opts{}).
parse_opts([{space, Val}|Rest], Opts) when is_integer(Val), Val > 0 ->
@ -63,21 +60,6 @@ parse_opts([], Opts) ->
Opts.
extract_opts(Opts) ->
extract_parser_opts(Opts, []).
extract_parser_opts([], Acc) -> Acc;
extract_parser_opts([{K,V}|Rest], Acc) ->
case lists:member(K, [loose_unicode, escape_forward_slash, explicit_end]) of
true -> extract_parser_opts(Rest, [{K,V}] ++ Acc)
; false -> extract_parser_opts(Rest, Acc)
end;
extract_parser_opts([K|Rest], Acc) ->
case lists:member(K, [loose_unicode, escape_forward_slash, explicit_end]) of
true -> extract_parser_opts(Rest, [K] ++ Acc)
; false -> extract_parser_opts(Rest, Acc)
end.
-define(start_object, <<"{">>).
-define(start_array, <<"[">>).
@ -90,6 +72,11 @@ extract_parser_opts([K|Rest], Acc) ->
-define(newline, <<"\n">>).
init(Opts) -> {start, [], parse_opts(Opts)}.
handle_event(Event, {start, Acc, Opts}) ->
case Event of
{Type, Value} -> {[], [Acc, encode(Type, Value)], Opts}