[latex3-commits] [latex3/latex3] conditional-forms: Auto-generate all forms in \prg_new_conditional:Npnn, etc. (7bb977673)
github at latex-project.org
github at latex-project.org
Wed Nov 20 11:32:46 CET 2024
Repository : https://github.com/latex3/latex3
On branch : conditional-forms
Link : https://github.com/latex3/latex3/commit/7bb977673ebf7c11d48efd8d5a34389babad5d16
>---------------------------------------------------------------
commit 7bb977673ebf7c11d48efd8d5a34389babad5d16
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.
>---------------------------------------------------------------
7bb977673ebf7c11d48efd8d5a34389babad5d16
l3kernel/CHANGELOG.md | 4 +
l3kernel/l3basics.dtx | 150 +++++++++++++++-----------------
l3kernel/l3msg.dtx | 7 --
l3kernel/l3prg.dtx | 33 +++----
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, 109 insertions(+), 115 deletions(-)
diff --git a/l3kernel/CHANGELOG.md b/l3kernel/CHANGELOG.md
index ce71252de..a2820b4ee 100644
--- a/l3kernel/CHANGELOG.md
+++ b/l3kernel/CHANGELOG.md
@@ -12,6 +12,10 @@ this project uses date-based 'snapshot' version identifiers.
can be used with `V`-type expansion
- `\sys_if_engine_opentype:(TF)`
+### Changed
+- Create all forms automatically in `\prg_new_conditiona:Npnn`,
+ etc.
+
### 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..bdc813090 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,17 +2121,17 @@
%
% \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, 5: signature,
+% 4: parameter text, 7: 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
@@ -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 c4f2ab1fa..dc7627c2b 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 \Arg{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
@@ -110,10 +109,9 @@
% not need to be expandable. The \texttt{new} version check for
% existing definitions and perform assignments globally
% (\emph{cf.}~\cs{cs_new:Npn}) whereas the \texttt{set} version do
-% not (\emph{cf.}~\cs{cs_set:Npn}). The conditionals created are
-% depended on the comma-separated list of \meta{conditions}, which
-% should be one or more of \texttt{T}, \texttt{F} and \texttt{TF} (not
-% \texttt{p}).
+% not (\emph{cf.}~\cs{cs_set:Npn}). The \Arg{conditions} argument is
+% purely a reminder to the programmer: |T|, |F| and |TF| forms are
+% always created.
% \end{function}
%
% The conditionals are defined by \cs{prg_new_conditional:Npnn} and
@@ -1200,9 +1198,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 +1357,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 tru 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 +1368,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 +1407,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 +1415,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.