From 366cf31a771ded1f10860be3212058d48020398d Mon Sep 17 00:00:00 2001
From: Norbert Preining <norbert@preining.info>
Date: Wed, 11 Oct 2023 03:02:59 +0000
Subject: CTAN sync 202310110302

---
 macros/latex/contrib/l3kernel/l3prop.dtx | 269 +++++++++++++++++++++----------
 1 file changed, 188 insertions(+), 81 deletions(-)

(limited to 'macros/latex/contrib/l3kernel/l3prop.dtx')

diff --git a/macros/latex/contrib/l3kernel/l3prop.dtx b/macros/latex/contrib/l3kernel/l3prop.dtx
index 2d5fc3edcc..69cafe1cff 100644
--- a/macros/latex/contrib/l3kernel/l3prop.dtx
+++ b/macros/latex/contrib/l3kernel/l3prop.dtx
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2023-08-29}
+% \date{Released 2023-10-10}
 %
 % \maketitle
 %
@@ -165,18 +165,28 @@
 %
 % \begin{function}[updated = 2012-07-09]
 %   {
-%     \prop_put:Nnn,  \prop_put:NnV,  \prop_put:Nno,  \prop_put:Nne, \prop_put:Nnx,
-%     \prop_put:NVn,  \prop_put:NVV,  \prop_put:NVx,  \prop_put:Nvx,
-%     \prop_put:Non,  \prop_put:Nxn,  \prop_put:NxV,  \prop_put:Noo, \prop_put:Nxx,
-%     \prop_put:cnn,  \prop_put:cnV,  \prop_put:cno,  \prop_put:cne, \prop_put:cnx,
-%     \prop_put:cVn,  \prop_put:cVV,  \prop_put:cVx,  \prop_put:cvx,
-%     \prop_put:con,  \prop_put:cxn,  \prop_put:cxV,  \prop_put:coo,  \prop_put:cxx,
-%     \prop_gput:Nnn, \prop_gput:NnV, \prop_gput:Nno, \prop_gput:Nne, \prop_gput:Nnx,
-%     \prop_gput:NVn, \prop_gput:NVV, \prop_gput:NVx, \prop_gput:Nvx,
-%     \prop_gput:Non, \prop_gput:Nxn, \prop_gput:NxV, \prop_gput:Noo, \prop_gput:Nxx,
-%     \prop_gput:cnn, \prop_gput:cnV, \prop_gput:cno, \prop_gput:cne, \prop_gput:cnx,
-%     \prop_gput:cVn, \prop_gput:cVV, \prop_gput:cVx, \prop_gput:cvx,
-%     \prop_gput:con, \prop_gput:cxn, \prop_gput:cxV, \prop_gput:coo, \prop_gput:cxx
+%     \prop_put:Nnn,  \prop_put:NnV,  \prop_put:Nnv,  \prop_put:Nne,
+%     \prop_put:NVn,  \prop_put:NVV,  \prop_put:NVv,  \prop_put:NVe,
+%     \prop_put:Nvn,  \prop_put:NvV,  \prop_put:Nvv,  \prop_put:Nve, 
+%     \prop_put:Nen,  \prop_put:NeV,  \prop_put:Nev,  \prop_put:Nee,
+%     \prop_put:Nno,  \prop_put:Non,  \prop_put:Noo,
+%     \prop_put:cnn,  \prop_put:cnV,  \prop_put:cnv,  \prop_put:cne,
+%     \prop_put:cno,
+%     \prop_put:cVn,  \prop_put:cVV,  \prop_put:cVv,  \prop_put:cVe,
+%     \prop_put:cvn,  \prop_put:cvV,  \prop_put:cvv,  \prop_put:cve, 
+%     \prop_put:cen,  \prop_put:ceV,  \prop_put:cev,  \prop_put:cee,
+%     \prop_put:con,  \prop_put:coo,
+%     \prop_gput:Nnn, \prop_gput:NnV, \prop_gput:Nnv, \prop_gput:Nne,
+%     \prop_gput:NVn, \prop_gput:NVV, \prop_gput:NVv, \prop_gput:NVe,
+%     \prop_gput:Nvn, \prop_gput:NvV, \prop_gput:Nvv, \prop_gput:Nve, 
+%     \prop_gput:Nen, \prop_gput:NeV, \prop_gput:Nev, \prop_gput:Nee,
+%     \prop_gput:Nno, \prop_gput:Non, \prop_gput:Noo,
+%     \prop_gput:cnn, \prop_gput:cnV, \prop_gput:cnv, \prop_gput:cne,
+%     \prop_gput:cno,
+%     \prop_gput:cVn, \prop_gput:cVV, \prop_gput:cVv, \prop_gput:cVe,
+%     \prop_gput:cvn, \prop_gput:cvV, \prop_gput:cvv, \prop_gput:cve, 
+%     \prop_gput:cen, \prop_gput:ceV, \prop_gput:cev, \prop_gput:cee,
+%     \prop_gput:con, \prop_gput:coo
 %   }
 %   \begin{syntax}
 %     \cs{prop_put:Nnn} \meta{property list} \Arg{key} \Arg{value}
