[latex3-commits] [latex3/latex3] conditional-forms: Auto-generate all forms in \prg_new_conditional:Npnn, etc. (eeefc9221)

github at latex-project.org github at latex-project.org
Sun Nov 24 10:08:48 CET 2024


Repository : https://github.com/latex3/latex3
On branch  : conditional-forms
Link       : https://github.com/latex3/latex3/commit/eeefc922145224912889b13fad1e1edb08402ce3

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

commit eeefc922145224912889b13fad1e1edb08402ce3
Author: Joseph Wright <joseph at texdev.net>
Date:   Tue Nov 19 17:30:58 2024 +0000

    Auto-generate all forms in \prg_new_conditional:Npnn, etc.


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

eeefc922145224912889b13fad1e1edb08402ce3
 l3kernel/CHANGELOG.md                   |   5 ++
 l3kernel/l3basics.dtx                   | 152 +++++++++++++++-----------------
 l3kernel/l3msg.dtx                      |   7 --
 l3kernel/l3prg.dtx                      |  26 +++---
 l3kernel/testfiles/m3basics002.tlg      |   2 +
 l3kernel/testfiles/m3expan002.tlg       |   8 +-
 l3kernel/testfiles/m3text003.luatex.tlg |   4 +-
 l3kernel/testfiles/m3text003.ptex.tlg   |   4 +-
 l3kernel/testfiles/m3text003.tlg        |   4 +-
 l3kernel/testfiles/m3text003.uptex.tlg  |   4 +-
 l3kernel/testfiles/m3text003.xetex.tlg  |   4 +-
 11 files changed, 108 insertions(+), 112 deletions(-)

diff --git a/l3kernel/CHANGELOG.md b/l3kernel/CHANGELOG.md
index ce71252de..baf787182 100644
--- a/l3kernel/CHANGELOG.md
+++ b/l3kernel/CHANGELOG.md
@@ -12,6 +12,11 @@ this project uses date-based 'snapshot' version identifiers.
   can be used with `V`-type expansion
 - `\sys_if_engine_opentype:(TF)`
 
+### Changed
+- Create all possible forms automatically in
+  `\prg_new_(protected)_conditional:Npnn`, etc.,: `T`, `F`, `TF` and where
+  appropriate `p`
+
 ### Removed
 - `\c_catcode_active_tl`: was missing a `_`, always intended to be internal
 
diff --git a/l3kernel/l3basics.dtx b/l3kernel/l3basics.dtx
index f4815d260..eb4beda7a 100644
--- a/l3kernel/l3basics.dtx
+++ b/l3kernel/l3basics.dtx
@@ -1949,37 +1949,38 @@
 %     \prg_gset_protected_conditional:Npnn,
 %     \prg_new_protected_conditional:Npnn
 %   }
-% \begin{macro}{\@@_generate_conditional_parm:NNpnn}
+% \begin{macro}{\@@_generate_conditional_parm:NnNpnn}
 %   The user functions for the types using parameter text from the
 %   programmer. The various functions only differ by which function is
 %   used for the assignment. For those |Npnn| type functions, we must
 %   grab the parameter text, reading everything up to a left brace
 %   before continuing. Then split the base function into name and
 %   signature, and feed \Arg{name} \Arg{signature} \meta{boolean}
-%   \Arg{set~or~new} \Arg{parameters} |{TF,...}|
+%   \Arg{set~or~new} |{TF,...}| \Arg{parameters} |{TF,...}|
 %   \Arg{code} to the auxiliary function responsible for defining all
-%   conditionals.
+%   conditionals. The second |{TF,...}| is nowadays ignored: but an argument is
+%   kept 
 %    \begin{macrocode}
 \cs_gset_protected:Npn \prg_set_conditional:Npnn
-  { \@@_generate_conditional_parm:NNpnn \cs_set:Npn }
+  { \@@_generate_conditional_parm:NnNpnn \cs_set:Npn { T , F , TF , p } }
 \cs_gset_protected:Npn \prg_gset_conditional:Npnn
