[latex3-commits] [latex3/latex2e] develop: Update l3kernel to 2023-06-05 (f9393218)

github at latex-project.org github at latex-project.org
Mon Jun 5 09:56:46 CEST 2023


Repository : https://github.com/latex3/latex2e
On branch  : develop
Link       : https://github.com/latex3/latex2e/commit/f9393218a59a30ce462e5e658cd8730120ee2d3b

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

commit f9393218a59a30ce462e5e658cd8730120ee2d3b
Author: Joseph Wright <joseph.wright at morningstar2.co.uk>
Date:   Mon Jun 5 08:56:46 2023 +0100

    Update l3kernel to 2023-06-05


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

f9393218a59a30ce462e5e658cd8730120ee2d3b
 base/testfiles/github-0944.tlg             |   2 +-
 texmf/tex/latex/l3kernel/expl3-code.tex    | 222 ++++++++++++++++-------------
 texmf/tex/latex/l3kernel/expl3-generic.tex |   2 +-
 texmf/tex/latex/l3kernel/expl3.ltx         |  27 ++--
 texmf/tex/latex/l3kernel/expl3.sty         |  27 ++--
 texmf/tex/latex/l3kernel/l3doc.cls         |   2 +-
 6 files changed, 162 insertions(+), 120 deletions(-)

