[latex3-commits] [git/LaTeX3-latex3-latex3] master: Implement new tl_build functions (2f148c2)

Bruno Le Floch bruno at le-floch.fr
Sun Apr 1 20:58:56 CEST 2018


Repository : https://github.com/latex3/latex3
On branch  : master
Link       : https://github.com/latex3/latex3/commit/2f148c276c203a0ff18b65583da23d24a76974cc

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

commit 2f148c276c203a0ff18b65583da23d24a76974cc
Author: Bruno Le Floch <bruno at le-floch.fr>
Date:   Sun Apr 1 00:29:55 2018 -0400

    Implement new tl_build functions


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

2f148c276c203a0ff18b65583da23d24a76974cc
 l3kernel/l3candidates.dtx               |  257 +++++++++++++++++++++++++++++++
 l3kernel/testfiles/m3expl001.luatex.tlg |   24 +++
 l3kernel/testfiles/m3expl001.ptex.tlg   |   24 +++
 l3kernel/testfiles/m3expl001.tlg        |   24 +++
 l3kernel/testfiles/m3expl001.uptex.tlg  |   24 +++
 l3kernel/testfiles/m3expl001.xetex.tlg  |   24 +++
 l3kernel/testfiles/m3expl003.luatex.tlg |   24 +++
 l3kernel/testfiles/m3expl003.ptex.tlg   |   24 +++
 l3kernel/testfiles/m3expl003.tlg        |   24 +++
 l3kernel/testfiles/m3expl003.uptex.tlg  |   24 +++
 l3kernel/testfiles/m3expl003.xetex.tlg  |   24 +++
 11 files changed, 497 insertions(+)

diff --git a/l3kernel/l3candidates.dtx b/l3kernel/l3candidates.dtx
index d60f27b..289fdde 100644
--- a/l3kernel/l3candidates.dtx
+++ b/l3kernel/l3candidates.dtx
@@ -1067,6 +1067,63 @@
 %   \end{texnote}
 % \end{function}
 %
+% \begin{function}[added = 2018-04-01]{\tl_build_begin:N, \tl_build_gbegin:N}
+%   \begin{syntax}
+%     \cs{tl_build_begin:N} \meta{tl~var}
+%   \end{syntax}
+%   Clears the \meta{tl~var} and sets it up to support other
+%   \cs[no-index]{tl_build_\ldots{}} functions, which allow accumulating
+%   large numbers of tokens piece by piece much more efficiently than
+%   standard \pkg{l3tl} functions.  Until \cs{tl_build_end:N}
+%   \meta{tl~var} is called, applying any function from \pkg{l3tl} other
+%   than \cs[no-index]{tl_build_\ldots{}} will lead to incorrect
+%   results.  The |begin| and |gbegin| functions must be used for local
+%   and global \meta{tl~var} respectively.
+% \end{function}
+%
+% \begin{function}[added = 2018-04-01]
+%   {
+%     \tl_build_put_left:Nn, \tl_build_put_left:Nx,
+%     \tl_build_gput_left:Nn, \tl_build_gput_left:Nx,
+%     \tl_build_put_right:Nn, \tl_build_put_right:Nx,
+%     \tl_build_gput_right:Nn, \tl_build_gput_right:Nx,
+%   }
+%   \begin{syntax}
+%     \cs{tl_build_put_left:Nn} \meta{tl~var} \Arg{tokens}
+%     \cs{tl_build_put_right:Nn} \meta{tl~var} \Arg{tokens}
+%   \end{syntax}
+%   Adds \meta{tokens} to the left or right side of the current contents
+%   of \meta{tl~var}.  The \meta{tl~var} must have been set up with
+%   \cs{tl_build_begin:N} or \cs{tl_build_gbegin:N}.  The |put| and
+%   |gput| functions must be used for local and global \meta{tl~var}
+%   respectively.  The |right| functions are about twice faster than the
+%   |left| functions.
+% \end{function}
+%
+% \begin{function}[added = 2018-04-01]{\tl_build_get:NN}
+%   \begin{syntax}
+%     \cs{tl_build_get:N} \meta{tl~var_1} \meta{tl~var_2}
+%   \end{syntax}
+%   Stores the contents of the \meta{tl~var_1} in the \meta{tl~var_2}.
+%   The \meta{tl~var_1} must have been set up with \cs{tl_build_begin:N}
+%   or \cs{tl_build_gbegin:N}.  The \meta{tl~var_2} is a
+%   \enquote{normal} token list variable, assigned locally using
+%   \cs{tl_set:Nn}.
+% \end{function}
+%
+% \begin{function}[added = 2018-04-01]{\tl_build_end:N, \tl_build_gend:N}
+%   \begin{syntax}
+%     \cs{tl_build_end:N} \meta{tl~var}
+%   \end{syntax}
+%   Gets the contents of \meta{tl~var} and stores that into the
+%   \meta{tl~var} using \cs{tl_set:Nn}.  The \meta{tl~var} must have
+%   been set up with \cs{tl_build_begin:N} or \cs{tl_build_gbegin:N}.
+%   The |end| and |gend| functions must be used for local and global
+%   \meta{tl~var} respectively.  These functions completely remove the
+%   setup code that enabled \meta{tl~var} to be used for other
+%   \cs[no-index]{tl_build_\ldots{}} functions.
+% \end{function}
+%
 % \section{Additions to \pkg{l3token}}
 %
 % \begin{variable}[added = 2017-08-07]{\c_catcode_active_space_tl}
