diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex/l3kernel/l3prop.sty')
-rw-r--r-- | Master/texmf-dist/tex/latex/l3kernel/l3prop.sty | 258 |
1 files changed, 119 insertions, 139 deletions
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3prop.sty b/Master/texmf-dist/tex/latex/l3kernel/l3prop.sty index 539f1539352..5699c49cc37 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3prop.sty +++ b/Master/texmf-dist/tex/latex/l3kernel/l3prop.sty @@ -46,20 +46,19 @@ %% %% ----------------------------------------------------------------------- \RequirePackage{l3names} -\GetIdInfo$Id: l3prop.dtx 3490 2012-03-04 01:00:53Z bruno $ - {L3 Experimental property lists} -%% +\GetIdInfo$Id: l3prop.dtx 3986 2012-07-15 19:23:51Z joseph $ + {L3 Property lists} \ProvidesExplPackage {\ExplFileName}{\ExplFileDate}{\ExplFileVersion}{\ExplFileDescription} -\package_check_loaded_expl: -\quark_new:N \q_prop -\tl_const:Nn \c_empty_prop { \q_prop } +\__expl_package_check: +\quark_new:N \q__prop +\tl_const:Nn \c_empty_prop { \q__prop } \cs_new_protected:Npn \prop_new:N #1 { \cs_new_eq:NN #1 \c_empty_prop } \cs_new_protected:Npn \prop_new:c #1 { \cs_new_eq:cN {#1} \c_empty_prop } \cs_new_protected:Npn \prop_clear:N #1 { \cs_set_eq:NN #1 \c_empty_prop } -\cs_new_protected:Npn \prop_clear:c #1 { \cs_set_eq:cN {#1} \c_empty_prop } +\cs_generate_variant:Nn \prop_clear:N { c } \cs_new_protected:Npn \prop_gclear:N #1 { \cs_gset_eq:NN #1 \c_empty_prop } -\cs_new_protected:Npn \prop_gclear:c #1 { \cs_gset_eq:cN {#1} \c_empty_prop } +\cs_generate_variant:Nn \prop_gclear:N { c } \cs_new_protected:Npn \prop_clear_new:N #1 { \prop_if_exist:NTF #1 { \prop_clear:N #1 } { \prop_new:N #1 } } \cs_generate_variant:Nn \prop_clear_new:N { c } @@ -74,57 +73,55 @@ \cs_new_eq:NN \prop_gset_eq:Nc \tl_gset_eq:Nc \cs_new_eq:NN \prop_gset_eq:cN \tl_gset_eq:cN \cs_new_eq:NN \prop_gset_eq:cc \tl_gset_eq:cc -\cs_new_protected:Npn \prop_split:NnTF #1#2 - { \exp_args:NNo \prop_split_aux:NnTF #1 { \tl_to_str:n {#2} } } -\cs_new_protected:Npn \prop_split_aux:NnTF #1#2 - { - \cs_set_protected:Npn \prop_split_aux:w - ##1 \q_prop #2 \q_prop ##2 ##3 ##4 \q_mark ##5 \q_stop - { \prop_split_aux:nnnn ##3 { {##1 \q_prop } {##2} {##4} } } - \exp_after:wN \prop_split_aux:w #1 \q_mark - \q_prop #2 \q_prop { } { ? \use_ii:nn { } } \q_mark \q_stop - } -\cs_new:Npn \prop_split_aux:nnnn #1#2#3#4 { #3 #2 } -\cs_new_protected:Npn \prop_split_aux:w { } -\cs_new_protected:Npn \prop_split:Nnn #1#2#3 +\prop_new:N \l_tmpa_prop +\prop_new:N \l_tmpb_prop +\prop_new:N \g_tmpa_prop +\prop_new:N \g_tmpb_prop +\cs_new_protected:Npn \__prop_split:NnTF #1#2 + { \exp_args:NNo \__prop_split_aux:NnTF #1 { \tl_to_str:n {#2} } } +\cs_new_protected:Npn \__prop_split_aux:NnTF #1#2 { - \prop_split:NnTF #1 {#2} - {#3} - { \exp_args:Nno \use:n {#3} {#1} { \q_no_value } { } } + \cs_set_protected:Npn \__prop_split_aux:w + ##1 \q__prop #2 \q__prop ##2 ##3 ##4 \q_mark ##5 \q_stop + { \__prop_split_aux:nnnn ##3 { {##1 \q__prop } {##2} {##4} } } + \exp_after:wN \__prop_split_aux:w #1 \q_mark + \q__prop #2 \q__prop { } { ? \use_ii:nn { } } \q_mark \q_stop } -\cs_new_protected:Npn \prop_del:Nn #1#2 - { \prop_split:NnTF #1 {#2} { \prop_del_aux:NNnnn \tl_set:Nn #1 } { } } -\cs_new_protected:Npn \prop_gdel:Nn #1#2 - { \prop_split:NnTF #1 {#2} { \prop_del_aux:NNnnn \tl_gset:Nn #1 } { } } -\cs_new_protected:Npn \prop_del_aux:NNnnn #1#2#3#4#5 +\cs_new:Npn \__prop_split_aux:nnnn #1#2#3#4 { #3 #2 } +\cs_new_protected:Npn \__prop_split_aux:w { } +\cs_new_protected:Npn \prop_remove:Nn #1#2 + { \__prop_split:NnTF #1 {#2} { \__prop_remove:NNnnn \tl_set:Nn #1 } { } } +\cs_new_protected:Npn \prop_gremove:Nn #1#2 + { \__prop_split:NnTF #1 {#2} { \__prop_remove:NNnnn \tl_gset:Nn #1 } { } } +\cs_new_protected:Npn \__prop_remove:NNnnn #1#2#3#4#5 { #1 #2 { #3 #5 } } -\cs_generate_variant:Nn \prop_del:Nn { NV } -\cs_generate_variant:Nn \prop_del:Nn { c , cV } -\cs_generate_variant:Nn \prop_gdel:Nn { NV } -\cs_generate_variant:Nn \prop_gdel:Nn { c , cV } +\cs_generate_variant:Nn \prop_remove:Nn { NV } +\cs_generate_variant:Nn \prop_remove:Nn { c , cV } +\cs_generate_variant:Nn \prop_gremove:Nn { NV } +\cs_generate_variant:Nn \prop_gremove:Nn { c , cV } \cs_new_protected:Npn \prop_get:NnN #1#2#3 { - \prop_split:NnTF #1 {#2} - { \prop_get_aux:Nnnn #3 } + \__prop_split:NnTF #1 {#2} + { \__prop_get:Nnnn #3 } { \tl_set:Nn #3 { \q_no_value } } } -\cs_new_protected:Npn \prop_get_aux:Nnnn #1#2#3#4 +\cs_new_protected:Npn \__prop_get:Nnnn #1#2#3#4 { \tl_set:Nn #1 {#3} } \cs_generate_variant:Nn \prop_get:NnN { NV , No } \cs_generate_variant:Nn \prop_get:NnN { c , cV , co } \cs_new_protected:Npn \prop_pop:NnN #1#2#3 { - \prop_split:NnTF #1 {#2} - { \prop_pop_aux:NNNnnn \tl_set:Nn #1 #3 } + \__prop_split:NnTF #1 {#2} + { \__prop_pop:NNNnnn \tl_set:Nn #1 #3 } { \tl_set:Nn #3 { \q_no_value } } } \cs_new_protected:Npn \prop_gpop:NnN #1#2#3 { - \prop_split:NnTF #1 {#2} - { \prop_pop_aux:NNNnnn \tl_gset:Nn #1 #3 } + \__prop_split:NnTF #1 {#2} + { \__prop_pop:NNNnnn \tl_gset:Nn #1 #3 } { \tl_set:Nn #3 { \q_no_value } } } -\cs_new_protected:Npn \prop_pop_aux:NNNnnn #1#2#3#4#5#6 +\cs_new_protected:Npn \__prop_pop:NNNnnn #1#2#3#4#5#6 { \tl_set:Nn #3 {#5} #1 #2 { #4 #6 } @@ -133,18 +130,47 @@ \cs_generate_variant:Nn \prop_pop:NnN { c , co } \cs_generate_variant:Nn \prop_gpop:NnN { No } \cs_generate_variant:Nn \prop_gpop:NnN { c , co } -\cs_new_protected:Npn \prop_put:Nnn { \prop_put_aux:NNnn \tl_set:Nx } -\cs_new_protected:Npn \prop_gput:Nnn { \prop_put_aux:NNnn \tl_gset:Nx } -\cs_new_protected:Npn \prop_put_aux:NNnn #1#2#3#4 +\prg_new_protected_conditional:Npnn \prop_pop:NnN #1#2#3 { T , F , TF } + { + \__prop_split:NnTF #1 {#2} + { \__prop_pop_true:NNNnnn \tl_set:Nn #1 #3 } + { \prg_return_false: } + } +\prg_new_protected_conditional:Npnn \prop_gpop:NnN #1#2#3 { T , F , TF } + { + \__prop_split:NnTF #1 {#2} + { \__prop_pop_true:NNNnnn \tl_gset:Nn #1 #3 } + { \prg_return_false: } + } +\cs_new_protected:Npn \__prop_pop_true:NNNnnn #1#2#3#4#5#6 + { + \tl_set:Nn #3 {#5} + #1 #2 { #4 #6 } + \prg_return_true: + } +\cs_generate_variant:Nn \prop_pop:NnNT { c } +\cs_generate_variant:Nn \prop_pop:NnNF { c } +\cs_generate_variant:Nn \prop_pop:NnNTF { c } +\cs_generate_variant:Nn \prop_gpop:NnNT { c } +\cs_generate_variant:Nn \prop_gpop:NnNF { c } +\cs_generate_variant:Nn \prop_gpop:NnNTF { c } +\cs_new_protected:Npn \prop_put:Nnn + { \__prop_put:NNNnn \tl_set:Nx \tl_put_right:Nx } +\cs_new_protected:Npn \prop_gput:Nnn + { \__prop_put:NNNnn \tl_gset:Nx \tl_gput_right:Nx } +\cs_new_protected:Npn \__prop_put:NNNnn #1#2#3#4#5 { - \prop_split:Nnn #2 {#3} { \prop_put_aux:NNnnnnn #1 #2 {#3} {#4} } + \__prop_split:NnTF #3 {#4} + { \__prop_put:NNnnnnn #1 #3 {#4} {#5} } + { #2 #3 { \tl_to_str:n {#4} \exp_not:n { \q__prop {#5} \q__prop } } } } -\cs_new_protected:Npn \prop_put_aux:NNnnnnn #1#2#3#4#5#6#7 +\cs_new_protected:Npn \__prop_put:NNnnnnn #1#2#3#4#5#6#7 { #1 #2 { - \exp_not:n { #5 #7 } - \tl_to_str:n {#3} \exp_not:n { \q_prop {#4} \q_prop } + \exp_not:n {#5} + \tl_to_str:n {#3} \exp_not:n { \q__prop {#4} \q__prop } + \exp_not:n {#7} } } \cs_generate_variant:Nn \prop_put:Nnn @@ -156,16 +182,16 @@ \cs_generate_variant:Nn \prop_gput:Nnn { c , cnV , cno , cnx , cV , cVV , co , coo } \cs_new_protected_nopar:Npn \prop_put_if_new:Nnn - { \prop_put_if_new_aux:NNnn \tl_put_right:Nx } + { \__prop_put_if_new:NNnn \tl_put_right:Nx } \cs_new_protected_nopar:Npn \prop_gput_if_new:Nnn - { \prop_put_if_new_aux:NNnn \tl_gput_right:Nx } -\cs_new_protected:Npn \prop_put_if_new_aux:NNnn #1#2#3#4 + { \__prop_put_if_new:NNnn \tl_gput_right:Nx } +\cs_new_protected:Npn \__prop_put_if_new:NNnn #1#2#3#4 { - \prop_split:NnTF #2 {#3} + \__prop_split:NnTF #2 {#3} { \use_none:nnn } { #1 #2 - { \tl_to_str:n {#3} \exp_not:n { \q_prop {#4} \q_prop } } + { \tl_to_str:n {#3} \exp_not:n { \q__prop {#4} \q__prop } } } } \cs_generate_variant:Nn \prop_put_if_new:Nnn { c } @@ -192,26 +218,26 @@ \cs_generate_variant:Nn \prop_if_empty:NF {c} \prg_new_conditional:Npnn \prop_if_in:Nn #1#2 { p , T , F , TF } { - \exp_last_unbraced:Noo \prop_if_in_aux:nwn + \exp_last_unbraced:Noo \__prop_if_in:nwn { \tl_to_str:n {#2} } #1 - \tl_to_str:n {#2} \q_prop { } - \q_recursion_tail - \prg_break_point:n { } + \tl_to_str:n {#2} \q__prop { } + \q_recursion_tail % could be any cs != \q__prop + \__prg_break_point: } -\cs_new:Npn \prop_if_in_aux:nwn #1 \q_prop #2 \q_prop #3 +\cs_new:Npn \__prop_if_in:nwn #1 \q__prop #2 \q__prop #3 { - \str_if_eq:xxTF {#1} {#2} - { \prop_if_in_aux:N } - { \prop_if_in_aux:nwn {#1} } + \str_if_eq_x:nnTF {#1} {#2} + { \__prop_if_in:N } + { \__prop_if_in:nwn {#1} } } -\cs_new:Npn \prop_if_in_aux:N #1 +\cs_new:Npn \__prop_if_in:N #1 { - \if_meaning:w \q_prop #1 + \if_meaning:w \q__prop #1 \prg_return_true: \else: \prg_return_false: \fi: - \prop_map_break: + \__prg_break: } \cs_generate_variant:Nn \prop_if_in_p:Nn { NV , No } \cs_generate_variant:Nn \prop_if_in_p:Nn { c , cV , co } @@ -223,11 +249,11 @@ \cs_generate_variant:Nn \prop_if_in:NnTF { c , cV , co } \prg_new_protected_conditional:Npnn \prop_get:NnN #1#2#3 { T , F , TF } { - \prop_split:NnTF #1 {#2} - { \prop_get_aux_true:Nnnn #3 } + \__prop_split:NnTF #1 {#2} + { \__prop_get_true:Nnnn #3 } { \prg_return_false: } } -\cs_new_protected:Npn \prop_get_aux_true:Nnnn #1#2#3#4 +\cs_new_protected:Npn \__prop_get_true:Nnnn #1#2#3#4 { \tl_set:Nn #1 {#3} \prg_return_true: @@ -240,95 +266,49 @@ \cs_generate_variant:Nn \prop_get:NnNTF { c , cV , co } \cs_new:Npn \prop_map_function:NN #1#2 { - \exp_last_unbraced:NNo \prop_map_function_aux:Nwn #2 - #1 \q_recursion_tail \q_prop { } - \prg_break_point:n { } + \exp_last_unbraced:NNo \__prop_map_function:Nwn #2 + #1 \q_recursion_tail \q__prop { } + \__prg_break_point:Nn \prop_map_break: { } } -\cs_new:Npn \prop_map_function_aux:Nwn #1 \q_prop #2 \q_prop #3 +\cs_new:Npn \__prop_map_function:Nwn #1 \q__prop #2 \q__prop #3 { - \if_meaning:w \q_recursion_tail #2 - \exp_after:wN \prop_map_break: - \fi: + \__quark_if_recursion_tail_break:nN {#2} \prop_map_break: #1 {#2} {#3} - \prop_map_function_aux:Nwn #1 + \__prop_map_function:Nwn #1 } \cs_generate_variant:Nn \prop_map_function:NN { Nc } \cs_generate_variant:Nn \prop_map_function:NN { c , cc } \cs_new_protected:Npn \prop_map_inline:Nn #1#2 { - \int_gincr:N \g_prg_map_int - \cs_gset:cpn { prop_map_inline_ \int_use:N \g_prg_map_int :nn } - ##1##2 {#2} - \exp_last_unbraced:Nco \prop_map_function_aux:Nwn - { prop_map_inline_ \int_use:N \g_prg_map_int :nn } + \int_gincr:N \g__prg_map_int + \cs_gset:cpn { __prg_map_ \int_use:N \g__prg_map_int :w } ##1##2 {#2} + \exp_last_unbraced:Nco \__prop_map_function:Nwn + { __prg_map_ \int_use:N \g__prg_map_int :w } #1 - \q_recursion_tail \q_prop { } - \prg_break_point:n { \int_gdecr:N \g_prg_map_int } + \q_recursion_tail \q__prop { } + \__prg_break_point:Nn \prop_map_break: { \int_gdecr:N \g__prg_map_int } } \cs_generate_variant:Nn \prop_map_inline:Nn { c } -\cs_new_eq:NN \prop_map_break: \prg_map_break: -\cs_new_eq:NN \prop_map_break:n \prg_map_break:n +\cs_new_nopar:Npn \prop_map_break: + { \__prg_map_break:Nn \prop_map_break: { } } +\cs_new_nopar:Npn \prop_map_break:n + { \__prg_map_break:Nn \prop_map_break: } \cs_new_protected:Npn \prop_show:N #1 { - \msg_aux_show:Nnx + \__msg_show_variable:Nnn #1 { prop } - { \prop_map_function:NN #1 \msg_aux_show:nn } + { \prop_map_function:NN #1 \__msg_show_item:nn } } \cs_generate_variant:Nn \prop_show:N { c } -\prg_new_protected_conditional:Npnn \prop_pop:NnN #1#2#3 { T , F , TF } - { - \prop_split:NnTF #1 {#2} - { \prop_pop_aux_true:NNNnnn \tl_set:Nn #1 #3 } - { \prg_return_false: } - } -\prg_new_protected_conditional:Npnn \prop_gpop:NnN #1#2#3 { T , F , TF } - { - \prop_split:NnTF #1 {#2} - { \prop_pop_aux_true:NNNnnn \tl_gset:Nn #1 #3 } - { \prg_return_false: } - } -\cs_new_protected:Npn \prop_pop_aux_true:NNNnnn #1#2#3#4#5#6 - { - \tl_set:Nn #3 {#5} - #1 #2 { #4 #6 } - \prg_return_true: - } -\cs_generate_variant:Nn \prop_pop:NnNT { c } -\cs_generate_variant:Nn \prop_pop:NnNF { c } -\cs_generate_variant:Nn \prop_pop:NnNTF { c } -\cs_generate_variant:Nn \prop_gpop:NnNT { c } -\cs_generate_variant:Nn \prop_gpop:NnNF { c } -\cs_generate_variant:Nn \prop_gpop:NnNTF { c } -\cs_new:Npn \prop_map_tokens:Nn #1#2 - { - \exp_last_unbraced:Nno \prop_map_tokens_aux:nwn {#2} #1 - \q_recursion_tail \q_prop { } - \prg_break_point:n { } - } -\cs_new:Npn \prop_map_tokens_aux:nwn #1 \q_prop #2 \q_prop #3 - { - \if_meaning:w \q_recursion_tail #2 - \exp_after:wN \prop_map_break: - \fi: - \use:n {#1} {#2} {#3} - \prop_map_tokens_aux:nwn {#1} - } -\cs_generate_variant:Nn \prop_map_tokens:Nn { c } -\cs_new:Npn \prop_get:Nn #1#2 - { - \exp_last_unbraced:Noo \prop_get_Nn_aux:nwn - { \tl_to_str:n {#2} } #1 - \tl_to_str:n {#2} \q_prop { } - \prg_break_point:n { } - } -\cs_new:Npn \prop_get_Nn_aux:nwn #1 \q_prop #2 \q_prop #3 - { - \str_if_eq:xxTF {#1} {#2} - { \prg_map_break:n { \exp_not:n {#3} } } - { \prop_get_Nn_aux:nwn {#1} } - } -\cs_generate_variant:Nn \prop_get:Nn { c } +\cs_new_eq:NN \prop_del:Nn \prop_remove:Nn +\cs_new_eq:NN \prop_del:NV \prop_remove:NV +\cs_new_eq:NN \prop_del:cn \prop_remove:cn +\cs_new_eq:NN \prop_del:cV \prop_remove:cV +\cs_new_eq:NN \prop_gdel:Nn \prop_gremove:Nn +\cs_new_eq:NN \prop_gdel:NV \prop_gremove:NV +\cs_new_eq:NN \prop_gdel:cn \prop_gremove:cn +\cs_new_eq:NN \prop_gdel:cV \prop_gremove:cV %% %% %% End of file `l3prop.sty'. |