[latex3-commits] [git/LaTeX3-latex3-latex3] master: `.prop_(g)put:N` key property (fixes #444) (536c97d)

Joseph Wright joseph.wright at morningstar2.co.uk
Fri Feb 1 09:22:58 CET 2019


Repository : https://github.com/latex3/latex3
On branch  : master
Link       : https://github.com/latex3/latex3/commit/536c97d353d0ae698ffe85cbf7fa25e181e0cfea

>---------------------------------------------------------------

commit 536c97d353d0ae698ffe85cbf7fa25e181e0cfea
Author: Joseph Wright <joseph.wright at morningstar2.co.uk>
Date:   Fri Feb 1 08:22:58 2019 +0000

    `.prop_(g)put:N` key property (fixes #444)


>---------------------------------------------------------------

536c97d353d0ae698ffe85cbf7fa25e181e0cfea
 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 b6e4ba5..2f4ab1a 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 0259c89..d00caef 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 fb048cb..f7850a0 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 b4c2ef5..04f5df2 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 0213ad0..09f5d96 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 36d106d..6724ff3 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 f05ee00..2c275a6 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 fb048cb..f7850a0 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 b4c2ef5..04f5df2 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 0213ad0..09f5d96 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 36d106d..6724ff3 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 f05ee00..2c275a6 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 286f2fc..279fcef 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 3c6392b..85571c5 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}.
+============================================================





More information about the latex3-commits mailing list