diff options
author | Karl Berry <karl@freefriends.org> | 2024-04-29 20:30:21 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2024-04-29 20:30:21 +0000 |
commit | acf9a3274def9aa9673425f8c8c3868b8d1ced6f (patch) | |
tree | 1b1a9daf295b3dacca01c76e4aff4ed5b004b3ee /Master/texmf-dist/tex/latex | |
parent | 6e15183a84a0186cb9981dde09481317cdd40637 (diff) |
jsonparse (29apr24)
git-svn-id: svn://tug.org/texlive/trunk@71127 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex')
-rw-r--r-- | Master/texmf-dist/tex/latex/jsonparse/jsonparse.sty | 95 |
1 files changed, 93 insertions, 2 deletions
diff --git a/Master/texmf-dist/tex/latex/jsonparse/jsonparse.sty b/Master/texmf-dist/tex/latex/jsonparse/jsonparse.sty index 404e769ba74..680e89bfcac 100644 --- a/Master/texmf-dist/tex/latex/jsonparse/jsonparse.sty +++ b/Master/texmf-dist/tex/latex/jsonparse/jsonparse.sty @@ -10,7 +10,7 @@ % % This work has the LPPL maintenance status `maintained'. % -\ProvidesExplPackage {jsonparse} {2024-04-26} {0.8.2} +\ProvidesExplPackage {jsonparse} {2024-04-28} {0.8.3} {JSON Parse} \bool_new:N \l__jsonparse_debug_mode_bool @@ -51,6 +51,11 @@ Invalid ~ escape ~ sequence ~ #1 ~ in ~ key. } +\msg_new:nnn { jsonparse } { escape-char-not-found } { + \msg_error_text:n { jsonparse } \iow_newline: + Escape ~ character ~ #1 ~ not ~ found. +} + \msg_new:nnn { jsonparse } { saving-external } { \msg_info_text:n { jsonparse } \iow_newline: Saving ~ external ~ file: ~ #1. @@ -77,6 +82,22 @@ \str_new:N \l__jsonparse_carriage_return_str \str_new:N \l__jsonparse_horizontal_tab_str +\clist_new:N \l__jsonparse_escape_tex_chars_clist +\clist_set:Nn \l__jsonparse_escape_tex_chars_clist { + number_sign , + dollar_sign , + percent_sign , + ampersand , + circumflex_accent , + low_line , + tilde +} + +\str_new:N \l__jsonparse_escape_temp_str +\clist_map_inline:Nn \l__jsonparse_escape_tex_chars_clist { + \bool_new:c { l__jsonparse_escape_ #1 _bool } +} + \keys_define:nn { jsonparse } { array ~ index ~ zero-based .bool_set:N = \l__jsonparse_array_index_zero_based_bool , array ~ index ~ zero-based .default:n = { true } , @@ -104,7 +125,50 @@ replacement / carriage ~ return .str_set:N = \l__jsonparse_carriage_return_str , replacement / carriage ~ return .initial:n = { ~ } , replacement / horizontal ~ tab .str_set:N = \l__jsonparse_horizontal_tab_str , - replacement / horizontal ~ tab .initial:n = { ~ } + replacement / horizontal ~ tab .initial:n = { ~ } , + escape .code:n = { + \str_case:nnF {#1} { + { all } { + \clist_map_inline:Nn \l__jsonparse_escape_tex_chars_clist { + \bool_set_true:c { l__jsonparse_escape_ ##1 _bool } + } + } + { none } { + \clist_map_inline:Nn \l__jsonparse_escape_tex_chars_clist { + \bool_set_false:c { l__jsonparse_escape_ ##1 _bool } + } + } + } { + \clist_map_inline:nn {#1} { + \str_set:Nn \l__jsonparse_escape_temp_str {##1} + \str_replace_all:Nnn \l__jsonparse_escape_temp_str { ~ } { _ } + \bool_if_exist:cTF { l__jsonparse_escape_ \l__jsonparse_escape_temp_str _bool } { + \bool_set_true:c { l__jsonparse_escape_ \l__jsonparse_escape_temp_str _bool } + } { + \str_case:nnF {##1} { + { hash } { + \bool_set_true:c { l__jsonparse_escape_number_sign_bool } + } + { dollar } { + \bool_set_true:c { l__jsonparse_escape_dollar_sign_bool } + } + { percent } { + \bool_set_true:c { l__jsonparse_escape_percent_sign_bool } + } + { circumflex } { + \bool_set_true:c { l__jsonparse_escape_circumflex_accent_bool } + } + { underscore } { + \bool_set_true:c { l__jsonparse_escape_low_line_bool } + } + } { + \msg_error:nno { jsonparse } { escape-char-not-found } + {##1} + } + } + } + } + } } \NewDocumentCommand { \JSONParseSet } { m } { @@ -121,6 +185,7 @@ \cs_generate_variant:Nn \tl_range:nnn { nne , nen } \cs_generate_variant:Nn \tl_range:Nnn { Nne , Nen } \cs_generate_variant:Nn \tl_remove_once:Nn { NV } +\cs_generate_variant:Nn \tl_replace_all:Nnn { Non , Noe } \cs_generate_variant:Nn \tl_replace_once:Nnn { Non } \cs_generate_variant:Nn \tl_rescan:nn { no , ne } \cs_generate_variant:Nn \tl_set:Nn { Ne } @@ -132,6 +197,7 @@ \cs_generate_variant:Nn \prop_item:Nn { Ne , ce } \cs_generate_variant:Nn \prop_put:Nnn { Nen , Nee } \cs_generate_variant:Nn \iow_now:Nn { Ne } +\cs_generate_variant:Nn \msg_error:nnn { nno } \cs_generate_variant:Nn \msg_error:nnnn { nnoo } \cs_generate_variant:Nn \msg_log:nnn { nne } @@ -591,6 +657,27 @@ \tl_set:Ne \l__jsonparse_temp_tl {#1} \cs_set_eq:NN \" \__jsonparse_tex_quote \cs_set_eq:NN \\ \__jsonparse_tex_backslash + \bool_if:NT \l__jsonparse_escape_number_sign_bool { + \tl_replace_all:Noe \l__jsonparse_temp_tl { \c_hash_str } { \c_backslash_str \c_hash_str } + } + \bool_if:NT \l__jsonparse_escape_dollar_sign_bool { + \tl_replace_all:Noe \l__jsonparse_temp_tl { \c_dollar_str } { \c_backslash_str \c_dollar_str } + } + \bool_if:NT \l__jsonparse_escape_percent_sign_bool { + \tl_replace_all:Noe \l__jsonparse_temp_tl { \c_percent_str } { \c_backslash_str \c_percent_str } + } + \bool_if:NT \l__jsonparse_escape_ampersand_bool { + \tl_replace_all:Noe \l__jsonparse_temp_tl { \c_ampersand_str } { \c_backslash_str \c_ampersand_str } + } + \bool_if:NT \l__jsonparse_escape_circumflex_accent_bool { + \tl_replace_all:Non \l__jsonparse_temp_tl { \c_circumflex_str } { \textasciicircum } + } + \bool_if:NT \l__jsonparse_escape_low_line_bool { + \tl_replace_all:Noe \l__jsonparse_temp_tl { \c_underscore_str } { \c_backslash_str \c_underscore_str } + } + \bool_if:NT \l__jsonparse_escape_tilde_bool { + \tl_replace_all:Non \l__jsonparse_temp_tl { \c_tilde_str } { \textasciitilde } + } \tl_rescan:no { } { \l__jsonparse_temp_tl } \group_end: } @@ -670,6 +757,10 @@ \group_end: } +\tl_new:N \JSONParseArrayIndex +\tl_new:N \JSONParseArrayKey +\tl_new:N \JSONParseArrayValue + \NewDocumentCommand { \JSONParseArrayValuesMap } { s m m O{} m } { \group_begin: \jsonparse_filter:Nn #2 {#3} |