[latex3-commits] [l3svn] r7374 - Make \tl_range preserve spaces/braces, add version that does not (see #339)

noreply at latex-project.org noreply at latex-project.org
Sat Jul 15 19:45:31 CEST 2017


Author: bruno
Date: 2017-07-15 19:45:31 +0200 (Sat, 15 Jul 2017)
New Revision: 7374

Modified:
   trunk/l3kernel/l3candidates.dtx
   trunk/l3kernel/testfiles/m3expl001.luatex.tlg
   trunk/l3kernel/testfiles/m3expl001.ptex.tlg
   trunk/l3kernel/testfiles/m3expl001.tlg
   trunk/l3kernel/testfiles/m3expl001.uptex.tlg
   trunk/l3kernel/testfiles/m3expl001.xetex.tlg
   trunk/l3kernel/testfiles/m3expl003.luatex.tlg
   trunk/l3kernel/testfiles/m3expl003.ptex.tlg
   trunk/l3kernel/testfiles/m3expl003.tlg
   trunk/l3kernel/testfiles/m3expl003.uptex.tlg
   trunk/l3kernel/testfiles/m3expl003.xetex.tlg
   trunk/l3kernel/testfiles/m3tl014.lvt
   trunk/l3kernel/testfiles/m3tl014.tlg
Log:
Make \tl_range preserve spaces/braces, add version that does not (see #339)

The names may not be optimal:
- \tl_range_braced:nnn returns items within braces, e.g. "{a}{bc}{d}"
- \tl_range_unbraced:nnn returns items without braces, e.g. "abcd"
- \tl_range:nnn preserves spaces and braces between items, e.g. "{a} {bc}d"
Possibly not great, improvable upon request: \tl_range:nnn never includes
leading nor trailing spaces in the output, so there no way of getting all
tokens until the 10th item including leading spaces.


Modified: trunk/l3kernel/l3candidates.dtx
===================================================================
--- trunk/l3kernel/l3candidates.dtx	2017-07-15 15:41:24 UTC (rev 7373)
+++ trunk/l3kernel/l3candidates.dtx	2017-07-15 17:45:31 UTC (rev 7374)
@@ -855,33 +855,35 @@
 %   \end{texnote}
 % \end{function}
 %
-% \begin{function}[EXP, added = 2017-02-17]
-%   {\tl_range:Nnn, \tl_range:cnn, \tl_range:nnn}
+% \begin{function}[EXP, added = 2017-02-17, updated = 2017-07-15]{\tl_range:nnn}
 %   \begin{syntax}
 %     \cs{tl_range:Nnn} \meta{tl~var} \Arg{start index} \Arg{end index}
 %     \cs{tl_range:nnn} \Arg{token list} \Arg{start index} \Arg{end index}
 %   \end{syntax}
 %   Leaves in the input stream the items from the \meta{start index} to the
-%   \meta{end index} inclusive.  Positive \meta{indices} are counted
+%   \meta{end index} inclusive.  Spaces and braces are preserved between
+%   the items returned (but never at either end of the list).  Positive
+%   \meta{indices} are counted
 %   from the start of the \meta{token list}, $1$~being the first item, and
 %   negative \meta{indices} are counted from the end of the token list,
 %   $-1$~being the last item.  If either of \meta{start index} or
 %   \meta{end index} is~$0$, the result is empty.  For instance,
 %   \begin{verbatim}
-%     \iow_term:x { \tl_range:nnn { abcdef } { 2 } { 5 } }
-%     \iow_term:x { \tl_range:nnn { abcdef } { -4 } { -1 } }
-%     \iow_term:x { \tl_range:nnn { abcdef } { -2 } { -1 } }
-%     \iow_term:x { \tl_range:nnn { abcdef } { 0 } { -1 } }
+%     \iow_term:x { \tl_range:nnn { abcd~{e{}}f } { 2 } { 5 } }
+%     \iow_term:x { \tl_range:nnn { abcd~{e{}}f } { -4 } { -1 } }
+%     \iow_term:x { \tl_range:nnn { abcd~{e{}}f } { -2 } { -1 } }
+%     \iow_term:x { \tl_range:nnn { abcd~{e{}}f } { 0 } { -1 } }
 %   \end{verbatim}
-%   prints \texttt{{b}{c}{d}{e}}, \texttt{{c}{d}{e}{f}}, \texttt{{e}{f}}, and an empty
+%   prints \verb*|bcd {e{}}|, \verb*|cd {e{}}f|, \verb*|{e{}}f| and an empty
 %   line to the terminal. The \meta{start index} must always be smaller than
 %   or equal to the \meta{end index}: if this is not the case then no output
 %   is generated. Thus
 %   \begin{verbatim}
-%     \iow_term:x { \tl_range:nnn { abcdef } { 5 } { 2 } }
-%     \iow_term:x { \tl_range:nnn { abcdef } { -1 } { -4 } }
+%     \iow_term:x { \tl_range:nnn { abcd~{e{}}f } { 5 } { 2 } }
+%     \iow_term:x { \tl_range:nnn { abcd~{e{}}f } { -1 } { -4 } }
 %   \end{verbatim}
-%   both yield empty token lists.
+%   both yield empty token lists.  For improved performance, see
+%   \cs{tl_range_braced:nnn} and \cs{tl_range_unbraced:nnn}.
 %   \begin{texnote}
 %     The result is returned within the \tn{unexpanded}
 %     primitive (\cs{exp_not:n}), which means that the \meta{item}
@@ -890,6 +892,52 @@
 %   \end{texnote}
 % \end{function}
 %
+% \begin{function}[EXP, added = 2017-07-15]
+%   {
+%     \tl_range_braced:Nnn, \tl_range_braced:cnn, \tl_range_braced:nnn,
+%     \tl_range_unbraced:Nnn, \tl_range_unbraced:cnn, \tl_range_unbraced:nnn
+%   }
+%   \begin{syntax}
+%     \cs{tl_range_braced:Nnn} \meta{tl~var} \Arg{start index} \Arg{end index}
+%     \cs{tl_range_braced:nnn} \Arg{token list} \Arg{start index} \Arg{end index}
+%     \cs{tl_range_unbraced:Nnn} \meta{tl~var} \Arg{start index} \Arg{end index}
+%     \cs{tl_range_unbraced:nnn} \Arg{token list} \Arg{start index} \Arg{end index}
+%   \end{syntax}
+%   Leaves in the input stream the items from the \meta{start index} to
+%   the \meta{end index} inclusive, using the same indexing as
+%   \cs{tl_range:nnn}.  Spaces are ignored.  Regardless of whether items
+%   appear with or without braces in the \meta{token list}, the
+%   \cs{tl_range_braced:nnn} function wraps each item in braces, while
+%   \cs{tl_range_unbraced:nnn} does not (overall it removes an outer set
+%   of braces).  For instance,
+%   \begin{verbatim}
+%     \iow_term:x { \tl_range_braced:nnn { abcd~{e{}}f } { 2 } { 5 } }
+%     \iow_term:x { \tl_range_braced:nnn { abcd~{e{}}f } { -4 } { -1 } }
+%     \iow_term:x { \tl_range_braced:nnn { abcd~{e{}}f } { -2 } { -1 } }
+%     \iow_term:x { \tl_range_braced:nnn { abcd~{e{}}f } { 0 } { -1 } }
+%   \end{verbatim}
+%   prints \verb*|{b}{c}{d}{e{}}|, \verb*|{c}{d}{e{}}{f}|, \verb*|{e{}}{f}|, and an empty
+%   line to the terminal, while
+%   \begin{verbatim}
+%     \iow_term:x { \tl_range_unbraced:nnn { abcd~{e{}}f } { 2 } { 5 } }
+%     \iow_term:x { \tl_range_unbraced:nnn { abcd~{e{}}f } { -4 } { -1 } }
+%     \iow_term:x { \tl_range_unbraced:nnn { abcd~{e{}}f } { -2 } { -1 } }
+%     \iow_term:x { \tl_range_unbraced:nnn { abcd~{e{}}f } { 0 } { -1 } }
+%   \end{verbatim}
+%   prints \verb*|bcde{}|, \verb*|cde{}f|, \verb*|e{}f|, and an empty
+%   line to the terminal.  Because braces are removed, the result of
+%   \cs{tl_range_unbraced:nnn} may have a different number of items as
+%   for \cs{tl_range:nnn} or \cs{tl_range_braced:nnn}.  In cases where
+%   preserving spaces is important, consider the slower function
+%   \cs{tl_range:nnn}.
+%   \begin{texnote}
+%     The result is returned within the \tn{unexpanded}
+%     primitive (\cs{exp_not:n}), which means that the \meta{item}
+%     does not expand further when appearing in an \texttt{x}-type
+%     argument expansion.
+%   \end{texnote}
+% \end{function}
+%
 % \section{Additions to \pkg{l3tokens}}
 %
 % \begin{function}[TF, updated = 2012-12-20]{\peek_N_type:}
@@ -3830,37 +3878,68 @@
 %    \end{macrocode}
 % \end{macro}
 %
+% Some preliminary code is needed for the \cs{tl_range:nnn} family of functions.
+%
 % \begin{macro}{\tl_range:Nnn, \tl_range:cnn, \tl_range:nnn}
+% \begin{macro}{\tl_range_braced:Nnn, \tl_range_braced:cnn, \tl_range_braced:nnn}
+% \begin{macro}
+%   {\tl_range_unbraced:Nnn, \tl_range_unbraced:cnn, \tl_range_unbraced:nnn}
 % \begin{macro}[aux]
-%   {\@@_range:nnnw, \@@_range:nnw, \@@_range_normalize:nn, \@@_range_collect:w, \@@_range_skip:w}
+%   {
+%     \@@_range:Nnnn, \@@_range:nnnNn, \@@_range:nnNn, \@@_range_skip:w,
+%     \@@_range_braced:w, \@@_range_collect_braced:w,
+%     \@@_range_unbraced:w, \@@_range_collect_unbraced:w,
+%     \@@_range:w, \@@_range_skip_spaces:n, \@@_range_collect:nn,
+%     \@@_range_collect:ff, \@@_range_collect_space:nw,
+%     \@@_range_collect_N:nN, \@@_range_collect_group:nN,
+%   }
 %   To avoid checking for the end of the token list at every step, start
 %   by counting the number $l$ of items and \enquote{normalizing} the
 %   bounds, namely clamping them to the interval $[0,l]$ and dealing
-%   with negative indices.  More precisely, \cs{@@_range:nnw} receives
-%   the number of items to skip at the beginning of the token list, and
-%   the index of the last item to keep.  If nothing should be kept,
-%   leave |{}|: this stops the \texttt{f}-expansion of \cs{tl_head:f}
-%   and that function produces an empty result.  Otherwise, repeatedly
-%   call \cs{@@_range_skip:w} to delete |#1| items from the input stream
-%   (the extra brace group avoids an off-by-one mistake), then
-%   repeatedly call \cs{@@_range_collect:w} to store in its second
-%   argument the items to be kept.  Eventually, the result is a brace
-%   group followed by the rest of the token list, and \cs{tl_head:f}
-%   cleans up and gives the result in \cs{exp_not:n}.
+%   with negative indices.  More precisely, \cs{@@_range_items:nnNn}
+%   receives the number of items to skip at the beginning of the token
+%   list, the index of the last item to keep, a function among
+%   \cs{@@_range:w}, \cs{@@_range_braced:w}, \cs{@@_range_unbraced:w},
+%   and the token list itself.  If nothing should be kept, leave |{}|:
+%   this stops the \texttt{f}-expansion of \cs{tl_head:f} and that
+%   function produces an empty result.  Otherwise, repeatedly call
+%   \cs{@@_range_skip:w} to delete |#1| items from the input stream (the
+%   extra brace group avoids an off-by-one shift).  For the braced
+%   version \cs{@@_range_braced:w} sets up
+%   \cs{@@_range_collect_braced:w} which stores items one by one in an
+%   argument after the semicolon.  The unbraced version is almost
+%   identical.  The version preserving braces and spaces starts by
+%   deleting spaces before the argument to avoid collecting them, and
+%   sets up \cs{@@_range_collect:nn} with a first argument of the form
+%   |{| \Arg{collected} \meta{tokens} |}|, whose head is the collected
+%   tokens and whose tail is what remains of the original token list.
+%   This form makes it easier to move tokens to the \meta{collected}
+%   tokens.  Depending on the first token of the tail, either just move
+%   it (if it is a space) or also decrement the number of items left to
+%   find.  Eventually, the result is a brace group followed by the rest
+%   of the token list, and \cs{tl_head:f} cleans up and gives the result
+%   in \cs{exp_not:n}.
 %    \begin{macrocode}
 \cs_new:Npn \tl_range:Nnn { \exp_args:No \tl_range:nnn }
 \cs_generate_variant:Nn \tl_range:Nnn { c }
-\cs_new:Npn \tl_range:nnn #1#2#3
+\cs_new:Npn \tl_range:nnn { \@@_range:Nnnn \@@_range:w }
+\cs_new:Npn \tl_range_braced:Nnn { \exp_args:No \tl_range_braced:nnn }
+\cs_generate_variant:Nn \tl_range_braced:Nnn { c }
+\cs_new:Npn \tl_range_braced:nnn { \@@_range:Nnnn \@@_range_braced:w }
+\cs_new:Npn \tl_range_unbraced:Nnn { \exp_args:No \tl_range_unbraced:nnn }
+\cs_generate_variant:Nn \tl_range_unbraced:Nnn { c }
+\cs_new:Npn \tl_range_unbraced:nnn { \@@_range:Nnnn \@@_range_unbraced:w }
+\cs_new:Npn \@@_range:Nnnn #1#2#3#4
   {
     \tl_head:f
       {
-        \exp_args:Nf \@@_range:nnnw { \tl_count:n {#1} } {#2} {#3}
-        #1
+        \exp_args:Nf \@@_range:nnnNn
+          { \tl_count:n {#2} } {#3} {#4} #1 {#2}
       }
   }
-\cs_new:Npn \@@_range:nnnw #1#2#3
+\cs_new:Npn \@@_range:nnnNn #1#2#3
   {
-    \exp_args:Nff \@@_range:nnw
+    \exp_args:Nff \@@_range:nnNn
       {
         \exp_args:Nf \@@_range_normalize:nn
           { \int_eval:n { #2 - 1 } } {#1}
@@ -3870,15 +3949,14 @@
           { \int_eval:n {#3} } {#1}
       }
   }
-\cs_new:Npn \@@_range:nnw #1#2
+\cs_new:Npn \@@_range:nnNn #1#2#3#4
   {
     \if_int_compare:w #2 > #1 \exp_stop_f: \else:
       \exp_after:wN { \exp_after:wN }
     \fi:
-    \exp_after:wN \@@_range_collect:w
+    \exp_after:wN #3
     \__int_value:w \__int_eval:w #2 - #1 \exp_after:wN ;
-    \exp_after:wN { \exp_after:wN }
-    \exp:w \@@_range_skip:w #1 ; { }
+    \exp_after:wN { \exp:w \@@_range_skip:w #1 ; { } #4 }
   }
 \cs_new:Npn \@@_range_skip:w #1 ; #2
   {
@@ -3889,17 +3967,70 @@
       \exp_after:wN \exp_end:
     \fi:
   }
-\cs_new:Npn \@@_range_collect:w #1 ; #2#3
+\cs_new:Npn \@@_range_braced:w #1 ; #2
+  { \@@_range_collect_braced:w #1 ; { } #2 }
+\cs_new:Npn \@@_range_unbraced:w #1 ; #2
+  { \@@_range_collect_unbraced:w #1 ; { } #2 }
+\cs_new:Npn \@@_range_collect_braced:w #1 ; #2#3
   {
     \if_int_compare:w #1 > 1 \exp_stop_f:
-      \exp_after:wN \@@_range_collect:w
+      \exp_after:wN \@@_range_collect_braced:w
       \__int_value:w \__int_eval:w #1 - 1 \exp_after:wN ;
     \fi:
     { #2 {#3} }
   }
+\cs_new:Npn \@@_range_collect_unbraced:w #1 ; #2#3
+  {
+    \if_int_compare:w #1 > 1 \exp_stop_f:
+      \exp_after:wN \@@_range_collect_unbraced:w
+      \__int_value:w \__int_eval:w #1 - 1 \exp_after:wN ;
+    \fi:
+    { #2 #3 }
+  }
+\cs_new:Npn \@@_range:w #1 ; #2
+  {
+    \exp_args:Nf \@@_range_collect:nn
+      { \@@_range_skip_spaces:n {#2} } {#1}
+  }
+\cs_new:Npn \@@_range_skip_spaces:n #1
+  {
+    \tl_if_head_is_space:nTF {#1}
+      { \exp_args:Nf \@@_range_skip_spaces:n {#1} }
+      { { } #1 }
+  }
+\cs_new:Npn \@@_range_collect:nn #1#2
+  {
+    \int_compare:nNnTF {#2} = 0
+      {#1}
+      {
+        \exp_args:No \tl_if_head_is_space:nTF { \use_none:n #1 }
+          {
+            \exp_args:Nf \@@_range_collect:nn
+              { \@@_range_collect_space:nw #1 }
+              {#2}
+          }
+          {
+            \@@_range_collect:ff
+              {
+                \exp_args:No \tl_if_head_is_N_type:nTF { \use_none:n #1 }
+                  { \@@_range_collect_N:nN }
+                  { \@@_range_collect_group:nn }
+                #1
+              }
+              { \int_eval:n { #2 - 1 } }
+          }
+      }
+  }
+\cs_new:Npn \@@_range_collect_space:nw #1 ~ { { #1 ~ } }
+\cs_new:Npn \@@_range_collect_N:nN #1#2 { { #1 #2 } }
+\cs_new:Npn \@@_range_collect_group:nn #1#2 { { #1 {#2} } }
+\cs_generate_variant:Nn \@@_range_collect:nn { ff }
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
+% \end{macro}
+% \end{macro}
+%
 % \begin{macro}[EXP, aux]{\@@_range_normalize:nn}
 %   This function converts an \meta{index} argument into an explicit
 %   position in the token list (a result of $0$ denoting \enquote{out of

Modified: trunk/l3kernel/testfiles/m3expl001.luatex.tlg
===================================================================
--- trunk/l3kernel/testfiles/m3expl001.luatex.tlg	2017-07-15 15:41:24 UTC (rev 7373)
+++ trunk/l3kernel/testfiles/m3expl001.luatex.tlg	2017-07-15 17:45:31 UTC (rev 7374)
@@ -5636,10 +5636,27 @@
 Defining \tl_range:Nnn on line ...
 Defining \tl_range:cnn on line ...
 Defining \tl_range:nnn on line ...
-Defining \__tl_range:nnnw on line ...
-Defining \__tl_range:nnw on line ...
+Defining \tl_range_braced:Nnn on line ...
+Defining \tl_range_braced:cnn on line ...
+Defining \tl_range_braced:nnn on line ...
+Defining \tl_range_unbraced:Nnn on line ...
+Defining \tl_range_unbraced:cnn on line ...
+Defining \tl_range_unbraced:nnn on line ...
+Defining \__tl_range:Nnnn on line ...
+Defining \__tl_range:nnnNn on line ...
+Defining \__tl_range:nnNn on line ...
 Defining \__tl_range_skip:w on line ...
-Defining \__tl_range_collect:w on line ...
+Defining \__tl_range_braced:w on line ...
+Defining \__tl_range_unbraced:w on line ...
+Defining \__tl_range_collect_braced:w on line ...
+Defining \__tl_range_collect_unbraced:w on line ...
+Defining \__tl_range:w on line ...
+Defining \__tl_range_skip_spaces:n on line ...
+Defining \__tl_range_collect:nn on line ...
+Defining \__tl_range_collect_space:nw on line ...
+Defining \__tl_range_collect_N:nN on line ...
+Defining \__tl_range_collect_group:nn on line ...
+Defining \__tl_range_collect:ff on line ...
 Defining \__tl_range_normalize:nn on line ...
 Defining \__peek_execute_branches_N_type: on line ...
 Defining \__peek_N_type:w on line ...

Modified: trunk/l3kernel/testfiles/m3expl001.ptex.tlg
===================================================================
--- trunk/l3kernel/testfiles/m3expl001.ptex.tlg	2017-07-15 15:41:24 UTC (rev 7373)
+++ trunk/l3kernel/testfiles/m3expl001.ptex.tlg	2017-07-15 17:45:31 UTC (rev 7374)
@@ -5627,10 +5627,27 @@
 Defining \tl_range:Nnn on line ...
 Defining \tl_range:cnn on line ...
 Defining \tl_range:nnn on line ...
-Defining \__tl_range:nnnw on line ...
-Defining \__tl_range:nnw on line ...
+Defining \tl_range_braced:Nnn on line ...
+Defining \tl_range_braced:cnn on line ...
+Defining \tl_range_braced:nnn on line ...
+Defining \tl_range_unbraced:Nnn on line ...
+Defining \tl_range_unbraced:cnn on line ...
+Defining \tl_range_unbraced:nnn on line ...
+Defining \__tl_range:Nnnn on line ...
+Defining \__tl_range:nnnNn on line ...
+Defining \__tl_range:nnNn on line ...
 Defining \__tl_range_skip:w on line ...
-Defining \__tl_range_collect:w on line ...
+Defining \__tl_range_braced:w on line ...
+Defining \__tl_range_unbraced:w on line ...
+Defining \__tl_range_collect_braced:w on line ...
+Defining \__tl_range_collect_unbraced:w on line ...
+Defining \__tl_range:w on line ...
+Defining \__tl_range_skip_spaces:n on line ...
+Defining \__tl_range_collect:nn on line ...
+Defining \__tl_range_collect_space:nw on line ...
+Defining \__tl_range_collect_N:nN on line ...
+Defining \__tl_range_collect_group:nn on line ...
+Defining \__tl_range_collect:ff on line ...
 Defining \__tl_range_normalize:nn on line ...
 Defining \__peek_execute_branches_N_type: on line ...
 Defining \__peek_N_type:w on line ...

Modified: trunk/l3kernel/testfiles/m3expl001.tlg
===================================================================
--- trunk/l3kernel/testfiles/m3expl001.tlg	2017-07-15 15:41:24 UTC (rev 7373)
+++ trunk/l3kernel/testfiles/m3expl001.tlg	2017-07-15 17:45:31 UTC (rev 7374)
@@ -5828,10 +5828,27 @@
 Defining \tl_range:Nnn on line ...
 Defining \tl_range:cnn on line ...
 Defining \tl_range:nnn on line ...
-Defining \__tl_range:nnnw on line ...
-Defining \__tl_range:nnw on line ...
+Defining \tl_range_braced:Nnn on line ...
+Defining \tl_range_braced:cnn on line ...
+Defining \tl_range_braced:nnn on line ...
+Defining \tl_range_unbraced:Nnn on line ...
+Defining \tl_range_unbraced:cnn on line ...
+Defining \tl_range_unbraced:nnn on line ...
+Defining \__tl_range:Nnnn on line ...
+Defining \__tl_range:nnnNn on line ...
+Defining \__tl_range:nnNn on line ...
 Defining \__tl_range_skip:w on line ...
-Defining \__tl_range_collect:w on line ...
+Defining \__tl_range_braced:w on line ...
+Defining \__tl_range_unbraced:w on line ...
+Defining \__tl_range_collect_braced:w on line ...
+Defining \__tl_range_collect_unbraced:w on line ...
+Defining \__tl_range:w on line ...
+Defining \__tl_range_skip_spaces:n on line ...
+Defining \__tl_range_collect:nn on line ...
+Defining \__tl_range_collect_space:nw on line ...
+Defining \__tl_range_collect_N:nN on line ...
+Defining \__tl_range_collect_group:nn on line ...
+Defining \__tl_range_collect:ff on line ...
 Defining \__tl_range_normalize:nn on line ...
 Defining \__peek_execute_branches_N_type: on line ...
 Defining \__peek_N_type:w on line ...

Modified: trunk/l3kernel/testfiles/m3expl001.uptex.tlg
===================================================================
--- trunk/l3kernel/testfiles/m3expl001.uptex.tlg	2017-07-15 15:41:24 UTC (rev 7373)
+++ trunk/l3kernel/testfiles/m3expl001.uptex.tlg	2017-07-15 17:45:31 UTC (rev 7374)
@@ -5826,10 +5826,27 @@
 Defining \tl_range:Nnn on line ...
 Defining \tl_range:cnn on line ...
 Defining \tl_range:nnn on line ...
-Defining \__tl_range:nnnw on line ...
-Defining \__tl_range:nnw on line ...
+Defining \tl_range_braced:Nnn on line ...
+Defining \tl_range_braced:cnn on line ...
+Defining \tl_range_braced:nnn on line ...
+Defining \tl_range_unbraced:Nnn on line ...
+Defining \tl_range_unbraced:cnn on line ...
+Defining \tl_range_unbraced:nnn on line ...
+Defining \__tl_range:Nnnn on line ...
+Defining \__tl_range:nnnNn on line ...
+Defining \__tl_range:nnNn on line ...
 Defining \__tl_range_skip:w on line ...
-Defining \__tl_range_collect:w on line ...
+Defining \__tl_range_braced:w on line ...
+Defining \__tl_range_unbraced:w on line ...
+Defining \__tl_range_collect_braced:w on line ...
+Defining \__tl_range_collect_unbraced:w on line ...
+Defining \__tl_range:w on line ...
+Defining \__tl_range_skip_spaces:n on line ...
+Defining \__tl_range_collect:nn on line ...
+Defining \__tl_range_collect_space:nw on line ...
+Defining \__tl_range_collect_N:nN on line ...
+Defining \__tl_range_collect_group:nn on line ...
+Defining \__tl_range_collect:ff on line ...
 Defining \__tl_range_normalize:nn on line ...
 Defining \__peek_execute_branches_N_type: on line ...
 Defining \__peek_N_type:w on line ...

Modified: trunk/l3kernel/testfiles/m3expl001.xetex.tlg
===================================================================
--- trunk/l3kernel/testfiles/m3expl001.xetex.tlg	2017-07-15 15:41:24 UTC (rev 7373)
+++ trunk/l3kernel/testfiles/m3expl001.xetex.tlg	2017-07-15 17:45:31 UTC (rev 7374)
@@ -5610,10 +5610,27 @@
 Defining \tl_range:Nnn on line ...
 Defining \tl_range:cnn on line ...
 Defining \tl_range:nnn on line ...
-Defining \__tl_range:nnnw on line ...
-Defining \__tl_range:nnw on line ...
+Defining \tl_range_braced:Nnn on line ...
+Defining \tl_range_braced:cnn on line ...
+Defining \tl_range_braced:nnn on line ...
+Defining \tl_range_unbraced:Nnn on line ...
+Defining \tl_range_unbraced:cnn on line ...
+Defining \tl_range_unbraced:nnn on line ...
+Defining \__tl_range:Nnnn on line ...
+Defining \__tl_range:nnnNn on line ...
+Defining \__tl_range:nnNn on line ...
 Defining \__tl_range_skip:w on line ...
-Defining \__tl_range_collect:w on line ...
+Defining \__tl_range_braced:w on line ...
+Defining \__tl_range_unbraced:w on line ...
+Defining \__tl_range_collect_braced:w on line ...
+Defining \__tl_range_collect_unbraced:w on line ...
+Defining \__tl_range:w on line ...
+Defining \__tl_range_skip_spaces:n on line ...
+Defining \__tl_range_collect:nn on line ...
+Defining \__tl_range_collect_space:nw on line ...
+Defining \__tl_range_collect_N:nN on line ...
+Defining \__tl_range_collect_group:nn on line ...
+Defining \__tl_range_collect:ff on line ...
 Defining \__tl_range_normalize:nn on line ...
 Defining \__peek_execute_branches_N_type: on line ...
 Defining \__peek_N_type:w on line ...

Modified: trunk/l3kernel/testfiles/m3expl003.luatex.tlg
===================================================================
--- trunk/l3kernel/testfiles/m3expl003.luatex.tlg	2017-07-15 15:41:24 UTC (rev 7373)
+++ trunk/l3kernel/testfiles/m3expl003.luatex.tlg	2017-07-15 17:45:31 UTC (rev 7374)
@@ -5636,10 +5636,27 @@
 Defining \tl_range:Nnn on line ...
 Defining \tl_range:cnn on line ...
 Defining \tl_range:nnn on line ...
-Defining \__tl_range:nnnw on line ...
-Defining \__tl_range:nnw on line ...
+Defining \tl_range_braced:Nnn on line ...
+Defining \tl_range_braced:cnn on line ...
+Defining \tl_range_braced:nnn on line ...
+Defining \tl_range_unbraced:Nnn on line ...
+Defining \tl_range_unbraced:cnn on line ...
+Defining \tl_range_unbraced:nnn on line ...
+Defining \__tl_range:Nnnn on line ...
+Defining \__tl_range:nnnNn on line ...
+Defining \__tl_range:nnNn on line ...
 Defining \__tl_range_skip:w on line ...
-Defining \__tl_range_collect:w on line ...
+Defining \__tl_range_braced:w on line ...
+Defining \__tl_range_unbraced:w on line ...
+Defining \__tl_range_collect_braced:w on line ...
+Defining \__tl_range_collect_unbraced:w on line ...
+Defining \__tl_range:w on line ...
+Defining \__tl_range_skip_spaces:n on line ...
+Defining \__tl_range_collect:nn on line ...
+Defining \__tl_range_collect_space:nw on line ...
+Defining \__tl_range_collect_N:nN on line ...
+Defining \__tl_range_collect_group:nn on line ...
+Defining \__tl_range_collect:ff on line ...
 Defining \__tl_range_normalize:nn on line ...
 Defining \__peek_execute_branches_N_type: on line ...
 Defining \__peek_N_type:w on line ...

Modified: trunk/l3kernel/testfiles/m3expl003.ptex.tlg
===================================================================
--- trunk/l3kernel/testfiles/m3expl003.ptex.tlg	2017-07-15 15:41:24 UTC (rev 7373)
+++ trunk/l3kernel/testfiles/m3expl003.ptex.tlg	2017-07-15 17:45:31 UTC (rev 7374)
@@ -5627,10 +5627,27 @@
 Defining \tl_range:Nnn on line ...
 Defining \tl_range:cnn on line ...
 Defining \tl_range:nnn on line ...
-Defining \__tl_range:nnnw on line ...
-Defining \__tl_range:nnw on line ...
+Defining \tl_range_braced:Nnn on line ...
+Defining \tl_range_braced:cnn on line ...
+Defining \tl_range_braced:nnn on line ...
+Defining \tl_range_unbraced:Nnn on line ...
+Defining \tl_range_unbraced:cnn on line ...
+Defining \tl_range_unbraced:nnn on line ...
+Defining \__tl_range:Nnnn on line ...
+Defining \__tl_range:nnnNn on line ...
+Defining \__tl_range:nnNn on line ...
 Defining \__tl_range_skip:w on line ...
-Defining \__tl_range_collect:w on line ...
+Defining \__tl_range_braced:w on line ...
+Defining \__tl_range_unbraced:w on line ...
+Defining \__tl_range_collect_braced:w on line ...
+Defining \__tl_range_collect_unbraced:w on line ...
+Defining \__tl_range:w on line ...
+Defining \__tl_range_skip_spaces:n on line ...
+Defining \__tl_range_collect:nn on line ...
+Defining \__tl_range_collect_space:nw on line ...
+Defining \__tl_range_collect_N:nN on line ...
+Defining \__tl_range_collect_group:nn on line ...
+Defining \__tl_range_collect:ff on line ...
 Defining \__tl_range_normalize:nn on line ...
 Defining \__peek_execute_branches_N_type: on line ...
 Defining \__peek_N_type:w on line ...

Modified: trunk/l3kernel/testfiles/m3expl003.tlg
===================================================================
--- trunk/l3kernel/testfiles/m3expl003.tlg	2017-07-15 15:41:24 UTC (rev 7373)
+++ trunk/l3kernel/testfiles/m3expl003.tlg	2017-07-15 17:45:31 UTC (rev 7374)
@@ -5828,10 +5828,27 @@
 Defining \tl_range:Nnn on line ...
 Defining \tl_range:cnn on line ...
 Defining \tl_range:nnn on line ...
-Defining \__tl_range:nnnw on line ...
-Defining \__tl_range:nnw on line ...
+Defining \tl_range_braced:Nnn on line ...
+Defining \tl_range_braced:cnn on line ...
+Defining \tl_range_braced:nnn on line ...
+Defining \tl_range_unbraced:Nnn on line ...
+Defining \tl_range_unbraced:cnn on line ...
+Defining \tl_range_unbraced:nnn on line ...
+Defining \__tl_range:Nnnn on line ...
+Defining \__tl_range:nnnNn on line ...
+Defining \__tl_range:nnNn on line ...
 Defining \__tl_range_skip:w on line ...
-Defining \__tl_range_collect:w on line ...
+Defining \__tl_range_braced:w on line ...
+Defining \__tl_range_unbraced:w on line ...
+Defining \__tl_range_collect_braced:w on line ...
+Defining \__tl_range_collect_unbraced:w on line ...
+Defining \__tl_range:w on line ...
+Defining \__tl_range_skip_spaces:n on line ...
+Defining \__tl_range_collect:nn on line ...
+Defining \__tl_range_collect_space:nw on line ...
+Defining \__tl_range_collect_N:nN on line ...
+Defining \__tl_range_collect_group:nn on line ...
+Defining \__tl_range_collect:ff on line ...
 Defining \__tl_range_normalize:nn on line ...
 Defining \__peek_execute_branches_N_type: on line ...
 Defining \__peek_N_type:w on line ...

Modified: trunk/l3kernel/testfiles/m3expl003.uptex.tlg
===================================================================
--- trunk/l3kernel/testfiles/m3expl003.uptex.tlg	2017-07-15 15:41:24 UTC (rev 7373)
+++ trunk/l3kernel/testfiles/m3expl003.uptex.tlg	2017-07-15 17:45:31 UTC (rev 7374)
@@ -5826,10 +5826,27 @@
 Defining \tl_range:Nnn on line ...
 Defining \tl_range:cnn on line ...
 Defining \tl_range:nnn on line ...
-Defining \__tl_range:nnnw on line ...
-Defining \__tl_range:nnw on line ...
+Defining \tl_range_braced:Nnn on line ...
+Defining \tl_range_braced:cnn on line ...
+Defining \tl_range_braced:nnn on line ...
+Defining \tl_range_unbraced:Nnn on line ...
+Defining \tl_range_unbraced:cnn on line ...
+Defining \tl_range_unbraced:nnn on line ...
+Defining \__tl_range:Nnnn on line ...
+Defining \__tl_range:nnnNn on line ...
+Defining \__tl_range:nnNn on line ...
 Defining \__tl_range_skip:w on line ...
-Defining \__tl_range_collect:w on line ...
+Defining \__tl_range_braced:w on line ...
+Defining \__tl_range_unbraced:w on line ...
+Defining \__tl_range_collect_braced:w on line ...
+Defining \__tl_range_collect_unbraced:w on line ...
+Defining \__tl_range:w on line ...
+Defining \__tl_range_skip_spaces:n on line ...
+Defining \__tl_range_collect:nn on line ...
+Defining \__tl_range_collect_space:nw on line ...
+Defining \__tl_range_collect_N:nN on line ...
+Defining \__tl_range_collect_group:nn on line ...
+Defining \__tl_range_collect:ff on line ...
 Defining \__tl_range_normalize:nn on line ...
 Defining \__peek_execute_branches_N_type: on line ...
 Defining \__peek_N_type:w on line ...

Modified: trunk/l3kernel/testfiles/m3expl003.xetex.tlg
===================================================================
--- trunk/l3kernel/testfiles/m3expl003.xetex.tlg	2017-07-15 15:41:24 UTC (rev 7373)
+++ trunk/l3kernel/testfiles/m3expl003.xetex.tlg	2017-07-15 17:45:31 UTC (rev 7374)
@@ -5610,10 +5610,27 @@
 Defining \tl_range:Nnn on line ...
 Defining \tl_range:cnn on line ...
 Defining \tl_range:nnn on line ...
-Defining \__tl_range:nnnw on line ...
-Defining \__tl_range:nnw on line ...
+Defining \tl_range_braced:Nnn on line ...
+Defining \tl_range_braced:cnn on line ...
+Defining \tl_range_braced:nnn on line ...
+Defining \tl_range_unbraced:Nnn on line ...
+Defining \tl_range_unbraced:cnn on line ...
+Defining \tl_range_unbraced:nnn on line ...
+Defining \__tl_range:Nnnn on line ...
+Defining \__tl_range:nnnNn on line ...
+Defining \__tl_range:nnNn on line ...
 Defining \__tl_range_skip:w on line ...
-Defining \__tl_range_collect:w on line ...
+Defining \__tl_range_braced:w on line ...
+Defining \__tl_range_unbraced:w on line ...
+Defining \__tl_range_collect_braced:w on line ...
+Defining \__tl_range_collect_unbraced:w on line ...
+Defining \__tl_range:w on line ...
+Defining \__tl_range_skip_spaces:n on line ...
+Defining \__tl_range_collect:nn on line ...
+Defining \__tl_range_collect_space:nw on line ...
+Defining \__tl_range_collect_N:nN on line ...
+Defining \__tl_range_collect_group:nn on line ...
+Defining \__tl_range_collect:ff on line ...
 Defining \__tl_range_normalize:nn on line ...
 Defining \__peek_execute_branches_N_type: on line ...
 Defining \__peek_N_type:w on line ...

Modified: trunk/l3kernel/testfiles/m3tl014.lvt
===================================================================
--- trunk/l3kernel/testfiles/m3tl014.lvt	2017-07-15 15:41:24 UTC (rev 7373)
+++ trunk/l3kernel/testfiles/m3tl014.lvt	2017-07-15 17:45:31 UTC (rev 7374)
@@ -11,14 +11,38 @@
 
 \TEST { tl~range }
   {
-    \TYPE { | \tl_range:nnn { \A{\B\C}\D{}~{\E} } { 0 } { 0 } | }
-    \TYPE { | \tl_range:nnn { \A{\B\C}\D{}~{\E} } { 1 } { 1 } | }
-    \TYPE { | \tl_range:nnn { \A{\B\C}\D{}~{\E} } { 1 } { -2 } | }
-    \TYPE { | \tl_range:nnn { \A{\B\C}\D{}~{\E} } { -1 } { -3 } | }
-    \TYPE { | \tl_range:nnn { \A{\B\C}\D{}~{\E} } { -3 } { -1 } | }
-    \TYPE { | \tl_range:nnn { \A{\B\C}\D{}~{\E} } { 1 } { 7 } | }
-    \TYPE { | \tl_range:nnn { \A{\B\C}\D{}~{\E} } { -7 } { 3 } | }
-    \TYPE { | \tl_range:nnn { \A{\B\C}\D{}~{\E} } { -7 } { 0 } | }
+    \TYPE { | \tl_range:nnn { ~\A{\B\C}~\D{}~{\E}~ } { 0 } { 0 } | }
+    \TYPE { | \tl_range:nnn { ~\A{\B\C}~\D{}~{\E}~ } { 1 } { 1 } | }
+    \TYPE { | \tl_range:nnn { ~\A{\B\C}~\D{}~{\E}~ } { 1 } { -2 } | }
+    \TYPE { | \tl_range:nnn { ~\A{\B\C}~\D{}~{\E}~ } { -1 } { -3 } | }
+    \TYPE { | \tl_range:nnn { ~\A{\B\C}~\D{}~{\E}~ } { -3 } { -1 } | }
+    \TYPE { | \tl_range:nnn { ~\A{\B\C}~\D{}~{\E}~ } { 1 } { 7 } | }
+    \TYPE { | \tl_range:nnn { ~\A{\B\C}~\D{}~{\E}~ } { -7 } { 3 } | }
+    \TYPE { | \tl_range:nnn { ~\A{\B\C}~\D{}~{\E}~ } { -7 } { 0 } | }
   }
 
+\TEST { tl~range~braced }
+  {
+    \TYPE { | \tl_range_braced:nnn { ~\A{\B\C}~\D{}~{\E}~ } { 0 } { 0 } | }
+    \TYPE { | \tl_range_braced:nnn { ~\A{\B\C}~\D{}~{\E}~ } { 1 } { 1 } | }
+    \TYPE { | \tl_range_braced:nnn { ~\A{\B\C}~\D{}~{\E}~ } { 1 } { -2 } | }
+    \TYPE { | \tl_range_braced:nnn { ~\A{\B\C}~\D{}~{\E}~ } { -1 } { -3 } | }
+    \TYPE { | \tl_range_braced:nnn { ~\A{\B\C}~\D{}~{\E}~ } { -3 } { -1 } | }
+    \TYPE { | \tl_range_braced:nnn { ~\A{\B\C}~\D{}~{\E}~ } { 1 } { 7 } | }
+    \TYPE { | \tl_range_braced:nnn { ~\A{\B\C}~\D{}~{\E}~ } { -7 } { 3 } | }
+    \TYPE { | \tl_range_braced:nnn { ~\A{\B\C}~\D{}~{\E}~ } { -7 } { 0 } | }
+  }
+
+\TEST { tl~range~unbraced }
+  {
+    \TYPE { | \tl_range_unbraced:nnn { ~\A{\B\C}~\D{}~{\E}~ } { 0 } { 0 } | }
+    \TYPE { | \tl_range_unbraced:nnn { ~\A{\B\C}~\D{}~{\E}~ } { 1 } { 1 } | }
+    \TYPE { | \tl_range_unbraced:nnn { ~\A{\B\C}~\D{}~{\E}~ } { 1 } { -2 } | }
+    \TYPE { | \tl_range_unbraced:nnn { ~\A{\B\C}~\D{}~{\E}~ } { -1 } { -3 } | }
+    \TYPE { | \tl_range_unbraced:nnn { ~\A{\B\C}~\D{}~{\E}~ } { -3 } { -1 } | }
+    \TYPE { | \tl_range_unbraced:nnn { ~\A{\B\C}~\D{}~{\E}~ } { 1 } { 7 } | }
+    \TYPE { | \tl_range_unbraced:nnn { ~\A{\B\C}~\D{}~{\E}~ } { -7 } { 3 } | }
+    \TYPE { | \tl_range_unbraced:nnn { ~\A{\B\C}~\D{}~{\E}~ } { -7 } { 0 } | }
+  }
+
 \END

Modified: trunk/l3kernel/testfiles/m3tl014.tlg
===================================================================
--- trunk/l3kernel/testfiles/m3tl014.tlg	2017-07-15 15:41:24 UTC (rev 7373)
+++ trunk/l3kernel/testfiles/m3tl014.tlg	2017-07-15 17:45:31 UTC (rev 7374)
@@ -5,6 +5,18 @@
 TEST 1: tl range
 ============================================================
 ||
+|\A |
+|\A {\B \C } \D {}|
+||
+|\D {} {\E }|
+|\A {\B \C } \D {} {\E }|
+|\A {\B \C } \D |
+||
+============================================================
+============================================================
+TEST 2: tl range braced
+============================================================
+||
 |{\A }|
 |{\A }{\B \C }{\D }{}|
 ||
@@ -13,3 +25,15 @@
 |{\A }{\B \C }{\D }|
 ||
 ============================================================
+============================================================
+TEST 3: tl range unbraced
+============================================================
+||
+|\A |
+|\A \B \C \D |
+||
+|\D \E |
+|\A \B \C \D \E |
+|\A \B \C \D |
+||
+============================================================



More information about the latex3-commits mailing list