base: Add JSON string non-ASCII escaping options

- Add HEIM_JSON_F_ESCAPE_NON_ASCII to indicate that non-ASCII must be
   escaped as \uXXXX.

 - Add HEIM_JSON_F_NO_ESCAPE_NON_ASCII to force non-escaping of BMP
   codepoints.

 - If the locale's codeset is not UTF-8 and
   HEIM_JSON_F_NO_ESCAPE_NON_ASCII is not set, then set
   HEIM_JSON_F_ESCAPE_NON_ASCII.
This commit is contained in:
Nicolas Williams
2022-10-02 22:43:20 -05:00
parent 03f06b9472
commit 8364bdd8f3
5 changed files with 146 additions and 12 deletions

View File

@@ -464,10 +464,12 @@ typedef enum heim_json_flags {
HEIM_JSON_F_CNULL2JSNULL = 32,
HEIM_JSON_F_TRY_DECODE_DATA = 64,
HEIM_JSON_F_ONE_LINE = 128,
HEIM_JSON_F_ESCAPE_NON_ASCII = 256,
HEIM_JSON_F_NO_ESCAPE_NON_ASCII = 512,
/* The default is to indent with one tab */
HEIM_JSON_F_INDENT2 = 256,
HEIM_JSON_F_INDENT4 = 512,
HEIM_JSON_F_INDENT8 = 1024,
HEIM_JSON_F_INDENT2 = 1024,
HEIM_JSON_F_INDENT4 = 2048,
HEIM_JSON_F_INDENT8 = 4096,
} heim_json_flags_t;
heim_object_t heim_json_create(const char *, size_t, heim_json_flags_t,