[latex3-commits] [git/LaTeX3-latex3-latex3] xparse: Remove user-provided setup for xparse b-type arguments (4bf753a)
Bruno Le Floch
bruno at le-floch.fr
Wed Feb 27 18:30:12 CET 2019
Repository : https://github.com/latex3/latex3
On branch : xparse
Link : https://github.com/latex3/latex3/commit/4bf753a2f508b2d8f0cfd05839e631bec70e0bc1
>---------------------------------------------------------------
commit 4bf753a2f508b2d8f0cfd05839e631bec70e0bc1
Author: Bruno Le Floch <bruno at le-floch.fr>
Date: Wed Feb 27 18:30:12 2019 +0100
Remove user-provided setup for xparse b-type arguments
>---------------------------------------------------------------
4bf753a2f508b2d8f0cfd05839e631bec70e0bc1
l3packages/xparse/testfiles/xparse005.lvt | 9 ++--
l3packages/xparse/testfiles/xparse005.tlg | 2 +-
l3packages/xparse/xparse.dtx | 77 ++++++++++++++---------------
3 files changed, 42 insertions(+), 46 deletions(-)
diff --git a/l3packages/xparse/testfiles/xparse005.lvt b/l3packages/xparse/testfiles/xparse005.lvt
index aed6486..1ac1a46 100644
--- a/l3packages/xparse/testfiles/xparse005.lvt
+++ b/l3packages/xparse/testfiles/xparse005.lvt
@@ -72,10 +72,10 @@
% The following tests are outside to allow \ExplSyntaxOff and \obeylines
\TEST { Environment~body~valid } { }
-\NewDocumentEnvironment { env1 } { o >{\SplitList{\par}} + b { } }
+\NewDocumentEnvironment { env1 } { o >{\SplitList{\par}} + b }
{ \TYPE { \tl_to_str:n {|#1|#2|} } }
{ \TYPE { \tl_to_str:n {|#1|} } }
-\NewDocumentEnvironment { env2 } { ! o ! b { \obeylines } }
+\NewDocumentEnvironment { env2 } { ! o ! b }
{ \TYPE { \tl_to_str:n {|#1|#2|} } }
{ \TYPE { \tl_to_str:n {|#1|} } }
\ExplSyntaxOff
@@ -108,10 +108,9 @@
\begin{env1}\end{env2}
\begin{env2}
\par
- \endgroup % error recovery for runaway args is not great: we need this \endgroup
\end{env2}
- \NewDocumentCommand{\testE} { b{} } { }
- \NewDocumentEnvironment{env3} { b{} m } { } { }
+ \NewDocumentCommand{\testE} { b } { }
+ \NewDocumentEnvironment{env3} { b m } { } { }
}
% The rest of this test tests all of xparse's messages.
diff --git a/l3packages/xparse/testfiles/xparse005.tlg b/l3packages/xparse/testfiles/xparse005.tlg
index 10ef228..6a8f71f 100644
--- a/l3packages/xparse/testfiles/xparse005.tlg
+++ b/l3packages/xparse/testfiles/xparse005.tlg
@@ -119,7 +119,7 @@ TEST 4: Environment body valid
============================================================
|...|{\begin {any} \begin {unbalanced} \end {environments} \begin {provided}}{\end {nesting} \end {works} \begin {out} \end {!}}|
|...|
-|-NoValue-| [...]^^M\begin {any}^^M\begin {unbalanced}^^M\end {environments}^^M\begin {provided}^^M\end {nesting}^^M\end {works}^^M\begin {out}^^M\end {!}^^M|
+|-NoValue-| [...] \begin {any} \begin {unbalanced} \end {environments} \begin {provided} \end {nesting} \end {works} \begin {out} \end {!} |
|-NoValue-|
============================================================
TEST 5: Body invalid
diff --git a/l3packages/xparse/xparse.dtx b/l3packages/xparse/xparse.dtx
index c245abb..1f74e0f 100644
--- a/l3packages/xparse/xparse.dtx
+++ b/l3packages/xparse/xparse.dtx
@@ -149,10 +149,8 @@
% argument will produce an error when it appears within an argument of
% another function.
% \item[b] Only suitable in the argument specification of an
-% environment, \texttt{b}\marg{code} denotes the body of the
-% environment, between |\begin|\marg{environment} and
-% |\end|\marg{environment}. The \meta{code} is run before
-% \pkg{xparse} reads the environment's body. See
+% environment, it denotes the body of the environment, between
+% |\begin|\marg{environment} and |\end|\marg{environment}. See
% Section~\ref{sec:body} for details.
% \end{itemize}
% The types which define optional arguments are:
@@ -398,7 +396,7 @@
% useful to have the body as a standard argument.
%
% This is achieved in \pkg{xparse} by ending the argument specification
-% with \texttt{b}\marg{code}. The approach taken in \pkg{xparse} is
+% with~\texttt{b}. The approach taken in \pkg{xparse} is
% different from the earlier packages \pkg{environ} or \pkg{newenviron}:
% the body of the environment is provided to the code part as a usual
% argument |#1|, |#2| etc.\@, rather than stored in a macro such as
@@ -407,7 +405,7 @@
% For instance
% \begin{verbatim}
% \NewDocumentEnvironment { twice }
-% { O{\ttfamily} +b{} }
+% { O{\ttfamily} +b }
% {#2#1#2} {}
% \begin{twice}[\itshape]
% Hello world!
@@ -417,18 +415,14 @@
%
% The prefix |+| is used to allow multiple paragraphs in the
% environment's body. Argument processors can also be applied to
-% \texttt{b}-type arguments.
+% \texttt{b}~arguments.
%
% By default, spaces are trimmed at both ends of the body: in the
% example there would otherwise be spaces coming from the ends the lines
% after |[\itshape]| and |world!|. Putting the prefix |!| before
% \texttt{b} suppresses space-trimming.
%
-% In \texttt{b}\marg{code} the \meta{code} is some set-up, run before
-% \pkg{xparse} grabs the body of the environment. This can be used to
-% preserve spaces or lines when grabbing environments.
-%
-% When \texttt{b}\marg{code} is used in the argument specification,
+% When \texttt{b} is used in the argument specification,
% the last argument of \cs{NewDocumentEnvironment}, which consists of
% an \meta{end code} to insert at |\end|\marg{environment}, is
% redundant since one can simply put that code at the end of the
@@ -1078,6 +1072,14 @@
% \end{macrocode}
% \end{variable}
%
+% \begin{variable}{\l_@@_saved_args_tl}
+% Stores \cs{l_@@_args_tl} to deal with space-trimming of
+% \texttt{b}-type arguments.
+% \begin{macrocode}
+\tl_new:N \l_@@_saved_args_tl
+% \end{macrocode}
+% \end{variable}
+%
% \begin{variable}{\l_@@_signature_tl}
% Used when constructing the signature (code for argument grabbing) to
% hold what will become the implementation of the main function.
@@ -1958,11 +1960,11 @@
% \end{macro}
%
% \begin{macro}{\@@_normalize_type_b:w}
-% This argument type is not allowed for commands. This takes one
-% argument and is only allowed at the end of the argument
-% specification, hence we check both |#1| and |#2| for being the end.
+% This argument type is not allowed for commands. This is only
+% allowed at the end of the argument specification, hence we check
+% that |#1| is the end.
% \begin{macrocode}
-\cs_new_protected:Npn \@@_normalize_type_b:w #1#2
+\cs_new_protected:Npn \@@_normalize_type_b:w #1
{
\bool_if:NF \l_@@_environment_bool
{
@@ -1971,13 +1973,12 @@
{ \@@_environment_or_command: } { b }
\@@_bad_def:wn
}
- \quark_if_recursion_tail_stop_do:nn {#1} { \@@_bad_arg_spec:wn }
\tl_clear:N \l_@@_last_delimiters_tl
- \@@_add_arg_spec:n { b {#1} }
- \quark_if_recursion_tail_stop:n {#2}
+ \@@_add_arg_spec:n { b }
+ \quark_if_recursion_tail_stop:n {#1}
\__kernel_msg_error:nnxx { xparse } { arg-after-body }
{ \@@_environment_or_command: }
- { \tl_to_str:n {#2} }
+ { \tl_to_str:n {#1} }
\@@_bad_def:wn
}
% \end{macrocode}
@@ -2239,12 +2240,11 @@
%
% \begin{macro}{\@@_add_type_b:w}
% \begin{macrocode}
-\cs_new_protected:Npn \@@_add_type_b:w #1
+\cs_new_protected:Npn \@@_add_type_b:w
{
\@@_flush_m_args:
\@@_add_default:
\@@_add_grabber:N b
- \tl_put_right:Nn \l_@@_signature_tl { {#1} }
\@@_prepare_signature:N
}
% \end{macrocode}
@@ -2726,49 +2726,46 @@
% \@@_grab_b_long:w,
% \@@_grab_b_obey_spaces:w,
% \@@_grab_b_long_obey_spaces:w,
-% \@@_grab_b_aux:NNnw,
+% \@@_grab_b_aux:NNw,
% \@@_grab_b_end:Nw
% }
% This uses the well-tested code of \texttt{D}-type arguments,
% skipping the peeking step because the \texttt{b}-type argument is
% always present, and adding a cleanup stage at the end by hijacking
-% the signature. The user-provided set-up code |#3| is run in a group
-% and the clean-up consists of closing that group while properly
+% the signature. The clean-up consists of properly
% dealing with \cs{l_@@_args_tl} and also putting back the \cs{end}
% that served as an end-delimiter: this \cs{end} receives the
% environment name as its argument and is run normally. The
% \texttt{D}-type code stores the argument found (body of the
% environment) as a brace group in \cs{l_@@_args_tl} and depending on
% the presence of a prefix~|!| we trim spaces or not before adding
-% this braced argument into \cs{l_@@_args_tl} outside the group.
+% this braced argument into the saved \cs{l_@@_args_tl}.
% The strange \verb*|\begin | control sequence is there for display
% purposes only: it has to look like |\begin| in the terminal but
% not to delimited arguments.
% \begin{macrocode}
\cs_new_protected:Npn \@@_grab_b:w
- { \@@_grab_b_aux:NNnw \cs_set_protected_nopar:Npn \tl_trim_spaces:n }
+ { \@@_grab_b_aux:NNw \cs_set_protected_nopar:Npn \tl_trim_spaces:n }
\cs_new_protected:Npn \@@_grab_b_long:w
- { \@@_grab_b_aux:NNnw \cs_set_protected:Npn \tl_trim_spaces:n }
+ { \@@_grab_b_aux:NNw \cs_set_protected:Npn \tl_trim_spaces:n }
\cs_new_protected:Npn \@@_grab_b_obey_spaces:w
- { \@@_grab_b_aux:NNnw \cs_set_protected_nopar:Npn \exp_not:n }
+ { \@@_grab_b_aux:NNw \cs_set_protected_nopar:Npn \exp_not:n }
\cs_new_protected:Npn \@@_grab_b_long_obey_spaces:w
- { \@@_grab_b_aux:NNnw \cs_set_protected:Npn \exp_not:n }
-\cs_new_protected:Npn \@@_grab_b_aux:NNnw #1#2#3#4 \@@_run_code:
+ { \@@_grab_b_aux:NNw \cs_set_protected:Npn \exp_not:n }
+\cs_new_protected:Npn \@@_grab_b_aux:NNw #1#2#3 \@@_run_code:
{
- \@@_grab_D_aux:NNnN \begin \end {#4} #1
+ \@@_grab_D_aux:NNnN \begin \end {#3} #1
\tl_put_left:Nn \l_@@_signature_tl { \@@_grab_b_end:Nw #2 }
- \group_begin:
- \tl_clear:N \l_@@_args_tl
- #3
- \exp_args:Nc \l_@@_fn_tl { begin ~ }
+ \tl_set_eq:NN \l_@@_saved_args_tl \l_@@_args_tl
+ \tl_clear:N \l_@@_args_tl
+ \exp_args:Nc \l_@@_fn_tl { begin ~ }
}
\cs_new_protected:Npn \@@_grab_b_end:Nw #1#2 \@@_run_code:
{
- \use:x
+ \tl_set:Nx \l_@@_args_tl
{
- \group_end:
- \tl_put_right:Nn \exp_not:N \l_@@_args_tl
- { { \exp_after:wN #1 \l_@@_args_tl } }
+ \exp_not:V \l_@@_saved_args_tl
+ { \exp_after:wN #1 \l_@@_args_tl }
}
#2
\@@_run_code:
More information about the latex3-commits
mailing list