From 19e710da55cffc4dc639ff23ba7510b735163e6a Mon Sep 17 00:00:00 2001 From: alisdair sullivan Date: Thu, 29 Mar 2012 00:01:50 -0700 Subject: [PATCH] add dirty_strings option to bypass json escaping strings during encoding --- src/jsx_opts.hrl | 3 ++- src/jsx_utils.erl | 23 +++++++++++------------ 2 files changed, 13 insertions(+), 13 deletions(-) diff --git a/src/jsx_opts.hrl b/src/jsx_opts.hrl index a184dbe..942ae14 100644 --- a/src/jsx_opts.hrl +++ b/src/jsx_opts.hrl @@ -5,5 +5,6 @@ single_quotes = false, no_jsonp_escapes = false, comments = false, - json_escape = false + json_escape = false, + dirty_strings = false }). \ No newline at end of file diff --git a/src/jsx_utils.erl b/src/jsx_utils.erl index 7c688f9..479187f 100644 --- a/src/jsx_utils.erl +++ b/src/jsx_utils.erl @@ -51,6 +51,8 @@ parse_opts([comments|Rest], Opts) -> parse_opts(Rest, Opts#opts{comments=true}); parse_opts([json_escape|Rest], Opts) -> parse_opts(Rest, Opts#opts{json_escape=true}); +parse_opts([dirty_strings|Rest], Opts) -> + parse_opts(Rest, Opts#opts{json_escape=true}); parse_opts(_, _) -> {error, badarg}. @@ -63,7 +65,8 @@ valid_flags() -> single_quotes, no_jsonp_escapes, comments, - json_escape + json_escape, + dirty_strings ]. @@ -88,7 +91,10 @@ extract_parser_opts([K|Rest], Acc) -> %% everything else should be a legal json string component json_escape(String, Opts) when is_binary(String) -> - json_escape(String, Opts, 0, size(String)). + case Opts#opts.dirty_strings of + true -> String + ; false -> json_escape(String, Opts, 0, size(String)) + end. -define(control_character(X), @@ -592,17 +598,10 @@ binary_escape_test_() -> <<"\\/Date(1303502009425)\\/">> ) }, - {"bad surrogate", ?_assertError(badarg, json_escape(<<237, 160, 127>>, #opts{}))}, - {"bad surrogate ok", + {"dirty strings", ?_assertEqual( - json_escape(<<237, 160, 127>>, #opts{loose_unicode=true}), - <<16#fffd/utf8>> - ) - }, - {"all sizes of codepoints", - ?_assertEqual( - json_escape(unicode:characters_to_binary([0, 32, 16#80, 16#800, 16#10000]), #opts{}), - <<"\\u0000", 32/utf8, 16#80/utf8, 16#800/utf8, 16#10000/utf8>> + json_escape(<<"\\x25\\uffff">>, #opts{dirty_strings=true}), + <<"\\x25\\uffff">> ) } ].