From a932422d179b636b0bc9d73b4723f1626a18fe1b Mon Sep 17 00:00:00 2001 From: alisdair sullivan Date: Tue, 18 May 2010 13:01:49 -0700 Subject: [PATCH] public interface begun --- include/jsx.hrl | 3 ++- src/jsx.erl | 34 ++++++++++++++++++++++++++++++++++ src/jsx_utf8.erl | 2 +- 3 files changed, 37 insertions(+), 2 deletions(-) create mode 100644 src/jsx.erl diff --git a/include/jsx.hrl b/include/jsx.hrl index 918736b..b415be1 100644 --- a/include/jsx.hrl +++ b/include/jsx.hrl @@ -1,5 +1,6 @@ -record(opts, { comments = false, escaped_unicode = ascii, - naked_values = false + naked_values = false, + encoding = utf8 }). \ No newline at end of file diff --git a/src/jsx.erl b/src/jsx.erl new file mode 100644 index 0000000..490bd50 --- /dev/null +++ b/src/jsx.erl @@ -0,0 +1,34 @@ +-module(jsx). + +-export([decoder/0, decoder/1]). + +-include("../include/jsx.hrl"). + +decoder() -> + decoder([]). + +decoder(OptsList) -> + OptsRec = parse_opts(OptsList), + case OptsRec#opts.encoding of + utf8 -> + fun(Stream) -> jsx_utf8:start(Stream, [], [], OptsRec) end + end. + + +parse_opts(Opts) -> + parse_opts(Opts, #opts{}). + +parse_opts([], Opts) -> + Opts; +parse_opts([{comments, Value}|Rest], Opts) -> + true = lists:member(Value, [true, false]), + parse_opts(Rest, Opts#opts{comments = Value}); +parse_opts([{escaped_unicode, Value}|Rest], Opts) -> + true = lists:member(Value, [ascii, codepoint, none]), + parse_opts(Rest, Opts#opts{escaped_unicode = Value}); +parse_opts([{naked_values, Value}|Rest], Opts) -> + true = lists:member(Value, [true, false]), + parse_opts(Rest, Opts#opts{naked_values = Value}); +parse_opts([{encoding, Value}|Rest], Opts) -> + true = lists:member(Value, [utf8]), + parse_opts(Rest, Opts#opts{encoding = Value}). \ No newline at end of file diff --git a/src/jsx_utf8.erl b/src/jsx_utf8.erl index 58e73e3..b214ee5 100644 --- a/src/jsx_utf8.erl +++ b/src/jsx_utf8.erl @@ -204,7 +204,7 @@ escaped_unicode(<>, Stack, Callbacks, Opts, String, [C, B, string(Rest, Stack, Callbacks, Opts, [X] ++ String) ; codepoint -> string(Rest, Stack, Callbacks, Opts, [X] ++ String) - ; _ -> + ; none -> string(Rest, Stack, Callbacks, Opts, [?rsolidus, $u, A, B, C, D] ++ String) end; escaped_unicode(<>, Stack, Callbacks, Opts, String, Acc) when ?is_hex(S) ->