-  { \@@_generate_conditional_parm:NNpnn \cs_gset:Npn }
+  { \@@_generate_conditional_parm:NnNpnn \cs_gset:Npn { T , F , TF , p } }
 \cs_gset_protected:Npn \prg_new_conditional:Npnn
-  { \@@_generate_conditional_parm:NNpnn \cs_new:Npn }
+  { \@@_generate_conditional_parm:NnNpnn \cs_new:Npn { T , F , TF , p } }
 \cs_gset_protected:Npn \prg_set_protected_conditional:Npnn
-  { \@@_generate_conditional_parm:NNpnn \cs_set_protected:Npn }
+  { \@@_generate_conditional_parm:NnNpnn \cs_set_protected:Npn { T , F , TF } }
 \cs_gset_protected:Npn \prg_gset_protected_conditional:Npnn
-  { \@@_generate_conditional_parm:NNpnn \cs_gset_protected:Npn }
+  { \@@_generate_conditional_parm:NnNpnn \cs_gset_protected:Npn { T , F , TF } }
 \cs_gset_protected:Npn \prg_new_protected_conditional:Npnn
-  { \@@_generate_conditional_parm:NNpnn \cs_new_protected:Npn }
-\cs_gset_protected:Npn \@@_generate_conditional_parm:NNpnn #1#2#3#
+  { \@@_generate_conditional_parm:NnNpnn \cs_new_protected:Npn { T , F , TF } }
+\cs_gset_protected:Npn \@@_generate_conditional_parm:NnNpnn #1#2#3#4#
   {
     \use:e
       {
-        \@@_generate_conditional:nnNNnnn
-          \cs_split_function:N #2
+        \@@_generate_conditional:nnNNnnnn
+          \cs_split_function:N #3
       }
-      #1 {#3}
+      #1 {#2} {#4}
   }
 %    \end{macrocode}
 % \end{macro}
@@ -1996,8 +1997,8 @@
 %   }
 % \begin{macro}
 %   {
-%     \@@_generate_conditional_count:NNnn ,
-%     \@@_generate_conditional_count:nnNNnn
+%     \@@_generate_conditional_count:NnNnn ,
+%     \@@_generate_conditional_count:nnNNnnn
 %   }
 %   The user functions for the types automatically inserting the correct
 %   parameter text based on the signature. The various functions only
@@ -2005,7 +2006,7 @@
 %   function into name and signature.  The second auxiliary generates
 %   the parameter text from the number of letters in the signature.
 %   Then feed \Arg{name} \Arg{signature} \meta{boolean} \Arg{set~or~new}
-%   \Arg{parameters} |{TF,...}| \Arg{code} to the
+%   |{TF,...}| \Arg{parameters} |{TF,...}| \Arg{code} to the
 %   auxiliary function responsible for defining all conditionals.  If
 %   the \meta{signature} has more than $9$ letters, the definition is
 %   aborted since \TeX{} macros have at most $9$ arguments.  The
@@ -2013,30 +2014,30 @@
 %   later.
 %    \begin{macrocode}
 \cs_gset_protected:Npn \prg_set_conditional:Nnn
-  { \@@_generate_conditional_count:NNnn \cs_set:Npn }
+  { \@@_generate_conditional_count:NnNnn \cs_set:Npn { T , F , TF , p } }
 \cs_gset_protected:Npn \prg_gset_conditional:Nnn
-  { \@@_generate_conditional_count:NNnn \cs_set:Npn }
+  { \@@_generate_conditional_count:NnNnn \cs_set:Npn { T , F , TF , p } }
 \cs_gset_protected:Npn \prg_new_conditional:Nnn
-  { \@@_generate_conditional_count:NNnn \cs_new:Npn }
+  { \@@_generate_conditional_count:NnNnn \cs_new:Npn { T , F , TF , p } }
 \cs_gset_protected:Npn \prg_set_protected_conditional:Nnn
-  { \@@_generate_conditional_count:NNnn \cs_set_protected:Npn }
+  { \@@_generate_conditional_count:NnNnn \cs_set_protected:Npn { T , F , TF } }
 \cs_gset_protected:Npn \prg_gset_protected_conditional:Nnn