@@ -192,8 +202,10 @@
 %
 % \begin{function}
 %   {
-%     \prop_put_if_new:Nnn,  \prop_put_if_new:cnn,
-%     \prop_gput_if_new:Nnn, \prop_gput_if_new:cnn
+%     \prop_put_if_new:Nnn, \prop_put_if_new:NVn, \prop_put_if_new:NnV,
+%     \prop_put_if_new:cnn, \prop_put_if_new:cVn, \prop_put_if_new:cnV,
+%     \prop_gput_if_new:Nnn, \prop_gput_if_new:NVn, \prop_gput_if_new:NnV,
+%     \prop_gput_if_new:cnn, \prop_gput_if_new:cVn, \prop_gput_if_new:cnV
 %   }
 %   \begin{syntax}
 %     \cs{prop_put_if_new:Nnn} \meta{property list} \Arg{key} \Arg{value}
@@ -250,8 +262,10 @@
 %
 % \begin{function}[updated = 2011-08-28]
 %   {
-%     \prop_get:NnN, \prop_get:NVN, \prop_get:NvN, \prop_get:NoN, \prop_get:NxN,
-%     \prop_get:cnN, \prop_get:cVN, \prop_get:cvN, \prop_get:coN, \prop_get:cxN,
+%     \prop_get:NnN, \prop_get:NVN, \prop_get:NvN, \prop_get:NeN,
+%     \prop_get:NoN,
+%     \prop_get:cnN, \prop_get:cVN, \prop_get:cvN, \prop_get:ceN,
+%     \prop_get:coN,
 %     \prop_get:cnc
 %   }
 %   \begin{syntax}
@@ -267,7 +281,12 @@
 % \end{function}
 %
 % \begin{function}[updated = 2011-08-18]
-%   {\prop_pop:NnN, \prop_pop:NoN, \prop_pop:cnN, \prop_pop:coN}
+%   {
+%     \prop_pop:NnN, \prop_pop:NVN,
+%     \prop_pop:NoN, 
+%     \prop_pop:cnN, \prop_pop:cVN,
+%     \prop_pop:coN
+%   }
 %   \begin{syntax}
 %     \cs{prop_pop:NnN} \meta{property list} \Arg{key} \meta{tl var}
 %   \end{syntax}
@@ -281,7 +300,12 @@
 % \end{function}
 %
 % \begin{function}[updated = 2011-08-18]
-%   {\prop_gpop:NnN, \prop_gpop:NoN, \prop_gpop:cnN, \prop_gpop:coN}
+%   {
+%     \prop_gpop:NnN, \prop_gpop:NVN,
+%     \prop_gpop:NoN,
+%     \prop_gpop:cnN, \prop_gpop:cVN,
+%     \prop_gpop:coN
+%   }
 %   \begin{syntax}
 %     \cs{prop_gpop:NnN} \meta{property list} \Arg{key} \meta{tl var}
 %   \end{syntax}
