diff options
author | Karl Berry <karl@freefriends.org> | 2009-09-17 23:34:19 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2009-09-17 23:34:19 +0000 |
commit | 1684d0a29834ce566a114b73ca0d6a8cf38edc21 (patch) | |
tree | b03c3db912ae6bb76fad634d7ba4a69ea098eb28 /Master/texmf-dist/tex | |
parent | a95d1a90845bf6c1c7f2ee629fbe10a20d5863ce (diff) |
expl3 1543 (17sep09)
git-svn-id: svn://tug.org/texlive/trunk@15347 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex')
-rw-r--r-- | Master/texmf-dist/tex/latex/expl3/l3doc.cls | 29 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/expl3/l3keys.sty | 242 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/expl3/l3prg.sty | 32 | ||||
-rw-r--r-- | Master/texmf-dist/tex/latex/expl3/l3prop.sty | 8 |
4 files changed, 143 insertions, 168 deletions
diff --git a/Master/texmf-dist/tex/latex/expl3/l3doc.cls b/Master/texmf-dist/tex/latex/expl3/l3doc.cls index 691afa415e9..bfb198fecd3 100644 --- a/Master/texmf-dist/tex/latex/expl3/l3doc.cls +++ b/Master/texmf-dist/tex/latex/expl3/l3doc.cls @@ -53,7 +53,7 @@ \let \filedateOld \filedate \let \fileversionOld \fileversion \let \filedescriptionOld \filedescription -\GetIdInfo$Id: l3doc.dtx 1451 2009-08-08 06:33:34Z joseph $ +\GetIdInfo$Id: l3doc.dtx 1538 2009-09-17 05:14:09Z will $ {L3 Experimental documentation class} \ProvidesExplClass {\filename}{\filedate}{\fileversion}{\filedescription} @@ -253,12 +253,14 @@ $\star$ } } -\newenvironment{syntax}{% - \minipage[b]{.7\textwidth}% +\dim_new:N \g_doc_syntax_dim +\dim_set:Nn \g_doc_syntax_dim {0.7\textwidth} +\newenvironment{syntax}{ + \minipage[b]{\g_doc_syntax_dim} \cs_set_nopar:Npn \meta@font@select{\rmfamily\itshape} % (Will: I HATE italic cmtt!) \small\ttfamily\raggedright \obeyspaces\obeylines -}{% +}{ \endminipage \hfil\break \global\@ignoretrue @@ -434,40 +436,40 @@ \par\end{trivlist} } \newenvironment{TemplateInterfaceDescription}[1] - {\subsection{The template type `#1'}% + {\subsection{The~template~type~`#1'}% \begingroup \@beginparpenalty\@M \description - \def\TemplateArgument##1##2{\item[Arg: ##1]##2\par}% + \def\TemplateArgument##1##2{\item[Arg:~##1]##2\par}% \def\TemplateSemantics{\enddescription\endgroup \subsubsection*{Semantics:}}% } {\par\bigskip} \newenvironment{TemplateDescription}[2] - {\subsection{The template `#2' (type #1)}% + {\subsection{The~template~`#2'~(type~#1)}% \subsubsection*{Attributes:}% \begingroup \@beginparpenalty\@M \description - \def\TemplateKey##1##2##3##4{\item[##1 (##2)]##3% + \def\TemplateKey##1##2##3##4{\item[##1~(##2)]##3% \ifx\TemplateKey##4\TemplateKey\else \hfill\penalty500\hbox{}\hfill Default:~##4% \nobreak\hskip-\parfillskip\hskip0pt\relax \fi \par}% \def\TemplateSemantics{\enddescription\endgroup - \subsubsection*{Semantics \& Comments:}}% + \subsubsection*{Semantics~\&~Comments:}}% } {\par\bigskip} \newenvironment{InstanceDescription}[4][xxxxxxxxxxxxxxx] - {\subsubsection{The instance `#3' (template #2/#4)}% - \subsubsection*{Attribute values:}% + {\subsubsection{The~instance~`#3'~(template~#2/#4)}% + \subsubsection*{Attribute~values:}% \begingroup \@beginparpenalty\@M \def\InstanceKey##1##2{\>\textbf{##1}\>##2\\}% \def\InstanceSemantics{\endtabbing\endgroup \vskip-30pt\vskip0pt - \subsubsection*{Layout description \& Comments:}}% + \subsubsection*{Layout~description~\&~Comments:}}% \tabbing xxxx\=#1\=\kill } @@ -643,6 +645,8 @@ } } \g@addto@macro\theindex{\MakePrivateLetters} +\cs_set:Npn \verbatimchar {&} +\cs_set:Npx \levelchar {\string#} \setcounter{IndexColumns}{2} \IndexPrologue{ \part*{Index} @@ -653,6 +657,7 @@ numbers~underlined~point~to~the~definition,~ all~others~indicate~the~places~where~it~is~used. } + \cs_set_nopar:Npn \doc_special_main_index:n #1 { \index{ \@gobble#1 diff --git a/Master/texmf-dist/tex/latex/expl3/l3keys.sty b/Master/texmf-dist/tex/latex/expl3/l3keys.sty index 0029aedf9b4..f683a8357e2 100644 --- a/Master/texmf-dist/tex/latex/expl3/l3keys.sty +++ b/Master/texmf-dist/tex/latex/expl3/l3keys.sty @@ -48,7 +48,7 @@ %% %% ----------------------------------------------------------------------- \RequirePackage{l3names} -\GetIdInfo$Id: l3keys.dtx 1504 2009-09-03 20:29:00Z joseph $ +\GetIdInfo$Id: l3keys.dtx 1542 2009-09-17 07:38:53Z joseph $ {L3 Experimental key-value support} \ProvidesExplPackage {\filename}{\filedate}{\fileversion}{\filedescription} @@ -59,6 +59,7 @@ \tl_new:Nn \c_keys_value_required_tl { required } \int_new:N \l_keys_choice_int \tl_new:N \l_keys_choice_tl +\tl_new:N \l_keys_choice_code_tl \tl_new:N \l_keys_key_tl \tl_new:N \l_keys_path_tl \tl_new:N \l_keys_property_tl @@ -67,81 +68,75 @@ \tl_new:Nn \l_keys_nesting_tl { none } \bool_new:N \l_keys_no_value_bool \toks_new:N \l_keys_value_toks -\quark_new:N \q_keys_stop -\cs_new:Npn \keys_arguments_tidy:w #1 \q_keys_stop { } -\cs_new_nopar:Nn \keys_bool_set:N { - \keys_cmd_set:nNx { \l_keys_path_tl / true } 1 { - \exp_not:c { bool_ \keys_variable_get_scope:N #1 set_true:N } +\cs_new_nopar:Nn \keys_bool_set:NN { + \keys_cmd_set:nx { \l_keys_path_tl / true } { + \exp_not:c { bool_ #2 set_true:N } \exp_not:N #1 } - \keys_cmd_set:nNx { \l_keys_path_tl / false } 1 { + \keys_cmd_set:nx { \l_keys_path_tl / false } { \exp_not:N \use:c - { bool_ \keys_variable_get_scope:N #1 set_false:N } + { bool_ #2 set_false:N } \exp_not:N #1 } - \keys_bool_set_aux:N #1 -} -\cs_new_nopar:Nn \keys_bool_set_inverse:N { - \keys_cmd_set:nNx { \l_keys_path_tl / true } 1 { - \exp_not:c { bool_ \keys_variable_get_scope:N #1 set_false:N } - \exp_not:N #1 - } - \keys_cmd_set:nNx { \l_keys_path_tl / false } 1 { - \exp_not:c { bool_ \keys_variable_get_scope:N #1 set_true:N } - \exp_not:N #1 - } - \keys_bool_set_aux:N #1 -} -\cs_new_nopar:Nn \keys_bool_set_aux:N { \keys_choice_make: \cs_if_exist:NF #1 { \bool_new:N #1 } \keys_default_set:n { true } } +\cs_new:Nn \keys_choice_code_store:x { + \tl_set:cx { \c_keys_root_tl \l_keys_path_tl .choice_code_tl } {#1} +} \cs_new_nopar:Nn \keys_choice_find:n { \keys_execute_aux:nn { \l_keys_path_tl / #1 } { \keys_execute_aux:nn { \l_keys_path_tl / unknown } { } } } \cs_new_nopar:Nn \keys_choice_make: { - \keys_cmd_set:nNn { \l_keys_path_tl } 1 { + \keys_cmd_set:nn { \l_keys_path_tl } { \keys_choice_find:n {##1} } - \keys_cmd_set:nNn { \l_keys_path_tl / unknown } 1 { + \keys_cmd_set:nn { \l_keys_path_tl / unknown } { \msg_kernel_error:nxx { key-choice-unknown } { \l_keys_path_tl } {##1} } } -\cs_new:Nn \keys_choices_generate:nx { +\cs_new:Nn \keys_choices_generate:n { \keys_choice_make: \int_zero:N \l_keys_choice_int - \cs_set_nopar:Nn \keys_choices_generate_aux:n { - \int_incr:N \l_keys_choice_int - \keys_cmd_set:nNx { \l_keys_path_tl / ##1 } 1 { - \exp_not:n { \tl_set:Nn \l_keys_choice_tl } {##1} - \exp_not:n { \int_set:Nn \l_keys_choice_int } - { \int_use:N \l_keys_choice_int } - #2 + \cs_if_exist:cTF { + \c_keys_root_tl \l_keys_path_tl .choice_code_tl + } { + \tl_set:Nv \l_keys_choice_code_tl { + \c_keys_root_tl \l_keys_path_tl .choice_code_tl } + }{ + \tl_clear:N \l_keys_choice_code_tl } \clist_map_function:nN {#1} \keys_choices_generate_aux:n } -\cs_new_nopar:Nn \keys_choices_generate_aux:n { } -\cs_new:Nn \keys_cmd_set:nNn { - \keys_cmd_set_aux:nN {#1} #2 - \cs_generate_from_arg_count:cNnn { \c_keys_root_tl #1 .cmd:w } - \cs_set:Npn #2 { #3 \keys_arguments_tidy:w } +\cs_new_nopar:Nn \keys_choices_generate_aux:n { + \int_incr:N \l_keys_choice_int + \keys_cmd_set:nx { \l_keys_path_tl / #1 } { + \exp_not:n { \tl_set:Nn \l_keys_choice_tl } {#1} + \exp_not:n { \int_set:Nn \l_keys_choice_int } + { \int_use:N \l_keys_choice_int } + \exp_not:V \l_keys_choice_code_tl + } +} +\cs_new:Nn \keys_cmd_set:nn { + \keys_cmd_set_aux:n {#1} + \cs_generate_from_arg_count:cNnn { \c_keys_root_tl #1 .cmd:n } + \cs_set:Npn 1 {#2} } -\cs_new:Nn \keys_cmd_set:nNx { - \keys_cmd_set_aux:nN {#1} #2 - \cs_generate_from_arg_count:cNnn { \c_keys_root_tl #1 .cmd:w } - \cs_set:Npx #2 { #3 \exp_not:N \keys_arguments_tidy:w } +\cs_new:Nn \keys_cmd_set:nx { + \keys_cmd_set_aux:n {#1} + \cs_generate_from_arg_count:cNnn { \c_keys_root_tl #1 .cmd:n } + \cs_set:Npx 1 {#2} } -\cs_new_nopar:Nn \keys_cmd_set_aux:nN { +\cs_new_nopar:Nn \keys_cmd_set_aux:n { \keys_property_undefine:n { #1 .default_tl } - \num_set:cn { \c_keys_root_tl #1 .args_num } {#2} - \tl_set:cn { \c_keys_root_tl #1 .req_tl } { } + \tl_set:cn { \c_keys_root_tl #1 .req_tl } { } } \cs_new:Nn \keys_default_set:n { \tl_set:cn { \c_keys_root_tl \l_keys_path_tl .default_tl } {#1} @@ -185,20 +180,13 @@ \exp_args:Nc \cs_get_arg_count_from_signature:N { \l_keys_property_tl } = \c_zero } { - \keys_tmp:w \q_keys_stop + \keys_tmp:w }{ \msg_kernel_error:nx { key-property-value-required } { \l_keys_property_tl } } }{ - \intexpr_compare:nTF { - \exp_args:Nc \cs_get_arg_count_from_signature:N - { \l_keys_property_tl } = \c_one - } { - \keys_tmp:w {#1} \q_keys_stop - }{ - \keys_tmp:w #1 { } { } { } { } { } { } { } { } { } \q_keys_stop - } + \keys_tmp:w {#1} } } \cs_new_nopar:Nn \keys_execute: { @@ -212,22 +200,15 @@ } } \cs_new_nopar:Nn \keys_execute_aux:nn { - \cs_set_eq:Nc \keys_tmp:w { \c_keys_root_tl #1 .cmd:w } + \cs_set_eq:Nc \keys_tmp:w { \c_keys_root_tl #1 .cmd:n } \cs_if_exist:NTF \keys_tmp:w { - \intexpr_compare:nTF { - \num_use:c { \c_keys_root_tl #1 .args_num } = \c_one - } { - \exp_args:NV \keys_tmp:w \l_keys_value_toks \q_keys_stop - }{ - \exp_after:wN \keys_tmp:w \toks_use:N \l_keys_value_toks - { } { } { } { } { } { } { } { } { } \q_keys_stop - } + \exp_args:NV \keys_tmp:w \l_keys_value_toks }{ #2 } } \prg_set_conditional:Nnn \keys_if_exist:nn {TF,T,F} { - \cs_if_exist:cTF { \c_keys_root_tl #1 / #2 .cmd:w } { + \cs_if_exist:cTF { \c_keys_root_tl #1 / #2 .cmd:n } { \prg_return_true: }{ \prg_return_false: @@ -238,16 +219,8 @@ \c_keys_root_tl \l_keys_path_tl .req_tl } } -\cs_new:Nn \keys_initial_value:n { - \toks_set:Nn \l_keys_value_toks {#1} - \keys_execute_aux:nn { \l_keys_path_tl } { - \msg_kernel_error:nx { key-initial-without-code } - { \l_keys_path_tl } - } -} -\cs_generate_variant:Nn \keys_initial_value:n { V } \cs_new_nopar:Nn \keys_meta_make:n { - \keys_cmd_set:nNx { \l_keys_path_tl } 1 { + \keys_cmd_set:nx { \l_keys_path_tl } { \exp_not:N \keys_set:nn { \l_keys_module_tl } {#1} } } @@ -275,8 +248,7 @@ } } \cs_new_nopar:Nn \keys_property_new:nn { - \cs_new:cn { \c_keys_properties_root_tl #1 } - { #2 \keys_arguments_tidy:w } + \cs_new:cn { \c_keys_properties_root_tl #1 } {#2} } \cs_new_nopar:Nn \keys_property_undefine:n { \cs_set_eq:cN { \c_keys_root_tl #1 } \c_undefined @@ -330,7 +302,7 @@ } } \cs_new_nopar:Nn \keys_show:nn { - \cs_show:c { \c_keys_root_tl #1 / \tl_to_str:n {#2} .cmd:w } + \cs_show:c { \c_keys_root_tl #1 / \tl_to_str:n {#2} .cmd:n } } \cs_new:Npn \keys_tmp:w {} \cs_new:Nn \keys_value_or_default:n { @@ -347,75 +319,34 @@ \tl_set_eq:cc { \c_keys_root_tl \l_keys_path_tl .req_tl } { c_keys_value_ #1 _tl } } -\group_begin: - \char_set_lccode:nn {`\&} {`\g} - \char_make_other:N \& -\tl_to_lowercase:n { - \group_end: - \cs_new_nopar:Nn \keys_variable_get_scope:N { - \exp_last_unbraced:Nf \keys_variable_get_scope_aux:w - { \cs_to_str:N #1 \exp_stop_f: \q_nil } +\cs_new_nopar:Nn \keys_variable_set:NnNN { + \cs_if_exist:NF #1 { + \use:c { #2 _new:N } #1 } - \cs_new_nopar:Npn \keys_variable_get_scope_aux:w #1#2 \q_nil { - \token_if_eq_meaning:NNT & #1 {g} + \keys_cmd_set:nx { \l_keys_path_tl } { + \exp_not:c { #2 _ #3 set:N #4 } \exp_not:N #1 {##1} } } -\group_begin: - \char_set_lccode:nn {`\&} {`\_} - \char_make_other:N \& -\tl_to_lowercase:n { - \group_end: - \cs_new_nopar:Nn \keys_variable_get_type:N { - \exp_after:wN \keys_variable_get_type_aux:w - \token_to_str:N #1 & a \q_nil - } - \cs_new_nopar:Npn \keys_variable_get_type_aux:w #1 & #2#3 \q_nil { - \token_if_eq_meaning:NNTF a #2 { - #1 - }{ - \keys_variable_get_type_aux:w #2#3 \q_nil - } - } -} -\cs_new_nopar:Nn \keys_variable_set:NN { - \cs_if_exist:cF { - \keys_variable_get_type:N #2 _ - \keys_variable_get_scope:N #2 set:N #1 - } { - \msg_kernel_error:nxx { key-no-set-function } { - \exp_not:c { - \keys_variable_get_type:N #2 _ - \keys_variable_get_scope:N #2 set:N #1 - } - } {#2} - } - \cs_if_exist:NF #2 { - \use:c { \keys_variable_get_type:N #2 _new:N } #2 - } - \keys_cmd_set:nNx { \l_keys_path_tl } 1 { - \exp_not:c { - \keys_variable_get_type:N #2 _ - \keys_variable_get_scope:N #2 set:N #1 - } \exp_not:N #2 {##1} - } +\keys_property_new:nn { .bool_set:N } { + \keys_bool_set:NN #1 { } } -\keys_property_new:nn { .bool:N } { - \keys_bool_set:N #1 +\keys_property_new:nn { .bool_gset:N } { + \keys_bool_set:NN #1 n } \keys_property_new:nn { .choice: } { \keys_choice_make: } -\keys_property_new:nn { .code:n } { - \keys_cmd_set:nNn { \l_keys_path_tl } 1 {#1} +\keys_property_new:nn { .choice_code:n } { + \keys_choice_code_store:x { \exp_not:n {#1} } } -\keys_property_new:nn { .code:Nn } { - \keys_cmd_set:nNn { \l_keys_path_tl } #1 {#2} +\keys_property_new:nn { .choice_code:x } { + \keys_choice_code_store:x {#1} } -\keys_property_new:nn { .code:x } { - \keys_cmd_set:nNx { \l_keys_path_tl } 1 {#1} +\keys_property_new:nn { .code:n } { + \keys_cmd_set:nn { \l_keys_path_tl } {#1} } -\keys_property_new:nn { .code:Nx } { - \keys_cmd_set:nNx { \l_keys_path_tl } #1 {#2} +\keys_property_new:nn { .code:x } { + \keys_cmd_set:nx { \l_keys_path_tl } {#1} } \keys_property_new:nn { .default:n } { \keys_default_set:n {#1} @@ -423,25 +354,20 @@ \keys_property_new:nn { .default:V } { \keys_default_set:V #1 } -\keys_property_new:nn { .function:N } { - \keys_cmd_set:nNn { \l_keys_path_tl } 1 { - \cs_set:Nn #1 {##1} - } - \cs_if_free:NT #1 { - \cs_set:Nn #1 { } - } +\keys_property_new:nn { .dim_set:N } { + \keys_variable_set:NnNN #1 { dim } { } n } -\keys_property_new:nn { .generate_choices:nn } { - \keys_choices_generate:nx {#1} { \exp_not:n {#2} } +\keys_property_new:nn { .dim_gset:N } { + \keys_variable_set:NnNN #1 { dim } g n } -\keys_property_new:nn { .generate_choices:nx } { - \keys_choices_generate:nx {#1} {#2} +\keys_property_new:nn { .generate_choices:n } { + \keys_choices_generate:n {#1} } -\keys_property_new:nn { .initial:n } { - \keys_initial_value:n {#1} +\keys_property_new:nn { .int_set:N } { + \keys_variable_set:NnNN #1 { int } { } n } -\keys_property_new:nn { .initial:V } { - \keys_initial_value:V #1 +\keys_property_new:nn { .int_gset:N } { + \keys_variable_set:NnNN #1 { int } g n } \keys_property_new:nn { .meta:n } { \keys_meta_make:n {#1} @@ -449,11 +375,23 @@ \keys_property_new:nn { .meta:x } { \keys_meta_make:x {#1} } -\keys_property_new:nn { .set:N } { - \keys_variable_set:NN n #1 +\keys_property_new:nn { .skip_set:N } { + \keys_variable_set:NnNN #1 { skip } { } n +} +\keys_property_new:nn { .skip_gset:N } { + \keys_variable_set:NnNN #1 { skip } g n +} +\keys_property_new:nn { .tl_set:N } { + \keys_variable_set:NnNN #1 { tl } { } n +} +\keys_property_new:nn { .tl_set_x:N } { + \keys_variable_set:NnNN #1 { tl } { } x +} +\keys_property_new:nn { .tl_gset:N } { + \keys_variable_set:NnNN #1 { tl } g n } -\keys_property_new:nn { .set_x:N } { - \keys_variable_set:NN x #1 +\keys_property_new:nn { .tl_gset_x:N } { + \keys_variable_set:NnNN #1 { tl } g x } \keys_property_new:nn { .value_forbidden: } { \keys_value_requirement:n { forbidden } diff --git a/Master/texmf-dist/tex/latex/expl3/l3prg.sty b/Master/texmf-dist/tex/latex/expl3/l3prg.sty index de730887e82..d81bd2095b1 100644 --- a/Master/texmf-dist/tex/latex/expl3/l3prg.sty +++ b/Master/texmf-dist/tex/latex/expl3/l3prg.sty @@ -48,7 +48,7 @@ %% %% ----------------------------------------------------------------------- \RequirePackage{l3names} -\GetIdInfo$Id: l3prg.dtx 1451 2009-08-08 06:33:34Z joseph $ +\GetIdInfo$Id: l3prg.dtx 1541 2009-09-17 07:31:55Z joseph $ {L3 Experimental control structures} \ProvidesExplPackage {\filename}{\filedate}{\fileversion}{\filedescription} @@ -427,6 +427,36 @@ \prg_define_quicksort:nnn {prg}{}{} \cs_set:Npn \prg_quicksort_function:n {\ERROR} \cs_set:Npn \prg_quicksort_compare:nnTF {\ERROR} +\group_begin: + \tex_lccode:D `\& = `\g \tex_relax:D + \tex_catcode:D \& = \c_twelve \tex_relax:D +\tl_to_lowercase:n { + \group_end: + \cs_new_nopar:Nn \prg_variable_get_scope:N { + \exp_last_unbraced:Nf \prg_variable_get_scope_aux:w + { \cs_to_str:N #1 \exp_stop_f: \q_nil } + } + \cs_new_nopar:Npn \prg_variable_get_scope_aux:w #1#2 \q_nil { + \token_if_eq_meaning:NNT & #1 {g} + } +} +\group_begin: + \tex_lccode:D `\& = `\_ \tex_relax:D + \tex_catcode:D \& = \c_twelve \tex_relax:D +\tl_to_lowercase:n { + \group_end: + \cs_new_nopar:Nn \prg_variable_get_type:N { + \exp_after:wN \p;rg_variable_get_type_aux:w + \token_to_str:N #1 & a \q_nil + } + \cs_new_nopar:Npn \prg_variable_get_type_aux:w #1 & #2#3 \q_nil { + \token_if_eq_meaning:NNTF a #2 { + #1 + }{ + \prg_variable_get_type_aux:w #2#3 \q_nil + } + } +} %% %% %% End of file `l3prg.sty'. diff --git a/Master/texmf-dist/tex/latex/expl3/l3prop.sty b/Master/texmf-dist/tex/latex/expl3/l3prop.sty index f66173c17bf..48aa3138d79 100644 --- a/Master/texmf-dist/tex/latex/expl3/l3prop.sty +++ b/Master/texmf-dist/tex/latex/expl3/l3prop.sty @@ -48,7 +48,7 @@ %% %% ----------------------------------------------------------------------- \RequirePackage{l3names} -\GetIdInfo$Id: l3prop.dtx 1506 2009-09-04 21:52:12Z joseph $ +\GetIdInfo$Id: l3prop.dtx 1536 2009-09-16 07:23:04Z joseph $ {L3 Experimental Property Lists} \ProvidesExplPackage {\filename}{\filedate}{\fileversion}{\filedescription} @@ -97,11 +97,11 @@ \prop_split_aux:Nnn #1{#2}\prop_get_aux:w } \cs_new:Npn \prop_get_aux:w #1#2#3#4 { \tl_set:Nx #4 {\exp_not:n{#2}} } -\cs_generate_variant:Nn \prop_get:NnN {cnN} +\cs_generate_variant:Nn \prop_get:NnN { NVN, cnN, cVN } \cs_new:Npn \prop_gget:NnN #1#2{ \prop_split_aux:Nnn #1{#2}\prop_gget_aux:w} \cs_new:Npn \prop_gget_aux:w #1#2#3#4{\tl_gset:Nx#4{\exp_not:n{#2}}} -\cs_generate_variant:Nn \prop_gget:NnN {cnN} +\cs_generate_variant:Nn \prop_gget:NnN { NVN, cnN, cVN } \cs_new:Npn \prop_get_gdel:NnN #1#2#3{ \prop_split_aux:Nnn #1{#2}{\prop_get_del_aux:w #3{\toks_gset:Nn #1}{#2}}} \cs_new:Npn \prop_get_del_aux:w #1#2#3#4#5#6{ @@ -143,6 +143,8 @@ \prop_tmp:w #5 } } +\cs_generate_variant:Nn \prop_del:Nn { NV } +\cs_generate_variant:Nn \prop_gdel:Nn { NV } \cs_new:Npn \prop_gput_if_new:Nnn #1#2{ \prop_split_aux:Nnn #1{#2}{\prop_put_if_new_aux:w #1{#2}}} \cs_new:Npn \prop_put_if_new_aux:w #1#2#3#4#5#6{ |