-  { \@@_generate_conditional_count:NNnn \cs_gset_protected:Npn }
+  { \@@_generate_conditional_count:NnNnn \cs_gset_protected:Npn { T , F , TF } }
 \cs_gset_protected:Npn \prg_new_protected_conditional:Nnn
-  { \@@_generate_conditional_count:NNnn \cs_new_protected:Npn }
-\cs_gset_protected:Npn \@@_generate_conditional_count:NNnn #1#2
+  { \@@_generate_conditional_count:NnNnn \cs_new_protected:Npn { T , F , TF } }
+\cs_gset_protected:Npn \@@_generate_conditional_count:NnNnn #1#2#3
   {
     \use:e
       {
-        \@@_generate_conditional_count:nnNNnn
-        \cs_split_function:N #2
+        \@@_generate_conditional_count:nnNNnnn
+        \cs_split_function:N #3
       }
-      #1
+      #1 {#2}
   }
-\cs_gset_protected:Npn \@@_generate_conditional_count:nnNNnn #1#2#3#4
+\cs_gset_protected:Npn \@@_generate_conditional_count:nnNNnnn #1#2#3#4#5
   {
     \__kernel_cs_parm_from_arg_count:nnF
-      { \@@_generate_conditional:nnNNnnn {#1} {#2} #3 #4 }
+      { \@@_generate_conditional:nnNNnnnn {#1} {#2} #3 #4 {#5} }
       { \tl_count:n {#2} }
       {
         \msg_error:nnee { kernel } { bad-number-of-arguments }
@@ -2051,7 +2052,7 @@
 %
 % \begin{macro}
 %   {
-%     \@@_generate_conditional:nnNNnnn,
+%     \@@_generate_conditional:nnNNnnnn,
 %     \@@_generate_conditional:NnnnnNw,
 %     \@@_generate_conditional_test:w,
 %     \@@_generate_conditional_fast:nw,
@@ -2062,8 +2063,9 @@
 %   and a boolean to signal whether or not there was a colon in the
 %   name. In the absence of a colon, we throw an error and don't define
 %   any conditional. The fourth arguments builds up the
-%   defining function.  The fifth is the parameters to use (possibly
-%   empty), the sixth is the list of forms to define, the seventh is the
+%   defining function. The the fifth is the list of forms to define.
+%   The sixth is the parameters to use (possibly
+%   empty), the seventh is junk for historical reasons, the eight is the
 %   replacement text which we will augment when defining the forms.
 %   The use of \cs{tl_to_str:n} makes the later loop more robust.
 %
@@ -2074,7 +2076,7 @@
 %   \cs{use_i:nn} instead of \cs{use_i_ii:nnn} to functions such as
 %   \cs{@@_generate_p_form:wNnnnnN}.
 %    \begin{macrocode}
-\cs_gset_protected:Npn \@@_generate_conditional:nnNNnnn #1#2#3#4#5#6#7
+\cs_gset_protected:Npn \@@_generate_conditional:nnNNnnnn #1#2#3#4#5#6#7#8
   {
     \if_meaning:w \c_false_bool #3
       \msg_error:nne { kernel } { missing-colon }
@@ -2084,14 +2086,14 @@
     \use:e
       {
         \exp_not:N \@@_generate_conditional:NnnnnNw
-        \exp_not:n { #4 {#1} {#2} {#5} }
+        \exp_not:n { #4 {#1} {#2} {#6} }
         \@@_generate_conditional_test:w
-          #7 \s_@@_mark
+          #8 \s_@@_mark
             \@@_generate_conditional_fast:nw
           \prg_return_true: \else: \prg_return_false: \fi: \s_@@_mark
             \use_none:n
-        \exp_not:n { {#7} \use_i_ii:nnn }
-        \tl_to_str:n {#6}
+        \exp_not:n { {#8} \use_i_ii:nnn }
+        \tl_to_str:n {#5}
         \exp_not:n { , \q_@@_recursion_tail , \q_@@_recursion_stop }
       }
   }
@@ -2103,26 +2105,14 @@
 %    \end{macrocode}
 %   Looping through the list of desired forms.  First are five arguments
 %   and sixth is the form.  Use the form to call the
-%   correct type.  If the form does not exist, the \cs{use:c}
-%   construction results in \tn{relax}, and the error message is
-%   displayed (unless the form is empty, to allow for |{T, , F}|),
-%   then \cs{use_none:nnnnnnnn} cleans up.  Otherwise, the
-%   error message is removed by the variant form.
+%   correct type.
 %    \begin{macrocode}
 \cs_gset_protected:Npn \@@_generate_conditional:NnnnnNw #1#2#3#4#5#6#7 ,
   {
     \if_meaning:w \q_@@_recursion_tail #7
       \exp_after:wN \@@_use_none_delimit_by_q_recursion_stop:w
     \fi:
-    \use:c { @@_generate_ #7 _form:wNnnnnN }
-        \tl_if_empty:nF {#7}
-          {
-            \msg_error:nnee
-              { kernel } { conditional-form-unknown }
-              {#7} { \token_to_str:c { #2 : #3 } }
-          }
-        \use_none:nnnnnnnn
-      \s_@@_stop
+    \use:c { @@_generate_ #7 _form:NnnnnN }
       #1 {#2} {#3} {#4} {#5} #6
     \@@_generate_conditional:NnnnnNw #1 {#2} {#3} {#4} {#5} #6
   }
@@ -2131,22 +2121,22 @@
 %
 % \begin{macro}
 %   {
-%     \@@_generate_p_form:wNnnnnN,
-%     \@@_generate_TF_form:wNnnnnN,
-%     \@@_generate_T_form:wNnnnnN,
-%     \@@_generate_F_form:wNnnnnN
+%     \@@_generate_p_form:NnnnnN,
+%     \@@_generate_TF_form:NnnnnN,
+%     \@@_generate_T_form:NnnnnN,
+%     \@@_generate_F_form:NnnnnN
 %   }
 % \begin{macro}[EXP]{\@@_p_true:w, \@@_T_true:w, \@@_F_true:w, \@@_TF_true:w}
 %   How to generate the various forms. Those functions take the
-%   following arguments: 1: junk, 2: \cs{cs_set:Npn} or similar,
-%   3: function name, 4: signature,
-%   5: parameter text, 6: replacement (possibly trimmed by
-%   \cs{@@_generate_conditional_fast:nw}), 7: \cs{use_i_ii:nnn} or
+%   following arguments: 1: \cs{cs_set:Npn} or similar,
+%   2: function name, 3: signature,
+%   4: parameter text, 5: replacement (possibly trimmed by
+%   \cs{@@_generate_conditional_fast:nw}), 6: \cs{use_i_ii:nnn} or
 %   \cs{use_i:nn} (for \enquote{fast} conditionals).  Remember that the
 %   logic-returning functions expect two arguments to be present after
 %   \cs{exp_end:}: notice the construction of the different variants
 %   relies on this, and that the |TF| and |F| variants will be slightly
-%   faster than the |T| version.  For \enquote{fast} conditionals, |#7| has an
+%   faster than the |T| version.  For \enquote{fast} conditionals, |#6| has an
 %   extra \cs[no-index]{if_\ldots{}}.  To optimize a bit further we
 %   don't use \cs{exp_after:wN} \cs{use_ii:nnn} and similar but instead use
 %   \cs{@@_TF_true:w} and similar to swap out the macro after \cs{fi:}. It would
@@ -2154,37 +2144,33 @@
 %   but if those are actually missing, the recovery from the runaway argument
 %   would not insert \cs{fi:} back, messing up nesting of conditionals.
 %    \begin{macrocode}
-\cs_gset_protected:Npn \@@_generate_p_form:wNnnnnN
-    #1 \s_@@_stop #2#3#4#5#6#7
+\cs_gset_protected:Npn \@@_generate_p_form:NnnnnN #1#2#3#4#5#6
   {
-    #7
-      { \exp_args:Nc #2 { #3 _p: #4 } #5 }
-      { { #6 \exp_end: \c_true_bool \c_false_bool } }
-      { #6 \@@_p_true:w \fi: \c_false_bool }
+    #6
+      { \exp_args:Nc #1 { #2 _p: #3 } #4 }
+      { { #5 \exp_end: \c_true_bool \c_false_bool } }
+      { #5 \@@_p_true:w \fi: \c_false_bool }
   }
-\cs_gset_protected:Npn \@@_generate_T_form:wNnnnnN
-    #1 \s_@@_stop #2#3#4#5#6#7
+\cs_gset_protected:Npn \@@_generate_T_form:NnnnnN #1#2#3#4#5#6
   {
-    #7
-      { \exp_args:Nc #2 { #3 : #4 T } #5 }
-      { { #6 \exp_end: \use:n \use_none:n } }
-      { #6 \@@_T_true:w \fi: \use_none:n }
+    #6
+      { \exp_args:Nc #1 { #2 : #3 T } #4 }
+      { { #5 \exp_end: \use:n \use_none:n } }
+      { #5 \@@_T_true:w \fi: \use_none:n }
   }
-\cs_gset_protected:Npn \@@_generate_F_form:wNnnnnN
-    #1 \s_@@_stop #2#3#4#5#6#7
+\cs_gset_protected:Npn \@@_generate_F_form:NnnnnN #1#2#3#4#5#6
   {
-    #7
-      { \exp_args:Nc #2 { #3 : #4 F } #5 }
-      { { #6 \exp_end: { } } }
-      { #6 \@@_F_true:w \fi: \use:n }
+    #6
+      { \exp_args:Nc #1 { #2 : #3 F } #4 }
+      { { #5 \exp_end: { } } }
+      { #5 \@@_F_true:w \fi: \use:n }
   }
-\cs_gset_protected:Npn \@@_generate_TF_form:wNnnnnN
-    #1 \s_@@_stop #2#3#4#5#6#7
+\cs_gset_protected:Npn \@@_generate_TF_form:NnnnnN #1#2#3#4#5#6
   {
-    #7
-      { \exp_args:Nc #2 { #3 : #4 TF } #5 }
-      { { #6 \exp_end: } }
-      { #6 \@@_TF_true:w \fi: \use_ii:nn }
+    #6
+      { \exp_args:Nc #1 { #2 : #3 TF } #4 }
+      { { #5 \exp_end: } }
+      { #5 \@@_TF_true:w \fi: \use_ii:nn }
   }
 \cs_gset:Npn \@@_p_true:w  \fi: \c_false_bool { \fi: \c_true_bool }
 \cs_gset:Npn \@@_T_true:w  \fi: \use_none:n   { \fi: \use:n }
diff --git a/l3kernel/l3msg.dtx b/l3kernel/l3msg.dtx
index 0373f6837..5868782b1 100644
--- a/l3kernel/l3msg.dtx
+++ b/l3kernel/l3msg.dtx
@@ -2081,13 +2081,6 @@
   }
 \msg_new:nnn { kernel } { randint-backward-range }
   { Wrong~order~of~bounds~in~\iow_char:N\\int_rand:nn{#1}{#2}. }
-\msg_new:nnnn { kernel } { conditional-form-unknown }
-  { Conditional~form~'#1'~for~function~'#2'~unknown. }
-  {
-    \c_@@_coding_error_text_tl
-    LaTeX~has~been~asked~to~define~the~conditional~form~'#1'~of~
-    the~function~'#2',~but~only~'TF',~'T',~'F',~and~'p'~forms~exist.
-  }
 \msg_new:nnnn { kernel } { variant-too-long }
   { Variant~form~'#1'~longer~than~base~signature~of~'#2'. }
   {
diff --git a/l3kernel/l3prg.dtx b/l3kernel/l3prg.dtx
index 78816e882..eb1da372f 100644
--- a/l3kernel/l3prg.dtx
+++ b/l3kernel/l3prg.dtx
@@ -76,7 +76,7 @@
 % \section{Defining a set of conditional functions}
 % \label{sec:l3prg:new-conditional-functions}
 %
-% \begin{function}[updated = 2022-11-01]
+% \begin{function}[updated = 2024-11-20]
 %   {
 %     \prg_new_conditional:Npnn, \prg_set_conditional:Npnn, \prg_gset_conditional:Npnn,
 %     \prg_new_conditional:Nnn,  \prg_set_conditional:Nnn, \prg_gset_conditional:Nnn
@@ -91,12 +91,11 @@
 %   for existing definitions and perform assignments globally
 %   (\emph{cf.}~\cs{cs_new:Npn}) whereas the \texttt{set} versions do no
 %   check and perform assignments locally (\emph{cf.}~\cs{cs_set:Npn}).
-%   The conditionals created are dependent on the comma-separated list
-%   of \meta{conditions}, which should be one or more of \texttt{p},
-%   \texttt{T}, \texttt{F} and \texttt{TF}.
+%   The \meta{conditions} argument is purely a reminder to the programmer:
+%   |T|, |F|, |TF| and |p| forms are always created.
 % \end{function}
 %
-% \begin{function}[updated = 2012-02-06]
+% \begin{function}[updated = 2024-11-20]
 %   {
 %     \prg_new_protected_conditional:Npnn, \prg_set_protected_conditional:Npnn, \prg_gset_protected_conditional:Npnn,
 %     \prg_new_protected_conditional:Nnn,  \prg_set_protected_conditional:Nnn, \prg_gset_protected_conditional:Nnn
@@ -1200,9 +1199,11 @@
 %   syntax shorthand for the And operation and we need to hide it for
 %   \TeX{}.  This group is closed after \cs{@@_get_next:NN} returns
 %   \cs{c_true_bool} or \cs{c_false_bool}.  That function requires the
-%   trailing parenthesis to know where the expression ends.
+%   trailing parenthesis to know where the expression ends. Notice we
+%   need \texttt{gset} here as the function is created above with the
+%   \enquote{usual} definition.
 %    \begin{macrocode}
-\cs_new:Npn \bool_if_p:n { \exp_args:Nf \@@_if_p:n }
+\cs_gset:Npn \bool_if_p:n { \exp_args:Nf \@@_if_p:n }
 \cs_new:Npn \@@_if_p:n #1
   {
     \tl_if_empty:oT { \use_none:nn #1 . } { \@@_if_p_aux:w }
@@ -1357,9 +1358,9 @@
 %   Go through the list of expressions, stopping whenever an expression
 %   is \texttt{false}.  If the end is reached without finding any
 %   \texttt{false} expression, then the result is \texttt{true}.
+%   We need \texttt{gset} and this ordering as the \texttt{p} version
+%   is auto-generated initially. (The same is true for \texttt{any} below.)
 %    \begin{macrocode}
-\cs_new:Npn \bool_lazy_all_p:n #1
-  { \@@_lazy_all:n #1 \q_@@_recursion_tail \q_@@_recursion_stop }
 \prg_new_conditional:Npnn \bool_lazy_all:n #1 { T , F , TF }
   {
     \if_predicate:w \bool_lazy_all_p:n {#1}
@@ -1368,6 +1369,8 @@
       \prg_return_false:
     \fi:
   }
+\cs_gset:Npn \bool_lazy_all_p:n #1
+  { \@@_lazy_all:n #1 \q_@@_recursion_tail \q_@@_recursion_stop }
 \cs_new:Npn \@@_lazy_all:n #1
   {
     \@@_if_recursion_tail_stop_do:nn {#1} { \c_true_bool }
@@ -1405,8 +1408,6 @@
 %   is \texttt{true}.  If the end is reached without finding any
 %   \texttt{true} expression, then the result is \texttt{false}.
 %    \begin{macrocode}
-\cs_new:Npn \bool_lazy_any_p:n #1
-  { \@@_lazy_any:n #1 \q_@@_recursion_tail \q_@@_recursion_stop }
 \prg_new_conditional:Npnn \bool_lazy_any:n #1 { T , F , TF }
   {
     \if_predicate:w \bool_lazy_any_p:n {#1}
@@ -1415,6 +1416,9 @@
       \prg_return_false:
     \fi:
   }
+\cs_gset:Npn \bool_lazy_any_p:n #1
+  { \@@_lazy_any:n #1 \q_@@_recursion_tail \q_@@_recursion_stop }
+
 \cs_new:Npn \@@_lazy_any:n #1
   {
     \@@_if_recursion_tail_stop_do:nn {#1} { \c_false_bool }
diff --git a/l3kernel/testfiles/m3basics002.tlg b/l3kernel/testfiles/m3basics002.tlg
index 9c534d21d..95b79c494 100644
--- a/l3kernel/testfiles/m3basics002.tlg
+++ b/l3kernel/testfiles/m3basics002.tlg
@@ -117,6 +117,8 @@ Defining \foo:nnnTF on line ...
 > \foo:nnnTF=\protected\long macro:#1#2#3->\tl_show:n {#1#2#3}\prg_return_true: \exp_end: .
 Defining \bar:nnnT on line ...
 Defining \bar:nnnF on line ...
+Defining \bar:nnnTF on line ...
+Defining \bar_p:nnn on line ...
 > \bar:nnnT=\long macro:#1#2#3->\prg_return_true: \exp_end: \use:n \use_none:n .
 > \bar:nnnF=\long macro:#1#2#3->\prg_return_true: \exp_end: {}.
 Defining \bar:nTF on line ...
diff --git a/l3kernel/testfiles/m3expan002.tlg b/l3kernel/testfiles/m3expan002.tlg
index afdf56c6d..46b4a6c10 100644
--- a/l3kernel/testfiles/m3expan002.tlg
+++ b/l3kernel/testfiles/m3expan002.tlg
@@ -28,7 +28,10 @@ undefined
 ============================================================
 TEST 2: Leaving non-N/n-base letters unchanged is allowed
 ============================================================
+Defining \foo:oNnT on line ...
+Defining \foo:oNnF on line ...
 Defining \foo:oNnTF on line ...
+Defining \foo_p:oNn on line ...
 Defining \exp_args:NnNo on line ...
 Defining \foo:oNoTF on line ...
 ! LaTeX Error: Variant form 'oNoT' deprecated for base form '\foo:oNnTF'. One should not change an argument from type 'o' to type 'o': base form is already a variant.
@@ -99,8 +102,11 @@ Defining \exp_args:NNpox on line ...
 Defining \prg_new_conditional:Npox on line ...
 \protected\long macro:->\exp_args:NNpox \prg_new_conditional:Npnn 
 \protected\long macro:->\::N \::p \::o \::x \::: 
+Defining \foo_bar:wT on line ...
 Defining \foo_bar:wF on line ...
-undefined
+Defining \foo_bar:wTF on line ...
+Defining \foo_bar_p:w on line ...
+\long macro:#1;->\prg_return_true: \exp_end: \use:n \use_none:n 
 \long macro:#1;->\prg_return_true: \exp_end: {}
 Variant \cs_new:Npn already defined; not changing it on line ...
 ! LaTeX Error: Variant form 'No' invalid for base form '\cs_new:Npn'.
diff --git a/l3kernel/testfiles/m3text003.luatex.tlg b/l3kernel/testfiles/m3text003.luatex.tlg
index 47eaaa5cc..7792ede48 100644
--- a/l3kernel/testfiles/m3text003.luatex.tlg
+++ b/l3kernel/testfiles/m3text003.luatex.tlg
@@ -25,8 +25,8 @@ LaTeX Font Info:    Checking defaults for OMX/cmex/m/n on input line ....
 LaTeX Font Info:    ... okay on input line ....
 LaTeX Font Info:    Checking defaults for U/cmr/m/n on input line ....
 LaTeX Font Info:    ... okay on input line ....
-Defining \tag_if_active_p: on line ...
 Defining \tag_if_active:T on line ...
-Defining \tag_if_active:TF on line ...
 Defining \tag_if_active:F on line ...
+Defining \tag_if_active:TF on line ...
+Defining \tag_if_active_p: on line ...
 Document started
diff --git a/l3kernel/testfiles/m3text003.ptex.tlg b/l3kernel/testfiles/m3text003.ptex.tlg
index 42c71654f..68f6fe661 100644
--- a/l3kernel/testfiles/m3text003.ptex.tlg
+++ b/l3kernel/testfiles/m3text003.ptex.tlg
@@ -23,8 +23,8 @@ LaTeX Font Info:    Checking defaults for OMX/cmex/m/n on input line ....
 LaTeX Font Info:    ... okay on input line ....
 LaTeX Font Info:    Checking defaults for U/cmr/m/n on input line ....
 LaTeX Font Info:    ... okay on input line ....
-Defining \tag_if_active_p: on line ...
 Defining \tag_if_active:T on line ...
-Defining \tag_if_active:TF on line ...
 Defining \tag_if_active:F on line ...
+Defining \tag_if_active:TF on line ...
+Defining \tag_if_active_p: on line ...
 Document started
diff --git a/l3kernel/testfiles/m3text003.tlg b/l3kernel/testfiles/m3text003.tlg
index 0048df1c6..1aca75882 100644
--- a/l3kernel/testfiles/m3text003.tlg
+++ b/l3kernel/testfiles/m3text003.tlg
@@ -22,8 +22,8 @@ LaTeX Font Info:    Checking defaults for OMX/cmex/m/n on input line ....
 LaTeX Font Info:    ... okay on input line ....
 LaTeX Font Info:    Checking defaults for U/cmr/m/n on input line ....
 LaTeX Font Info:    ... okay on input line ....
-Defining \tag_if_active_p: on line ...
 Defining \tag_if_active:T on line ...
-Defining \tag_if_active:TF on line ...
 Defining \tag_if_active:F on line ...
+Defining \tag_if_active:TF on line ...
+Defining \tag_if_active_p: on line ...
 Document started
diff --git a/l3kernel/testfiles/m3text003.uptex.tlg b/l3kernel/testfiles/m3text003.uptex.tlg
index 42c71654f..68f6fe661 100644
--- a/l3kernel/testfiles/m3text003.uptex.tlg
+++ b/l3kernel/testfiles/m3text003.uptex.tlg
@@ -23,8 +23,8 @@ LaTeX Font Info:    Checking defaults for OMX/cmex/m/n on input line ....
 LaTeX Font Info:    ... okay on input line ....
 LaTeX Font Info:    Checking defaults for U/cmr/m/n on input line ....
 LaTeX Font Info:    ... okay on input line ....
-Defining \tag_if_active_p: on line ...
 Defining \tag_if_active:T on line ...
-Defining \tag_if_active:TF on line ...
 Defining \tag_if_active:F on line ...
+Defining \tag_if_active:TF on line ...
+Defining \tag_if_active_p: on line ...
 Document started
diff --git a/l3kernel/testfiles/m3text003.xetex.tlg b/l3kernel/testfiles/m3text003.xetex.tlg
index 47eaaa5cc..7792ede48 100644
--- a/l3kernel/testfiles/m3text003.xetex.tlg
+++ b/l3kernel/testfiles/m3text003.xetex.tlg
@@ -25,8 +25,8 @@ LaTeX Font Info:    Checking defaults for OMX/cmex/m/n on input line ....
 LaTeX Font Info:    ... okay on input line ....
 LaTeX Font Info:    Checking defaults for U/cmr/m/n on input line ....
 LaTeX Font Info:    ... okay on input line ....
-Defining \tag_if_active_p: on line ...
 Defining \tag_if_active:T on line ...
-Defining \tag_if_active:TF on line ...
 Defining \tag_if_active:F on line ...
+Defining \tag_if_active:TF on line ...
+Defining \tag_if_active_p: on line ...
 Document started





More information about the latex3-commits mailing list.