diff --git a/base/testfiles/github-0944.tlg b/base/testfiles/github-0944.tlg
index ddfdadcf..8250d813 100644
--- a/base/testfiles/github-0944.tlg
+++ b/base/testfiles/github-0944.tlg
@@ -22,7 +22,7 @@ LaTeX Warning: Reference `unknown' on page 1 undefined on input line ....
 ] (github-0944.aux)
  ***********
 -formatname- <-formatversion-> pre-release-2 (-release-version-test- branch)
-L3 programming layer <2023-05-22>
+L3 programming layer <2023-06-05>
  ***********
  *File List*
  -show the file list here-
diff --git a/texmf/tex/latex/l3kernel/expl3-code.tex b/texmf/tex/latex/l3kernel/expl3-code.tex
index f1de7169..cc7f3c32 100644
--- a/texmf/tex/latex/l3kernel/expl3-code.tex
+++ b/texmf/tex/latex/l3kernel/expl3-code.tex
@@ -71,7 +71,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: expl3.dtx
-\def\ExplFileDate{2023-05-22}%
+\def\ExplFileDate{2023-06-05}%
 \begingroup
   \def\next{\endgroup}%
   \expandafter\ifx\csname PackageError\endcsname\relax
@@ -1586,13 +1586,13 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
 \cs_set_protected:Npn \__kernel_if_debug:TF #1#2 {#2}
 \cs_set_protected:Npn \debug_on:n #1
   {
-    \msg_error:nnx { debug } { enable-debug }
-      { \tl_to_str:n { \debug_on:n {#1} } }
+    \sys_load_debug:
+    \debug_on:n {#1}
   }
 \cs_set_protected:Npn \debug_off:n #1
   {
-    \msg_error:nnx { debug } { enable-debug }
-       { \tl_to_str:n { \debug_off:n {#1} } }
+    \sys_load_debug:
+    \debug_off:n {#1}
   }
 \cs_set_protected:Npn \debug_suspend: { }
 \cs_set_protected:Npn \debug_resume: { }
@@ -1755,6 +1755,8 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
 \cs_set:Npn \__prg_TF_true:w \fi: \use_ii:nn    { \fi: \use_i:nn }
 \cs_set_protected:Npn \prg_set_eq_conditional:NNn
   { \__prg_set_eq_conditional:NNNn \cs_set_eq:cc }
+\cs_set_protected:Npn \prg_gset_eq_conditional:NNn
+  { \__prg_set_eq_conditional:NNNn \cs_gset_eq:cc }
 \cs_set_protected:Npn \prg_new_eq_conditional:NNn
   { \__prg_set_eq_conditional:NNNn \cs_new_eq:cc }
 \cs_set_protected:Npn \__prg_set_eq_conditional:NNNn #1#2#3#4
@@ -3003,6 +3005,8 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
 \__cs_tmp:w { ccx }
 \__cs_tmp:w { cnx }
 \__cs_tmp:w { oox }
+\cs_generate_variant:Nn \cs_generate_from_arg_count:NNnn { NNno }
+\cs_generate_variant:Nn \cs_replacement_spec:N { c }
 %% File: l3quark.dtx
 \cs_new_protected:Npn \quark_new:N #1
   {
@@ -3376,12 +3380,12 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
   { \__kernel_tl_gset:Nx #1 { \__kernel_exp_not:w \exp_after:wN {#2} } }
 \cs_new_protected:Npn \tl_gset:Nx #1#2
   { \__kernel_tl_gset:Nx #1 {#2} }
-\cs_generate_variant:Nn \tl_set:Nn  {    NV , Nv , Nf }
-\cs_generate_variant:Nn \tl_set:Nn  { c, cV , cv , cf }
+\cs_generate_variant:Nn \tl_set:Nn  {    NV , Nv , Ne , Nf }
+\cs_generate_variant:Nn \tl_set:Nn  { c, cV , cv , ce , cf }
 \cs_generate_variant:Nn \tl_set:Nx  { c }
 \cs_generate_variant:Nn \tl_set:No  { c }
-\cs_generate_variant:Nn \tl_gset:Nn {    NV , Nv , Nf }
-\cs_generate_variant:Nn \tl_gset:Nn { c, cV , cv , cf }
+\cs_generate_variant:Nn \tl_gset:Nn {    NV , Nv , Ne , Nf }
+\cs_generate_variant:Nn \tl_gset:Nn { c, cV , cv , ce , cf }
 \cs_generate_variant:Nn \tl_gset:Nx { c }
 \cs_generate_variant:Nn \tl_gset:No { c }
 \cs_new_protected:Npn \tl_put_left:Nn #1#2
@@ -3488,6 +3492,7 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
     \exp_after:wN \__tl_rescan_aux:
     \l__tl_internal_a_tl
   }
+\cs_generate_variant:Nn \tl_rescan:nn { nV }
 \exp_args:NNo \cs_new_protected:Npn \__tl_rescan_aux:
   { \tl_clear:N \l__tl_internal_a_tl }
 \cs_new_protected:Npn \tl_set_rescan:Nnn
@@ -3588,10 +3593,10 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
   { \__tl_replace:NnNNNnn \q__tl_mark ? \__tl_replace_next:w \__kernel_tl_set:Nx  }
 \cs_new_protected:Npn \tl_greplace_all:Nnn
   { \__tl_replace:NnNNNnn \q__tl_mark ? \__tl_replace_next:w \__kernel_tl_gset:Nx }
-\cs_generate_variant:Nn \tl_replace_once:Nnn  { c }
-\cs_generate_variant:Nn \tl_greplace_once:Nnn { c }
-\cs_generate_variant:Nn \tl_replace_all:Nnn   { c }
-\cs_generate_variant:Nn \tl_greplace_all:Nnn  { c }
+\cs_generate_variant:Nn \tl_replace_once:Nnn  { Nxx , c , cxx }
+\cs_generate_variant:Nn \tl_greplace_once:Nnn { Nxx , c , cxx }
+\cs_generate_variant:Nn \tl_replace_all:Nnn   { Nxx , c , cxx }
+\cs_generate_variant:Nn \tl_greplace_all:Nnn  { Nxx , c , cxx }
 \cs_new_protected:Npn \__tl_replace:NnNNNnn #1#2#3#4#5#6#7
   {
     \tl_if_empty:nTF {#6}
@@ -3652,14 +3657,14 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
   { \tl_replace_once:Nnn #1 {#2} { } }
 \cs_new_protected:Npn \tl_gremove_once:Nn #1#2
   { \tl_greplace_once:Nnn #1 {#2} { } }
-\cs_generate_variant:Nn \tl_remove_once:Nn  { c }
-\cs_generate_variant:Nn \tl_gremove_once:Nn { c }
+\cs_generate_variant:Nn \tl_remove_once:Nn  { Nx , c , cx }
+\cs_generate_variant:Nn \tl_gremove_once:Nn { Nx , c , cx }
 \cs_new_protected:Npn \tl_remove_all:Nn #1#2
   { \tl_replace_all:Nnn #1 {#2} { } }
 \cs_new_protected:Npn \tl_gremove_all:Nn #1#2
   { \tl_greplace_all:Nnn #1 {#2} { } }
-\cs_generate_variant:Nn \tl_remove_all:Nn  { c }
-\cs_generate_variant:Nn \tl_gremove_all:Nn { c }
+\cs_generate_variant:Nn \tl_remove_all:Nn  { Nx , c , cx }
+\cs_generate_variant:Nn \tl_gremove_all:Nn { Nx , c , cx }
 \prg_new_conditional:Npnn \tl_if_empty:N #1 { p , T , F , TF }
   {
     \if_meaning:w #1 \c_empty_tl
@@ -3704,14 +3709,7 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
   }
 \prg_generate_conditional_variant:Nnn \tl_if_blank:n
   { e , V , o } { p , T , F , TF }
-\prg_new_conditional:Npnn \tl_if_eq:NN #1#2 { p , T , F , TF }
-  {
-    \if_meaning:w #1 #2
-      \prg_return_true:
-    \else:
-      \prg_return_false:
-    \fi:
-  }
+\prg_new_eq_conditional:NNn \tl_if_eq:NN \cs_if_eq:NN { p , T , F , TF }
 \prg_generate_conditional_variant:Nnn \tl_if_eq:NN
   { Nc , c , cc } { p , TF , T , F }
 \tl_new:N \l__tl_internal_a_tl
@@ -3801,39 +3799,6 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
       \prg_return_false:
     \fi:
   }
-\cs_new:Npn \tl_case:Nn #1#2
-  {
-    \exp:w
-    \__tl_case:NnTF #1 {#2} { } { }
-  }
-\cs_new:Npn \tl_case:NnT #1#2#3
-  {
-    \exp:w
-    \__tl_case:NnTF #1 {#2} {#3} { }
-  }
-\cs_new:Npn \tl_case:NnF #1#2#3
-  {
-    \exp:w
-    \__tl_case:NnTF #1 {#2} { } {#3}
-  }
-\cs_new:Npn \tl_case:NnTF #1#2
-  {
-    \exp:w
-    \__tl_case:NnTF #1 {#2}
-  }
-\cs_new:Npn \__tl_case:NnTF #1#2#3#4
-  { \__tl_case:Nw #1 #2 #1 { } \s__tl_mark {#3} \s__tl_mark {#4} \s__tl_stop }
-\cs_new:Npn \__tl_case:Nw #1#2#3
-  {
-    \tl_if_eq:NNTF #1 #2
-      { \__tl_case_end:nw {#3} }
-      { \__tl_case:Nw #1 }
-  }
-\cs_generate_variant:Nn \tl_case:Nn   { c }
-\prg_generate_conditional_variant:Nnn \tl_case:Nn
-  { c } { T , F , TF }
-\cs_new:Npn \__tl_case_end:nw #1#2#3 \s__tl_mark #4#5 \s__tl_stop
-  { \exp_end: #1 #4 }
 \cs_new:Npn \tl_map_function:nN #1#2
   {
     \__tl_map_function:Nnnnnnnnn #2 #1
@@ -3909,7 +3874,7 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
   { \prg_map_break:Nn \tl_map_break: { } }
 \cs_new:Npn \tl_map_break:n
   { \prg_map_break:Nn \tl_map_break: }
-\cs_generate_variant:Nn \tl_to_str:n { V , v }
+\cs_generate_variant:Nn \tl_to_str:n { o , V , v }
 \cs_new:Npn \tl_to_str:N #1 { \__kernel_tl_to_str:w \exp_after:wN {#1} }
 \cs_generate_variant:Nn \tl_to_str:N { c }
 \cs_new:Npn \tl_use:N #1
@@ -4402,6 +4367,7 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
   }
 \cs_new_protected:Npn \tl_show:n #1
   { \iow_wrap:nnnN { >~ \tl_to_str:n {#1} . } { } { } \__tl_show:n }
+\cs_generate_variant:Nn \tl_show:n { x }
 \cs_new_protected:Npn \__tl_show:n #1
   {
     \tl_set:Nf \l__tl_internal_a_tl { \__tl_show:w #1 \s__tl_stop }
@@ -4417,6 +4383,7 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
 \cs_new:Npn \__tl_show:w #1 > #2 . \s__tl_stop {#2}
 \cs_new_protected:Npn \tl_log:n #1
   { \iow_wrap:nnnN { > ~ \tl_to_str:n {#1} . } { } { } \iow_log:n }
+\cs_generate_variant:Nn \tl_log:n { x }
 \cs_new_protected:Npn \__kernel_chk_tl_type:NnnT #1#2#3#4
   {
     \__kernel_chk_defined:NT #1
@@ -7803,10 +7770,10 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
     #2 \l__clist_internal_clist {#4}
     #1 #3 \l__clist_internal_clist #3
   }
-\cs_generate_variant:Nn \clist_put_left:Nn  {     NV , No , Nx }
-\cs_generate_variant:Nn \clist_put_left:Nn  { c , cV , co , cx }
-\cs_generate_variant:Nn \clist_gput_left:Nn {     NV , No , Nx }
-\cs_generate_variant:Nn \clist_gput_left:Nn { c , cV , co , cx }
+\cs_generate_variant:Nn \clist_put_left:Nn  {     NV , Nv , No , Nx }
+\cs_generate_variant:Nn \clist_put_left:Nn  { c , cV , cv , co , cx }
+\cs_generate_variant:Nn \clist_gput_left:Nn {     NV , Nv , No , Nx }
+\cs_generate_variant:Nn \clist_gput_left:Nn { c , cV , cv , co , cx }
 \cs_new_protected:Npn \clist_put_right:Nn
   { \__clist_put_right:NNNn \clist_concat:NNN \clist_set:Nn }
 \cs_new_protected:Npn \clist_gput_right:Nn
@@ -7816,10 +7783,10 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
     #2 \l__clist_internal_clist {#4}
     #1 #3 #3 \l__clist_internal_clist
   }
-\cs_generate_variant:Nn \clist_put_right:Nn  {     NV , No , Nx }
-\cs_generate_variant:Nn \clist_put_right:Nn  { c , cV , co , cx }
-\cs_generate_variant:Nn \clist_gput_right:Nn {     NV , No , Nx }
-\cs_generate_variant:Nn \clist_gput_right:Nn { c , cV , co , cx }
+\cs_generate_variant:Nn \clist_put_right:Nn  {     NV , Nv , No , Nx }
+\cs_generate_variant:Nn \clist_put_right:Nn  { c , cV , cv , co , cx }
+\cs_generate_variant:Nn \clist_gput_right:Nn {     NV , Nv , No , Nx }
+\cs_generate_variant:Nn \clist_gput_right:Nn { c , cV , cv , co , cx }
 \cs_new_protected:Npn \clist_get:NN #1#2
   {
     \if_meaning:w #1 \c_empty_clist
@@ -8777,11 +8744,8 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
     \if_catcode:w \exp_not:N #1 \c_catcode_active_tl
       \prg_return_true: \else: \prg_return_false: \fi:
   }
-\prg_new_conditional:Npnn \token_if_eq_meaning:NN #1#2 { p , T ,  F , TF }
-  {
-    \if_meaning:w  #1  #2
-      \prg_return_true: \else: \prg_return_false: \fi:
-  }
+\prg_new_eq_conditional:NNn \token_if_eq_meaning:NN \cs_if_eq:NN
+  { p , T , F , TF }
 \prg_new_conditional:Npnn \token_if_eq_catcode:NN #1#2 { p , T ,  F , TF }
   {
     \if_catcode:w \exp_not:N #1 \exp_not:N #2
@@ -9433,13 +9397,13 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
       { #1 #2 { \exp_not:o {#2} \l__prop_internal_tl } }
   }
 \cs_generate_variant:Nn \prop_put:Nnn
-  {     NnV , Nno , Nnx , NV , NVV , NVx , Nvx , No , Noo , Nxx }
+  {     NnV , Nno , Nne , Nnx , NV , NVV , NVx , Nvx , No , Noo , Nxx }
 \cs_generate_variant:Nn \prop_put:Nnn
-  { c , cnV , cno , cnx , cV , cVV , cVx , cvx , co , coo , cxx }
+  { c , cnV , cno , cne , cnx , cV , cVV , cVx , cvx , co , coo , cxx }
 \cs_generate_variant:Nn \prop_gput:Nnn
-  {     NnV , Nno , Nnx , NV , NVV , NVx , Nvx , No , Noo , Nxx }
+  {     NnV , Nno , Nne , Nnx , NV , NVV , NVx , Nvx , No , Noo , Nxx }
 \cs_generate_variant:Nn \prop_gput:Nnn
-  { c , cnV , cno , cnx , cV , cVV , cVx , cvx , co , coo , cxx }
+  { c , cnV , cno , cne , cnx , cV , cVV , cVx , cvx , co , coo , cxx }
 \cs_new_protected:Npn \prop_put_if_new:Nnn
   { \__prop_put_if_new:NNnn \__kernel_tl_set:Nx }
 \cs_new_protected:Npn \prop_gput_if_new:Nnn
@@ -10405,15 +10369,6 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
     should~be~a~clist~variable,~but~it~includes~empty~or~blank~items~
     without~braces.
   }
-\msg_new:nnnn { debug } { enable-debug }
-  { To~use~'#1'~set~the~'enable-debug'~option. }
-  {
-    The~function~'#1'~will~be~ignored~because~it~can~only~work~if~
-    some~internal~functions~in~expl3~have~been~appropriately~
-    defined.~This~only~happens~if~one~of~the~options~
-    'enable-debug',~'check-declarations'~or~'log-functions'~was~
-    given~as~an~option:~see~the~main~expl3~documentation.
-  }
 \msg_new:nnn { kernel } { bad-exp-end-f }
   { Misused~\exp_end_continue_f:w or~:nw }
 \msg_new:nnn { kernel } { bad-variable }
@@ -10601,7 +10556,7 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
   {
     \sys_if_shell:TF
       { \exp_args:No \__ior_shell_open:nN { \tl_to_str:n {#2} } #1 }
-      { \msg_error:nn { ior } { pipe-failed } }
+      { \msg_error:nn { kernel } { pipe-failed } }
   }
 \cs_new_protected:Npn \__ior_shell_open:nN #1#2
   {
@@ -10612,7 +10567,7 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
       }
       { \__kernel_ior_open:Nn #2 { |#1 } }
   }
-\msg_new:nnnn { ior } { pipe-failed }
+\msg_new:nnnn { kernel } { pipe-failed }
   { Cannot~run~piped~system~commands. }
   {
     LaTeX~tried~to~call~a~system~process~but~this~was~not~possible.\\
@@ -10840,6 +10795,21 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
         #1 \__kernel_file_name_quote:n {#2} \scan_stop:
   }
 \cs_generate_variant:Nn \__iow_open_stream:Nn { NV }
+\cs_new_protected:Npn \iow_shell_open:Nn #1#2
+  {
+    \sys_if_shell:TF
+      { \exp_args:No \__iow_shell_open:nN { \tl_to_str:n {#2} } #1 }
+      { \msg_error:nn { kernel } { pipe-failed } }
+  }
+\cs_new_protected:Npn \__iow_shell_open:nN #1#2
+  {
+    \tl_if_in:nnTF {#1} { " }
+      {
+        \msg_error:nnx
+          { kernel } { quote-in-shell } {#1}
+      }
+      { \__kernel_iow_open:Nn #2 { |#1 } }
+  }
 \cs_new_protected:Npn \iow_close:N #1
   {
     \int_compare:nT { \c_log_iow < #1 < \c_term_iow }
@@ -11435,18 +11405,35 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
     \tl_if_blank:nTF {#2}
       {
         \seq_map_tokens:Nn \l_file_search_path_seq
-          { \__file_full_name_aux:Nnnn \seq_map_break:n {#1} { / } }
+          { \__file_full_name_aux:Nnn \seq_map_break:n {#1} }
         \cs_if_exist:NT \input at path
           {
             \tl_map_tokens:Nn \input at path
-              { \__file_full_name_aux:Nnnn \tl_map_break:n {#1} { } }
+              { \__file_full_name_aux:Nnn \tl_map_break:n {#1} }
           }
         \__file_name_end:
       }
       { \__file_ext_check:nn {#1} {#2} }
   }
-\cs_new:Npn \__file_full_name_aux:Nnnn #1#2#3#4
-  { \exp_args:Ne \__file_full_name_aux:nN { \tl_to_str:n {#4} #3 #2 } #1 }
+\cs_new:Npn \__file_full_name_aux:Nnn #1#2#3
+  {
+    \exp_args:Ne \__file_full_name_aux:nN
+      {
+        \exp_args:Ne \__file_full_name_slash:n
+          { \tl_to_str:n {#3} } #2
+      }
+      #1
+  }
+\cs_new:Npn \__file_full_name_slash:n #1
+  {
+    \__file_full_name_slash:nw {#1} #1 \q_nil / \q_nil / \q_nil \q_stop
+  }
+\cs_new:Npn \__file_full_name_slash:nw #1#2 / \q_nil / #3 \q_stop
+  {
+    \quark_if_nil:nTF {#3}
+      { #1 / }
+      { #2 / }
+  }
 \cs_new:Npn \__file_full_name_aux:nN #1
   { \exp_args:Nne \__file_full_name_aux:nnN {#1} { \__file_full_name_aux:n {#1} } }
 \cs_new:Npn \__file_full_name_aux:nnN #1 #2 #3
@@ -11746,6 +11733,24 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
     \str_gset:Nn \g_file_curr_name_str {#2}
     \str_gset:Nn \g_file_curr_ext_str  {#3}
   }
+\cs_new:Npn \file_input_raw:n #1
+  { \exp_args:Ne \__file_input_raw:nn { \file_full_name:n {#1} } {#1} }
+\cs_new:Npx \__file_input_raw:nn #1#2
+  {
+    \exp_not:N \tl_if_blank:nTF {#1}
+      {
+        \exp_not:N \exp_args:Nnne \exp_not:N \msg_expandable_error:nnn
+          { kernel } { file-not-found }
+          { \exp_not:N \__kernel_file_name_sanitize:n {#2} }
+      }
+      {
+        \exp_not:N \tex_input:D
+          \sys_if_engine_luatex:TF
+            { {#1} }
+            { \exp_not:N \__kernel_file_name_quote:n {#1} \scan_stop: }
+        }
+  }
+\exp_args_generate:n { nne }
 \cs_new:Npn \file_parse_full_name:n #1
   {
     \file_parse_full_name_apply:nN {#1}
@@ -12384,12 +12389,12 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
         \token_if_eq_charcode:NNTF #1 -
           {
             \exp_after:wN \exp_after:wN \exp_after:wN \__dim_get_remainder:w
-              \int_eval:w ( 2 * #2 - #3 ) / ( 2 * #3 ) ;
+              \int_eval:n {  ( 2 * #2 - #3 ) / ( 2 * #3 ) } ;
               #2 ; #3 ; - ;
           }
           {
             \exp_after:wN \exp_after:wN \exp_after:wN \__dim_get_remainder:w
-              \int_eval:w ( 2 * #1#2 - #3 ) / ( 2 * #3 ) ;
+              \int_eval:n { ( 2 * #1#2 - #3 ) / ( 2 * #3 ) } ;
               #1#2 ; #3 ; ;
           }
       }
@@ -12397,13 +12402,13 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
 \cs_new:Npn \__dim_get_remainder:w #1;#2;#3;
   {
     \exp_after:wN \exp_after:wN \exp_after:wN \__dim_convert_remainder:w
-      \int_eval:w #2 - #1 * #3 ;
+      \int_eval:n { #2 - #1 * #3 } ;
       #3 ; #1 ;
   }
 \cs_new:Npn \__dim_convert_remainder:w #1;#2;
   {
     \exp_after:wN \exp_after:wN \exp_after:wN \__dim_test_candidate:w
-      \int_eval:w #1 * 65536 / #2 ;
+      \int_eval:n { #1 * 65536 / #2 } ;
       #1 ; #2 ;
   }
 \cs_new:Npn \__dim_test_candidate:w #1;#2;#3;
@@ -12412,8 +12417,7 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
       { \dim_to_decimal:n { #1sp } \__dim_eval:w #3sp \__dim_eval_end: }
       { \__dim_parse_decimal:w #1 ; }
       {
-        \exp_after:wN \__dim_parse_decimal:w
-          \int_eval:w #1 + 1 ;
+        \__dim_parse_decimal:w \int_eval:n { #1 + 1 } ;
       }
   }
 \cs_new:Npn \__dim_parse_decimal:w #1;#2;#3;
@@ -13081,7 +13085,8 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
               \l_keys_path_str \s__keys_stop
                 \l_keys_key_tl \l_keys_key_str
             \tl_set_eq:NN \l_keys_key_tl \l_keys_key_str
-            \__keys_execute:nn \l_keys_path_str {#1}
+            \tl_set:Nn \l_keys_value_tl {#1}
+            \__keys_execute:no \l_keys_path_str \l_keys_value_tl
           }
       }
   }
@@ -13456,7 +13461,7 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
           { \exp_not:o \l__keys_relative_tl }
       }
   }
-\cs_generate_variant:Nn \keys_set:nn { nV , nv , no }
+\cs_generate_variant:Nn \keys_set:nn { nV , nv , no , nx }
 \cs_new_protected:Npn \__keys_set:nn #1#2
   { \exp_args:No \__keys_set:nnn \l__keys_module_str {#1} {#2} }
 \cs_new_protected:Npn \__keys_set:nnn #1#2#3
@@ -20690,6 +20695,12 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
       }
   }
 \cs_generate_variant:Nn \cctab_gset:Nn { c }
+\cs_new_protected:Npn \cctab_gsave_current:N #1
+  {
+    \__cctab_chk_if_valid:NT #1
+      { \__cctab_gset:n {#1} }
+  }
+\cs_generate_variant:Nn \cctab_gsave_current:N { c }
 \sys_if_engine_luatex:T
   {
     \__cctab_new:N \g__cctab_internal_cctab
@@ -20949,6 +20960,8 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
         \char_set_catcode_active:n         { 126 }
       }
   }
+\cctab_new:N \g_tmpa_cctab
+\cctab_new:N \g_tmpb_cctab
 \msg_new:nnnn { cctab } { stack-full }
   { The~category~code~table~stack~is~exhausted. }
   {
@@ -35642,6 +35655,17 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
 \__kernel_patch_deprecation:nnNNpn { 2020-01-03 } { \text_titlecase:nn }
 \cs_gset:Npn \tl_mixed_case:nn #1#2
   { \text_titlecase:nn {#1} {#2} }
+\__kernel_patch_deprecation:nnNNpn { 2022-05-23 } { \token_case_meaning:Nn }
+\cs_gset:Npn \tl_case:Nn { \token_case_meaning:Nn }
+\__kernel_patch_deprecation:nnNNpn { 2022-05-23 } { \token_case_meaning:NnT }
+\cs_gset:Npn \tl_case:NnT { \token_case_meaning:NnT }
+\__kernel_patch_deprecation:nnNNpn { 2022-05-23 } { \token_case_meaning:NnF }
+\cs_gset:Npn \tl_case:NnF { \token_case_meaning:NnF }
+\__kernel_patch_deprecation:nnNNpn { 2022-05-23 } { \token_case_meaning:NnTF }
+\cs_gset:Npn \tl_case:NnTF { \token_case_meaning:NnTF }
+\cs_generate_variant:Nn \tl_case:Nn   { c }
+\prg_generate_conditional_variant:Nnn \tl_case:Nn
+  { c } { T , F , TF }
 \__kernel_patch_deprecation:nnNNpn { 2022-10-09 } { [ \codepoint_generate:n ] }
 \cs_gset:Npn \char_to_utfviii_bytes:n { \__kernel_codepoint_to_bytes:n }
 \__kernel_patch_deprecation:nnNNpn { 2022-10-09 } { \codepoint_to_nfd:n }
diff --git a/texmf/tex/latex/l3kernel/expl3-generic.tex b/texmf/tex/latex/l3kernel/expl3-generic.tex
index e70248e7..80c60e57 100644
--- a/texmf/tex/latex/l3kernel/expl3-generic.tex
+++ b/texmf/tex/latex/l3kernel/expl3-generic.tex
@@ -19,7 +19,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: expl3.dtx
-\def\ExplFileDate{2023-05-22}%
+\def\ExplFileDate{2023-06-05}%
 \let\ExplLoaderFileDate\ExplFileDate
 \begingroup
   \catcode`\_=11
