summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/jsonparse/jsonparse.sty
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/jsonparse/jsonparse.sty')
-rw-r--r--macros/latex/contrib/jsonparse/jsonparse.sty81
1 files changed, 53 insertions, 28 deletions
diff --git a/macros/latex/contrib/jsonparse/jsonparse.sty b/macros/latex/contrib/jsonparse/jsonparse.sty
index 0a401ee9bf..f2a37013c2 100644
--- a/macros/latex/contrib/jsonparse/jsonparse.sty
+++ b/macros/latex/contrib/jsonparse/jsonparse.sty
@@ -10,7 +10,7 @@
%
% This work has the LPPL maintenance status `maintained'.
%
-\ProvidesExplPackage {jsonparse} {2025-01-26} {1.0.3}
+\ProvidesExplPackage {jsonparse} {2025-01-30} {1.1.0}
{A handy way to parse, store and access JSON data from files or strings in LaTeX documents}
\msg_new:nnn { jsonparse } { old-kernel } {
@@ -125,6 +125,9 @@
\str_new:N \l__jsonparse_carriage_return_str
\str_new:N \l__jsonparse_horizontal_tab_str
+\tl_new:N \l__jsonparse_map_before_tl
+\tl_new:N \l__jsonparse_map_after_tl
+
\clist_new:N \l__jsonparse_unused_keys_clist
\clist_const:Nn \c__jsonparse_escape_tex_chars_clist {
@@ -165,13 +168,13 @@
check ~ num .bool_set:N = \l__jsonparse_check_num_bool ,
check ~ num .default:n = { true } ,
check ~ num .initial:n = { true } ,
- replace .code:n = { \keys_set:nn { jsonparse / parse / replace } {#1} } ,
- replace / true .str_set:N = \l__jsonparse_true_str ,
- replace / true .initial:n = { true } ,
- replace / false .str_set:N = \l__jsonparse_false_str ,
- replace / false .initial:n = { false } ,
- replace / null .str_set:N = \l__jsonparse_null_str ,
- replace / null .initial:n = { null }
+ keyword .code:n = { \keys_set:nn { jsonparse / parse / keyword } {#1} } ,
+ keyword / true .str_set:N = \l__jsonparse_true_str ,
+ keyword / true .initial:n = { true } ,
+ keyword / false .str_set:N = \l__jsonparse_false_str ,
+ keyword / false .initial:n = { false } ,
+ keyword / null .str_set:N = \l__jsonparse_null_str ,
+ keyword / null .initial:n = { null }
}
\keys_define:nn { jsonparse / typeset } {
@@ -233,7 +236,9 @@
rescan .bool_set:N = \l__jsonparse_rescan_bool ,
rescan .default:n = { true } ,
rescan .initial:n = { true } ,
- rescan .groups:n = { output }
+ rescan .groups:n = { output } ,
+ code ~ before .tl_set:N = \l__jsonparse_map_before_tl ,
+ code ~ after .tl_set:N = \l__jsonparse_map_after_tl
}
\cs_new_protected:Npn \__jsonparse_warning_unused_keys: {
@@ -1054,6 +1059,7 @@
\prg_return_false:
}
}
+\prg_generate_conditional_variant:Nnn \jsonparse_unicode_if_high_surrogate:n { e } { p , T , F , TF }
\prg_new_conditional:Npnn \jsonparse_unicode_if_low_surrogate:n #1 { p , T , F , TF } {
\int_compare:nNnTF {#1} > { "DBFF } {
@@ -1066,10 +1072,12 @@
\prg_return_false:
}
}
+\prg_generate_conditional_variant:Nnn \jsonparse_unicode_if_low_surrogate:n { e } { p , T , F , TF }
\cs_new:Npn \jsonparse_unicode_convert_surrogate_pair:nn #1#2 {
\int_eval:n { ( #1 - "D800 ) * "0400 + ( #2 - "DC00 ) + "10000 }
}
+\cs_generate_variant:Nn \jsonparse_unicode_convert_surrogate_pair:nn { ee }
\cs_new:Npn \__jsonparse_unicode_char:NNNNN #1#2#3#4#5 {
\__jsonparse_unicode_char_aux:nNNNN { } #1#2#3#4
@@ -1082,13 +1090,14 @@
\cs_new:Npn \__jsonparse_unicode_char_aux:nNNNN #1#2#3#4#5 {
\tl_if_empty:nTF {#1} {
- \exp_args:Ne \jsonparse_unicode_if_high_surrogate:nF { " \str_uppercase:n {#2#3#4#5} } {
+ \jsonparse_unicode_if_high_surrogate:eF { " \str_uppercase:n {#2#3#4#5} } {
\exp_args:Ne \codepoint_generate:nn { " \str_uppercase:n {#2#3#4#5} } { 12 }
}
} {
- \exp_args:Ne \jsonparse_unicode_if_low_surrogate:nTF { " \str_uppercase:n {#2#3#4#5} } {
+ \jsonparse_unicode_if_low_surrogate:eTF { " \str_uppercase:n {#2#3#4#5} } {
\codepoint_generate:nn {
- \exp_args:Nne \jsonparse_unicode_convert_surrogate_pair:nn {#1} { " \str_uppercase:n {#2#3#4#5} }
+ \jsonparse_unicode_convert_surrogate_pair:ee
+ { \str_uppercase:n {#1} } { " \str_uppercase:n {#2#3#4#5} }
} { 12 }
} {
\exp_args:Ne \codepoint_generate:nn { " \str_uppercase:n {#2#3#4#5} } { 12 }
@@ -1274,7 +1283,7 @@
\tl_set:NV #1 \l__jsonparse_array_count_int
}
-\cs_new_protected:Npn \__jsonparse_array_values:n #1 {
+\cs_new_protected:Npn \__jsonparse_array_use:n #1 {
\bool_if:NTF \l__jsonparse_prop_map_first_bool {
\bool_set_false:N \l__jsonparse_prop_map_first_bool
} {
@@ -1313,7 +1322,7 @@
}
}
-\NewDocumentCommand { \JSONParseArrayValues } { O{} m m O{} m } {
+\NewDocumentCommand { \JSONParseArrayUse } { O{} m m O{} m } {
\__jsonparse_warning_undefined_prop:N #2
\group_begin:
\keys_set_known:nn { jsonparse / typeset } {#1} \l__jsonparse_unused_keys_clist
@@ -1325,15 +1334,19 @@
\tl_set:Nn \l__jsonparse_array_values_insert_tl {#5}
\bool_set_true:N \l__jsonparse_prop_map_first_bool
\int_step_function:nN { \l__jsonparse_array_count_int }
- \__jsonparse_array_values:n
+ \__jsonparse_array_use:n
\group_end:
}
+% backward compatibility
+\cs_set_eq:NN \JSONParseArrayValues \JSONParseArrayUse
+% ===
+
\tl_new:N \JSONParseArrayIndex
\tl_new:N \JSONParseArrayKey
\tl_new:N \JSONParseArrayValue
-\cs_new_protected:Npn \__jsonparse_array_values_map_keys:n #1 {
+\cs_new_protected:Npn \__jsonparse_array_map_function_keys:n #1 {
\int_incr:N \l__jsonparse_array_keys_index_int
\tl_set:Ne \l__jsonparse_array_keys_index_roman_tl {
\int_to_Roman:n { \l__jsonparse_array_keys_index_int }
@@ -1370,7 +1383,9 @@
}
}
-\cs_new_protected:Npn \__jsonparse_array_values_map:n #1 {
+\cs_new:Npn \__jsonparse_array_map_function_cs: { }
+
+\cs_new_protected:Npn \__jsonparse_array_map_function:n #1 {
\bool_if:NTF \l__jsonparse_zero_based_bool {
\tl_gset:Nn \JSONParseArrayIndex { \int_eval:n { #1 - 1 } }
} {
@@ -1404,14 +1419,14 @@
} {
\int_zero:N \l__jsonparse_array_keys_index_int
\clist_map_function:NN \l__jsonparse_array_map_keys_clist
- \__jsonparse_array_values_map_keys:n
+ \__jsonparse_array_map_function_keys:n
\tl_gset_eq:NN \JSONParseArrayKey \JSONParseArrayKeyI
\tl_gset_eq:NN \JSONParseArrayValue \JSONParseArrayValueI
}
- \use:c { \l__jsonparse_array_map_function_str }
+ \__jsonparse_array_map_function_cs:
}
-\cs_set_protected:Npn \__jsonparse_array_map_generate_cs:n #1 {
+\cs_set_protected:Npn \__jsonparse_array_map_function_generate_cs:n #1 {
\int_incr:N \l__jsonparse_array_keys_index_int
\tl_set:Ne \l__jsonparse_array_keys_index_roman_tl {
\int_to_Roman:n { \l__jsonparse_array_keys_index_int }
@@ -1424,11 +1439,11 @@
}
}
-\NewDocumentCommand { \JSONParseArrayValuesMap } { O{} m m O{} m O{} O{} } {
+\NewDocumentCommand { \JSONParseArrayMapFunction } { O{} m m O{} m } {
\__jsonparse_warning_undefined_prop:N #2
- \cs_if_exist:cF {#5} {
+ \cs_if_exist:NF #5 {
\msg_error:nne { jsonparse } { cs-undefined }
- { \c_backslash_str #5 }
+ {#5}
}
\group_begin:
\keys_set_known:nn { jsonparse / typeset } {#1} \l__jsonparse_unused_keys_clist
@@ -1437,19 +1452,29 @@
\jsonparse_filter:Nn \l__jsonparse_temp_tl {#3}
\jsonparse_array_count:NN \l__jsonparse_temp_tl \l__jsonparse_array_count_int
\clist_set:Nn \l__jsonparse_array_map_keys_clist {#4}
- \str_set:Nn \l__jsonparse_array_map_function_str {#5}
+ \cs_set_eq:NN \__jsonparse_array_map_function_cs: #5
\clist_if_empty:NF \l__jsonparse_array_map_keys_clist {
\int_zero:N \l__jsonparse_array_keys_index_int
\clist_map_function:NN \l__jsonparse_array_map_keys_clist
- \__jsonparse_array_map_generate_cs:n
+ \__jsonparse_array_map_function_generate_cs:n
}
- #6
+ \l__jsonparse_map_before_tl
\int_step_function:nN { \l__jsonparse_array_count_int }
- \__jsonparse_array_values_map:n
- #7
+ \__jsonparse_array_map_function:n
+ \l__jsonparse_map_after_tl
\group_end:
}
+% backward compatibility
+\cs_new:Npn \__jsonparse_array_map_function_cs_compat: { }
+
+\NewDocumentCommand { \JSONParseArrayValuesMap } { O{} m m O{} m O{} O{} } {
+ \cs_set_eq:Nc \__jsonparse_array_map_function_cs_compat: {#5}
+ \JSONParseArrayMapFunction [ #1 , code ~ before = {#6} , code ~ after = {#7} ]
+ {#2} {#3} [#4] { \__jsonparse_array_map_function_cs_compat: }
+}
+% ===
+
\cs_new:Npn \__jsonparse_array_map_inline:n #1 { }
\NewDocumentCommand { \JSONParseArrayMapInline } { m m +m } {