@@ -297,8 +321,8 @@
 %
 % \begin{function}[added = 2014-07-17, EXP]
 %   {
-%     \prop_item:Nn, \prop_item:NV, \prop_item:No, \prop_item:Ne,
-%     \prop_item:cn, \prop_item:cV, \prop_item:co, \prop_item:ce
+%     \prop_item:Nn, \prop_item:NV, \prop_item:Ne, \prop_item:No,
+%     \prop_item:cn, \prop_item:cV, \prop_item:ce, \prop_item:co
 %   }
 %   \begin{syntax}
 %     \cs{prop_item:Nn} \meta{property list} \Arg{key}
@@ -343,8 +367,10 @@
 %
 % \begin{function}[added = 2012-05-12]
 %   {
-%     \prop_remove:Nn,  \prop_remove:NV,  \prop_remove:cn,  \prop_remove:cV,
-%     \prop_gremove:Nn, \prop_gremove:NV, \prop_gremove:cn, \prop_gremove:cV
+%     \prop_remove:Nn,  \prop_remove:NV,  \prop_remove:Ne,
+%     \prop_remove:cn,  \prop_remove:cV,  \prop_remove:ce,
+%     \prop_gremove:Nn, \prop_gremove:NV, \prop_gremove:Ne,
+%     \prop_gremove:cn, \prop_gremove:cV, \prop_gremove:ce,
 %   }
 %   \begin{syntax}
 %     \cs{prop_remove:Nn} \meta{property list} \Arg{key}
@@ -378,8 +404,8 @@
 %
 % \begin{function}[updated = 2011-09-15, EXP, pTF]
 %   {
-%     \prop_if_in:Nn, \prop_if_in:NV, \prop_if_in:No,
-%     \prop_if_in:cn, \prop_if_in:cV, \prop_if_in:co
+%     \prop_if_in:Nn, \prop_if_in:NV, \prop_if_in:Ne, \prop_if_in:No,
+%     \prop_if_in:cn, \prop_if_in:cV, \prop_if_in:ce, \prop_if_in:co
 %   }
 %   \begin{syntax}
 %     \cs{prop_if_in_p:Nn} \meta{property list} \Arg{key}
@@ -404,8 +430,10 @@
 %
 % \begin{function}[updated = 2012-05-19, TF]
 %   {
-%     \prop_get:NnN, \prop_get:NVN, \prop_get:NvN, \prop_get:NoN, \prop_get:NxN,
-%     \prop_get:cnN, \prop_get:cVN, \prop_get:cvN, \prop_get:coN, \prop_get:cxN,
+%     \prop_get:NnN, \prop_get:NVN, \prop_get:NvN, \prop_get:NeN,
+%     \prop_get:NoN,
+%     \prop_get:cnN, \prop_get:cVN, \prop_get:cvN, \prop_get:ceN,
+%     \prop_get:coN,
 %     \prop_get:cnc
 %   }
 %   \begin{syntax}
@@ -423,7 +451,12 @@
 % \end{function}
 %
 % \begin{function}[TF, added = 2011-08-18, updated = 2012-05-19]
-%   {\prop_pop:NnN, \prop_pop:cnN}
+%   {
+%     \prop_pop:NnN, \prop_pop:NVN,
+%     \prop_pop:NoN,
+%     \prop_pop:cnN, \prop_pop:cVN,
+%     \prop_pop:coN
+%   }
 %   \begin{syntax}
 %     \cs{prop_pop:NnNTF} \meta{property list} \Arg{key} \meta{token list variable} \Arg{true code} \Arg{false code}
 %   \end{syntax}
@@ -439,7 +472,12 @@
 % \end{function}
 %
 % \begin{function}[TF, added = 2011-08-18, updated = 2012-05-19]
