[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