From 536c97d353d0ae698ffe85cbf7fa25e181e0cfea Mon Sep 17 00:00:00 2001 From: Joseph Wright Date: Fri, 1 Feb 2019 08:22:58 +0000 Subject: [PATCH] `.prop_(g)put:N` key property (fixes #444) --- l3kernel/CHANGELOG.md | 1 + l3kernel/l3keys.dtx | 72 +++++++++++++++++++++---- l3kernel/testfiles/m3expl001.luatex.tlg | 10 +++- l3kernel/testfiles/m3expl001.ptex.tlg | 10 +++- l3kernel/testfiles/m3expl001.tlg | 10 +++- l3kernel/testfiles/m3expl001.uptex.tlg | 10 +++- l3kernel/testfiles/m3expl001.xetex.tlg | 10 +++- l3kernel/testfiles/m3expl003.luatex.tlg | 10 +++- l3kernel/testfiles/m3expl003.ptex.tlg | 10 +++- l3kernel/testfiles/m3expl003.tlg | 10 +++- l3kernel/testfiles/m3expl003.uptex.tlg | 10 +++- l3kernel/testfiles/m3expl003.xetex.tlg | 10 +++- l3kernel/testfiles/m3keys002.lvt | 31 +++++++++++ l3kernel/testfiles/m3keys002.tlg | 26 +++++++++ 14 files changed, 210 insertions(+), 20 deletions(-) diff --git a/l3kernel/CHANGELOG.md b/l3kernel/CHANGELOG.md index b6e4ba5c10..2f4ab1a48d 100644 --- a/l3kernel/CHANGELOG.md +++ b/l3kernel/CHANGELOG.md @@ -11,6 +11,7 @@ this project uses date-based 'snapshot' version identifiers. - Support for return of whole path by \cs{keys_set_known:nnN}-like function \cs{keys_set_known:nnnN} (see #508) +- `.prop_(g)put:N` key property (see #444) ### Fixed diff --git a/l3kernel/l3keys.dtx b/l3kernel/l3keys.dtx index 0259c89652..d00caeff35 100644 --- a/l3kernel/l3keys.dtx +++ b/l3kernel/l3keys.dtx @@ -382,6 +382,17 @@ % Choices are discussed in detail in section~\ref{sec:l3keys:choice}. % \end{function} % +% \begin{function}[added = 2019-01-31] +% {.prop_put:N, .prop_put:c, .prop_gput:N, .prop_gput:c} +% \begin{syntax} +% \meta{key} .prop_put:N = \meta{property list} +% \end{syntax} +% Defines \meta{key} to put the \meta{value} onto the \meta{property list} +% stored under the \meta{key}. +% If the variable does not exist, it +% is created globally at the point that the key is set up. +% \end{function} +% % \begin{function}{.skip_set:N, .skip_set:c, .skip_gset:N, .skip_gset:c} % \begin{syntax} % \meta{key} .skip_set:N = \meta{skip} @@ -1272,10 +1283,12 @@ % \end{macrocode} % \end{variable} % -% \begin{variable}{\l_@@_tmp_bool} +% \begin{variable}{\l_@@_tmp_bool, \l_@@_tmpa_tl, \l_@@_tmpb_tl} % Scratch space. % \begin{macrocode} \bool_new:N \l_@@_tmp_bool +\tl_new:N \l_@@_tmpa_tl +\tl_new:N \l_@@_tmpb_tl % \end{macrocode} % \end{variable} % @@ -1641,6 +1654,28 @@ % \end{macro} % \end{macro} % +% \begin{macro}{\@@_prop_put:Nn, \@@_prop_put:cn} +% Much the same as other variables, but needs a dedicated auxiliary. +% \begin{macrocode} +\cs_new_protected:Npn \@@_prop_put:Nn #1#2 + { + \prop_if_exist:NF #1 { \prop_new:N #1 } + \exp_after:wN \@@_find_key_module:NNw + \exp_after:wN \l_@@_tmpa_tl + \exp_after:wN \l_@@_tmpb_tl + \l_keys_path_tl / \q_stop + \@@_cmd_set:nx { \l_keys_path_tl } + { + \exp_not:c { prop_ #2 put:Nnn } + \exp_not:N #1 + { \l_@@_tmpb_tl } + \exp_not:n { {##1} } + } + } +\cs_generate_variant:Nn \@@_prop_put:Nn { c } +% \end{macrocode} +% \end{macro} +% % \begin{macro}{\@@_undefine:} % Undefining a key has to be done without \cs{cs_undefine:c} as that % function acts globally. @@ -1962,6 +1997,20 @@ % \end{macro} % \end{macro} % +% \begin{macro}{.prop_put:N, .prop_put:c, .prop_gput:N, .prop_gput:c} +% Setting a variable is very easy: just pass the data along. +% \begin{macrocode} +\cs_new_protected:cpn { \c_@@_props_root_tl .prop_put:N } #1 + { \@@_prop_put:Nn #1 { } } +\cs_new_protected:cpn { \c_@@_props_root_tl .prop_put:c } #1 + { \@@_prop_put:cn {#1} { } } +\cs_new_protected:cpn { \c_@@_props_root_tl .prop_gput:N } #1 + { \@@_prop_put:Nn #1 { g } } +\cs_new_protected:cpn { \c_@@_props_root_tl .prop_gput:c } #1 + { \@@_prop_put:cn {#1} { g } } +% \end{macrocode} +% \end{macro} +% % \begin{macro}{.skip_set:N, .skip_set:c} % \begin{macro}{.skip_gset:N, .skip_gset:c} % Setting a variable is very easy: just pass the data along. @@ -2251,7 +2300,7 @@ % % \begin{macro}{\@@_set_keyval:n, \@@_set_keyval:nn} % \begin{macro}{\@@_set_keyval:nnn, \@@_set_keyval:onn} -% \begin{macro}{\@@_find_key_module:w} +% \begin{macro}{\@@_find_key_module:NNw} % \begin{macro}{\@@_set_selective:} % A shared system once again. First, set the current path and add a % default if needed. There are then checks to see if the a value is @@ -2284,7 +2333,10 @@ \@@_trim_spaces:n {#2} } \tl_clear:N \l_@@_module_tl - \exp_after:wN \@@_find_key_module:w \l_keys_path_tl / \q_stop + \exp_after:wN \@@_find_key_module:NNw + \exp_after:wN \l_@@_module_tl + \exp_after:wN \l_keys_key_tl + \l_keys_path_tl / \q_stop \@@_value_or_default:n {#3} \bool_if:NTF \l_@@_selective_bool { \@@_set_selective: } @@ -2292,17 +2344,17 @@ \tl_set:Nn \l_@@_module_tl {#1} } \cs_generate_variant:Nn \@@_set_keyval:nnn { o } -\cs_new_protected:Npn \@@_find_key_module:w #1 / #2 \q_stop +\cs_new_protected:Npn \@@_find_key_module:NNw #1#2#3 / #4 \q_stop { - \tl_if_blank:nTF {#2} - { \tl_set:Nn \l_keys_key_tl {#1} } + \tl_if_blank:nTF {#4} + { \tl_set:Nn #2 {#3} } { - \tl_put_right:Nx \l_@@_module_tl + \tl_put_right:Nx #1 { - \tl_if_empty:NF \l_@@_module_tl { / } - #1 + \tl_if_empty:NF #1 { / } + #3 } - \@@_find_key_module:w #2 \q_stop + \@@_find_key_module:NNw #1#2 #4 \q_stop } } % \end{macrocode} diff --git a/l3kernel/testfiles/m3expl001.luatex.tlg b/l3kernel/testfiles/m3expl001.luatex.tlg index fb048cb756..f7850a06b7 100644 --- a/l3kernel/testfiles/m3expl001.luatex.tlg +++ b/l3kernel/testfiles/m3expl001.luatex.tlg @@ -3231,6 +3231,8 @@ Defining \l__keys_selective_seq on line ... Defining \l__keys_unused_clist on line ... Defining \l_keys_value_tl on line ... Defining \l__keys_tmp_bool on line ... +Defining \l__keys_tmpa_tl on line ... +Defining \l__keys_tmpb_tl on line ... Defining \keys_define:nn on line ... Defining \__keys_define:nnn on line ... Defining \__keys_define:onn on line ... @@ -3263,6 +3265,8 @@ Defining \__keys_inherit:n on line ... Defining \__keys_initialise:n on line ... Defining \__keys_meta_make:n on line ... Defining \__keys_meta_make:nn on line ... +Defining \__keys_prop_put:Nn on line ... +Defining \__keys_prop_put:cn on line ... Defining \__keys_undefine: on line ... Defining \__keys_value_requirement:nn on line ... Defining \__keys_validate_forbidden: on line ... @@ -3317,6 +3321,10 @@ Defining \key prop > .multichoices:nn on line ... Defining \key prop > .multichoices:Vn on line ... Defining \key prop > .multichoices:on on line ... Defining \key prop > .multichoices:xn on line ... +Defining \key prop > .prop_put:N on line ... +Defining \key prop > .prop_put:c on line ... +Defining \key prop > .prop_gput:N on line ... +Defining \key prop > .prop_gput:c on line ... Defining \key prop > .skip_set:N on line ... Defining \key prop > .skip_set:c on line ... Defining \key prop > .skip_gset:N on line ... @@ -3378,7 +3386,7 @@ Defining \__keys_set_keyval:n on line ... Defining \__keys_set_keyval:nn on line ... Defining \__keys_set_keyval:nnn on line ... Defining \__keys_set_keyval:onn on line ... -Defining \__keys_find_key_module:w on line ... +Defining \__keys_find_key_module:NNw on line ... Defining \__keys_set_selective: on line ... Defining \__keys_check_groups: on line ... Defining \__keys_value_or_default:n on line ... diff --git a/l3kernel/testfiles/m3expl001.ptex.tlg b/l3kernel/testfiles/m3expl001.ptex.tlg index b4c2ef5948..04f5df2d9c 100644 --- a/l3kernel/testfiles/m3expl001.ptex.tlg +++ b/l3kernel/testfiles/m3expl001.ptex.tlg @@ -3524,6 +3524,8 @@ Defining \l__keys_selective_seq on line ... Defining \l__keys_unused_clist on line ... Defining \l_keys_value_tl on line ... Defining \l__keys_tmp_bool on line ... +Defining \l__keys_tmpa_tl on line ... +Defining \l__keys_tmpb_tl on line ... Defining \keys_define:nn on line ... Defining \__keys_define:nnn on line ... Defining \__keys_define:onn on line ... @@ -3556,6 +3558,8 @@ Defining \__keys_inherit:n on line ... Defining \__keys_initialise:n on line ... Defining \__keys_meta_make:n on line ... Defining \__keys_meta_make:nn on line ... +Defining \__keys_prop_put:Nn on line ... +Defining \__keys_prop_put:cn on line ... Defining \__keys_undefine: on line ... Defining \__keys_value_requirement:nn on line ... Defining \__keys_validate_forbidden: on line ... @@ -3610,6 +3614,10 @@ Defining \key prop > .multichoices:nn on line ... Defining \key prop > .multichoices:Vn on line ... Defining \key prop > .multichoices:on on line ... Defining \key prop > .multichoices:xn on line ... +Defining \key prop > .prop_put:N on line ... +Defining \key prop > .prop_put:c on line ... +Defining \key prop > .prop_gput:N on line ... +Defining \key prop > .prop_gput:c on line ... Defining \key prop > .skip_set:N on line ... Defining \key prop > .skip_set:c on line ... Defining \key prop > .skip_gset:N on line ... @@ -3671,7 +3679,7 @@ Defining \__keys_set_keyval:n on line ... Defining \__keys_set_keyval:nn on line ... Defining \__keys_set_keyval:nnn on line ... Defining \__keys_set_keyval:onn on line ... -Defining \__keys_find_key_module:w on line ... +Defining \__keys_find_key_module:NNw on line ... Defining \__keys_set_selective: on line ... Defining \__keys_check_groups: on line ... Defining \__keys_value_or_default:n on line ... diff --git a/l3kernel/testfiles/m3expl001.tlg b/l3kernel/testfiles/m3expl001.tlg index 0213ad0784..09f5d96565 100644 --- a/l3kernel/testfiles/m3expl001.tlg +++ b/l3kernel/testfiles/m3expl001.tlg @@ -3524,6 +3524,8 @@ Defining \l__keys_selective_seq on line ... Defining \l__keys_unused_clist on line ... Defining \l_keys_value_tl on line ... Defining \l__keys_tmp_bool on line ... +Defining \l__keys_tmpa_tl on line ... +Defining \l__keys_tmpb_tl on line ... Defining \keys_define:nn on line ... Defining \__keys_define:nnn on line ... Defining \__keys_define:onn on line ... @@ -3556,6 +3558,8 @@ Defining \__keys_inherit:n on line ... Defining \__keys_initialise:n on line ... Defining \__keys_meta_make:n on line ... Defining \__keys_meta_make:nn on line ... +Defining \__keys_prop_put:Nn on line ... +Defining \__keys_prop_put:cn on line ... Defining \__keys_undefine: on line ... Defining \__keys_value_requirement:nn on line ... Defining \__keys_validate_forbidden: on line ... @@ -3610,6 +3614,10 @@ Defining \key prop > .multichoices:nn on line ... Defining \key prop > .multichoices:Vn on line ... Defining \key prop > .multichoices:on on line ... Defining \key prop > .multichoices:xn on line ... +Defining \key prop > .prop_put:N on line ... +Defining \key prop > .prop_put:c on line ... +Defining \key prop > .prop_gput:N on line ... +Defining \key prop > .prop_gput:c on line ... Defining \key prop > .skip_set:N on line ... Defining \key prop > .skip_set:c on line ... Defining \key prop > .skip_gset:N on line ... @@ -3671,7 +3679,7 @@ Defining \__keys_set_keyval:n on line ... Defining \__keys_set_keyval:nn on line ... Defining \__keys_set_keyval:nnn on line ... Defining \__keys_set_keyval:onn on line ... -Defining \__keys_find_key_module:w on line ... +Defining \__keys_find_key_module:NNw on line ... Defining \__keys_set_selective: on line ... Defining \__keys_check_groups: on line ... Defining \__keys_value_or_default:n on line ... diff --git a/l3kernel/testfiles/m3expl001.uptex.tlg b/l3kernel/testfiles/m3expl001.uptex.tlg index 36d106dd1a..6724ff3005 100644 --- a/l3kernel/testfiles/m3expl001.uptex.tlg +++ b/l3kernel/testfiles/m3expl001.uptex.tlg @@ -3524,6 +3524,8 @@ Defining \l__keys_selective_seq on line ... Defining \l__keys_unused_clist on line ... Defining \l_keys_value_tl on line ... Defining \l__keys_tmp_bool on line ... +Defining \l__keys_tmpa_tl on line ... +Defining \l__keys_tmpb_tl on line ... Defining \keys_define:nn on line ... Defining \__keys_define:nnn on line ... Defining \__keys_define:onn on line ... @@ -3556,6 +3558,8 @@ Defining \__keys_inherit:n on line ... Defining \__keys_initialise:n on line ... Defining \__keys_meta_make:n on line ... Defining \__keys_meta_make:nn on line ... +Defining \__keys_prop_put:Nn on line ... +Defining \__keys_prop_put:cn on line ... Defining \__keys_undefine: on line ... Defining \__keys_value_requirement:nn on line ... Defining \__keys_validate_forbidden: on line ... @@ -3610,6 +3614,10 @@ Defining \key prop > .multichoices:nn on line ... Defining \key prop > .multichoices:Vn on line ... Defining \key prop > .multichoices:on on line ... Defining \key prop > .multichoices:xn on line ... +Defining \key prop > .prop_put:N on line ... +Defining \key prop > .prop_put:c on line ... +Defining \key prop > .prop_gput:N on line ... +Defining \key prop > .prop_gput:c on line ... Defining \key prop > .skip_set:N on line ... Defining \key prop > .skip_set:c on line ... Defining \key prop > .skip_gset:N on line ... @@ -3671,7 +3679,7 @@ Defining \__keys_set_keyval:n on line ... Defining \__keys_set_keyval:nn on line ... Defining \__keys_set_keyval:nnn on line ... Defining \__keys_set_keyval:onn on line ... -Defining \__keys_find_key_module:w on line ... +Defining \__keys_find_key_module:NNw on line ... Defining \__keys_set_selective: on line ... Defining \__keys_check_groups: on line ... Defining \__keys_value_or_default:n on line ... diff --git a/l3kernel/testfiles/m3expl001.xetex.tlg b/l3kernel/testfiles/m3expl001.xetex.tlg index f05ee0037f..2c275a6a34 100644 --- a/l3kernel/testfiles/m3expl001.xetex.tlg +++ b/l3kernel/testfiles/m3expl001.xetex.tlg @@ -3269,6 +3269,8 @@ Defining \l__keys_selective_seq on line ... Defining \l__keys_unused_clist on line ... Defining \l_keys_value_tl on line ... Defining \l__keys_tmp_bool on line ... +Defining \l__keys_tmpa_tl on line ... +Defining \l__keys_tmpb_tl on line ... Defining \keys_define:nn on line ... Defining \__keys_define:nnn on line ... Defining \__keys_define:onn on line ... @@ -3301,6 +3303,8 @@ Defining \__keys_inherit:n on line ... Defining \__keys_initialise:n on line ... Defining \__keys_meta_make:n on line ... Defining \__keys_meta_make:nn on line ... +Defining \__keys_prop_put:Nn on line ... +Defining \__keys_prop_put:cn on line ... Defining \__keys_undefine: on line ... Defining \__keys_value_requirement:nn on line ... Defining \__keys_validate_forbidden: on line ... @@ -3355,6 +3359,10 @@ Defining \key prop > .multichoices:nn on line ... Defining \key prop > .multichoices:Vn on line ... Defining \key prop > .multichoices:on on line ... Defining \key prop > .multichoices:xn on line ... +Defining \key prop > .prop_put:N on line ... +Defining \key prop > .prop_put:c on line ... +Defining \key prop > .prop_gput:N on line ... +Defining \key prop > .prop_gput:c on line ... Defining \key prop > .skip_set:N on line ... Defining \key prop > .skip_set:c on line ... Defining \key prop > .skip_gset:N on line ... @@ -3416,7 +3424,7 @@ Defining \__keys_set_keyval:n on line ... Defining \__keys_set_keyval:nn on line ... Defining \__keys_set_keyval:nnn on line ... Defining \__keys_set_keyval:onn on line ... -Defining \__keys_find_key_module:w on line ... +Defining \__keys_find_key_module:NNw on line ... Defining \__keys_set_selective: on line ... Defining \__keys_check_groups: on line ... Defining \__keys_value_or_default:n on line ... diff --git a/l3kernel/testfiles/m3expl003.luatex.tlg b/l3kernel/testfiles/m3expl003.luatex.tlg index fb048cb756..f7850a06b7 100644 --- a/l3kernel/testfiles/m3expl003.luatex.tlg +++ b/l3kernel/testfiles/m3expl003.luatex.tlg @@ -3231,6 +3231,8 @@ Defining \l__keys_selective_seq on line ... Defining \l__keys_unused_clist on line ... Defining \l_keys_value_tl on line ... Defining \l__keys_tmp_bool on line ... +Defining \l__keys_tmpa_tl on line ... +Defining \l__keys_tmpb_tl on line ... Defining \keys_define:nn on line ... Defining \__keys_define:nnn on line ... Defining \__keys_define:onn on line ... @@ -3263,6 +3265,8 @@ Defining \__keys_inherit:n on line ... Defining \__keys_initialise:n on line ... Defining \__keys_meta_make:n on line ... Defining \__keys_meta_make:nn on line ... +Defining \__keys_prop_put:Nn on line ... +Defining \__keys_prop_put:cn on line ... Defining \__keys_undefine: on line ... Defining \__keys_value_requirement:nn on line ... Defining \__keys_validate_forbidden: on line ... @@ -3317,6 +3321,10 @@ Defining \key prop > .multichoices:nn on line ... Defining \key prop > .multichoices:Vn on line ... Defining \key prop > .multichoices:on on line ... Defining \key prop > .multichoices:xn on line ... +Defining \key prop > .prop_put:N on line ... +Defining \key prop > .prop_put:c on line ... +Defining \key prop > .prop_gput:N on line ... +Defining \key prop > .prop_gput:c on line ... Defining \key prop > .skip_set:N on line ... Defining \key prop > .skip_set:c on line ... Defining \key prop > .skip_gset:N on line ... @@ -3378,7 +3386,7 @@ Defining \__keys_set_keyval:n on line ... Defining \__keys_set_keyval:nn on line ... Defining \__keys_set_keyval:nnn on line ... Defining \__keys_set_keyval:onn on line ... -Defining \__keys_find_key_module:w on line ... +Defining \__keys_find_key_module:NNw on line ... Defining \__keys_set_selective: on line ... Defining \__keys_check_groups: on line ... Defining \__keys_value_or_default:n on line ... diff --git a/l3kernel/testfiles/m3expl003.ptex.tlg b/l3kernel/testfiles/m3expl003.ptex.tlg index b4c2ef5948..04f5df2d9c 100644 --- a/l3kernel/testfiles/m3expl003.ptex.tlg +++ b/l3kernel/testfiles/m3expl003.ptex.tlg @@ -3524,6 +3524,8 @@ Defining \l__keys_selective_seq on line ... Defining \l__keys_unused_clist on line ... Defining \l_keys_value_tl on line ... Defining \l__keys_tmp_bool on line ... +Defining \l__keys_tmpa_tl on line ... +Defining \l__keys_tmpb_tl on line ... Defining \keys_define:nn on line ... Defining \__keys_define:nnn on line ... Defining \__keys_define:onn on line ... @@ -3556,6 +3558,8 @@ Defining \__keys_inherit:n on line ... Defining \__keys_initialise:n on line ... Defining \__keys_meta_make:n on line ... Defining \__keys_meta_make:nn on line ... +Defining \__keys_prop_put:Nn on line ... +Defining \__keys_prop_put:cn on line ... Defining \__keys_undefine: on line ... Defining \__keys_value_requirement:nn on line ... Defining \__keys_validate_forbidden: on line ... @@ -3610,6 +3614,10 @@ Defining \key prop > .multichoices:nn on line ... Defining \key prop > .multichoices:Vn on line ... Defining \key prop > .multichoices:on on line ... Defining \key prop > .multichoices:xn on line ... +Defining \key prop > .prop_put:N on line ... +Defining \key prop > .prop_put:c on line ... +Defining \key prop > .prop_gput:N on line ... +Defining \key prop > .prop_gput:c on line ... Defining \key prop > .skip_set:N on line ... Defining \key prop > .skip_set:c on line ... Defining \key prop > .skip_gset:N on line ... @@ -3671,7 +3679,7 @@ Defining \__keys_set_keyval:n on line ... Defining \__keys_set_keyval:nn on line ... Defining \__keys_set_keyval:nnn on line ... Defining \__keys_set_keyval:onn on line ... -Defining \__keys_find_key_module:w on line ... +Defining \__keys_find_key_module:NNw on line ... Defining \__keys_set_selective: on line ... Defining \__keys_check_groups: on line ... Defining \__keys_value_or_default:n on line ... diff --git a/l3kernel/testfiles/m3expl003.tlg b/l3kernel/testfiles/m3expl003.tlg index 0213ad0784..09f5d96565 100644 --- a/l3kernel/testfiles/m3expl003.tlg +++ b/l3kernel/testfiles/m3expl003.tlg @@ -3524,6 +3524,8 @@ Defining \l__keys_selective_seq on line ... Defining \l__keys_unused_clist on line ... Defining \l_keys_value_tl on line ... Defining \l__keys_tmp_bool on line ... +Defining \l__keys_tmpa_tl on line ... +Defining \l__keys_tmpb_tl on line ... Defining \keys_define:nn on line ... Defining \__keys_define:nnn on line ... Defining \__keys_define:onn on line ... @@ -3556,6 +3558,8 @@ Defining \__keys_inherit:n on line ... Defining \__keys_initialise:n on line ... Defining \__keys_meta_make:n on line ... Defining \__keys_meta_make:nn on line ... +Defining \__keys_prop_put:Nn on line ... +Defining \__keys_prop_put:cn on line ... Defining \__keys_undefine: on line ... Defining \__keys_value_requirement:nn on line ... Defining \__keys_validate_forbidden: on line ... @@ -3610,6 +3614,10 @@ Defining \key prop > .multichoices:nn on line ... Defining \key prop > .multichoices:Vn on line ... Defining \key prop > .multichoices:on on line ... Defining \key prop > .multichoices:xn on line ... +Defining \key prop > .prop_put:N on line ... +Defining \key prop > .prop_put:c on line ... +Defining \key prop > .prop_gput:N on line ... +Defining \key prop > .prop_gput:c on line ... Defining \key prop > .skip_set:N on line ... Defining \key prop > .skip_set:c on line ... Defining \key prop > .skip_gset:N on line ... @@ -3671,7 +3679,7 @@ Defining \__keys_set_keyval:n on line ... Defining \__keys_set_keyval:nn on line ... Defining \__keys_set_keyval:nnn on line ... Defining \__keys_set_keyval:onn on line ... -Defining \__keys_find_key_module:w on line ... +Defining \__keys_find_key_module:NNw on line ... Defining \__keys_set_selective: on line ... Defining \__keys_check_groups: on line ... Defining \__keys_value_or_default:n on line ... diff --git a/l3kernel/testfiles/m3expl003.uptex.tlg b/l3kernel/testfiles/m3expl003.uptex.tlg index 36d106dd1a..6724ff3005 100644 --- a/l3kernel/testfiles/m3expl003.uptex.tlg +++ b/l3kernel/testfiles/m3expl003.uptex.tlg @@ -3524,6 +3524,8 @@ Defining \l__keys_selective_seq on line ... Defining \l__keys_unused_clist on line ... Defining \l_keys_value_tl on line ... Defining \l__keys_tmp_bool on line ... +Defining \l__keys_tmpa_tl on line ... +Defining \l__keys_tmpb_tl on line ... Defining \keys_define:nn on line ... Defining \__keys_define:nnn on line ... Defining \__keys_define:onn on line ... @@ -3556,6 +3558,8 @@ Defining \__keys_inherit:n on line ... Defining \__keys_initialise:n on line ... Defining \__keys_meta_make:n on line ... Defining \__keys_meta_make:nn on line ... +Defining \__keys_prop_put:Nn on line ... +Defining \__keys_prop_put:cn on line ... Defining \__keys_undefine: on line ... Defining \__keys_value_requirement:nn on line ... Defining \__keys_validate_forbidden: on line ... @@ -3610,6 +3614,10 @@ Defining \key prop > .multichoices:nn on line ... Defining \key prop > .multichoices:Vn on line ... Defining \key prop > .multichoices:on on line ... Defining \key prop > .multichoices:xn on line ... +Defining \key prop > .prop_put:N on line ... +Defining \key prop > .prop_put:c on line ... +Defining \key prop > .prop_gput:N on line ... +Defining \key prop > .prop_gput:c on line ... Defining \key prop > .skip_set:N on line ... Defining \key prop > .skip_set:c on line ... Defining \key prop > .skip_gset:N on line ... @@ -3671,7 +3679,7 @@ Defining \__keys_set_keyval:n on line ... Defining \__keys_set_keyval:nn on line ... Defining \__keys_set_keyval:nnn on line ... Defining \__keys_set_keyval:onn on line ... -Defining \__keys_find_key_module:w on line ... +Defining \__keys_find_key_module:NNw on line ... Defining \__keys_set_selective: on line ... Defining \__keys_check_groups: on line ... Defining \__keys_value_or_default:n on line ... diff --git a/l3kernel/testfiles/m3expl003.xetex.tlg b/l3kernel/testfiles/m3expl003.xetex.tlg index f05ee0037f..2c275a6a34 100644 --- a/l3kernel/testfiles/m3expl003.xetex.tlg +++ b/l3kernel/testfiles/m3expl003.xetex.tlg @@ -3269,6 +3269,8 @@ Defining \l__keys_selective_seq on line ... Defining \l__keys_unused_clist on line ... Defining \l_keys_value_tl on line ... Defining \l__keys_tmp_bool on line ... +Defining \l__keys_tmpa_tl on line ... +Defining \l__keys_tmpb_tl on line ... Defining \keys_define:nn on line ... Defining \__keys_define:nnn on line ... Defining \__keys_define:onn on line ... @@ -3301,6 +3303,8 @@ Defining \__keys_inherit:n on line ... Defining \__keys_initialise:n on line ... Defining \__keys_meta_make:n on line ... Defining \__keys_meta_make:nn on line ... +Defining \__keys_prop_put:Nn on line ... +Defining \__keys_prop_put:cn on line ... Defining \__keys_undefine: on line ... Defining \__keys_value_requirement:nn on line ... Defining \__keys_validate_forbidden: on line ... @@ -3355,6 +3359,10 @@ Defining \key prop > .multichoices:nn on line ... Defining \key prop > .multichoices:Vn on line ... Defining \key prop > .multichoices:on on line ... Defining \key prop > .multichoices:xn on line ... +Defining \key prop > .prop_put:N on line ... +Defining \key prop > .prop_put:c on line ... +Defining \key prop > .prop_gput:N on line ... +Defining \key prop > .prop_gput:c on line ... Defining \key prop > .skip_set:N on line ... Defining \key prop > .skip_set:c on line ... Defining \key prop > .skip_gset:N on line ... @@ -3416,7 +3424,7 @@ Defining \__keys_set_keyval:n on line ... Defining \__keys_set_keyval:nn on line ... Defining \__keys_set_keyval:nnn on line ... Defining \__keys_set_keyval:onn on line ... -Defining \__keys_find_key_module:w on line ... +Defining \__keys_find_key_module:NNw on line ... Defining \__keys_set_selective: on line ... Defining \__keys_check_groups: on line ... Defining \__keys_value_or_default:n on line ... diff --git a/l3kernel/testfiles/m3keys002.lvt b/l3kernel/testfiles/m3keys002.lvt index 286f2fc183..279fcef383 100644 --- a/l3kernel/testfiles/m3keys002.lvt +++ b/l3kernel/testfiles/m3keys002.lvt @@ -479,4 +479,35 @@ %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\TEST { .prop_put:N } + { + \keys_define:nn { module } + { + key-one .prop_put:N = \l_tmpa_prop , + key-two .prop_put:N = \l_mya_prop , + key-three .prop_gput:N = \g_tmpa_prop , + key-four .prop_gput:N = \g_mya_prop , + } + \group_begin: + \keys_set:nn { module } + { + key-one = a , + key-two = b , + key-three = c , + key-four = d , + } + \prop_log:N \l_tmpa_prop + \prop_log:N \l_mya_prop + \prop_log:N \g_tmpa_prop + \prop_log:N \g_mya_prop + \group_end: + \prop_log:N \l_tmpa_prop + \prop_log:N \l_mya_prop + \prop_log:N \g_tmpa_prop + \prop_log:N \g_mya_prop + } + + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \END diff --git a/l3kernel/testfiles/m3keys002.tlg b/l3kernel/testfiles/m3keys002.tlg index 3c6392b177..85571c5b20 100644 --- a/l3kernel/testfiles/m3keys002.tlg +++ b/l3kernel/testfiles/m3keys002.tlg @@ -345,3 +345,29 @@ Defining key module/key-four on line ... > \g_tmpa_tl=foobar. > \g_mya_tl=foobar. ============================================================ +============================================================ +TEST 17: .prop_put:N +============================================================ +Defining key module/key-one on line ... +Defining \l_mya_prop on line ... +Defining key module/key-two on line ... +Defining key module/key-three on line ... +Defining \g_mya_prop on line ... +Defining key module/key-four on line ... +The property list \l_tmpa_prop contains the pairs (without outer braces): +> {key-one} => {a}. +The property list \l_mya_prop contains the pairs (without outer braces): +> {key-two} => {b}. +The property list \g_tmpa_prop contains the pairs (without outer braces): +> {key-three} => {c}. +The property list \g_mya_prop contains the pairs (without outer braces): +> {key-four} => {d}. +The property list \l_tmpa_prop is empty +> . +The property list \l_mya_prop is empty +> . +The property list \g_tmpa_prop contains the pairs (without outer braces): +> {key-three} => {c}. +The property list \g_mya_prop contains the pairs (without outer braces): +> {key-four} => {d}. +============================================================