-%   {\prop_gpop:NnN, \prop_gpop:cnN}
+%   {
+%     \prop_gpop:NnN, \prop_gpop:NVN,
+%     \prop_gpop:NoN,
+%     \prop_gpop:cnN, \prop_gpop:cVN,
+%     \prop_gpop:coN
+%   }
 %   \begin{syntax}
 %     \cs{prop_gpop:NnNTF} \meta{property list} \Arg{key} \meta{token list variable} \Arg{true code} \Arg{false code}
 %   \end{syntax}
@@ -874,7 +912,7 @@
 \cs_new_protected:Npn \prop_const_from_keyval:Nn #1#2
   {
     \prop_set_from_keyval:Nn \l_@@_internal_prop {#2}
-    \tl_const:Nx #1 { \exp_not:o \l_@@_internal_prop }
+    \tl_const:Ne #1 { \exp_not:o \l_@@_internal_prop }
     \prop_clear:N \l_@@_internal_prop
   }
 \cs_generate_variant:Nn \prop_const_from_keyval:Nn { c }
@@ -959,9 +997,15 @@
 % \end{macro}
 %
 % \begin{macro}[tested = m3prop002]
-%   {\prop_remove:Nn, \prop_remove:NV, \prop_remove:cn, \prop_remove:cV}
+%   {
+%     \prop_remove:Nn, \prop_remove:NV, \prop_remove:Ne,
+%     \prop_remove:cn, \prop_remove:cV, \prop_remove:ce
+%   }
 % \begin{macro}[tested = m3prop002]
-%   {\prop_gremove:Nn, \prop_gremove:NV, \prop_gremove:cn, \prop_gremove:cV}
+%   {
+%     \prop_gremove:Nn, \prop_gremove:NV, \prop_gremove:Ne,
+%     \prop_gremove:cn, \prop_gremove:cV, \prop_gremove:ce
+%   }
 %   Deleting from a property starts by splitting the list.
 %   If the key is present in the property list, the returned value is ignored.
 %   If the key is missing, nothing happens.
@@ -978,18 +1022,18 @@
       { \tl_gset:Nn #1 { ##1 ##3 } }
       { }
   }
-\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_generate_variant:Nn \prop_remove:Nn  { NV , Ne , c , cV , ce }
+\cs_generate_variant:Nn \prop_gremove:Nn { NV , Ne , c , cV , ce }
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
 %
 % \begin{macro}[tested = m3prop002]
 %   {
-%     \prop_get:NnN, \prop_get:NVN, \prop_get:NvN, \prop_get:NoN, \prop_get:NxN,
-%     \prop_get:cnN, \prop_get:cVN, \prop_get:cvN, \prop_get:coN, \prop_get:cxN,
+%     \prop_get:NnN, \prop_get:NVN, \prop_get:NvN, \prop_get:NeN,
+%     \prop_get:NoN, \prop_get:NxN,
+%     \prop_get:cnN, \prop_get:cVN, \prop_get:cvN, \prop_get:ceN,
+%     \prop_get:coN, \prop_get:cxN,
 %     \prop_get:cnc
 %   }
 %   Getting an item from a list is very easy: after splitting,
@@ -1002,15 +1046,26 @@
       { \tl_set:Nn #3 {##2} }
       { \tl_set:Nn #3 { \q_no_value } }
   }
-\cs_generate_variant:Nn \prop_get:NnN {     NV , Nv , No , Nx }
-\cs_generate_variant:Nn \prop_get:NnN { c , cV , cv , co , cx , cnc }
+\cs_generate_variant:Nn \prop_get:NnN { NV , Nv , Ne , c , cV , cv , ce }
+\cs_generate_variant:Nn \prop_get:NnN { No , Nx , co , cx }
+\cs_generate_variant:Nn \prop_get:NnN { cnc }
 %    \end{macrocode}
 % \end{macro}
 %
 % \begin{macro}[tested = m3prop002]
-%   {\prop_pop:NnN, \prop_pop:NoN, \prop_pop:cnN, \prop_pop:coN}
+%   {
+%     \prop_pop:NnN, \prop_pop:NVN, 
+%     \prop_pop:NoN,
+%     \prop_pop:cnN, \prop_pop:cVN,
+%     \prop_pop:coN,
+%   }
 % \begin{macro}[tested = m3prop002]
-%   {\prop_gpop:NnN, \prop_gpop:NoN, \prop_gpop:cnN, \prop_gpop:coN}
+%   {
+%     \prop_gpop:NnN, \prop_gpop:NVN,
+%     \prop_gpop:NoN,
+%     \prop_gpop:cnN, \prop_gpop:cVN,
+%     \prop_gpop:coN,
+%   }
 %   Popping a value also starts by doing the split.
 %   If the key is present, save the value in the token list and update the
 %   property list as when deleting.
@@ -1034,10 +1089,10 @@
       }
       { \tl_set:Nn #3 { \q_no_value } }
   }
-\cs_generate_variant:Nn \prop_pop:NnN  {     No }
-\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_generate_variant:Nn \prop_pop:NnN  {     NV , No }
+\cs_generate_variant:Nn \prop_pop:NnN  { c , cV , co }
+\cs_generate_variant:Nn \prop_gpop:NnN {     NV , No }
+\cs_generate_variant:Nn \prop_gpop:NnN { c , cV , co }
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
@@ -1129,7 +1184,13 @@
 % \end{macro}
 %
 % \begin{macro}[TF, tested = m3prop004]
-%   {\prop_pop:NnN, \prop_pop:cnN, \prop_gpop:NnN, \prop_gpop:cnN}
+%   {
+%     \prop_pop:NnN,  \prop_pop:NVN, 
+%     \prop_pop:cnN,  \prop_pop:cVN,
+%     \prop_gpop:NnN, \prop_gpop:NVN,
+%     \prop_gpop:NoN,
+%     \prop_gpop:cnN, \prop_gpop:cVN,
+%   }
 %   Popping an item from a property list, keeping track of whether
 %   the key was present or not, is implemented as a conditional.
 %   If the key was missing, neither the property list, nor the token
@@ -1156,28 +1217,40 @@
       }
       { \prg_return_false: }
   }
