[latex3-commits] [git/latex3] master: Proper error for \exp_end_continue_f:w and improve documentation a bit (f284cc4)
Bruno Le Floch
bruno at le-floch.fr
Mon Nov 27 23:20:50 CET 2017
Repository : https://github.com/latex3/latex3
On branch : master
Link : https://github.com/latex3/latex3/commit/f284cc4ba548a7061966610e6532774144e87933
>---------------------------------------------------------------
commit f284cc4ba548a7061966610e6532774144e87933
Author: Bruno Le Floch <bruno at le-floch.fr>
Date: Mon Nov 27 13:25:16 2017 -0500
Proper error for \exp_end_continue_f:w and improve documentation a bit
>---------------------------------------------------------------
f284cc4ba548a7061966610e6532774144e87933
l3kernel/l3expan.dtx | 85 +++++++++++++++----------------
l3kernel/l3msg.dtx | 2 +
l3kernel/testfiles/m3expl001.luatex.tlg | 1 +
l3kernel/testfiles/m3expl001.ptex.tlg | 1 +
l3kernel/testfiles/m3expl001.tlg | 1 +
l3kernel/testfiles/m3expl001.uptex.tlg | 1 +
l3kernel/testfiles/m3expl001.xetex.tlg | 1 +
l3kernel/testfiles/m3expl003.luatex.tlg | 1 +
l3kernel/testfiles/m3expl003.ptex.tlg | 1 +
l3kernel/testfiles/m3expl003.tlg | 1 +
l3kernel/testfiles/m3expl003.uptex.tlg | 1 +
l3kernel/testfiles/m3expl003.xetex.tlg | 1 +
12 files changed, 53 insertions(+), 44 deletions(-)
diff --git a/l3kernel/l3expan.dtx b/l3kernel/l3expan.dtx
index 064cb29..d4a1c0c 100644
--- a/l3kernel/l3expan.dtx
+++ b/l3kernel/l3expan.dtx
@@ -1426,57 +1426,54 @@
% \begin{macro}{\exp_end:}
% \begin{macro}{\exp_end_continue_f:w}
% \begin{macro}{\exp_end_continue_f:nw}
-%
-% To trigger a sequence of \enquote{arbitrary} many expansions we need a
-% method to invoke \TeX's expansion mechanism in such a way that a)
-% we are able to stop it in a controlled manner and b) that the
-% result of what triggered the expansion in the first place is
-% null, i.e., that we do not get any unwanted side effects. There
-% aren't that many possibilities in \TeX{}; in fact the one
-% explained below might well be the only one (as normally the
-% result of expansion is not null).
-%
-% The trick here is to make use of the fact that
-% \cs{tex_romannumeral:D} expands the tokens following it when
-% looking for a number and that its expansion is null if that
-% number turns out to be zero or negative. So we use that to start
-% the expansion sequence.
-% \begin{macrocode}
-%\cs_new_eq:NN \exp:w \tex_romannumeral:D
-% \end{macrocode}
-% So to stop the expansion sequence in a controlled way all we need
-% to provide is a constant integer zero as part of expanded tokens. As this is
-% an integer constant it immediately stops
-% \cs{tex_romannumerl:D}'s search for a number.
+% To trigger a sequence of \enquote{arbitrarily} many expansions we
+% need a method to invoke \TeX's expansion mechanism in such a way
+% that (a) we are able to stop it in a controlled manner and (b) the
+% result of what triggered the expansion in the first place is null,
+% i.e.\@, that we do not get any unwanted side effects. There aren't
+% that many possibilities in \TeX{}; in fact the one explained below
+% might well be the only one (as normally the result of expansion is
+% not null).
+%
+% The trick here is to make use of the fact that
+% \cs{tex_romannumeral:D} expands the tokens following it when looking
+% for a number and that its expansion is null if that number turns out
+% to be zero or negative. So we use that to start the expansion
+% sequence: \cs{exp:w} is set equal to \cs{tex_romannumeral:D} in
+% \pkg{l3basics}. To stop the expansion sequence in a controlled way
+% all we need to provide is a constant integer zero as part of
+% expanded tokens. As this is an integer constant it immediately stops
+% \cs{tex_romannumeral:D}'s search for a number. Again, the
+% definition of \cs{exp_end:} as the integer constant zero is in
+% \pkg{l3basics}. (Note that according to our specification all
+% tokens we expand initiated by \cs{exp:w} are supposed to be
+% expandable (as well as their replacement text in the expansion) so
+% we will not encounter a \enquote{number} that actually result in a
+% roman numeral being generated. Or if we do then the programmer made
+% a mistake.)
+%
+% If on the other hand we want to stop the initial expansion sequence
+% but continue with an \texttt{f}-type expansion we provide the
+% alphabetic constant |`^^@| that also represents |0| but this time
+% \TeX's syntax for a \meta{number} continues searching for an
+% optional space (and it continues expansion doing that) --- see
+% \TeX{}book page~269 for details.
% \begin{macrocode}
-%\int_const:Nn \exp_end: { 0 }
-% \end{macrocode}
-% (Note that according to our specification all tokens we expand
-% initiated by \cs{exp:w} are supposed to be expandable (as well as
-% their replacement text in the expansion) so we will not encounter
-% a \enquote{number} that actually result in a roman numeral being
-% generated. Or if we do then the programmer made a mistake.)
-%
-% If on the other hand we want to stop the initial expansion
-% sequence but continue with an \texttt{f}-type expansion we provide the
-% alphabetic constant |`^^@| that also represents |0| but this time
-% \TeX's syntax for a \meta{number} continues searching for an
-% optional space (and it continues expansion doing that) ---
-% see \TeX{}book page~269 for details.
-% \begin{macrocode}
-\tex_catcode:D `\^^@=13
-\cs_new_protected:Npn \exp_end_continue_f:w {`^^@}
+\group_begin:
+ \tex_catcode:D `\^^@ = 13
+ \cs_new_protected:Npn \exp_end_continue_f:w { `^^@ }
% \end{macrocode}
% If the above definition ever appears outside its proper context
% the active character |^^@| will be executed so we turn this into an
-% error.\footnote{Need to get a real error message.}
+% error.
% \begin{macrocode}
-\cs_new:Npn ^^@{\expansionERROR}
+ \cs_new:Npn ^^@
+ { \__msg_kernel_expandable_error:nn { kernel } { bad-exp-end-f } }
% \end{macrocode}
-%
+% The same but grabbing an argument to remove spaces and braces.
% \begin{macrocode}
-\cs_new:Npn \exp_end_continue_f:nw #1 { `^^@ #1 }
-\tex_catcode:D `\^^@=15
+ \cs_new:Npn \exp_end_continue_f:nw #1 { `^^@ #1 }
+\group_end:
% \end{macrocode}
% \end{macro}
% \end{macro}
diff --git a/l3kernel/l3msg.dtx b/l3kernel/l3msg.dtx
index 073980e..83f3786 100644
--- a/l3kernel/l3msg.dtx
+++ b/l3kernel/l3msg.dtx
@@ -1999,6 +1999,8 @@
% Some errors only appear in expandable settings,
% hence don't need a \enquote{more-text} argument.
% \begin{macrocode}
+\@@_kernel_new:nnn { kernel } { bad-exp-end-f }
+ { Misused~\exp_end_continue_f:w or~:nw }
\@@_kernel_new:nnn { kernel } { bad-variable }
{ Erroneous~variable~#1 used! }
\@@_kernel_new:nnn { kernel } { misused-sequence }
diff --git a/l3kernel/testfiles/m3expl001.luatex.tlg b/l3kernel/testfiles/m3expl001.luatex.tlg
index 95c6c97..696667d 100644
--- a/l3kernel/testfiles/m3expl001.luatex.tlg
+++ b/l3kernel/testfiles/m3expl001.luatex.tlg
@@ -2857,6 +2857,7 @@ Defining message LaTeX/kernel/invalid-variant on line ...
Defining message LaTeX/kernel/debug on line ...
Defining message LaTeX/kernel/expr on line ...
Defining message LaTeX/kernel/non-declared-variable on line ...
+Defining message LaTeX/kernel/bad-exp-end-f on line ...
Defining message LaTeX/kernel/bad-variable on line ...
Defining message LaTeX/kernel/misused-sequence on line ...
Defining message LaTeX/kernel/misused-prop on line ...
diff --git a/l3kernel/testfiles/m3expl001.ptex.tlg b/l3kernel/testfiles/m3expl001.ptex.tlg
index 781f8cb..8332ed2 100644
--- a/l3kernel/testfiles/m3expl001.ptex.tlg
+++ b/l3kernel/testfiles/m3expl001.ptex.tlg
@@ -2845,6 +2845,7 @@ Defining message LaTeX/kernel/invalid-variant on line ...
Defining message LaTeX/kernel/debug on line ...
Defining message LaTeX/kernel/expr on line ...
Defining message LaTeX/kernel/non-declared-variable on line ...
+Defining message LaTeX/kernel/bad-exp-end-f on line ...
Defining message LaTeX/kernel/bad-variable on line ...
Defining message LaTeX/kernel/misused-sequence on line ...
Defining message LaTeX/kernel/misused-prop on line ...
diff --git a/l3kernel/testfiles/m3expl001.tlg b/l3kernel/testfiles/m3expl001.tlg
index f360858..6b5d698 100644
--- a/l3kernel/testfiles/m3expl001.tlg
+++ b/l3kernel/testfiles/m3expl001.tlg
@@ -2845,6 +2845,7 @@ Defining message LaTeX/kernel/invalid-variant on line ...
Defining message LaTeX/kernel/debug on line ...
Defining message LaTeX/kernel/expr on line ...
Defining message LaTeX/kernel/non-declared-variable on line ...
+Defining message LaTeX/kernel/bad-exp-end-f on line ...
Defining message LaTeX/kernel/bad-variable on line ...
Defining message LaTeX/kernel/misused-sequence on line ...
Defining message LaTeX/kernel/misused-prop on line ...
diff --git a/l3kernel/testfiles/m3expl001.uptex.tlg b/l3kernel/testfiles/m3expl001.uptex.tlg
index d25595e..ee58219 100644
--- a/l3kernel/testfiles/m3expl001.uptex.tlg
+++ b/l3kernel/testfiles/m3expl001.uptex.tlg
@@ -2845,6 +2845,7 @@ Defining message LaTeX/kernel/invalid-variant on line ...
Defining message LaTeX/kernel/debug on line ...
Defining message LaTeX/kernel/expr on line ...
Defining message LaTeX/kernel/non-declared-variable on line ...
+Defining message LaTeX/kernel/bad-exp-end-f on line ...
Defining message LaTeX/kernel/bad-variable on line ...
Defining message LaTeX/kernel/misused-sequence on line ...
Defining message LaTeX/kernel/misused-prop on line ...
diff --git a/l3kernel/testfiles/m3expl001.xetex.tlg b/l3kernel/testfiles/m3expl001.xetex.tlg
index ba797b4..bc30c78 100644
--- a/l3kernel/testfiles/m3expl001.xetex.tlg
+++ b/l3kernel/testfiles/m3expl001.xetex.tlg
@@ -2855,6 +2855,7 @@ Defining message LaTeX/kernel/invalid-variant on line ...
Defining message LaTeX/kernel/debug on line ...
Defining message LaTeX/kernel/expr on line ...
Defining message LaTeX/kernel/non-declared-variable on line ...
+Defining message LaTeX/kernel/bad-exp-end-f on line ...
Defining message LaTeX/kernel/bad-variable on line ...
Defining message LaTeX/kernel/misused-sequence on line ...
Defining message LaTeX/kernel/misused-prop on line ...
diff --git a/l3kernel/testfiles/m3expl003.luatex.tlg b/l3kernel/testfiles/m3expl003.luatex.tlg
index 95c6c97..696667d 100644
--- a/l3kernel/testfiles/m3expl003.luatex.tlg
+++ b/l3kernel/testfiles/m3expl003.luatex.tlg
@@ -2857,6 +2857,7 @@ Defining message LaTeX/kernel/invalid-variant on line ...
Defining message LaTeX/kernel/debug on line ...
Defining message LaTeX/kernel/expr on line ...
Defining message LaTeX/kernel/non-declared-variable on line ...
+Defining message LaTeX/kernel/bad-exp-end-f on line ...
Defining message LaTeX/kernel/bad-variable on line ...
Defining message LaTeX/kernel/misused-sequence on line ...
Defining message LaTeX/kernel/misused-prop on line ...
diff --git a/l3kernel/testfiles/m3expl003.ptex.tlg b/l3kernel/testfiles/m3expl003.ptex.tlg
index 781f8cb..8332ed2 100644
--- a/l3kernel/testfiles/m3expl003.ptex.tlg
+++ b/l3kernel/testfiles/m3expl003.ptex.tlg
@@ -2845,6 +2845,7 @@ Defining message LaTeX/kernel/invalid-variant on line ...
Defining message LaTeX/kernel/debug on line ...
Defining message LaTeX/kernel/expr on line ...
Defining message LaTeX/kernel/non-declared-variable on line ...
+Defining message LaTeX/kernel/bad-exp-end-f on line ...
Defining message LaTeX/kernel/bad-variable on line ...
Defining message LaTeX/kernel/misused-sequence on line ...
Defining message LaTeX/kernel/misused-prop on line ...
diff --git a/l3kernel/testfiles/m3expl003.tlg b/l3kernel/testfiles/m3expl003.tlg
index f360858..6b5d698 100644
--- a/l3kernel/testfiles/m3expl003.tlg
+++ b/l3kernel/testfiles/m3expl003.tlg
@@ -2845,6 +2845,7 @@ Defining message LaTeX/kernel/invalid-variant on line ...
Defining message LaTeX/kernel/debug on line ...
Defining message LaTeX/kernel/expr on line ...
Defining message LaTeX/kernel/non-declared-variable on line ...
+Defining message LaTeX/kernel/bad-exp-end-f on line ...
Defining message LaTeX/kernel/bad-variable on line ...
Defining message LaTeX/kernel/misused-sequence on line ...
Defining message LaTeX/kernel/misused-prop on line ...
diff --git a/l3kernel/testfiles/m3expl003.uptex.tlg b/l3kernel/testfiles/m3expl003.uptex.tlg
index d25595e..ee58219 100644
--- a/l3kernel/testfiles/m3expl003.uptex.tlg
+++ b/l3kernel/testfiles/m3expl003.uptex.tlg
@@ -2845,6 +2845,7 @@ Defining message LaTeX/kernel/invalid-variant on line ...
Defining message LaTeX/kernel/debug on line ...
Defining message LaTeX/kernel/expr on line ...
Defining message LaTeX/kernel/non-declared-variable on line ...
+Defining message LaTeX/kernel/bad-exp-end-f on line ...
Defining message LaTeX/kernel/bad-variable on line ...
Defining message LaTeX/kernel/misused-sequence on line ...
Defining message LaTeX/kernel/misused-prop on line ...
diff --git a/l3kernel/testfiles/m3expl003.xetex.tlg b/l3kernel/testfiles/m3expl003.xetex.tlg
index ba797b4..bc30c78 100644
--- a/l3kernel/testfiles/m3expl003.xetex.tlg
+++ b/l3kernel/testfiles/m3expl003.xetex.tlg
@@ -2855,6 +2855,7 @@ Defining message LaTeX/kernel/invalid-variant on line ...
Defining message LaTeX/kernel/debug on line ...
Defining message LaTeX/kernel/expr on line ...
Defining message LaTeX/kernel/non-declared-variable on line ...
+Defining message LaTeX/kernel/bad-exp-end-f on line ...
Defining message LaTeX/kernel/bad-variable on line ...
Defining message LaTeX/kernel/misused-sequence on line ...
Defining message LaTeX/kernel/misused-prop on line ...
More information about the latex3-commits
mailing list