diff --git a/texmf/tex/latex/l3kernel/expl3.ltx b/texmf/tex/latex/l3kernel/expl3.ltx
index 6db890f6..8b7ed14e 100644
--- a/texmf/tex/latex/l3kernel/expl3.ltx
+++ b/texmf/tex/latex/l3kernel/expl3.ltx
@@ -19,7 +19,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: expl3.dtx
-\def\ExplFileDate{2023-05-22}%
+\def\ExplFileDate{2023-06-05}%
 \let\ExplLoaderFileDate\ExplFileDate
 \begingroup
   \catcode`\_=11
@@ -90,19 +90,28 @@
     backend .choices:nn =
       { dvipdfmx , dvips , dvisvgm , luatex , pdftex , pdfmode , xdvipdfmx , xetex }
       { \sys_load_backend:n {#1} } ,
-    check-declarations .code:n =
+    check-declarations .choice: ,
+    check-declarations / true .code:n =
+      { \debug_on:n { check-declarations } } ,
+    check-declarations / false .code:n =
       {
-        \sys_load_debug:
-        \debug_on:n { check-declarations }
+        \__kernel_if_debug:TF
+          { \debug_off:n { check-declarations } }
+          { }
       } ,
+    check-declarations .default:n = true ,
     driver .meta:n = { backend = #1 } ,
-    enable-debug .code:n =
-      \sys_load_debug: ,
-    log-functions .code:n =
+    enable-debug .code:n = {} , % A stub
+    log-functions .choice: ,
+    log-functions / true .code:n =
+      { \debug_on:n { log-functions } } ,
+    log-functions / false .code:n =
       {
-        \sys_load_debug:
-        \debug_on:n { log-functions }
+        \__kernel_if_debug:TF
+          { \debug_off:n { log-functions } }
+          { }
       } ,
+    log-functions .default:n = true ,
     suppress-backend-headers .bool_gset_inverse:N
       = \g__kernel_backend_header_bool ,
     suppress-backend-headers .initial:n = false ,
diff --git a/texmf/tex/latex/l3kernel/expl3.sty b/texmf/tex/latex/l3kernel/expl3.sty
index d89673f8..41c154b8 100644
--- a/texmf/tex/latex/l3kernel/expl3.sty
+++ b/texmf/tex/latex/l3kernel/expl3.sty
@@ -19,7 +19,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: expl3.dtx
-\def\ExplFileDate{2023-05-22}%
+\def\ExplFileDate{2023-06-05}%
 \let\ExplLoaderFileDate\ExplFileDate
 \ProvidesPackage{expl3}
   [%
@@ -107,19 +107,28 @@
     backend .choices:nn =
       { dvipdfmx , dvips , dvisvgm , luatex , pdftex , pdfmode , xdvipdfmx , xetex }
       { \sys_load_backend:n {#1} } ,
-    check-declarations .code:n =
+    check-declarations .choice: ,
+    check-declarations / true .code:n =
+      { \debug_on:n { check-declarations } } ,
+    check-declarations / false .code:n =
       {
-        \sys_load_debug:
-        \debug_on:n { check-declarations }
+        \__kernel_if_debug:TF
+          { \debug_off:n { check-declarations } }
+          { }
       } ,
+    check-declarations .default:n = true ,
     driver .meta:n = { backend = #1 } ,
-    enable-debug .code:n =
-      \sys_load_debug: ,
-    log-functions .code:n =
+    enable-debug .code:n = {} , % A stub
+    log-functions .choice: ,
+    log-functions / true .code:n =
+      { \debug_on:n { log-functions } } ,
+    log-functions / false .code:n =
       {
-        \sys_load_debug:
-        \debug_on:n { log-functions }
+        \__kernel_if_debug:TF
+          { \debug_off:n { log-functions } }
+          { }
       } ,
+    log-functions .default:n = true ,
     suppress-backend-headers .bool_gset_inverse:N
       = \g__kernel_backend_header_bool ,
     suppress-backend-headers .initial:n = false ,
diff --git a/texmf/tex/latex/l3kernel/l3doc.cls b/texmf/tex/latex/l3kernel/l3doc.cls
index 6fa63759..f35d1f13 100644
--- a/texmf/tex/latex/l3kernel/l3doc.cls
+++ b/texmf/tex/latex/l3kernel/l3doc.cls
@@ -1607,7 +1607,7 @@
     \seq_set_map:NNn \l__codedoc_tmpa_seq
       \g__codedoc_nested_names_seq
       { \__codedoc_macro_end_wrap_item:n {##1} }
-    End~ definition~ for~
+    End~ of~ definition~ for~
     \int_compare:nTF { \seq_count:N \l__codedoc_tmpa_seq <= 3 }
       {
         \seq_use:Nnnn \l__codedoc_tmpa_seq





More information about the latex3-commits mailing list.