-\prg_generate_conditional_variant:Nnn \prop_pop:NnN { c } { T , F , TF }
-\prg_generate_conditional_variant:Nnn \prop_gpop:NnN { c } { T , F , TF }
+\prg_generate_conditional_variant:Nnn \prop_pop:NnN  { NV , c , cV } { T , F , TF }
+\prg_generate_conditional_variant:Nnn \prop_gpop:NnN { NV , c , cV } { T , F , TF }
 %    \end{macrocode}
 % \end{macro}
 %
 % \begin{macro}[tested = m3prop002]
 %   {
-%     \prop_put:Nnn, \prop_put:NnV, \prop_put:Nno, \prop_put:Nne, \prop_put:Nnx,
-%     \prop_put:NVn, \prop_put:NVV, \prop_put:NVx, \prop_put:Nvx,
-%     \prop_put:Non, \prop_put:Nxn, \prop_put:NxV, \prop_put:Noo, \prop_put:Nxx,
-%     \prop_put:cnn, \prop_put:cnV, \prop_put:cno, \prop_put:cne, \prop_put:cnx,
-%     \prop_put:cVn, \prop_put:cVV, \prop_put:cVx, \prop_put:cvx,
-%     \prop_put:con, \prop_put:cxn, \prop_put:cxV, \prop_put:coo, \prop_put:cxx
+%     \prop_put:Nnn,  \prop_put:NnV,  \prop_put:Nnv,  \prop_put:Nne,
+%     \prop_put:NVn,  \prop_put:NVV,  \prop_put:NVv,  \prop_put:NVe,
+%     \prop_put:Nvn,  \prop_put:NvV,  \prop_put:Nvv,  \prop_put:Nve, 
+%     \prop_put:Nen,  \prop_put:NeV,  \prop_put:Nev,  \prop_put:Nee,
+%     \prop_put:Nno,  \prop_put:Nnx,  \prop_put:NVx,
+%     \prop_put:Non,  \prop_put:Noo,  \prop_put:NxV,  \prop_put:Nxx,
+%     \prop_put:cnn,  \prop_put:cnV,  \prop_put:cnv,  \prop_put:cne,
+%     \prop_put:cno,  \prop_put:cnx,  
+%     \prop_put:cVn,  \prop_put:cVV,  \prop_put:cVv,  \prop_put:cVe,
+%     \prop_put:cvn,  \prop_put:cvV,  \prop_put:cvv,  \prop_put:cve, 
+%     \prop_put:cen,  \prop_put:ceV,  \prop_put:cev,  \prop_put:cee,
+%     \prop_put:con,  \prop_put:coo,  \prop_put:cxV,  \prop_put:cxx
 %   }
 % \begin{macro}[tested = m3prop002]
 %   {
-%     \prop_gput:Nnn, \prop_gput:NnV, \prop_gput:Nno, \prop_gput:Nne, \prop_gput:Nnx,
-%     \prop_gput:NVn, \prop_gput:NVV, \prop_gput:NVx, \prop_hput:Nvx,
-%     \prop_gput:Non, \prop_gput:Nxn, \prop_pgut:NxV, \prop_gput:Noo, \prop_gput:Nxx,
-%     \prop_gput:cnn, \prop_gput:cnV, \prop_gput:cno, \prop_gput:cne, \prop_gput:cnx,
-%     \prop_gput:cVn, \prop_gput:cVV, \prop_gput:cVx, \prop_gput:cvx,
-%     \prop_gput:con, \prop_gput:cxn, \prop_gput:cxV, \prop_gput:coo, \prop_gput:cxx
+%     \prop_gput:Nnn, \prop_gput:NnV, \prop_gput:Nnv, \prop_gput:Nne,
+%     \prop_gput:NVn, \prop_gput:NVV, \prop_gput:NVv, \prop_gput:NVe,
+%     \prop_gput:Nvn, \prop_gput:NvV, \prop_gput:Nvv, \prop_gput:Nve, 
+%     \prop_gput:Nen, \prop_gput:NeV, \prop_gput:Nev, \prop_gput:Nee,
+%     \prop_gput:Nno, \prop_gput:Non, \prop_gput:Noo,
+%     \prop_gput:Nnx, \prop_gput:NVx, \prop_gput:Nxn, \prop_gput:Nxx,
+%     \prop_gput:cnn, \prop_gput:cnV, \prop_gput:cnv, \prop_gput:cne,
+%     \prop_gput:cno, \prop_gput:cnx,
+%     \prop_gput:cVn, \prop_gput:cVV, \prop_gput:cVv, \prop_gput:cVe,
+%     \prop_gput:cvn, \prop_gput:cvV, \prop_gput:cvv, \prop_gput:cve, 
+%     \prop_gput:cen, \prop_gput:ceV, \prop_gput:cev, \prop_gput:cee,
+%     \prop_gput:cno, \prop_gput:con, \prop_gput:cxn, \prop_gput:cxx
 %   }
 % \begin{macro}{\@@_put:NNnn}
 %   Since the branches of \cs{@@_split:NnTF} are used as the replacement
