[latex3-commits] [latex3/latex2e] develop: Revert "Update l3kernel to 2023-10-27" (7683cb30)

github at latex-project.org github at latex-project.org
Fri Oct 27 14:31:21 CEST 2023


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

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

commit 7683cb306660cfb37543c2129e885e8781aa755b
Author: Joseph Wright <joseph.wright at morningstar2.co.uk>
Date:   Fri Oct 27 13:31:21 2023 +0100

    Revert "Update l3kernel to 2023-10-27"
    
    This reverts commit 106bc87d60e0d5b7b1db50e406236ba5f82465dc.


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

7683cb306660cfb37543c2129e885e8781aa755b
 base/testfiles/github-0944.tlg             |   2 +-
 texmf/tex/latex/l3kernel/expl3-code.tex    | 344 ++++++++++++++---------------
 texmf/tex/latex/l3kernel/expl3-generic.tex |   2 +-
 texmf/tex/latex/l3kernel/expl3.ltx         |   2 +-
 texmf/tex/latex/l3kernel/expl3.sty         |   2 +-
 5 files changed, 166 insertions(+), 186 deletions(-)

diff --git a/base/testfiles/github-0944.tlg b/base/testfiles/github-0944.tlg
index 2aa71f5d..2dc86542 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-10-27>
+L3 programming layer <2023-10-23>
  ***********
  *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 a7bb3d24..2f6e2fda 100644
