diff options
Diffstat (limited to 'macros/latex/contrib/starray/latex/starray.sty')
-rw-r--r-- | macros/latex/contrib/starray/latex/starray.sty | 220 |
1 files changed, 146 insertions, 74 deletions
diff --git a/macros/latex/contrib/starray/latex/starray.sty b/macros/latex/contrib/starray/latex/starray.sty index a475c3d098..0bfe015ab2 100644 --- a/macros/latex/contrib/starray/latex/starray.sty +++ b/macros/latex/contrib/starray/latex/starray.sty @@ -12,7 +12,7 @@ %% %% The Current Maintainer of this work is Alceu Frigeri %% -%% This is version 1.2 (2023/05/20) +%% This is version 1.3 (2023/06/04) %% %% The list of files that compose this work can be found in the README.md file at %% https://ctan.org/pkg/starray @@ -24,8 +24,8 @@ \ProvidesExplPackage {starray} - {2023/05/20} - {1.2} + {2023/06/04} + {1.3} {A structured array/hash of properties} %%%%%%% @@ -38,8 +38,8 @@ { name .code:n = starray , prefix .code:n = starray , - date .code:n = 2023/05/20 , - version .code:n = 1.2 , + date .code:n = 2023/06/04, + version .code:n = 1.3 , description .code:n = A~structured~array/hash~of~properties } \cs_if_exist:NF \__codedesc_pkg_info:nn @@ -68,51 +68,61 @@ \keys_define:nn { starray } -{ - prefix .tl_set:N = \l__starray_prefix_tl , - prefix .value_required:n = true , - prefix .initial:n = l__starray_ , - prefix .usage:n = load , - - msg-err .choice: , - msg-err / none .code:n = { - % \msg_redirect_module:nnn { starray } { warning } { none } - }, - msg-err / default .code:n = {} , - msg-err / strict .code:n = { + { + prefix .tl_set:N = \l__starray_prefix_tl , + prefix .value_required:n = true , + prefix .initial:n = l__starray_ , + prefix .usage:n = load , + + msg-err .choice: , + msg-err / none .code:n = { }, + msg-err / default .code:n = {} , + msg-err / strict .code:n = + { \msg_redirect_module:nnn { starray / strict } { warning } { error } - }, - msg-err / syntax .code:n = { + } , + msg-err / syntax .code:n = + { \msg_redirect_module:nnn { starray / strict } { warning } { error } \msg_redirect_module:nnn { starray / syntax } { warning } { error } } , - msg-err / reference .code:n = { + msg-err / reference .code:n = + { \msg_redirect_module:nnn { starray / strict } { warning } { error } \msg_redirect_module:nnn { starray / syntax } { warning } { error } \msg_redirect_module:nnn { starray / reference } { warning } { error } } , - msg-err / all .code:n = \msg_redirect_module:nnn { starray } { warning } { error } , - msg-err . usage:n = load , - - msg-supress .choice: , - msg-supress / none .code:n = {} , - msg-supress / reference .code:n = { - \msg_redirect_module:nnn { starray / reference } { warning } { none } - }, - msg-supress / syntax .code:n = { - \msg_redirect_module:nnn { starray / strict } { warning } { none } - \msg_redirect_module:nnn { starray / syntax } { warning } { none } - } , - msg-supress / strict .code:n = { - \msg_redirect_module:nnn { starray / strict } { warning } { none } - \msg_redirect_module:nnn { starray / syntax } { warning } { none } - \msg_redirect_module:nnn { starray / reference } { warning } { none } - } , - msg-supress / all .code:n = \msg_redirect_module:nnn { starray } { warning } { none } , - msg-supress . usage:n = load , - - -} + msg-err / all .code:n = + { + \msg_redirect_module:nnn { starray } { warning } { error } + } , + msg-err . usage:n = load , + + msg-supress .choice: , + msg-supress / none .code:n = {} , + msg-supress / reference .code:n = + { + \msg_redirect_module:nnn { starray / reference } { warning } { none } + } , + msg-supress / syntax .code:n = + { + \msg_redirect_module:nnn { starray / strict } { warning } { none } + \msg_redirect_module:nnn { starray / syntax } { warning } { none } + } , + msg-supress / strict .code:n = + { + \msg_redirect_module:nnn { starray / strict } { warning } { none } + \msg_redirect_module:nnn { starray / syntax } { warning } { none } + \msg_redirect_module:nnn { starray / reference } { warning } { none } + } , + msg-supress / all .code:n = + { + \msg_redirect_module:nnn { starray } { warning } { none } + } , + msg-supress . usage:n = load , + + + } \ProcessKeyOptions [ starray ] @@ -363,7 +373,7 @@ %%%% parser related ones %%%% \bool_const:Nn \c__starray_no_idx_ending_bool \c_true_bool -\bool_const:Nn \c__starray_idx_ending_bool \c_false_bool +\bool_const:Nn \c__starray_idx_ending_bool \c_false_bool %%%% @@ -371,9 +381,9 @@ %%%% \tl_new:N \l__starray_parsed_tl \tl_new:N \l__starray_parsed_ref_tl +\tl_new:N \l__starray_parsed_ref_no_idx_ending_tl \tl_new:N \l__starray_parsed_base_ref_tl \tl_new:N \l__starray_parsed_root_ref_tl -\tl_new:N \l__starray_parsed_ref_no_idx_ending_tl \tl_new:N \l__starray_parsing_term_tl @@ -452,7 +462,10 @@ %%%% %%%%%%%%%%%%%%% %%%%%%%%%%%%%%% - +%%% +%%% TODO: to add another property list mapping hash/idx -> iter +%%% intend: \__starray_set_iter_hash ! +%%% % needs protection. \cs_new_protected:Npn \__starray_base_new:nn #1#2 { @@ -489,6 +502,11 @@ { \l__starray_prefix_tl #2 _base_prop } { idx_hash } \c_empty_prop + + \prop_gput:cnV + { \l__starray_prefix_tl #2 _base_prop } + { iter_hash } + \c_empty_prop } \cs_generate_variant:Nn \__starray_base_new:nn { ee } @@ -843,7 +861,6 @@ \cs_new_protected:Npn \starray_def_from_keyval:nn #1#2 { -% \bool_set_true:N \l__starray_rtn_bool \__starray_if_valid:nTF { \l__starray_prefix_tl #1 _def_prop} { \keyval_parse:nnn @@ -882,6 +899,10 @@ %%%% %%%%%%%%%%%%%%% %%%%%%%%%%%%%%% +%%% +%%% TODO: to add {_iter_from_hash} property {hash} -> iter (integer!) +%%% +%%% \cs_new_protected:Npn \__starray_new_term:nn #1#2 { @@ -895,20 +916,30 @@ % idx_hash Update. \prop_get:cnN {\l__starray_prefix_tl #1 _base_prop} {idx_hash} \l_tmpa_prop + \prop_get:cnN {\l__starray_prefix_tl #1 _base_prop} {iter_hash} \l_tmpb_prop \prop_put:Nee \l_tmpa_prop { \int_use:N \prop_item:cn {\l__starray_prefix_tl #1 _base_prop} {cnt} } { \int_to_Alph:e { \prop_item:cn {\l__starray_prefix_tl #1 _base_prop} {cnt} } } + \prop_put:Nee \l_tmpb_prop + { \int_use:N \prop_item:cn {\l__starray_prefix_tl #1 _base_prop} {cnt} } + { \int_use:N \prop_item:cn {\l__starray_prefix_tl #1 _base_prop} {cnt} } + \tl_if_blank:nF {#2} { \prop_put:Nee \l_tmpa_prop { #2 } { \int_to_Alph:e { \prop_item:cn {\l__starray_prefix_tl #1 _base_prop} {cnt} } } + \prop_put:Nee \l_tmpb_prop + { #2 } + { \int_use:N \prop_item:cn {\l__starray_prefix_tl #1 _base_prop} {cnt} } } \prop_gput:cnV {\l__starray_prefix_tl #1 _base_prop} {idx_hash} \l_tmpa_prop + \prop_gput:cnV {\l__starray_prefix_tl #1 _base_prop} {iter_hash} \l_tmpb_prop + % creating the 'new property list' (aka. term) \tl_set:Ne \l_tmpa_tl { \int_to_Alph:e { \prop_item:cn {\l__starray_prefix_tl #1 _base_prop} {cnt} } } @@ -980,13 +1011,13 @@ \cs_new_protected:Npn \__starray_incr_iter:n #1 { \int_compare:nNnTF - {\prop_item:cn {\l__starray_prefix_tl #1 _base_prop} {iter}} < - {\prop_item:cn {\l__starray_prefix_tl #1 _base_prop} {cnt}} + {\prop_item:cn {\l__starray_prefix_tl #1 _base_prop} {iter}} < + {\prop_item:cn {\l__starray_prefix_tl #1 _base_prop} {cnt}} { \int_gincr:N { \prop_item:cn {\l__starray_prefix_tl #1 _base_prop} {iter} } } { - % TODO: should it be a potential 'warning' ??? + % TODO: validade _rtn_bool for end user??? \bool_set_false:N \l__starray_rtn_bool } } @@ -1105,6 +1136,7 @@ {\prg_return_false:} } { + \bool_set_false:N \l__starray_rtn_bool \seq_clear:N \l__starray_msg_seq \prg_return_false: } @@ -1158,7 +1190,7 @@ \cs_new_protected:Npn \starray_next_iter:n #1 { -% \bool_set_true:N \l__starray_rtn_bool + \bool_set_true:N \l__starray_rtn_bool \seq_clear:N \l__starray_msg_seq \__starray_parser:nnTF {\c__starray_no_idx_ending_bool}{#1} @@ -1168,7 +1200,7 @@ } { \__starray_msg_dispatch: -% \bool_set_false:N \l__starray_rtn_bool + \bool_set_false:N \l__starray_rtn_bool \msg_warning:nnnn {starray} {syntax / iter} {iter:5} {#1} } % returns nothing by default } @@ -1188,7 +1220,10 @@ {\prg_return_true:} {\prg_return_false:} } - { \prg_return_false: } + { + \bool_set_false:N \l__starray_rtn_bool + \prg_return_false: + } } %%%%%%%%%%%%%%% @@ -1564,12 +1599,12 @@ -\cs_new_protected:Npn \__starray_set_from_keyval_parse:nnnn #1#2#3#4 +\cs_new:Npn \__starray_set_from_keyval_parse:nnnn #1#2#3#4 { \__starray_set_prop:nnn {#3}{#4}{} } -\cs_generate_variant:Nn \__starray_set_from_keyval_parse:nnnn {nnen} +\cs_generate_variant:Nn \__starray_set_from_keyval_parse:nnnn {neen} %%%%%%%%%%%%%%% %%%%%%%%%%%%%%% @@ -1581,21 +1616,41 @@ %%%%%%%%%%%%%%% %%%%%%%%%%%%%%% - -\cs_new_protected:Npn \__starray_set_from_keyval_parse:nnnnn #1#2#3#4#5 +%%% what a mess. :( +%%% #1 => tmp series A, AA, AAA +%%% #2 => no_idx_ending ref +%%% #3 => idx_ending ref !!! +%%% #4 => prop/struct(key from keyval) +%%% #5 => val/keyval (val from keyval) +%%% +\cs_new:Npn \__starray_set_from_keyval_parse:nnnnn #1#2#3#4#5 { \tl_clear:c {l__starray_tmp #1 _tl} + \__starray_set_parse_begin:wTF {#1}#4 [ \q_nil \q_stop { \tl_if_blank:eTF {\tl_use:c{l__starray_tmp #1 :A_tl}} { + % + % what should be here: + % get #2_base_prop -> _def_prop -> @st_seq + % _base_prop comes from (parser) _no_idx_ending_tl + % + % from there #3.<#4> => {}{...} 'next #2' + % #3.<#4>_[<#4>] (idx construct from #4) 'next #3' + % + \prop_get:cnc + {\l__starray_prefix_tl #2 _base_prop} + {def_ref} + {l__starray_tmp #1 _def_prop} + \prop_get:cnc - {\l__starray_prefix_tl #2 _def_prop} + {\l__starray_prefix_tl \tl_use:c {l__starray_tmp #1 _def_prop} _def_prop} {@st_seq} {l__starray_tmp #1 _seq} - + \seq_if_in:cnTF {l__starray_tmp #1 _seq}{#4} - { + { \prop_get:cnc { \l__starray_prefix_tl #3 .#4 _base_prop } { idx_hash } @@ -1614,17 +1669,18 @@ \tl_set:ce { l__starray_tmp #1 _tl } { #3.#4 _ \int_to_Alph:e {\int_use:c {l__starray_tmp #1 _int}} } + \keyval_parse:nnn { - \__starray_set_from_keyval_parse:nnen + \__starray_set_from_keyval_parse:neen { #1 A } - { #2.#4 } + { #3.#4 } { \tl_use:c { l__starray_tmp #1 _tl } } } { - \__starray_set_from_keyval_parse:nnenn + \__starray_set_from_keyval_parse:neenn { #1 A } - { #2.#4 } + { #3.#4 } { \tl_use:c { l__starray_tmp #1 _tl } } } { #5 } @@ -1636,10 +1692,15 @@ } } { + \prop_get:cnc + {\l__starray_prefix_tl #2 _base_prop} + {def_ref} + {l__starray_tmp #1 _def_prop} + \prop_get:cnc - { \l__starray_prefix_tl #2 _def_prop } - { @st_seq } - { l__starray_tmp #1 _seq } + {\l__starray_prefix_tl \tl_use:c {l__starray_tmp #1 _def_prop} _def_prop} + {@st_seq} + {l__starray_tmp #1 _seq} \seq_if_in:ceTF { l__starray_tmp #1 _seq } { \tl_use:c{l__starray_tmp #1 :B_tl} } @@ -1656,20 +1717,20 @@ { l__starray_tmp #1 _hash_prop } { \tl_use:c{ l__starray_tmp #1 :A_tl } } } - \tl_put_left:cn { l__starray_tmp #1 :B_tl } { #2 . } + \tl_put_left:cn { l__starray_tmp #1 :B_tl } { #3 . } \prop_if_in:ceTF { l__starray_tmp #1 _hash_prop } { \tl_use:c{l__starray_tmp #1 :A_tl}} { \keyval_parse:nnn { - \__starray_set_from_keyval_parse:nnen + \__starray_set_from_keyval_parse:neen { #1 A } { \tl_use:c{l__starray_tmp #1 :B_tl} } { \tl_use:c { l__starray_tmp #1 _idx_tl } } } { - \__starray_set_from_keyval_parse:nnenn + \__starray_set_from_keyval_parse:neenn { #1 A } { \tl_use:c{l__starray_tmp #1 :B_tl} } { \tl_use:c { l__starray_tmp #1 _idx_tl } } @@ -1697,7 +1758,7 @@ } } -\cs_generate_variant:Nn \__starray_set_from_keyval_parse:nnnnn {nnenn} +\cs_generate_variant:Nn \__starray_set_from_keyval_parse:nnnnn {neenn} %%%%%%%%%%%%%%% @@ -1706,15 +1767,20 @@ %%%% %%%%%%%%%%%%%%% +\tl_new:N \l__starray_from_keyval_orgref_tl \cs_new_protected:Npn \__starray_set_from_keyval:nn #1#2 { \bool_set_true:N \l__starray_rtn_bool + + %%% just in case, for msg_err messages + \tl_set:Nn \l__starray_from_keyval_orgref_tl {#1} + \__starray_parser:nnTF {\c__starray_idx_ending_bool}{#1} { \keyval_parse:nnn - {\__starray_set_from_keyval_parse:nnen {A}{#1}{\l__starray_parsed_ref_tl}} - {\__starray_set_from_keyval_parse:nnenn {A}{#1}{\l__starray_parsed_ref_tl}} + {\__starray_set_from_keyval_parse:neen {A}{\l__starray_parsed_ref_no_idx_ending_tl}{\l__starray_parsed_ref_tl}} + {\__starray_set_from_keyval_parse:neenn {A}{\l__starray_parsed_ref_no_idx_ending_tl}{\l__starray_parsed_ref_tl}} { #2 } \bool_if:NF \l__starray_rtn_bool { \__starray_msg_dispatch: } @@ -1745,11 +1811,15 @@ \cs_new_protected:Npn \__starray_set_from_keyvalTF:nn #1#2 { \bool_set_true:N \l__starray_rtn_bool + + %%% just in case, for msg_err messages + \tl_set:Nn \l__starray_from_keyval_orgref_tl {#1} + \__starray_parser:nnTF {\c__starray_idx_ending_bool}{#1} { \keyval_parse:nnn - {\__starray_set_from_keyval_parse:nnen {A}{#1}{\l__starray_parsed_ref_tl}} - {\__starray_set_from_keyval_parse:nnenn {A}{#1}{\l__starray_parsed_ref_tl}} + {\__starray_set_from_keyval_parse:neen {A}{\l__starray_parsed_ref_no_idx_ending_tl}{\l__starray_parsed_ref_tl}} + {\__starray_set_from_keyval_parse:neenn {A}{\l__starray_parsed_ref_no_idx_ending_tl}{\l__starray_parsed_ref_tl}} { #2 } \bool_if:NTF \l__starray_rtn_bool {\prg_return_true:} @@ -1962,6 +2032,7 @@ %%%% %%%% parser 'true' returns: %%%% \l__starray_parsed_ref_tl +%%%% \l__starray_parsed_ref_no_idx_ending_tl %%%% \l__starray_parsed_base_ref_tl %%%% \l__starray_parsed_root_ref_tl %%%% parser 'false' returns: @@ -1977,6 +2048,7 @@ \tl_clear:N \l__starray_parsed_tl \tl_clear:N \l__starray_parsed_ref_tl + \tl_clear:N \l__starray_parsed_ref_no_idx_ending_tl \tl_clear:N \l__starray_parsed_base_ref_tl \tl_clear:N \l__starray_parsed_root_ref_tl |