@@ -1193,8 +1266,8 @@
 %   updated entry is placed at the same spot as the original \meta{key}
 %   in the property list, preserving the order of entries.
 %    \begin{macrocode}
-\cs_new_protected:Npn \prop_put:Nnn  { \@@_put:NNnn \__kernel_tl_set:Nx }
-\cs_new_protected:Npn \prop_gput:Nnn { \@@_put:NNnn \__kernel_tl_gset:Nx }
+\cs_new_protected:Npn \prop_put:Nnn  { \@@_put:NNnn \__kernel_tl_set:Ne }
+\cs_new_protected:Npn \prop_gput:Nnn { \@@_put:NNnn \__kernel_tl_gset:Ne }
 \cs_new_protected:Npn \@@_put:NNnn #1#2#3#4
   {
     \tl_set:Nn \l_@@_internal_tl
@@ -1207,22 +1280,48 @@
       { #1 #2 { \exp_not:o {#2} \l_@@_internal_tl } }
   }
 \cs_generate_variant:Nn \prop_put:Nnn
-  {     NnV , Nno , Nne , Nnx , NV , NVV , NVx , Nvx , No , Nx , NxV , Noo , Nxx }
+  {
+         NnV , Nnv , Nne , NV , NVV , NVv , NVe ,
+    Nv , NvV , Nvv , Nve , Ne , NeV , Nev , Nee
+  }
+\cs_generate_variant:Nn \prop_put:Nnn
+  { Nno , No , Noo , Nnx , NVx , NxV , Nxx }
+\cs_generate_variant:Nn \prop_put:Nnn
+  {
+    c  , cnV , cnv , cne , cV , cVV , cVv , cVe ,
+    cv , cvV , cvv , cve , ce , ceV , cev , cee
+  }
 \cs_generate_variant:Nn \prop_put:Nnn
-  { c , cnV , cno , cne , cnx , cV , cVV , cVx , cvx , co , cx , cxV , coo , cxx }
+  { cno , co , coo , cnx , cVx , cxV , cxx }
+\cs_generate_variant:Nn \prop_gput:Nnn
+  {
+         NnV , Nnv , Nne , NV , NVV , NVv , NVe ,
+    Nv , NvV , Nvv , Nve , Ne , NeV , Nev , Nee
+  }
 \cs_generate_variant:Nn \prop_gput:Nnn
-  {     NnV , Nno , Nne , Nnx , NV , NVV , NVx , Nvx , No , Nx , NxV , Noo , Nxx }
+  { Nno , No , Noo , Nnx , NVx , NxV , Nxx }
 \cs_generate_variant:Nn \prop_gput:Nnn
-  { c , cnV , cno , cne , cnx , cV , cVV , cVx , cvx , co , cx , cxV , coo , cxx }
+  {
+    c  , cnV , cnv , cne , cV , cVV , cVv , cVe ,
+    cv , cvV , cvv , cve , ce , ceV , cev , cee
+  }
+\cs_generate_variant:Nn \prop_gput:Nnn
+  { cno , co , coo , cnx , cVx , cxV , cxx }
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
 % \end{macro}
 %
 % \begin{macro}[tested = m3prop002]
-%   {\prop_put_if_new:Nnn, \prop_put_if_new:cnn}
+%   {
+%     \prop_put_if_new:Nnn, \prop_put_if_new:NVn, \prop_put_if_new:NnV,
+%     \prop_put_if_new:cnn, \prop_put_if_new:cVn, \prop_put_if_new:cnV
+%   }
 % \begin{macro}[tested = m3prop002]
-%   {\prop_gput_if_new:Nnn, \prop_gput_if_new:cnn}
+%   {
+%     \prop_gput_if_new:Nnn, \prop_gput_if_new:NVn, \prop_gput_if_new:NnV,
+%     \prop_gput_if_new:cnn, \prop_gput_if_new:cVn, \prop_gput_if_new:cnV
+%   }
 % \begin{macro}{\@@_put_if_new:NNnn}
 %   Adding conditionally also splits. If the key is already present,
 %   the three brace groups given by \cs{@@_split:NnTF} are removed.
@@ -1230,9 +1329,9 @@
 %   convert the key to a string using \cs{tl_to_str:n}.
 %    \begin{macrocode}
 \cs_new_protected:Npn \prop_put_if_new:Nnn
-  { \@@_put_if_new:NNnn \__kernel_tl_set:Nx }
+  { \@@_put_if_new:NNnn \__kernel_tl_set:Ne }
 \cs_new_protected:Npn \prop_gput_if_new:Nnn
-  { \@@_put_if_new:NNnn \__kernel_tl_gset:Nx }
+  { \@@_put_if_new:NNnn \__kernel_tl_gset:Ne }
 \cs_new_protected:Npn \@@_put_if_new:NNnn #1#2#3#4
   {
     \tl_set:Nn \l_@@_internal_tl
@@ -1244,8 +1343,10 @@
       { }
       { #1 #2 { \exp_not:o {#2} \l_@@_internal_tl } }
   }
-\cs_generate_variant:Nn \prop_put_if_new:Nnn  { c }
-\cs_generate_variant:Nn \prop_gput_if_new:Nnn { c }
+\cs_generate_variant:Nn \prop_put_if_new:Nnn
+  { NnV , NV , cnV , cV }
+\cs_generate_variant:Nn \prop_gput_if_new:Nnn
+  { NnV , NV , cnV , cV }
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
@@ -1278,8 +1379,8 @@
 %
 % \begin{macro}[pTF, tested = m3prop003]
 %   {
-%     \prop_if_in:Nn, \prop_if_in:NV, \prop_if_in:No,
-%     \prop_if_in:cn, \prop_if_in:cV, \prop_if_in:co
+%     \prop_if_in:Nn, \prop_if_in:NV, \prop_if_in:Ne, \prop_if_in:No,
+%     \prop_if_in:cn, \prop_if_in:cV, \prop_if_in:ce, \prop_if_in:co
 %   }
 % \begin{macro}[EXP]{\@@_if_in:nnn}
 %   Testing expandably if a key is in a property list
@@ -1309,7 +1410,7 @@
       { \prop_map_break:n { \use_i:nn \prg_return_true: } }
   }
 \prg_generate_conditional_variant:Nnn \prop_if_in:Nn
-  { NV , No , c , cV , co } { p , T , F , TF }
+  { NV , Ne , No , c , cV , ce , co } { p , T , F , TF }
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
@@ -1318,8 +1419,10 @@
 %
 % \begin{macro}[TF, tested = m3prop004]
 %   {
-%     \prop_get:NnN, \prop_get:NVN, \prop_get:NvN, \prop_get:NoN, \prop_get:NxN,
-%     \prop_get:cnN, \prop_get:cVN, \prop_get:cvN, \prop_get:coN, \prop_get:cxN,
+%     \prop_get:NnN, \prop_get:NVN, \prop_get:NvN, \prop_get:NeN,
+%     \prop_get:NoN, \prop_get:NxN,
+%     \prop_get:cnN, \prop_get:cVN, \prop_get:cvN, \prop_get:ceN,
+%     \prop_get:coN, \prop_get:cxN,
 %     \prop_get:cnc
 %   }
 %   Getting the value corresponding to a key, keeping track of whether
@@ -1336,7 +1439,11 @@
       { \prg_return_false: }
   }
 \prg_generate_conditional_variant:Nnn \prop_get:NnN
