shiny and new string cleaning for encoder and parser

This commit is contained in:
alisdair sullivan 2013-02-19 22:51:54 -08:00
parent fbd90e4df7
commit ceb7ce6586
3 changed files with 208 additions and 502 deletions

View file

@ -101,9 +101,19 @@ value([Number|Tokens], Handler, Stack, Config) when is_integer(Number) ->
value([Number|Tokens], Handler, Stack, Config) when is_float(Number) ->
value([{float, Number}] ++ Tokens, Handler, Stack, Config);
value([{string, String}|Tokens], Handler, [], Config) when is_binary(String) ->
done(Tokens, handle_event({string, clean_string(String, Config)}, Handler, Config), [], Config);
case clean_string(String, Config) of
{error, badarg} ->
?error([[{string, String}|Tokens], Handler, [], Config]);
CleanString ->
done(Tokens, handle_event({string, CleanString}, Handler, Config), [], Config)
end;
value([{string, String}|Tokens], Handler, Stack, Config) when is_binary(String) ->
maybe_done(Tokens, handle_event({string, clean_string(String, Config)}, Handler, Config), Stack, Config);
case clean_string(String, Config) of
{error, badarg} ->
?error([[{string, String}|Tokens], Handler, Stack, Config]);
CleanString ->
maybe_done(Tokens, handle_event({string, CleanString}, Handler, Config), Stack, Config)
end;
value([String|Tokens], Handler, Stack, Config) when is_binary(String) ->
value([{string, String}] ++ Tokens, Handler, Stack, Config);
value([], Handler, Stack, Config) ->
@ -116,9 +126,14 @@ value(Token, Handler, Stack, Config) ->
object([end_object|Tokens], Handler, [object|Stack], Config) ->
maybe_done(Tokens, handle_event(end_object, Handler, Config), Stack, Config);
object([{key, Key}|Tokens], Handler, Stack, Config) when is_atom(Key); is_binary(Key) ->
value(Tokens, handle_event({key, clean_string(fix_key(Key), Config)}, Handler, Config), Stack, Config);
case clean_string(fix_key(Key), Config) of
{error, badarg} ->
?error([[{key, Key}|Tokens], Handler, Stack, Config]);
CleanString ->
value(Tokens, handle_event({key, CleanString}, Handler, Config), Stack, Config)
end;
object([Key|Tokens], Handler, Stack, Config) when is_atom(Key); is_binary(Key) ->
value(Tokens, handle_event({key, clean_string(fix_key(Key), Config)}, Handler, Config), Stack, Config);
object([{key, Key}] ++ Tokens, Handler, Stack, Config);
object([], Handler, Stack, Config) ->
?incomplete(object, Handler, Stack, Config);
object(BadTokens, Handler, Stack, Config) when is_list(BadTokens) ->