summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/l3kernel/l3prop.sty
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/latex/l3kernel/l3prop.sty')
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3prop.sty258
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'.