@@ -4070,6 +4127,206 @@
 %    \end{macrocode}
 % \end{variable}
 %
+% \subsubsection{Building a token list}
+%
+% Between \cs{tl_build_begin:N} \meta{tl~var} and \cs{tl_build_end:N}
+% \meta{tl~var}, the \meta{tl~var} has the structure
+% \begin{quote}
+%   \cs{exp_end:} \ldots{} \cs{exp_end:} \cs{@@_build_last:NNn}
+%   \meta{assignment} \meta{next~tl} \Arg{left} \meta{right}
+% \end{quote}
+% where \meta{right} is not braced.  The \enquote{data} it represents is
+% \meta{left} followed by the \enquote{data} of \meta{next~tl} followed
+% by \meta{right}.  The \meta{next~tl} is a token list variable whose
+% name is that of \meta{tl~var} followed by~|'|.  There are between $0$
+% and $4$ \cs{exp_end:} to keep track of when \meta{left} and
+% \meta{right} should be put into the \meta{next~tl}.  The
+% \meta{assignment} is \cs{cs_set_nopar:Npx} if the variable is local,
+% and \cs{cs_gset_nopar:Npx} if it is global.
+%
+% \begin{macro}{\tl_build_begin:N, \tl_build_gbegin:N}
+% \begin{macro}{\@@_build_begin:NN, \@@_build_begin:NNN}
+%   First construct the \meta{next~tl}: using a prime here conflicts
+%   with the usual \pkg{expl3} convention but we need a name that can be
+%   derived from |#1| without any external data such as a counter.
+%   Empty that \meta{next~tl} and setup the structure.  The local and
+%   global versions only differ by a single function
+%   \cs[no-index]{cs_(g)set_nopar:Npx} used for all assignments: this is
+%   important because only that function is stored in the \meta{tl~var}
+%   and \meta{next~tl} for subsequent assignments.  In principle
+%   \cs{@@_build_begin:NNN} could use \cs[no-index]{tl_(g)clear_new:N}
+%   to empty |#1| and make sure it is defined, but logging the
+%   definition does not seem useful so we just do |#3| |#1| |{}| to
+%   clear it locally or globally as appropriate.
+%    \begin{macrocode}
+\cs_new_protected:Npn \tl_build_begin:N
+  { \@@_build_begin:NN \cs_set_nopar:Npx }
+\cs_new_protected:Npn \tl_build_gbegin:N
+  { \@@_build_begin:NN \cs_gset_nopar:Npx }
+\cs_new_protected:Npn \@@_build_begin:NN #1#2
+  { \exp_args:Nc \@@_build_begin:NNN { \cs_to_str:N #2 ' } #2 #1 }
+\cs_new_protected:Npn \@@_build_begin:NNN #1#2#3
+  {
+    #3 #1 { }
+    #3 #2
+      {
+        \exp_not:n { \exp_end: \exp_end: \exp_end: \exp_end: }
+        \exp_not:n { \@@_build_last:NNn #3 #1 { } }
+      }
+  }
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}
+%   {
+%     \tl_build_put_right:Nn, \tl_build_put_right:Nx,
+%     \tl_build_gput_right:Nn, \tl_build_gput_right:Nx,
+%     \@@_build_last:NNn, \@@_build_put:nn, \@@_build_put:nw
+%   }
+%   Similar to \cs{tl_put_right:Nn}, but apply \cs{exp:w} to |#1|.  Most
+%   of the time this just removes one \cs{exp_end:}.  When there are
+%   none left, \cs{@@_build_last:NNn} is expanded instead.  It resets
+%   the definition of the \meta{tl~var} by ending the \cs{exp_not:n} and
+%   the definition early.  Then it makes sure the \meta{next~tl} (its
+%   argument |#1|) is set-up and starts a new definition.  Then
+%   \cs{@@_build_put:nn} and \cs{@@_build_put:nw} place the \meta{left}
+%   part of the original \meta{tl~var} as appropriate for the definition
+%   of the \meta{next~tl} (the \meta{right} part is left in the right
+%   place without ever becoming a macro argument).  We use
+%   \cs{exp_after:wN} rather than some \cs{exp_args:No} to avoid reading
+%   arguments that are likely very long token lists.  We use
+%   \cs[no-index]{cs_(g)set_nopar:Npx} rather than
+%   \cs[no-index]{tl_(g)set:Nx} partly for the same reason and partly
+%   because the assignments are interrupted by brace tricks, which
+%   implies that the assignment does not simply set the token list to an
+%   |x|-expansion of the second argument.
+%    \begin{macrocode}
+\cs_new_protected:Npn \tl_build_put_right:Nn #1#2
+  {
+    \cs_set_nopar:Npx #1
+      { \exp_after:wN \exp_not:n \exp_after:wN { \exp:w #1 #2 } }
+  }
+\cs_new_protected:Npn \tl_build_put_right:Nx #1#2
+  {
+    \cs_set_nopar:Npx #1
+      { \exp_after:wN \exp_not:n \exp_after:wN { \exp:w #1 } #2 }
+  }
+\cs_new_protected:Npn \tl_build_gput_right:Nn #1#2
+  {
+    \cs_gset_nopar:Npx #1
+      { \exp_after:wN \exp_not:n \exp_after:wN { \exp:w #1 #2 } }
+  }
+\cs_new_protected:Npn \tl_build_gput_right:Nx #1#2
+  {
+    \cs_gset_nopar:Npx #1
+      { \exp_after:wN \exp_not:n \exp_after:wN { \exp:w #1 } #2 }
+  }
+\cs_new_protected:Npn \@@_build_last:NNn #1#2
+  {
+    \if_false: { { \fi:
+          \exp_end: \exp_end: \exp_end: \exp_end: \exp_end:
+          \@@_build_last:NNn #1 #2 { }
+        }
+      }
+    \if_meaning:w \c_empty_tl #2
+      \@@_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 \@@_build_put:nn \exp_after:wN {#2}
+  }
+\cs_new_protected:Npn \@@_build_put:nn #1#2 { \@@_build_put:nw {#2} #1 }
+\cs_new_protected:Npn \@@_build_put:nw #1#2 \@@_build_last:NNn #3#4#5
+  { #2 \@@_build_last:NNn #3 #4 { #1 #5 } }
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}
+%   {
+%     \tl_build_put_left:Nn, \tl_build_put_left:Nx,
+%     \tl_build_gput_left:Nn, \tl_build_gput_left:Nx, \@@_build_put_left:NNn
+%   }
+%   See \cs{tl_build_put_right:Nn} for all the machinery.  We could
+%   easily provide \cs[no-index]{tl_build_put_left_right:Nnn}, by just
+%   add the \meta{right} material after the \Arg{left} in the
+%   |x|-expanding assignment.
+%    \begin{macrocode}
+\cs_new_protected:Npn \tl_build_put_left:Nn
+  { \@@_build_put_left:NNn \cs_set_nopar:Npx }
+\cs_generate_variant:Nn \tl_build_put_left:Nn { Nx }
+\cs_new_protected:Npn \tl_build_gput_left:Nn
+  { \@@_build_put_left:NNn \cs_gset_nopar:Npx }
+\cs_generate_variant:Nn \tl_build_gput_left:Nn { Nx }
+\cs_new_protected:Npn \@@_build_put_left:NNn #1#2#3
+  {
+    #1 #2
+      {
+        \exp_after:wN \exp_not:n \exp_after:wN
+          { \exp:w \exp_after:wN \@@_build_put:nn \exp_after:wN {#2} {#3} }
+      }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\tl_build_get:NN}
+% \begin{macro}{\@@_build_get:NNN, \@@_build_get:w, \@@_build_get_end:w}
+%   The idea is to expand the \meta{tl~var} then the \meta{next~tl} and
+%   so on, all within an |x|-expanding assignment, and wrap as
+%   appropriate in \cs{exp_not:n}.  The various \meta{left} parts are
+%   left in the assignment as we go, which enables us to expand the
+%   \meta{next~tl} at the right place.  The various \meta{right} parts
+%   are eventually picked up in one last \cs{exp_not:n}, with a brace
+%   trick to wrap all the \meta{right} parts together.
+%    \begin{macrocode}
+\cs_new_protected:Npn \tl_build_get:NN
+  { \@@_build_get:NNN \tl_set:Nx }
+\cs_new_protected:Npn \@@_build_get:NNN #1#2#3
+  { #1 #3 { \if_false: { \fi: \exp_after:wN \@@_build_get:w #2 } } }
+\cs_new:Npn \@@_build_get:w #1 \@@_build_last:NNn #2#3#4
+  {
+    \exp_not:n {#4}
+    \if_meaning:w \c_empty_tl #3
+      \exp_after:wN \@@_build_get_end:w
+    \fi:
+    \exp_after:wN \@@_build_get:w #3
+  }
+\cs_new:Npn \@@_build_get_end:w #1#2#3
+  { \exp_after:wN \exp_not:n \exp_after:wN { \if_false: } \fi: }
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\tl_build_end:N, \tl_build_gend:N, \@@_build_end_loop:NN}
+%   Get the data then clear the \meta{next~tl} recursively until finding
+%   an empty one.  It is perhaps wasteful to repeatedly use
+%   \cs{cs_to_sr:N}.
+%    \begin{macrocode}
+\cs_new_protected:Npn \tl_build_end:N #1
+  {
+    \tl_build_get:NN #1 #1
+    \exp_args:Nc \@@_build_end_loop:NN { \cs_to_str:N #1 ' } \tl_clear:N
+  }
+\cs_new_protected:Npn \tl_build_gend:N #1
+  {
+    \@@_build_get:NNN \tl_gset:Nx #1 #1
+    \exp_args:Nc \@@_build_end_loop:NN { \cs_to_str:N #1 ' } \tl_gclear:N
+  }
+\cs_new_protected:Npn \@@_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 \@@_build_end_loop:NN { \cs_to_str:N #1 ' } #2
+  }
+%    \end{macrocode}
+% \end{macro}
+%
 % \subsubsection{Other additions to \pkg{l3tl}}
 %
 % \begin{macro}{\tl_rand_item:n, \tl_rand_item:N, \tl_rand_item:c}
diff --git a/l3kernel/testfiles/m3expl001.luatex.tlg b/l3kernel/testfiles/m3expl001.luatex.tlg
index facf478..d9c75b8 100644
--- a/l3kernel/testfiles/m3expl001.luatex.tlg
+++ b/l3kernel/testfiles/m3expl001.luatex.tlg
@@ -4802,6 +4802,7 @@ Defining \l__regex_internal_c_int on line ...
 Defining \l__regex_internal_bool on line ...
 Defining \l__regex_internal_seq on line ...
 Defining \g__regex_internal_tl on line ...
+Defining \l__regex_build_tl on line ...
 Defining \c__regex_no_match_regex on line ...
 Defining \g__regex_charcode_intarray on line ...
 Defining \g__regex_catcode_intarray on line ...
@@ -5969,6 +5970,29 @@ Defining \__tl_change_case_mixed_nl:NNw on line ...
 Defining \l_tl_case_change_math_tl on line ...
 Defining \l_tl_case_change_exclude_tl on line ...
 Defining \l_tl_mixed_case_ignore_tl on line ...
+Defining \tl_build_begin:N on line ...
+Defining \tl_build_gbegin:N on line ...
+Defining \__tl_build_begin:NN on line ...
+Defining \__tl_build_begin:NNN on line ...
+Defining \tl_build_put_right:Nn on line ...
+Defining \tl_build_put_right:Nx on line ...
+Defining \tl_build_gput_right:Nn on line ...
+Defining \tl_build_gput_right:Nx on line ...
+Defining \__tl_build_last:NNn on line ...
+Defining \__tl_build_put:nn on line ...
+Defining \__tl_build_put:nw on line ...
+Defining \tl_build_put_left:Nn on line ...
+Defining \tl_build_put_left:Nx on line ...
+Defining \tl_build_gput_left:Nn on line ...
+Defining \tl_build_gput_left:Nx on line ...
+Defining \__tl_build_put_left:NNn on line ...
+Defining \tl_build_get:NN on line ...
+Defining \__tl_build_get:NNN on line ...
+Defining \__tl_build_get:w on line ...
+Defining \__tl_build_get_end:w on line ...
+Defining \tl_build_end:N on line ...
+Defining \tl_build_gend:N on line ...
+Defining \__tl_build_end_loop:NN on line ...
 Defining \tl_rand_item:n on line ...
 Defining \tl_rand_item:N on line ...
 Defining \tl_rand_item:c on line ...
diff --git a/l3kernel/testfiles/m3expl001.ptex.tlg b/l3kernel/testfiles/m3expl001.ptex.tlg
index bc219db..f590a79 100644
--- a/l3kernel/testfiles/m3expl001.ptex.tlg
+++ b/l3kernel/testfiles/m3expl001.ptex.tlg
@@ -4739,6 +4739,7 @@ Defining \l__regex_internal_c_int on line ...
 Defining \l__regex_internal_bool on line ...
 Defining \l__regex_internal_seq on line ...
 Defining \g__regex_internal_tl on line ...
+Defining \l__regex_build_tl on line ...
 Defining \c__regex_no_match_regex on line ...
 Defining \g__regex_charcode_intarray on line ...
 Defining \g__regex_catcode_intarray on line ...
@@ -5909,6 +5910,29 @@ Defining \__tl_change_case_mixed_nl:NNw on line ...
 Defining \l_tl_case_change_math_tl on line ...
 Defining \l_tl_case_change_exclude_tl on line ...
 Defining \l_tl_mixed_case_ignore_tl on line ...
+Defining \tl_build_begin:N on line ...
+Defining \tl_build_gbegin:N on line ...
+Defining \__tl_build_begin:NN on line ...
+Defining \__tl_build_begin:NNN on line ...
+Defining \tl_build_put_right:Nn on line ...
+Defining \tl_build_put_right:Nx on line ...
+Defining \tl_build_gput_right:Nn on line ...
+Defining \tl_build_gput_right:Nx on line ...
+Defining \__tl_build_last:NNn on line ...
+Defining \__tl_build_put:nn on line ...
+Defining \__tl_build_put:nw on line ...
+Defining \tl_build_put_left:Nn on line ...
+Defining \tl_build_put_left:Nx on line ...
+Defining \tl_build_gput_left:Nn on line ...
+Defining \tl_build_gput_left:Nx on line ...
+Defining \__tl_build_put_left:NNn on line ...
+Defining \tl_build_get:NN on line ...
+Defining \__tl_build_get:NNN on line ...
+Defining \__tl_build_get:w on line ...
+Defining \__tl_build_get_end:w on line ...
+Defining \tl_build_end:N on line ...
+Defining \tl_build_gend:N on line ...
+Defining \__tl_build_end_loop:NN on line ...
 Defining \tl_rand_item:n on line ...
 Defining \tl_rand_item:N on line ...
 Defining \tl_rand_item:c on line ...
diff --git a/l3kernel/testfiles/m3expl001.tlg b/l3kernel/testfiles/m3expl001.tlg
index 08d1c05..22d938b 100644
--- a/l3kernel/testfiles/m3expl001.tlg
+++ b/l3kernel/testfiles/m3expl001.tlg
@@ -4739,6 +4739,7 @@ Defining \l__regex_internal_c_int on line ...
 Defining \l__regex_internal_bool on line ...
 Defining \l__regex_internal_seq on line ...
 Defining \g__regex_internal_tl on line ...
+Defining \l__regex_build_tl on line ...
 Defining \c__regex_no_match_regex on line ...
 Defining \g__regex_charcode_intarray on line ...
 Defining \g__regex_catcode_intarray on line ...
@@ -6110,6 +6111,29 @@ Defining \__tl_change_case_mixed_nl:NNw on line ...
 Defining \l_tl_case_change_math_tl on line ...
 Defining \l_tl_case_change_exclude_tl on line ...
 Defining \l_tl_mixed_case_ignore_tl on line ...
+Defining \tl_build_begin:N on line ...
+Defining \tl_build_gbegin:N on line ...
+Defining \__tl_build_begin:NN on line ...
+Defining \__tl_build_begin:NNN on line ...
+Defining \tl_build_put_right:Nn on line ...
+Defining \tl_build_put_right:Nx on line ...
+Defining \tl_build_gput_right:Nn on line ...
+Defining \tl_build_gput_right:Nx on line ...
+Defining \__tl_build_last:NNn on line ...
+Defining \__tl_build_put:nn on line ...
+Defining \__tl_build_put:nw on line ...
+Defining \tl_build_put_left:Nn on line ...
+Defining \tl_build_put_left:Nx on line ...
+Defining \tl_build_gput_left:Nn on line ...
+Defining \tl_build_gput_left:Nx on line ...
+Defining \__tl_build_put_left:NNn on line ...
+Defining \tl_build_get:NN on line ...
+Defining \__tl_build_get:NNN on line ...
+Defining \__tl_build_get:w on line ...
+Defining \__tl_build_get_end:w on line ...
+Defining \tl_build_end:N on line ...
+Defining \tl_build_gend:N on line ...
+Defining \__tl_build_end_loop:NN on line ...
 Defining \tl_rand_item:n on line ...
 Defining \tl_rand_item:N on line ...
 Defining \tl_rand_item:c on line ...
diff --git a/l3kernel/testfiles/m3expl001.uptex.tlg b/l3kernel/testfiles/m3expl001.uptex.tlg
index 0d8d5e7..7cb2b47 100644
--- a/l3kernel/testfiles/m3expl001.uptex.tlg
+++ b/l3kernel/testfiles/m3expl001.uptex.tlg
@@ -4739,6 +4739,7 @@ Defining \l__regex_internal_c_int on line ...
 Defining \l__regex_internal_bool on line ...
 Defining \l__regex_internal_seq on line ...
 Defining \g__regex_internal_tl on line ...
+Defining \l__regex_build_tl on line ...
 Defining \c__regex_no_match_regex on line ...
 Defining \g__regex_charcode_intarray on line ...
 Defining \g__regex_catcode_intarray on line ...
@@ -6108,6 +6109,29 @@ Defining \__tl_change_case_mixed_nl:NNw on line ...
 Defining \l_tl_case_change_math_tl on line ...
 Defining \l_tl_case_change_exclude_tl on line ...
 Defining \l_tl_mixed_case_ignore_tl on line ...
+Defining \tl_build_begin:N on line ...
+Defining \tl_build_gbegin:N on line ...
+Defining \__tl_build_begin:NN on line ...
+Defining \__tl_build_begin:NNN on line ...
+Defining \tl_build_put_right:Nn on line ...
+Defining \tl_build_put_right:Nx on line ...
+Defining \tl_build_gput_right:Nn on line ...
+Defining \tl_build_gput_right:Nx on line ...
+Defining \__tl_build_last:NNn on line ...
+Defining \__tl_build_put:nn on line ...
+Defining \__tl_build_put:nw on line ...
+Defining \tl_build_put_left:Nn on line ...
+Defining \tl_build_put_left:Nx on line ...
+Defining \tl_build_gput_left:Nn on line ...
+Defining \tl_build_gput_left:Nx on line ...
+Defining \__tl_build_put_left:NNn on line ...
+Defining \tl_build_get:NN on line ...
+Defining \__tl_build_get:NNN on line ...
+Defining \__tl_build_get:w on line ...
+Defining \__tl_build_get_end:w on line ...
+Defining \tl_build_end:N on line ...
+Defining \tl_build_gend:N on line ...
+Defining \__tl_build_end_loop:NN on line ...
 Defining \tl_rand_item:n on line ...
 Defining \tl_rand_item:N on line ...
 Defining \tl_rand_item:c on line ...
diff --git a/l3kernel/testfiles/m3expl001.xetex.tlg b/l3kernel/testfiles/m3expl001.xetex.tlg
index 830231a..6cc7cae 100644
--- a/l3kernel/testfiles/m3expl001.xetex.tlg
+++ b/l3kernel/testfiles/m3expl001.xetex.tlg
@@ -4779,6 +4779,7 @@ Defining \l__regex_internal_c_int on line ...
 Defining \l__regex_internal_bool on line ...
 Defining \l__regex_internal_seq on line ...
 Defining \g__regex_internal_tl on line ...
+Defining \l__regex_build_tl on line ...
 Defining \c__regex_no_match_regex on line ...
 Defining \g__regex_charcode_intarray on line ...
 Defining \g__regex_catcode_intarray on line ...
@@ -5942,6 +5943,29 @@ Defining \__tl_change_case_mixed_nl:NNw on line ...
 Defining \l_tl_case_change_math_tl on line ...
 Defining \l_tl_case_change_exclude_tl on line ...
 Defining \l_tl_mixed_case_ignore_tl on line ...
+Defining \tl_build_begin:N on line ...
+Defining \tl_build_gbegin:N on line ...
+Defining \__tl_build_begin:NN on line ...
+Defining \__tl_build_begin:NNN on line ...
+Defining \tl_build_put_right:Nn on line ...
+Defining \tl_build_put_right:Nx on line ...
+Defining \tl_build_gput_right:Nn on line ...
+Defining \tl_build_gput_right:Nx on line ...
+Defining \__tl_build_last:NNn on line ...
+Defining \__tl_build_put:nn on line ...
+Defining \__tl_build_put:nw on line ...
+Defining \tl_build_put_left:Nn on line ...
+Defining \tl_build_put_left:Nx on line ...
+Defining \tl_build_gput_left:Nn on line ...
+Defining \tl_build_gput_left:Nx on line ...
+Defining \__tl_build_put_left:NNn on line ...
+Defining \tl_build_get:NN on line ...
+Defining \__tl_build_get:NNN on line ...
+Defining \__tl_build_get:w on line ...
+Defining \__tl_build_get_end:w on line ...
+Defining \tl_build_end:N on line ...
+Defining \tl_build_gend:N on line ...
+Defining \__tl_build_end_loop:NN on line ...
 Defining \tl_rand_item:n on line ...
 Defining \tl_rand_item:N on line ...
 Defining \tl_rand_item:c on line ...
diff --git a/l3kernel/testfiles/m3expl003.luatex.tlg b/l3kernel/testfiles/m3expl003.luatex.tlg
index facf478..d9c75b8 100644
--- a/l3kernel/testfiles/m3expl003.luatex.tlg
+++ b/l3kernel/testfiles/m3expl003.luatex.tlg
@@ -4802,6 +4802,7 @@ Defining \l__regex_internal_c_int on line ...
 Defining \l__regex_internal_bool on line ...
 Defining \l__regex_internal_seq on line ...
 Defining \g__regex_internal_tl on line ...
+Defining \l__regex_build_tl on line ...
 Defining \c__regex_no_match_regex on line ...
 Defining \g__regex_charcode_intarray on line ...
 Defining \g__regex_catcode_intarray on line ...
@@ -5969,6 +5970,29 @@ Defining \__tl_change_case_mixed_nl:NNw on line ...
 Defining \l_tl_case_change_math_tl on line ...
 Defining \l_tl_case_change_exclude_tl on line ...
 Defining \l_tl_mixed_case_ignore_tl on line ...
+Defining \tl_build_begin:N on line ...
+Defining \tl_build_gbegin:N on line ...
+Defining \__tl_build_begin:NN on line ...
+Defining \__tl_build_begin:NNN on line ...
+Defining \tl_build_put_right:Nn on line ...
+Defining \tl_build_put_right:Nx on line ...
+Defining \tl_build_gput_right:Nn on line ...
+Defining \tl_build_gput_right:Nx on line ...
+Defining \__tl_build_last:NNn on line ...
+Defining \__tl_build_put:nn on line ...
+Defining \__tl_build_put:nw on line ...
+Defining \tl_build_put_left:Nn on line ...
+Defining \tl_build_put_left:Nx on line ...
+Defining \tl_build_gput_left:Nn on line ...
+Defining \tl_build_gput_left:Nx on line ...
+Defining \__tl_build_put_left:NNn on line ...
+Defining \tl_build_get:NN on line ...
+Defining \__tl_build_get:NNN on line ...
+Defining \__tl_build_get:w on line ...
+Defining \__tl_build_get_end:w on line ...
+Defining \tl_build_end:N on line ...
+Defining \tl_build_gend:N on line ...
+Defining \__tl_build_end_loop:NN on line ...
 Defining \tl_rand_item:n on line ...
 Defining \tl_rand_item:N on line ...
 Defining \tl_rand_item:c on line ...
diff --git a/l3kernel/testfiles/m3expl003.ptex.tlg b/l3kernel/testfiles/m3expl003.ptex.tlg
index bc219db..f590a79 100644
--- a/l3kernel/testfiles/m3expl003.ptex.tlg
+++ b/l3kernel/testfiles/m3expl003.ptex.tlg
@@ -4739,6 +4739,7 @@ Defining \l__regex_internal_c_int on line ...
 Defining \l__regex_internal_bool on line ...
 Defining \l__regex_internal_seq on line ...
 Defining \g__regex_internal_tl on line ...
+Defining \l__regex_build_tl on line ...
 Defining \c__regex_no_match_regex on line ...
 Defining \g__regex_charcode_intarray on line ...
 Defining \g__regex_catcode_intarray on line ...
@@ -5909,6 +5910,29 @@ Defining \__tl_change_case_mixed_nl:NNw on line ...
 Defining \l_tl_case_change_math_tl on line ...
 Defining \l_tl_case_change_exclude_tl on line ...
 Defining \l_tl_mixed_case_ignore_tl on line ...
+Defining \tl_build_begin:N on line ...
+Defining \tl_build_gbegin:N on line ...
+Defining \__tl_build_begin:NN on line ...
+Defining \__tl_build_begin:NNN on line ...
+Defining \tl_build_put_right:Nn on line ...
+Defining \tl_build_put_right:Nx on line ...
+Defining \tl_build_gput_right:Nn on line ...
+Defining \tl_build_gput_right:Nx on line ...
+Defining \__tl_build_last:NNn on line ...
+Defining \__tl_build_put:nn on line ...
+Defining \__tl_build_put:nw on line ...
+Defining \tl_build_put_left:Nn on line ...
+Defining \tl_build_put_left:Nx on line ...
+Defining \tl_build_gput_left:Nn on line ...
+Defining \tl_build_gput_left:Nx on line ...
+Defining \__tl_build_put_left:NNn on line ...
+Defining \tl_build_get:NN on line ...
+Defining \__tl_build_get:NNN on line ...
+Defining \__tl_build_get:w on line ...
+Defining \__tl_build_get_end:w on line ...
+Defining \tl_build_end:N on line ...
+Defining \tl_build_gend:N on line ...
+Defining \__tl_build_end_loop:NN on line ...
 Defining \tl_rand_item:n on line ...
 Defining \tl_rand_item:N on line ...
 Defining \tl_rand_item:c on line ...
diff --git a/l3kernel/testfiles/m3expl003.tlg b/l3kernel/testfiles/m3expl003.tlg
index 08d1c05..22d938b 100644
--- a/l3kernel/testfiles/m3expl003.tlg
+++ b/l3kernel/testfiles/m3expl003.tlg
@@ -4739,6 +4739,7 @@ Defining \l__regex_internal_c_int on line ...
 Defining \l__regex_internal_bool on line ...
 Defining \l__regex_internal_seq on line ...
 Defining \g__regex_internal_tl on line ...
+Defining \l__regex_build_tl on line ...
 Defining \c__regex_no_match_regex on line ...
 Defining \g__regex_charcode_intarray on line ...
 Defining \g__regex_catcode_intarray on line ...
@@ -6110,6 +6111,29 @@ Defining \__tl_change_case_mixed_nl:NNw on line ...
 Defining \l_tl_case_change_math_tl on line ...
 Defining \l_tl_case_change_exclude_tl on line ...
 Defining \l_tl_mixed_case_ignore_tl on line ...
+Defining \tl_build_begin:N on line ...
+Defining \tl_build_gbegin:N on line ...
+Defining \__tl_build_begin:NN on line ...
+Defining \__tl_build_begin:NNN on line ...
+Defining \tl_build_put_right:Nn on line ...
+Defining \tl_build_put_right:Nx on line ...
+Defining \tl_build_gput_right:Nn on line ...
+Defining \tl_build_gput_right:Nx on line ...
+Defining \__tl_build_last:NNn on line ...
+Defining \__tl_build_put:nn on line ...
+Defining \__tl_build_put:nw on line ...
+Defining \tl_build_put_left:Nn on line ...
+Defining \tl_build_put_left:Nx on line ...
+Defining \tl_build_gput_left:Nn on line ...
+Defining \tl_build_gput_left:Nx on line ...
+Defining \__tl_build_put_left:NNn on line ...
+Defining \tl_build_get:NN on line ...
+Defining \__tl_build_get:NNN on line ...
+Defining \__tl_build_get:w on line ...
+Defining \__tl_build_get_end:w on line ...
+Defining \tl_build_end:N on line ...
+Defining \tl_build_gend:N on line ...
+Defining \__tl_build_end_loop:NN on line ...
 Defining \tl_rand_item:n on line ...
 Defining \tl_rand_item:N on line ...
 Defining \tl_rand_item:c on line ...
diff --git a/l3kernel/testfiles/m3expl003.uptex.tlg b/l3kernel/testfiles/m3expl003.uptex.tlg
index 0d8d5e7..7cb2b47 100644
--- a/l3kernel/testfiles/m3expl003.uptex.tlg
+++ b/l3kernel/testfiles/m3expl003.uptex.tlg
@@ -4739,6 +4739,7 @@ Defining \l__regex_internal_c_int on line ...
 Defining \l__regex_internal_bool on line ...
 Defining \l__regex_internal_seq on line ...
 Defining \g__regex_internal_tl on line ...
+Defining \l__regex_build_tl on line ...
 Defining \c__regex_no_match_regex on line ...
 Defining \g__regex_charcode_intarray on line ...
 Defining \g__regex_catcode_intarray on line ...
@@ -6108,6 +6109,29 @@ Defining \__tl_change_case_mixed_nl:NNw on line ...
 Defining \l_tl_case_change_math_tl on line ...
 Defining \l_tl_case_change_exclude_tl on line ...
 Defining \l_tl_mixed_case_ignore_tl on line ...
+Defining \tl_build_begin:N on line ...
+Defining \tl_build_gbegin:N on line ...
+Defining \__tl_build_begin:NN on line ...
+Defining \__tl_build_begin:NNN on line ...
+Defining \tl_build_put_right:Nn on line ...
+Defining \tl_build_put_right:Nx on line ...
+Defining \tl_build_gput_right:Nn on line ...
+Defining \tl_build_gput_right:Nx on line ...
+Defining \__tl_build_last:NNn on line ...
+Defining \__tl_build_put:nn on line ...
+Defining \__tl_build_put:nw on line ...
+Defining \tl_build_put_left:Nn on line ...
+Defining \tl_build_put_left:Nx on line ...
+Defining \tl_build_gput_left:Nn on line ...
+Defining \tl_build_gput_left:Nx on line ...
+Defining \__tl_build_put_left:NNn on line ...
+Defining \tl_build_get:NN on line ...
+Defining \__tl_build_get:NNN on line ...
+Defining \__tl_build_get:w on line ...
+Defining \__tl_build_get_end:w on line ...
+Defining \tl_build_end:N on line ...
+Defining \tl_build_gend:N on line ...
+Defining \__tl_build_end_loop:NN on line ...
 Defining \tl_rand_item:n on line ...
 Defining \tl_rand_item:N on line ...
 Defining \tl_rand_item:c on line ...
diff --git a/l3kernel/testfiles/m3expl003.xetex.tlg b/l3kernel/testfiles/m3expl003.xetex.tlg
index 830231a..6cc7cae 100644
--- a/l3kernel/testfiles/m3expl003.xetex.tlg
+++ b/l3kernel/testfiles/m3expl003.xetex.tlg
@@ -4779,6 +4779,7 @@ Defining \l__regex_internal_c_int on line ...
 Defining \l__regex_internal_bool on line ...
 Defining \l__regex_internal_seq on line ...
 Defining \g__regex_internal_tl on line ...
+Defining \l__regex_build_tl on line ...
 Defining \c__regex_no_match_regex on line ...
 Defining \g__regex_charcode_intarray on line ...
 Defining \g__regex_catcode_intarray on line ...
@@ -5942,6 +5943,29 @@ Defining \__tl_change_case_mixed_nl:NNw on line ...
 Defining \l_tl_case_change_math_tl on line ...
 Defining \l_tl_case_change_exclude_tl on line ...
 Defining \l_tl_mixed_case_ignore_tl on line ...
+Defining \tl_build_begin:N on line ...
+Defining \tl_build_gbegin:N on line ...
+Defining \__tl_build_begin:NN on line ...
+Defining \__tl_build_begin:NNN on line ...
+Defining \tl_build_put_right:Nn on line ...
+Defining \tl_build_put_right:Nx on line ...
+Defining \tl_build_gput_right:Nn on line ...
+Defining \tl_build_gput_right:Nx on line ...
+Defining \__tl_build_last:NNn on line ...
+Defining \__tl_build_put:nn on line ...
+Defining \__tl_build_put:nw on line ...
+Defining \tl_build_put_left:Nn on line ...
+Defining \tl_build_put_left:Nx on line ...
+Defining \tl_build_gput_left:Nn on line ...
+Defining \tl_build_gput_left:Nx on line ...
+Defining \__tl_build_put_left:NNn on line ...
+Defining \tl_build_get:NN on line ...
+Defining \__tl_build_get:NNN on line ...
+Defining \__tl_build_get:w on line ...
+Defining \__tl_build_get_end:w on line ...
+Defining \tl_build_end:N on line ...
+Defining \tl_build_gend:N on line ...
+Defining \__tl_build_end_loop:NN on line ...
 Defining \tl_rand_item:n on line ...
 Defining \tl_rand_item:N on line ...
 Defining \tl_rand_item:c on line ...





More information about the latex3-commits mailing list