--- a/texmf/tex/latex/l3kernel/expl3-code.tex
+++ b/texmf/tex/latex/l3kernel/expl3-code.tex
@@ -11,7 +11,6 @@
 %% l3expan.dtx  (with options: `package')
 %% l3quark.dtx  (with options: `package')
 %% l3tl.dtx  (with options: `package')
-%% l3tl-build.dtx  (with options: `package')
 %% l3str.dtx  (with options: `package')
 %% l3seq.dtx  (with options: `package')
 %% l3int.dtx  (with options: `package')
@@ -75,7 +74,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: expl3.dtx
-\def\ExplFileDate{2023-10-27}%
+\def\ExplFileDate{2023-10-23}%
 \begingroup
   \def\next{\endgroup}%
   \expandafter\ifx\csname PackageError\endcsname\relax
@@ -4560,101 +4559,6 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
 \tl_new:N \l_tmpa_tl
 \tl_new:N \l_tmpb_tl
 \cs_undefine:N \__tl_tmp:w
-%% File: l3tl-build.dtx
-\cs_new_protected:Npn \tl_build_begin:N #1
-  { \__tl_build_begin:NN \cs_set_nopar:Npe #1 }
-\cs_new_protected:Npn \tl_build_gbegin:N #1
-  { \__tl_build_begin:NN \cs_gset_nopar:Npe #1 }
-\cs_new_protected:Npn \__tl_build_begin:NN #1#2
-  { \exp_args:Nc \__tl_build_begin:NNN { \cs_to_str:N #2 ' } #2 #1 }
-\cs_new_protected:Npn \__tl_build_begin:NNN #1#2#3
-  {
-    #3 #1 { }
-    #3 #2
-      {
-        \exp_not:n { \exp_end: \exp_end: \exp_end: \exp_end: }
-        \exp_not:n { \__tl_build_last:NNn #3 #1 { } }
-      }
-  }
-\cs_new_protected:Npn \tl_build_put_right:Nn #1#2
-  {
-    \cs_set_nopar:Npe #1
-      { \__kernel_exp_not:w \exp_after:wN { \exp:w #1 #2 } }
-  }
-\cs_generate_variant:Nn \tl_build_put_right:Nn { Ne , Nx }
-\cs_new_protected:Npn \tl_build_gput_right:Nn #1#2
-  {
-    \cs_gset_nopar:Npe #1
-      { \__kernel_exp_not:w \exp_after:wN { \exp:w #1 #2 } }
-  }
-\cs_generate_variant:Nn \tl_build_gput_right:Nn { Ne , Nx }
-\cs_new_protected:Npn \__tl_build_last:NNn #1#2
-  {
-    \if_false: { { \fi:
-          \exp_end: \exp_end: \exp_end: \exp_end: \exp_end:
-          \__tl_build_last:NNn #1 #2 { }
-        }
-      }
-    \if_meaning:w \c_empty_tl #2
-      \__tl_build_begin:NN #1 #2
-    \fi:
-    #1 #2
-      {
-        \__kernel_exp_not:w \exp_after:wN
-          {
-            \exp:w \if_false: } } \fi:
-            \exp_after:wN \__tl_build_put:nn \exp_after:wN {#2}
-  }
-\cs_new_protected:Npn \__tl_build_put:nn #1#2 { \__tl_build_put:nw {#2} #1 }
-\cs_new_protected:Npn \__tl_build_put:nw #1#2 \__tl_build_last:NNn #3#4#5
-  { #2 \__tl_build_last:NNn #3 #4 { #1 #5 } }
-\cs_new_protected:Npn \tl_build_put_left:Nn #1
-  { \__tl_build_put_left:NNn \cs_set_nopar:Npe #1 }
-\cs_generate_variant:Nn \tl_build_put_left:Nn { Ne , Nx }
-\cs_new_protected:Npn \tl_build_gput_left:Nn #1
-  { \__tl_build_put_left:NNn \cs_gset_nopar:Npe #1 }
-\cs_generate_variant:Nn \tl_build_gput_left:Nn { Ne , Nx }
-\cs_new_protected:Npn \__tl_build_put_left:NNn #1#2#3
-  {
-    #1 #2
-      {
-        \__kernel_exp_not:w \exp_after:wN
-          {
-            \exp:w \exp_after:wN \__tl_build_put:nn
-              \exp_after:wN {#2} {#3}
-          }
-      }
-  }
-\cs_new_protected:Npn \tl_build_end:N #1
-  {
-    \__tl_build_get:NNN \__kernel_tl_set:Ne #1 #1
-    \exp_args:Nc \__tl_build_end_loop:NN { \cs_to_str:N #1 ' } \tl_clear:N
-  }
-\cs_new_protected:Npn \tl_build_gend:N #1
-  {
-    \__tl_build_get:NNN \__kernel_tl_gset:Ne #1 #1
-    \exp_args:Nc \__tl_build_end_loop:NN { \cs_to_str:N #1 ' } \tl_gclear:N
-  }
-\cs_new_protected:Npn \__tl_build_end_loop:NN #1#2
-  {
-    \if_meaning:w \c_empty_tl #1
-      \exp_after:wN \use_none:nnnnnn
-    \fi:
-    #2 #1
-    \exp_args:Nc \__tl_build_end_loop:NN { \cs_to_str:N #1 ' } #2
-  }
-\cs_new_protected:Npn \__tl_build_get:NNN #1#2#3
-  { #1 #3 { \if_false: { \fi: \exp_after:wN \__tl_build_get:w #2 } } }
-\cs_new:Npn \__tl_build_get:w #1 \__tl_build_last:NNn #2#3#4
-  {
-    \exp_not:n {#4}
-    \if_meaning:w \c_empty_tl #3
-      \exp_after:wN \__tl_build_get_end:w
-    \fi:
-    \exp_after:wN \__tl_build_get:w #3
-  }
-\cs_new:Npn \__tl_build_get_end:w #1#2#3
-  { \__kernel_exp_not:w \exp_after:wN { \if_false: } \fi: }
 %% File: l3str.dtx
 \scan_new:N \s__str_mark
 \scan_new:N \s__str_stop
@@ -6051,11 +5955,11 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
     \__seq_map_pairwise_function:Nnnwnn #1 #4 \s__seq_stop
   }
 \cs_generate_variant:Nn \seq_map_pairwise_function:NNN { Nc , c , cc }
-\cs_new_protected:Npn \seq_set_map_e:NNn
-  { \__seq_set_map_e:NNNn \__kernel_tl_set:Ne }
-\cs_new_protected:Npn \seq_gset_map_e:NNn
-  { \__seq_set_map_e:NNNn \__kernel_tl_gset:Ne }
-\cs_new_protected:Npn \__seq_set_map_e:NNNn #1#2#3#4
+\cs_new_protected:Npn \seq_set_map_x:NNn
+  { \__seq_set_map_x:NNNn \__kernel_tl_set:Ne }
+\cs_new_protected:Npn \seq_gset_map_x:NNn
+  { \__seq_set_map_x:NNNn \__kernel_tl_gset:Ne }
+\cs_new_protected:Npn \__seq_set_map_x:NNNn #1#2#3#4
   {
     \__seq_push_item_def:n { \exp_not:N \__seq_item:n {#4} }
     #1 #2 { #3 }
@@ -20936,7 +20840,7 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
   }
 \cs_set:Npn \__fp_tmp:w #1#2
   {
-    \cs_new:cpn
+    \cs_new_nopar:cpn
       { __fp_symbolic_#2_symbolic_o:ww }
       { \__fp_symbolic_binary_o:Nww #1 }
     \cs_new_eq:cc
@@ -20960,7 +20864,7 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
     {not} {sec} {set_sign} {sin} {sqrt} {tan}
   }
   {
-    \cs_new:cpe { __fp_symbolic_#1_o:w }
+    \cs_new_nopar:cpe { __fp_symbolic_#1_o:w }
       {
         \exp_not:N \__fp_symbolic_unary_o:NNw
         \exp_not:c { __fp_#1_o:w }
@@ -20968,7 +20872,7 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
   }
 \cs_set_protected:Npn \__fp_tmp:w #1#2#3
   {
-    \cs_new:cpn { __fp_symbolic_to_#1:w }
+    \cs_new_nopar:cpn { __fp_symbolic_to_#1:w }
       {
         \exp_after:wN \__fp_symbolic_convert:wnnN
         \exp:w \exp_end_continue_f:w
@@ -21045,10 +20949,10 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
     \tl_if_empty:nTF {#1}
       { \prg_return_true: }
       {
-        \tl_if_in:nnTF { #1 } { ~ }
+        \tl_if_in:onTF { \tl_to_str:n {#1} } { ~ }
           { \prg_return_true: }
           {
-            \__fp_id_if_invalid_aux:N #1
+            \exp_after:wN \__fp_id_if_invalid_aux:N \tl_to_str:n {#1}
               { ? \prg_break:n \prg_return_false: }
             \prg_break_point:
           }
@@ -21093,7 +20997,7 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
   }
 \cs_new:Npn \__fp_variable_set_parsing:Nn #1#2
   {
-    \cs_set:Npn \__fp_tmp:w
+    \cs_set_nopar:Npn \__fp_tmp:w
       {
         \__fp_exp_after_symbolic_f:nw { \__fp_parse_infix:NN }
         \s__fp_symbolic \__fp_symbolic_chk:w
@@ -21119,62 +21023,54 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
       }
   }
 \cs_new_protected:Npn \fp_clear_variable:n #1
-  {
-    \exp_args:No \__fp_clear_variable:n { \tl_to_str:n {#1} }
-  }
-\cs_new_protected:Npn \__fp_clear_variable:n #1
   {
     \__fp_id_if_invalid:nTF {#1}
       { \msg_error:nnn { fp } { id-invalid } {#1} }
-      { \__fp_clear_variable_aux:n {#1} }
+      { \exp_args:No \__fp_clear_variable:n { \tl_to_str:n {#1} } }
   }
-\cs_new_protected:Npn \__fp_clear_variable_aux:n #1
+\cs_new_protected:Npn \__fp_clear_variable:n #1
   {
-    \cs_set_eq:cN { l__fp_variable_#1_fp } \tex_undefined:D
+    \cs_undefine:c { l__fp_variable_#1_fp }
     \__fp_variable_set_parsing:Nn \cs_set_eq:NN {#1}
   }
 \cs_new_protected:Npn \fp_new_variable:n #1
   {
-    \exp_args:No \__fp_new_variable:n { \tl_to_str:n {#1} }
+    \__fp_id_if_invalid:nTF {#1}
+      { \msg_error:nnn { fp } { id-invalid } {#1} }
+      { \exp_args:No \__fp_new_variable:n { \tl_to_str:n {#1} } }
   }
 \cs_new_protected:Npn \__fp_new_variable:n #1
   {
-    \__fp_id_if_invalid:nTF {#1}
-      { \msg_error:nnn { fp } { id-invalid } {#1} }
+    \cs_if_exist:cT { __fp_parse_word_#1:N }
       {
-        \cs_if_exist:cT { __fp_parse_word_#1:N }
-        {
-          \msg_error:nnn
-            { fp } { id-already-defined } {#1}
-          \cs_undefine:c { __fp_parse_word_#1:N }
-          \cs_set_eq:cN { l__fp_variable_#1_fp } \tex_undefined:D
-        }
-      \__fp_variable_set_parsing:Nn \cs_gset_eq:NN {#1}
+        \msg_error:nnn
+          { fp } { id-already-defined } {#1}
+        \cs_undefine:c { __fp_parse_word_#1:N }
+        \cs_undefine:c { l__fp_variable_#1_fp }
       }
+    \__fp_variable_set_parsing:Nn \cs_gset_eq:NN {#1}
   }
 \flag_new:n { __fp_symbolic }
 \cs_new_protected:Npn \fp_set_variable:nn #1
   {
-    \exp_args:No \__fp_set_variable:nn { \tl_to_str:n {#1} }
+    \__fp_id_if_invalid:nTF {#1}
+      { \msg_error:nnn { fp } { id-invalid } {#1} }
+      { \exp_args:No \__fp_set_variable:nn { \tl_to_str:n {#1} } }
   }
 \cs_new_protected:Npn \__fp_set_variable:nn #1#2
   {
-    \__fp_id_if_invalid:nTF {#1}
-      { \msg_error:nnn { fp } { id-invalid } {#1} }
+    \__fp_variable_set_parsing:Nn \cs_set_eq:NN {#1}
+    \fp_set:Nn \l__fp_symbolic_fp {#2}
+    \cs_set_nopar:cpn { l__fp_variable_#1_fp }
+      { \flag_ensure_raised:n { __fp_symbolic } \c_nan_fp }
+    \flag_clear:n { __fp_symbolic }
+    \fp_set:cn { l__fp_variable_#1_fp } { \l__fp_symbolic_fp }
+    \flag_if_raised:nT { __fp_symbolic }
       {
-        \__fp_variable_set_parsing:Nn \cs_set_eq:NN {#1}
-        \fp_set:Nn \l__fp_symbolic_fp {#2}
-        \cs_set_nopar:cpn { l__fp_variable_#1_fp }
-          { \flag_ensure_raised:n { __fp_symbolic } \c_nan_fp }
-        \flag_clear:n { __fp_symbolic }
-        \fp_set:cn { l__fp_variable_#1_fp } { \l__fp_symbolic_fp }
-        \flag_if_raised:nT { __fp_symbolic }
-          {
-            \msg_error:nneee { fp } { id-loop }
-              { #1 }
-              { \tl_to_str:n {#2} }
-              { \fp_to_tl:N \l__fp_symbolic_fp }
-          }
+        \msg_error:nneee { fp } { id-loop }
+          { \tl_to_str:n {#1} }
+          { \tl_to_str:n {#2} }
+          { \fp_to_tl:N \l__fp_symbolic_fp }
       }
   }
 \msg_new:nnnn { fp } { id-invalid }
@@ -21208,7 +21104,7 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
 \cs_new_protected:Npn \__fp_new_function:n #1
   {
     \__fp_id_if_invalid:nTF {#1}
-      { \msg_error:nnn { fp } { id-invalid } {#1} }
+      { \msg_error:nnn { fp } { invalid-identifier } {#1} }
       {
         \cs_if_exist:cT { __fp_parse_word_#1:N }
           {
@@ -21274,7 +21170,7 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
 \cs_new_protected:Npn \__fp_set_function:Nnnn #1#2#3#4
   {
     \__fp_id_if_invalid:nTF {#2}
-      { \msg_error:nnn { fp } { id-invalid } {#2} }
+      { \msg_error:nnn { fp } { invalid-identifier } {#2} }
       {
         \cs_if_exist:cF { __fp_parse_word_#2:N }
           { \__fp_function_set_parsing:Nn \cs_set_eq:NN {#2} }
@@ -21283,10 +21179,8 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
           \exp_args:No \clist_map_inline:nn { \tl_to_str:n {#3} }
             {
               \int_incr:N \l__fp_function_arg_int
-              \exp_args:Ne \__fp_clear_variable_aux:n
-                {
-                  \c_underscore_str \tex_romannumeral:D \l__fp_function_arg_int
-                }
+              \exp_args:Ne \__fp_clear_variable:n
+                { _ \tex_romannumeral:D \l__fp_function_arg_int }
               \fp_clear_variable:n {##1}
               \cs_set_nopar:cpe { l__fp_variable_##1_fp }
                 {
@@ -21352,12 +21246,8 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
   { \exp_args:No \__fp_clear_function:n { \tl_to_str:n {#1} } }
 \cs_new_protected:Npn \__fp_clear_function:n #1
   {
-    \__fp_id_if_invalid:nTF {#1}
-      { \msg_error:nnn { fp } { id-invalid } {#1} }
-      {
-        \cs_set_eq:cN { __fp_#1_o:w } \tex_undefine:D
-        \__fp_function_set_parsing:Nn \cs_set_eq:NN {#1}
-      }
+    \cs_undefine:c { __fp_parse_word_ #1 :N }
+    \__fp_function_set_parsing:Nn \cs_set_eq:NN {#1}
   }
 %% File: l3fparray.dtx
 \int_new:N \g__fp_array_int
@@ -26276,7 +26166,7 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
 \cs_new_protected:Npn \__regex_show_item_exact_cs:n #1
   {
     \seq_set_split:Nnn \l__regex_internal_seq { \scan_stop: } {#1}
-    \seq_set_map_e:NNn \l__regex_internal_seq
+    \seq_set_map_x:NNn \l__regex_internal_seq
       \l__regex_internal_seq { \iow_char:N\\##1 }
     \__regex_show_one:n
       { control~sequence~ \seq_use:Nn \l__regex_internal_seq { ~or~ } }
@@ -26795,7 +26685,7 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
   }
 \cs_new_protected:Npn \__regex_match_once_init_aux:
   {
-    \tl_build_begin:N \l__regex_matched_analysis_tl
+    \tl_build_clear:N \l__regex_matched_analysis_tl
     \tl_clear:N \l__regex_curr_analysis_tl
   }
 \cs_new_protected:Npn \__regex_single_match:
@@ -26967,7 +26857,7 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
           \l__regex_fresh_thread_bool
         \int_set_eq:NN \l__regex_success_pos_int \l__regex_curr_pos_int
         \int_set_eq:NN \l__regex_last_char_success_int \l__regex_last_char_int
-        \tl_build_begin:N \l__regex_matched_analysis_tl
+        \tl_build_clear:N \l__regex_matched_analysis_tl
         \tl_set_eq:NN \l__regex_success_submatches_tl
           \l__regex_curr_submatches_tl
         \prg_break:
@@ -27970,7 +27860,7 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
       \__regex_single_match:
       #1
       \__regex_match_init:
-      \tl_build_begin:N \l__regex_input_tl
+      \tl_build_clear:N \l__regex_input_tl
       \__regex_match_once_init:
       \peek_analysis_map_inline:n
         {
@@ -32400,12 +32290,13 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
 \cs_new:Npn \lua_escape:e #1 { \__lua_escape:n {#1} }
 \cs_new:Npn \lua_escape:n #1 { \lua_escape:e { \exp_not:n {#1} } }
 \str_new:N \l__lua_err_msg_str
+\cs_generate_variant:Nn \msg_error:nnnn { nnnV }
 \cs_new_protected:Npn \lua_load_module:n #1
   {
     \bool_if:nF { \__lua_load_module_p:n { #1 } }
       {
         \msg_error:nnnV
-          { luatex } { module-not-found } { #1 } \l__lua_err_msg_str
+          { luatex } { module-not-found } { #1 } { \l__lua_err_msg_str }
       }
   }
 \sys_if_engine_luatex:F
@@ -34170,32 +34061,33 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
   {
     \bool_if:NTF \l_text_titlecase_check_letter_bool
       {
-        \exp_args:Ne \__text_change_case_codepoint_title_auxi:nnnn
+        \tl_if_single:nTF {#4}
           {
-            \codepoint_to_category:n
-              { \__text_codepoint_from_chars:Nw #4 }
+            \bool_lazy_or:nnTF
+              { \token_if_letter_p:N #4 }
+              {
+                \bool_lazy_and_p:nn
+                  { \token_if_active_p:N #4 }
+                  { ! \int_compare_p:nNn {`#4} < { "80 } }
+              }
+              { \__text_change_case_codepoint_title:nnn }
+              { \__text_change_case_codepoint_title:nnnnn { title } {#1} }
           }
+          { \__text_change_case_codepoint_title:nnn }
       }
       { \__text_change_case_codepoint_title:nnn }
         {#2} {#3} {#4}
   }
-\cs_new:Npn \__text_change_case_codepoint_title_auxi:nnnn #1#2#3#4
-  {
-    \tl_if_head_eq_charcode:nNTF {#1} { L }
-      { \__text_change_case_codepoint_title:nnn }
-      { \__text_change_case_codepoint_title_auxii:nnnn { title } }
-        {#2} {#3} {#4}
-  }
 \cs_new:Npn \__text_change_case_codepoint_title:nnn #1#2#3
-  { \__text_change_case_codepoint_title_auxii:nnnn { end } {#1} {#2} {#3} }
-\cs_new:Npn \__text_change_case_codepoint_title_auxii:nnnn #1#2#3#4
+  { \__text_change_case_codepoint_title:nnnnn { title } { end } {#1} {#2} {#3} }
+\cs_new:Npn \__text_change_case_codepoint_title:nnnnn #1#2#3#4#5
   {
-    \cs_if_exist_use:cF { __text_change_case_title_ #3 :nnnnn }
+    \cs_if_exist_use:cF { __text_change_case_title_ #4 :nnnnn }
       {
-        \cs_if_exist_use:cF { __text_change_case_upper_ #3 :nnnnn }
+        \cs_if_exist_use:cF { __text_change_case_upper_ #4 :nnnnn }
           { \__text_change_case_codepoint:nnnnn }
       }
-        { title } {#1} {#2} {#3} {#4}
+        {#1} {#2} {#3} {#4} {#5}
   }
 \cs_new:Npn \__text_change_case_codepoint:nnnnn #1#2#3#4#5
   {
@@ -36308,8 +36200,104 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
     #1 #2 { #3 }
     \__seq_pop_item_def:
   }
+\cs_new_protected:Npn \tl_build_begin:N #1
+  { \__tl_build_begin:NN \cs_set_nopar:Npe #1 }
+\cs_new_protected:Npn \tl_build_gbegin:N #1
+  { \__tl_build_begin:NN \cs_gset_nopar:Npe #1 }
+\cs_new_protected:Npn \__tl_build_begin:NN #1#2
+  { \exp_args:Nc \__tl_build_begin:NNN { \cs_to_str:N #2 ' } #2 #1 }
+\cs_new_protected:Npn \__tl_build_begin:NNN #1#2#3
+  {
+    #3 #1 { }
+    #3 #2
+      {
+        \exp_not:n { \exp_end: \exp_end: \exp_end: \exp_end: }
+        \exp_not:n { \__tl_build_last:NNn #3 #1 { } }
+      }
+  }
+\cs_new_eq:NN \tl_build_clear:N \tl_build_begin:N
+\cs_new_eq:NN \tl_build_gclear:N \tl_build_gbegin:N
+\cs_new_protected:Npn \tl_build_put_right:Nn #1#2
+  {
+    \cs_set_nopar:Npe #1
+      { \exp_after:wN \exp_not:n \exp_after:wN { \exp:w #1 #2 } }
+  }
+\cs_generate_variant:Nn \tl_build_put_right:Nn { Ne , Nx }
+\cs_new_protected:Npn \tl_build_gput_right:Nn #1#2
+  {
+    \cs_gset_nopar:Npe #1
+      { \exp_after:wN \exp_not:n \exp_after:wN { \exp:w #1 #2 } }
+  }
+\cs_generate_variant:Nn \tl_build_gput_right:Nn { Ne , Nx }
+\cs_new_protected:Npn \__tl_build_last:NNn #1#2
+  {
+    \if_false: { { \fi:
+          \exp_end: \exp_end: \exp_end: \exp_end: \exp_end:
+          \__tl_build_last:NNn #1 #2 { }
+        }
+      }
+    \if_meaning:w \c_empty_tl #2
+      \__tl_build_begin:NN #1 #2
+    \fi:
+    #1 #2
+      {
+        \exp_after:wN \exp_not:n \exp_after:wN
+          {
+            \exp:w \if_false: } } \fi:
+            \exp_after:wN \__tl_build_put:nn \exp_after:wN {#2}
+  }
+\cs_new_protected:Npn \__tl_build_put:nn #1#2 { \__tl_build_put:nw {#2} #1 }
+\cs_new_protected:Npn \__tl_build_put:nw #1#2 \__tl_build_last:NNn #3#4#5
+  { #2 \__tl_build_last:NNn #3 #4 { #1 #5 } }
+\cs_new_protected:Npn \tl_build_put_left:Nn #1
+  { \__tl_build_put_left:NNn \cs_set_nopar:Npe #1 }
+\cs_generate_variant:Nn \tl_build_put_left:Nn { Ne , Nx }
+\cs_new_protected:Npn \tl_build_gput_left:Nn #1
+  { \__tl_build_put_left:NNn \cs_gset_nopar:Npe #1 }
+\cs_generate_variant:Nn \tl_build_gput_left:Nn { Ne , Nx }
+\cs_new_protected:Npn \__tl_build_put_left:NNn #1#2#3
+  {
+    #1 #2
+      {
+        \exp_after:wN \exp_not:n \exp_after:wN
+          {
+            \exp:w \exp_after:wN \__tl_build_put:nn
+              \exp_after:wN {#2} {#3}
+          }
+      }
+  }
 \cs_new_protected:Npn \tl_build_get:NN
   { \__tl_build_get:NNN \__kernel_tl_set:Ne }
+\cs_new_protected:Npn \__tl_build_get:NNN #1#2#3
+  { #1 #3 { \if_false: { \fi: \exp_after:wN \__tl_build_get:w #2 } } }
+\cs_new:Npn \__tl_build_get:w #1 \__tl_build_last:NNn #2#3#4
+  {
+    \exp_not:n {#4}
+    \if_meaning:w \c_empty_tl #3
+      \exp_after:wN \__tl_build_get_end:w
+    \fi:
+    \exp_after:wN \__tl_build_get:w #3
+  }
+\cs_new:Npn \__tl_build_get_end:w #1#2#3
+  { \exp_after:wN \exp_not:n \exp_after:wN { \if_false: } \fi: }
+\cs_new_protected:Npn \tl_build_end:N #1
+  {
+    \__tl_build_get:NNN \__kernel_tl_set:Ne #1 #1
+    \exp_args:Nc \__tl_build_end_loop:NN { \cs_to_str:N #1 ' } \tl_clear:N
+  }
+\cs_new_protected:Npn \tl_build_gend:N #1
+  {
+    \__tl_build_get:NNN \__kernel_tl_gset:Ne #1 #1
+    \exp_args:Nc \__tl_build_end_loop:NN { \cs_to_str:N #1 ' } \tl_gclear:N
+  }
+\cs_new_protected:Npn \__tl_build_end_loop:NN #1#2
+  {
+    \if_meaning:w \c_empty_tl #1
+      \exp_after:wN \use_none:nnnnnn
+    \fi:
+    #2 #1
+    \exp_args:Nc \__tl_build_end_loop:NN { \cs_to_str:N #1 ' } #2
+  }
 %% File: l3legacy.dtx
 \prg_new_conditional:Npnn \legacy_if:n #1 { p , T , F , TF }
   {
@@ -36644,10 +36632,6 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
 \cs_gset:Npn \seq_indexed_map_function:NN { \seq_map_indexed_function:NN }
 \__kernel_patch_deprecation:nnNNpn { 2023-05-10 } { \seq_mapthread_function:NNN }
 \cs_gset:Npn \seq_mapthread_function:NNN { \seq_map_pairwise_function:NNN }
-\__kernel_patch_deprecation:nnNNpn { 2023-10-26 } { \seq_set_map_e:NNn }
-\cs_gset_protected:Npn \seq_set_map_x:NNn { \seq_set_map_e:NNn }
-\__kernel_patch_deprecation:nnNNpn { 2023-10-26 } { \seq_gset_map_e:NNn }
-\cs_gset_protected:Npn \seq_gset_map_x:NNn { \seq_gset_map_e:NNn }
 \__kernel_patch_deprecation:nnNNpn { 2021-01-11 } { (no~longer~required) }
 \cs_gset_protected:Npn \sys_load_deprecation: { }
 \__kernel_patch_deprecation:nnNNpn { 2023-07-08 } { \text_titlecase_first:n }
@@ -36685,10 +36669,6 @@ Type  H <return>  for immediate help}\def~{\errmessage{%
 \cs_generate_variant:Nn \tl_case:Nn   { c }
 \prg_generate_conditional_variant:Nnn \tl_case:Nn
   { c } { T , F , TF }
-\__kernel_patch_deprecation:nnNNpn { 2023-10-18 } { \tl_build_begin:N }
-\cs_new_protected:Npn \tl_build_clear:N { \tl_build_begin:N }
-\__kernel_patch_deprecation:nnNNpn { 2023-10-18 } { \tl_build_gbegin:N }
-\cs_new_protected:Npn \tl_build_gclear:N { \tl_build_gbegin:N }
 \__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 ecf29028..0942a885 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-10-27}%
+\def\ExplFileDate{2023-10-23}%
 \let\ExplLoaderFileDate\ExplFileDate
 \begingroup
   \catcode`\_=11
diff --git a/texmf/tex/latex/l3kernel/expl3.ltx b/texmf/tex/latex/l3kernel/expl3.ltx
index cccffe5b..e0c4ee07 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-10-27}%
+\def\ExplFileDate{2023-10-23}%
 \let\ExplLoaderFileDate\ExplFileDate
 \begingroup
   \catcode`\_=11
diff --git a/texmf/tex/latex/l3kernel/expl3.sty b/texmf/tex/latex/l3kernel/expl3.sty
index 50a76d03..5e548a94 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-10-27}%
+\def\ExplFileDate{2023-10-23}%
 \let\ExplLoaderFileDate\ExplFileDate
 \ProvidesPackage{expl3}
   [%





More information about the latex3-commits mailing list.