-  { NV , Nv , No , Nx , c , cV , cv , co , cx , cnc } { T , F , TF }
+  { NV , Nv , Ne , c , cV , cv , ce } { T , F , TF }
+\prg_generate_conditional_variant:Nnn \prop_get:NnN
+  { No , Nx , co , cx } { T , F , TF }
+\prg_generate_conditional_variant:Nnn \prop_get:NnN
+  { cnc } { T , F , TF }
 %    \end{macrocode}
 % \end{macro}
 %
@@ -1471,9 +1578,9 @@
 %   we use \cs{msg_show_item:nn} to format both the key and the value
 %   for each pair.
 %    \begin{macrocode}
-\cs_new_protected:Npn \prop_show:N { \@@_show:NN \msg_show:nnxxxx }
+\cs_new_protected:Npn \prop_show:N { \@@_show:NN \msg_show:nneeee }
 \cs_generate_variant:Nn \prop_show:N { c }
-\cs_new_protected:Npn \prop_log:N { \@@_show:NN \msg_log:nnxxxx }
+\cs_new_protected:Npn \prop_log:N { \@@_show:NN \msg_log:nneeee }
 \cs_generate_variant:Nn \prop_log:N { c }
 \cs_new_protected:Npn \@@_show:NN #1#2
   {
-- 
cgit v1.2.3

