From c16351ad12d9dd0f81f0a1c26f2f47cb337d7a62 Mon Sep 17 00:00:00 2001 From: alisdair sullivan Date: Tue, 25 May 2010 22:06:52 -0700 Subject: [PATCH] cleaned up prettifier, now catches exceptions --- examples/jsx_prettify.erl | 22 ++++++++++++---------- 1 file changed, 12 insertions(+), 10 deletions(-) diff --git a/examples/jsx_prettify.erl b/examples/jsx_prettify.erl index 35e4fc7..445b4c3 100644 --- a/examples/jsx_prettify.erl +++ b/examples/jsx_prettify.erl @@ -34,17 +34,24 @@ pretty(JSON, Opts) -> Init = init(parse_opts(Opts, #opts{})), - {Result, Rest} = (jsx:decoder({{jsx_prettify, jsx_event}, Init}, []))(JSON), - case jsx:tail_clean(Rest) of - true -> Result - ; _ -> exit(badarg) + P = jsx:decoder({{jsx_prettify, jsx_event}, Init}, []), + try + {Result, Rest} = P(JSON), + case jsx:tail_clean(Rest) of + true -> Result + ; _ -> throw(badarg) + end + catch + _:_ -> throw(badarg) end. + parse_opts([{indent, Val}|Rest], Opts) -> parse_opts(Rest, Opts#opts{indent = Val}); parse_opts([], Opts) -> Opts. - + + init(Opts) -> {[], Opts#opts.indent, 0, new}. @@ -59,25 +66,21 @@ jsx_event(start_array, {Acc, Indent, Level, value}) -> jsx_event(start_array, {Acc, Indent, Level, _}) -> {Acc ++ "[", Indent, Level + 1, new}; - jsx_event(end_object, {Acc, Indent, Level, value}) -> {Acc ++ "\n" ++ indent(Indent, Level - 1) ++ "}", Indent, Level - 1, value}; jsx_event(end_object, {Acc, Indent, Level, new}) -> {Acc ++ "}", Indent, Level - 1, value}; - jsx_event(end_array, {Acc, Indent, Level, value}) -> {Acc ++ "\n" ++ indent(Indent, Level - 1) ++ "]", Indent, Level - 1, value}; jsx_event(end_array, {Acc, Indent, Level, new}) -> {Acc ++ "]", Indent, Level - 1, value}; - jsx_event({key, Key}, {Acc, Indent, Level, value}) -> {Acc ++ ",\n" ++ indent(Indent, Level) ++ "\"" ++ Key ++ "\": ", Indent, Level, key}; jsx_event({key, Key}, {Acc, Indent, Level, _}) -> {Acc ++ "\n" ++ indent(Indent, Level) ++ "\"" ++ Key ++ "\": ", Indent, Level, key}; - jsx_event({Type, Value}, {Acc, Indent, Level, value}) -> {Acc ++ ",\n" ++ indent(Indent, Level) ++ format(Type, Value), Indent, Level, value}; jsx_event({Type, Value}, {Acc, Indent, Level, new}) -> @@ -85,7 +88,6 @@ jsx_event({Type, Value}, {Acc, Indent, Level, new}) -> jsx_event({Type, Value}, {Acc, Indent, Level, key}) -> {Acc ++ format(Type, Value), Indent, Level, value}; - jsx_event(eof, {Acc, _, _, _}) -> Acc.