From 2e4672ed6f7b49c9d1c44b6ca850cfe7024fc639 Mon Sep 17 00:00:00 2001
From: Norbert Preining <norbert@preining.info>
Date: Sat, 12 Oct 2019 03:00:57 +0000
Subject: CTAN sync 201910120300

---
 macros/latex/contrib/l3packages/xparse.dtx | 39 ++++++++++++++++++++++++------
 1 file changed, 32 insertions(+), 7 deletions(-)

(limited to 'macros/latex/contrib/l3packages/xparse.dtx')

diff --git a/macros/latex/contrib/l3packages/xparse.dtx b/macros/latex/contrib/l3packages/xparse.dtx
index 6aee5f22f6..2a0b842fbb 100644
--- a/macros/latex/contrib/l3packages/xparse.dtx
+++ b/macros/latex/contrib/l3packages/xparse.dtx
@@ -67,7 +67,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-28}
+% \date{Released 2019-10-11}
 %
 % \maketitle
 %
@@ -340,6 +340,7 @@
 % mailing list.
 %
 % \subsection{Default values of arguments}
+% \label{sec:defaultvaluesofarguments}
 %
 % Uppercase argument types (\texttt{O}, \texttt{D}, \ldots{}) allow to
 % specify a default value to be used when the argument is missing; their
@@ -676,6 +677,23 @@
 % followed by \cs{ProcessorB} to the tokens grabbed by the \texttt{m}
 % argument.
 %
+% It might sometimes be useful to use the value of another argument as
+% one of the arguments of a processor.  For example, using the
+% \cs{SplitList} processor defined below,
+% \begin{verbatim}
+%   \NewDocumentCommand \foo { O{,} >{\SplitList{#1}} m } { \foobar{#2} }
+%   \foo{a,b;c,d}
+% \end{verbatim}
+% results in |\foobar| receiving the argument |{a}{b;c}{d}| because
+% \cs{SplitList} receives as its two arguments the optional one (whose
+% value here is the default, a comma) and the mandatory one.  To
+% summarize, first the arguments are searched for in the input, then any
+% default argument is determined as explained in
+% Section~\ref{sec:defaultvaluesofarguments}, then these default
+% arguments are passed to any processor.  When referring to arguments
+% (through |#1|, |#2| and so on) in a processor, the arguments used are
+% always those before applying any processor.
+%
 % \begin{variable}{\ProcessedArgument}
 %   \pkg{xparse} defines a very small set of processor functions. In the
 %   main, it is anticipated that code writers will want to create their
@@ -898,7 +916,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\ProvidesExplPackage{xparse}{2019-05-28}{}
+\ProvidesExplPackage{xparse}{2019-10-11}{}
   {L3 Experimental document command parser}
 %    \end{macrocode}
 %
@@ -1552,11 +1570,13 @@
 % \end{macro}
 %
 % \begin{macro}{\@@_args_process:}
-% \begin{macro}{\@@_args_process_loop:nn, \@@_args_process_aux:n, \@@_args_process_aux:nn}
+% \begin{macro}{\@@_args_process_loop:nn, \@@_args_process_aux:n}
 %   Loop through arguments (stored in \cs{l_@@_args_tl}) and the
 %   corresponding processors (in \cs{l_@@_process_all_tl})
 %   simultaneously, apply all processors for each argument and store the
-%   result back into \cs{l_@@_args_tl}.
+%   result back into \cs{l_@@_args_tl}.  To allow processors to depend
+%   on other arguments, for every processor define a temporary auxiliary
+%   that receives all arguments \cs{l_@@_args_tl}.
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_args_process:
   {
@@ -1575,9 +1595,13 @@
     \tl_put_right:No \l_@@_args_ii_tl
       { \exp_after:wN { \ProcessedArgument } }
   }
-\cs_new_protected:Npn \@@_args_process_aux:n
-  { \exp_args:No \@@_args_process_aux:nn { \ProcessedArgument } }
-\cs_new_protected:Npn \@@_args_process_aux:nn #1#2 { #2 {#1} }
+\cs_new_protected:Npn \@@_args_process_aux:n #1
+  {
+    \cs_generate_from_arg_count:NNnn \@@_tmp:w \cs_set:Npn
+      { \tl_count:N \l_@@_args_tl } {#1}
+    \exp_args:NNNo \exp_after:wN \@@_tmp:w \l_@@_args_tl
+      { \ProcessedArgument }
+  }
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
@@ -4336,6 +4360,7 @@
       { \@@_peek_nonspace_aux:nNNTF { #1 ~ } #2 #3 {#4} {#5} }
       { #2 #3 { #4 } { #5 #1 } }
   }
+%    \end{macrocode}
 % \end{macro}
 %
 % \subsection{Messages}
-- 
cgit v1.2.3

