diff options
author | Karl Berry <karl@freefriends.org> | 2020-05-14 21:16:02 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2020-05-14 21:16:02 +0000 |
commit | bb587f3190ec7933ee6a18e994099e566c6e8009 (patch) | |
tree | 6619bbe50d37ded7861833bc580028c2a8cca64c /Master/texmf-dist/source | |
parent | 9e186a1e49f4a0ef3154b453e114e0e7adc6ae6c (diff) |
l3 (14may20)
git-svn-id: svn://tug.org/texlive/trunk@55142 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source')
62 files changed, 466 insertions, 252 deletions
diff --git a/Master/texmf-dist/source/latex/l3kernel/expl3.dtx b/Master/texmf-dist/source/latex/l3kernel/expl3.dtx index a24e520f458..c03cfc436e5 100644 --- a/Master/texmf-dist/source/latex/l3kernel/expl3.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/expl3.dtx @@ -24,7 +24,7 @@ % %<*driver|generic|package|2ekernel> %</driver|generic|package|2ekernel> -\def\ExplFileDate{2020-05-11}% +\def\ExplFileDate{2020-05-14}% %<*driver> \documentclass[full]{l3doc} \usepackage{graphicx} @@ -51,7 +51,7 @@ % }^^A % } % -% \date{Released 2020-05-11} +% \date{Released 2020-05-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3alloc.dtx b/Master/texmf-dist/source/latex/l3kernel/l3alloc.dtx index 188477adcf5..4e3ffdbe20f 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3alloc.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3alloc.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-05-11} +% \date{Released 2020-05-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx b/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx index 22b7a75d15d..8069dbafa87 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-05-11} +% \date{Released 2020-05-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx b/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx index 4ff6267be1c..88682ead646 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-05-11} +% \date{Released 2020-05-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3box.dtx b/Master/texmf-dist/source/latex/l3kernel/l3box.dtx index 7c6b12dd787..9279b3a1da4 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3box.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3box.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-05-11} +% \date{Released 2020-05-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx b/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx index c97fb26e258..90d433dcd94 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2020-05-11} +% \date{Released 2020-05-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx b/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx index 0b011f80e0e..b6c9390ceef 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2020-05-11} +% \date{Released 2020-05-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx b/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx index 47fca974655..2dd3f49c121 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-05-11} +% \date{Released 2020-05-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3color-base.dtx b/Master/texmf-dist/source/latex/l3kernel/l3color-base.dtx index 0555edc19cb..5f0d01d4207 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3color-base.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3color-base.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-05-11} +% \date{Released 2020-05-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3debug.dtx b/Master/texmf-dist/source/latex/l3kernel/l3debug.dtx index df79d6a031d..d3be8e5fd03 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3debug.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3debug.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-05-11} +% \date{Released 2020-05-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx b/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx index f84e9faea3a..3143cbcd9f1 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-05-11} +% \date{Released 2020-05-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx b/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx index 9ef8771afb4..1f9bb203941 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx @@ -79,7 +79,7 @@ and all files in that bundle must be distributed together. % % \title{The \cls{l3doc} class} % \author{\Team} -% \date{Released 2020-05-11} +% \date{Released 2020-05-14} % \maketitle % \tableofcontents % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx b/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx index 044e3fbab5f..8177c56ddce 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx @@ -63,7 +63,7 @@ % }^^A % } % -% \date{Released 2020-05-11} +% \date{Released 2020-05-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx b/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx index 0841f43fc44..6357eb73174 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-05-11} +% \date{Released 2020-05-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3file.dtx b/Master/texmf-dist/source/latex/l3kernel/l3file.dtx index c816d771fbe..2aba70b29ed 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3file.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3file.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2020-05-11} +% \date{Released 2020-05-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3final.dtx b/Master/texmf-dist/source/latex/l3kernel/l3final.dtx index d48aac03f51..79b816bfd8a 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3final.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3final.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-05-11} +% \date{Released 2020-05-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx b/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx index 7a76d293869..301f78a3407 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-05-11} +% \date{Released 2020-05-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx index 725abc23b9e..64e67f8fad0 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2020-05-11} +% \date{Released 2020-05-14} % \maketitle % % \begin{documentation} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx index 02817722757..85a31450c94 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-05-11} +% \date{Released 2020-05-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx index 55823ba7fb2..b634f3a949a 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2020-05-11} +% \date{Released 2020-05-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx index fc629937c47..9ede33c3780 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-05-11} +% \date{Released 2020-05-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx index a1defe98894..8f2c090d5b0 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2020-05-11} +% \date{Released 2020-05-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx index 8904c442005..28b2eaca4fa 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2020-05-11} +% \date{Released 2020-05-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx index a503e3a3d49..a76ba25fb4b 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2020-05-11} +% \date{Released 2020-05-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx index 978d4dfe7f3..bc0a4c1e64f 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2020-05-11} +% \date{Released 2020-05-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx index 11bf7d311d1..61e8d09b8fe 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2020-05-11} +% \date{Released 2020-05-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx index a5b0bc64859..0edd5bf20c1 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-05-11} +% \date{Released 2020-05-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx index 51d25a090ee..093fdccffe0 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2020-05-11} +% \date{Released 2020-05-14} % \maketitle % % \begin{documentation} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx index 156485e6286..1d4ce7f6a68 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2020-05-11} +% \date{Released 2020-05-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx index f9bcbee4677..4dd9a6815c1 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx @@ -49,7 +49,7 @@ % }^^A % } % -% \date{Released 2020-05-11} +% \date{Released 2020-05-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx index d41c366b739..9295a0d05a3 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2020-05-11} +% \date{Released 2020-05-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3int.dtx b/Master/texmf-dist/source/latex/l3kernel/l3int.dtx index faab276e44a..6b58e379da8 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3int.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3int.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-05-11} +% \date{Released 2020-05-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx b/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx index 1c68482f551..c8ea3e31721 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2020-05-11} +% \date{Released 2020-05-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx b/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx index d5cc6170ad4..52dd498f571 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-05-11} +% \date{Released 2020-05-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx b/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx index b3630af0b16..621f3776ded 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-05-11} +% \date{Released 2020-05-14} % % \maketitle % @@ -939,13 +939,13 @@ % % \subsection{Low-level interface} % -% The low-level key parser is based heavily on \pkg{keyval}, but with a number -% of additional \enquote{safety} requirements and with the idea that the -% parsed list of key--value pairs can be processed in a variety of ways. -% The net result is that this code needs around twice the amount of time -% as \pkg{keyval} to parse the same list of keys. To optimise speed as far -% as reasonably practical, a number of lower-level approaches are taken -% rather than using the higher-level \pkg{expl3} interfaces. +% The low-level key parser's implementation is based heavily on \pkg{expkv}. +% Compared to \pkg{keyval} it adds a number of additional \enquote{safety} +% requirements and allows to process the parsed list of key--value pairs in a +% variety of ways. The net result is that this code needs around one and a half +% the amount of time as \pkg{keyval} to parse the same list of keys. To optimise +% speed as far as reasonably practical, a number of lower-level approaches are +% taken rather than using the higher-level \pkg{expl3} interfaces. % % \begin{macrocode} %<@@=keyval> @@ -970,9 +970,9 @@ % \end{macrocode} % % \begin{macro}[EXP]{\keyval_parse:NNn} -% The main function starts the first of two input loops. The outer loop splits -% the key--value list at active commas, the inner loop will do so at other -% commas. The use of \cs{s_@@_mark} here prevents loss of braces from the key +% The main function starts the first of two loops. The outer loop splits the +% key--value list at active commas, the inner loop will do so at other commas. +% The use of \cs{s_@@_mark} here prevents loss of braces from the key % argument. % \begin{macrocode} \cs_new:Npn \keyval_parse:NNn ##1 ##2 ##3 @@ -982,157 +982,267 @@ % % \begin{macro}[EXP]{\@@_loop_active:NNw} % First a fast test for the end of the loop is done, it'll gobble everything -% up to an \cs{s_@@_mark} immediately followed by an \cs{s_@@_tail}. The loop -% ending macro will gobble everything to the last \cs{s_@@_mark} in this -% definition. +% up to a \cs{s_@@_tail}. The loop ending macro will gobble everything to the +% last \cs{s_@@_mark} in this definition. % If the end isn't reached yet, start the second loop splitting at other -% comments, and after that one iterate the current loop. +% commas, and after that one iterate the current loop. % \begin{macrocode} \cs_new:Npn \@@_loop_active:NNw ##1 ##2 ##3 #1 { \@@_if_recursion_tail:w ##3 - \@@_end_loop_active:w \s_@@_mark \s_@@_tail + \@@_end_loop_active:w \s_@@_tail \@@_loop_other:NNw ##1 ##2 ##3 , \s_@@_tail , \@@_loop_active:NNw ##1 ##2 \s_@@_mark } % \end{macrocode} % \end{macro} % +% \begin{macro}[EXP]{\@@_split_other:w, \@@_split_active:w} +% These two macros allow to split at the first equals sign of category 12 or +% 13. At the same time they also execute branching by inserting the first +% token following \cs{s_@@_mark} that followed the equals sign. Hence they +% also test for the presence of such an equals sign simultaneously. +% \begin{macrocode} + \cs_new:Npn \@@_split_other:w ##1 = ##2 \s_@@_mark ##3 ##4 \s_@@_stop + { ##3 ##1 \s_@@_stop \s_@@_mark ##2 } + \cs_new:Npn \@@_split_active:w ##1 #2 ##2 \s_@@_mark ##3 ##4 \s_@@_stop + { ##3 ##1 \s_@@_stop \s_@@_mark ##2 } +% \end{macrocode} +% \end{macro} +% % \begin{macro}[EXP]{\@@_loop_other:NNw} % The second loop uses the same test for its end as the first loop, next it -% tests whether there are other or active equals signs, throwing an error if -% there are both. If there are none, test whether the argument is blank or is -% a single key. If there are only active equals signs split at those, else -% split at others. Finally, iterate the loop. +% splits at the first active equals sign using \cs{@@_split_active:w}. The +% \cs{s_@@_nil} prevents accidental brace stripping and acts as a delimiter in +% the next steps. First testing for an active equals sign will reduce the +% number of necessary expansion steps for the expected average use case of +% other equals signs and hence perform better on average. % \begin{macrocode} \cs_new:Npn \@@_loop_other:NNw ##1 ##2 ##3 , { \@@_if_recursion_tail:w ##3 - \@@_end_loop_other:w \s_@@_mark \s_@@_tail - \@@_if_has_equal_other:w ##3 = \s_@@_stop - \@@_has_false:w \s_@@_mark \s_@@_stop \use_i:nn - { - \@@_if_has_equal_active:w ##3 #2 \s_@@_stop - \@@_has_false:w \s_@@_mark \s_@@_stop \use_i:nn - \@@_misplaced_equal_error: - { \@@_split_other:w ##3 = \s_@@_stop ##2 } - } - { - \@@_if_has_equal_active:w ##3 #2 \s_@@_stop - \@@_has_false:w \s_@@_mark \s_@@_stop \use_i:nn - { \@@_split_active:w ##3 #2 \s_@@_stop ##2 } - { - \@@_if_blank:w ##3 \s_@@_nil \s_@@_stop - \@@_blank_true:w \s_@@_mark \s_@@_stop \use:n - { \@@_trim:nN { ##3 } \@@_key:nN ##1 } - } - } + \@@_end_loop_other:w \s_@@_tail + \@@_split_active:w ##3 \s_@@_nil + \s_@@_mark \@@_split_active_auxi:w + #2 \s_@@_mark \@@_clean_up_active:w + \s_@@_stop + ##1 ##2 \@@_loop_other:NNw ##1 ##2 \s_@@_mark } % \end{macrocode} % \end{macro} % -% \begin{macro}[EXP]{\@@_split_active:w} -% \begin{macro}[EXP]{\@@_split_active:nw} -% Splits at the first active equals sign and trims the key. Next test whether -% there are any more valid split points, if so throw an error and gobble the -% remaining \meta{function_2}, which will not yet be gobbled. If there was -% only one active equals sign start trimming the spaces off the value and give -% control to \cs[no-index]{@@_key_val:nnN}. +% \begin{macro}[EXP]{\@@_split_active_auxi:w} +% \begin{macro}[EXP]{\@@_split_active_auxii:w} +% \begin{macro}[EXP]{\@@_split_active_auxiii:w} +% \begin{macro}[EXP]{\@@_split_active_auxiv:w} +% \begin{macro}[EXP]{\@@_split_active_auxv:w} +% After \cs{@@_split_active:w} the following will only be called if there was +% at least one active equals sign in the current key--value pair. Therefore +% this is the execution branch for a key--value pair with an active equals +% sign. |##1| will be everything up to the first active equals sign. First it +% tests for other equals signs in the key name, which will eventually throw an +% error via \cs{@@_misplaced_equal_after_active_error:w}. If none was found we +% forward the key to \cs{@@_split_active_auxii:w}. +% \begin{macrocode} + \cs_new:Npn \@@_split_active_auxi:w ##1 \s_@@_stop + { + \@@_split_other:w ##1 \s_@@_nil + \s_@@_mark \@@_misplaced_equal_after_active_error:w + = \s_@@_mark \@@_split_active_auxii:w + \s_@@_stop + } +% \end{macrocode} +% \cs{@@_split_active_auxii:w} gets the correct key name with a leading +% \cs{s_@@_mark} as |##1|. It has to sanitise the remainder of the previous +% test and trims the key name which will be forwarded to +% \cs{@@_split_active_auxiii:w}. +% \begin{macrocode} + \cs_new:Npn \@@_split_active_auxii:w + ##1 \s_@@_nil \s_@@_mark \@@_misplaced_equal_after_active_error:w + \s_@@_stop \s_@@_mark + { \@@_trim:nN { ##1 } \@@_split_active_auxiii:w } +% \end{macrocode} +% Next we test for a misplaced active equals sign in the value, if none is +% found \cs{@@_split_active_auxiv:w} will be called. +% \begin{macrocode} + \cs_new:Npn \@@_split_active_auxiii:w ##1 ##2 \s_@@_nil + { + \@@_split_active:w ##2 \s_@@_nil + \s_@@_mark \@@_misplaced_equal_in_split_error:w + #2 \s_@@_mark \@@_split_active_auxiv:w + \s_@@_stop + { ##1 } + } +% \end{macrocode} +% This runs the last test after sanitising the remainder of the previous one. +% This time test for a misplaced equals sign of category 12 in the value. +% Finally the last auxiliary macro will be called. % \begin{macrocode} - \cs_new:Npn \@@_split_active:w ##1 #2 - { \@@_trim:nN { ##1 } \@@_split_active:nw \s_@@_mark } - \cs_new:Npn \@@_split_active:nw ##1 ##2 #2 ##3 \s_@@_stop + \cs_new:Npn \@@_split_active_auxiv:w + ##1 \s_@@_nil \s_@@_mark \@@_misplaced_equal_in_split_error:w + \s_@@_stop \s_@@_mark { - \@@_if_empty:w \s_@@_mark ##3 \s_@@_stop - \@@_has_false:w \s_@@_mark \s_@@_stop \use_i:nn - { \@@_misplaced_equal_error: \use_none:n } - { \@@_trim:nN { ##2 } \@@_key_val:nnN { ##1 } } + \@@_split_other:w ##1 \s_@@_nil + \s_@@_mark \@@_misplaced_equal_in_split_error:w + = \s_@@_mark \@@_split_active_auxv:w + \s_@@_stop } % \end{macrocode} +% This last macro in this execution branch sanitises the last test, trims the +% value and passes it to \cs{@@_pair:nnNN}. +% \begin{macrocode} + \cs_new:Npn \@@_split_active_auxv:w + ##1 \s_@@_nil \s_@@_mark \@@_misplaced_equal_in_split_error:w + \s_@@_stop \s_@@_mark + { \@@_trim:nN { ##1 } \@@_pair:nnNN } +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} % \end{macro} % \end{macro} % -% \begin{macro}[EXP]{\@@_if_has_equal_active:w} -% The test for an active equals sign just gobbles tokens until the first -% active equals sign and then runs the test for an empty argument. +% \begin{macro}[EXP]{\@@_clean_up_active:w} +% The following is the branch taken if the key--value pair doesn't contain an +% active equals sign. The remainder of that test will be cleaned up by +% \cs{@@_clean_up_active:w} which will then split at an equals sign of +% category other. % \begin{macrocode} - \cs_new:Npn \@@_if_has_equal_active:w ##1 #2 - { \@@_if_empty:w \s_@@_mark } + \cs_new:Npn \@@_clean_up_active:w + ##1 \s_@@_nil \s_@@_mark \@@_split_active_auxi:w \s_@@_stop \s_@@_mark + { + \@@_split_other:w ##1 \s_@@_nil + \s_@@_mark \@@_split_other_auxi:w + = \s_@@_mark \@@_clean_up_other:w + \s_@@_stop + } % \end{macrocode} % \end{macro} % -% We're done with the macros which need active equals signs or commas in their -% definition, so we can end that scope and call the temporary macro which will -% do the definitions. +% \begin{macro}[EXP]{\@@_split_other_auxi:w} +% \begin{macro}[EXP]{\@@_split_other_auxii:w} +% \begin{macro}[EXP]{\@@_split_other_auxiii:w} +% This is executed if the key--value pair doesn't contain an active equals +% sign but at least one other. |##1| of \cs{@@_split_other_auxi:w} will +% contain the complete key name, which is trimmed and forwarded to the next +% auxiliary macro. % \begin{macrocode} - } - \char_set_catcode_active:n { `\, } - \char_set_catcode_active:n { `\= } - \@@_tmp:NN , = -\group_end: + \cs_new:Npn \@@_split_other_auxi:w ##1 \s_@@_stop + { \@@_trim:nN { ##1 } \@@_split_other_auxii:w } +% \end{macrocode} +% We know that the value doesn't contain misplaced active equals signs but we +% have to test for others. +% \begin{macrocode} + \cs_new:Npn \@@_split_other_auxii:w ##1 ##2 \s_@@_nil + { + \@@_split_other:w ##2 \s_@@_nil + \s_@@_mark \@@_misplaced_equal_in_split_error:w + = \s_@@_mark \@@_split_other_auxiii:w + \s_@@_stop + { ##1 } + } +% \end{macrocode} +% \cs{@@_split_other_auxiii:w} sanitises the test for other equals signs, +% trims the value and forwards it to \cs{@@_pair:nnNN}. +% \begin{macrocode} + \cs_new:Npn \@@_split_other_auxiii:w + ##1 \s_@@_nil \s_@@_mark \@@_misplaced_equal_in_split_error:w + \s_@@_stop \s_@@_mark + { \@@_trim:nN { ##1 } \@@_pair:nnNN } % \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} % -% \begin{macro}[EXP]{\@@_end_loop_active:w,\@@_end_loop_other:w} -% Both of these macros just have to gobble a few tokens to remove the reminder -% of the loops current iteration. We do this in a pretty static manner, -% explicitly stating every token we know beforehand because this is slightly -% faster. +% \begin{macro}[EXP]{\@@_clean_up_other:w} +% \cs{@@_clean_up_other:w} is the last branch that might exist. It is called +% if no equals sign was found, hence the only possibilities left are a blank +% list element, which is to be skipped, or a lonely key. If it's no empty list +% element this will trim the key name and forward it to \cs{@@_key:nNN}. % \begin{macrocode} -\cs_new:Npn \@@_end_loop_active:w - \s_@@_mark \s_@@_tail - \@@_loop_other:NNw #1 , \s_@@_tail , - \@@_loop_active:NNw #2 \s_@@_mark - { } -\cs_new:Npn \@@_end_loop_other:w - \s_@@_mark \s_@@_tail - \@@_if_has_equal_other:w #1 = \s_@@_stop - \@@_has_false:w \s_@@_mark \s_@@_stop \use_i:nn - #2 - \@@_loop_other:NNw #3 \s_@@_mark - { } + \cs_new:Npn \@@_clean_up_other:w + ##1 \s_@@_nil \s_@@_mark \@@_split_other_auxi:w \s_@@_stop \s_@@_mark + { + \@@_if_blank:w ##1 \s_@@_nil \s_@@_stop \@@_blank_true:w + \s_@@_mark \s_@@_stop \use:n + { \@@_trim:nN { ##1 } \@@_key:nNN } + } % \end{macrocode} % \end{macro} % -% \begin{macro}[EXP]{\@@_split_other:w} -% \begin{macro}[EXP]{\@@_split_other:nw} -% These work exactly as \cs[no-index]{@@_split_active:wN}, just for -% equals signs of category other. +% \begin{macro}[EXP]{\@@_misplaced_equal_after_active_error:w} +% \begin{macro}[EXP]{\@@_misplaced_equal_in_split_error:w} +% All these two macros do is gobble the remainder of the current other loop +% execution and throw an error. % \begin{macrocode} -\cs_new:Npn \@@_split_other:w #1 = - { \@@_trim:nN { #1 } \@@_split_other:nw \s_@@_mark } -\cs_new:Npn \@@_split_other:nw #1 #2 = #3 \s_@@_stop - { - \@@_if_empty:w \s_@@_mark #3 \s_@@_stop - \@@_has_false:w \s_@@_mark \s_@@_stop \use_i:nn - { \@@_misplaced_equal_error: \use_none:n } - { \@@_trim:nN { #2 } \@@_key_val:nnN { #1 } } - } + \cs_new:Npn \@@_misplaced_equal_after_active_error:w + \s_@@_mark ##1 \s_@@_stop \s_@@_mark ##2 \s_@@_nil + \s_@@_mark ##3 \s_@@_nil ##4 ##5 + { + \__kernel_msg_expandable_error:nn + { kernel } { misplaced-equals-sign } + } + \cs_new:Npn \@@_misplaced_equal_in_split_error:w + \s_@@_mark ##1 \s_@@_stop \s_@@_mark ##2 \s_@@_nil + ##3 ##4 ##5 + { + \__kernel_msg_expandable_error:nn + { kernel } { misplaced-equals-sign } + } % \end{macrocode} % \end{macro} % \end{macro} % -% \begin{macro}[EXP]{\@@_key:nN} -% This will get the current key with spaces trimmed and \meta{function_1} as -% its arguments. All it has to do is put them in an \cs{exp_not:n} and reorder -% them. +% \begin{macro}[EXP]{\@@_end_loop_other:w, \@@_end_loop_active:w} +% All that's left for the parsing loops are the macros which end the +% recursion. Both just gobble the remaining tokens of the respective loop +% including the next recursion call. % \begin{macrocode} -\cs_new:Npn \@@_key:nN #1 #2 - { \exp_not:n { #2 { #1 } } } + \cs_new:Npn \@@_end_loop_other:w + \s_@@_tail + \@@_split_active:w ##1 \s_@@_nil + \s_@@_mark \@@_split_active_auxi:w + #2 \s_@@_mark \@@_clean_up_active:w + \s_@@_stop + ##2 ##3 + \@@_loop_other:NNw ##4 \s_@@_mark + { } + \cs_new:Npn \@@_end_loop_active:w + \s_@@_tail + \@@_loop_other:NNw ##1 , \s_@@_tail , + \@@_loop_active:NNw ##2 \s_@@_mark + { } % \end{macrocode} % \end{macro} % -% \begin{macro}[EXP]{\@@_key_val:nnN} -% This will get the key name and value with spaces trimmed. It has to -% assert that the key name isn't empty. Afterwards put them into an -% \cs{exp_not:n} together with \meta{function_2}. If the key is empty they are -% gobbled instead. +% The parsing loops are done, so here ends the definition of \cs{@@_tmp:NN}, +% which will finally set up the macros. % \begin{macrocode} -\cs_new:Npn \@@_key_val:nnN #1 #2 #3 + } + \char_set_catcode_active:n { `\, } + \char_set_catcode_active:n { `\= } + \@@_tmp:NN , = +\group_end: +% \end{macrocode} +% +% \begin{macro}[EXP]{\@@_pair:nnNN, \@@_key:nNN} +% These macros will be called on the parsed keys and values of the key--value +% list. All arguments are completely trimmed. They test for blank key names +% and call the functions passed to \cs{keyval_parse:NNn} inside of +% \cs{exp_not:n} with the correct arguments. +% \begin{macrocode} +\cs_new:Npn \@@_pair:nnNN #1 #2 #3 #4 + { + \@@_if_blank:w \s_@@_mark #2 \s_@@_nil \s_@@_stop \@@_blank_key_error:w + \s_@@_mark \s_@@_stop + \exp_not:n { #4 { #2 } { #1 } } + } +\cs_new:Npn \@@_key:nNN #1 #2 #3 { - \@@_if_empty:w \s_@@_mark #2 \s_@@_stop - \@@_empty_key:w \s_@@_mark \s_@@_stop - \exp_not:n { #3 { #2 } { #1 } } + \@@_if_blank:w \s_@@_mark #1 \s_@@_nil \s_@@_stop \@@_blank_key_error:w + \s_@@_mark \s_@@_stop + \exp_not:n { #2 { #1 } } } % \end{macrocode} % \end{macro} @@ -1143,46 +1253,31 @@ % with an arbitrary token following the argument. Each of these utilize the % fact that the argument will contain a leading \cs{s_@@_mark}. % \begin{macrocode} -\cs_new:Npn \@@_if_empty:w #1 \s_@@_mark \s_@@_stop {} +\cs_new:Npn \@@_if_empty:w #1 \s_@@_mark \s_@@_stop { } \cs_new:Npn \@@_if_blank:w \s_@@_mark #1 { \@@_if_empty:w \s_@@_mark } -\cs_new:Npn \@@_if_recursion_tail:w #1 \s_@@_mark \s_@@_tail {} +\cs_new:Npn \@@_if_recursion_tail:w \s_@@_mark #1 \s_@@_tail { } % \end{macrocode} % \end{macro} % -% \begin{macro}[EXP]{\@@_has_false:w,\@@_blank_true:w,\@@_empty_key:w} +% \begin{macro}[EXP]{\@@_blank_true:w,\@@_blank_key_error:w} % These macros will be called if the tests above didn't gobble them, they % execute the branching. % \begin{macrocode} -\cs_new:Npn \@@_has_false:w \s_@@_mark \s_@@_stop \use_i:nn #1 #2 { #2 } -\cs_new:Npn \@@_blank_true:w \s_@@_mark \s_@@_stop \use:n #1 {} -\cs_new:Npn \@@_empty_key:w \s_@@_mark \s_@@_stop \exp_not:n #1 - { \@@_misplaced_equal_error: } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}[EXP]{\@@_if_has_equal_other:w} -% Another test that works by gobbling tokens until a specific one is hit. -% \begin{macrocode} -\cs_new:Npn \@@_if_has_equal_other:w #1 = - { \@@_if_empty:w \s_@@_mark } -% \end{macrocode} -% \end{macro} -% -% \begin{macro}[EXP]{\@@_misplaced_equal_error:} -% Just throw an error expandably. This is hid inside a macro so that other -% macros don't have to gobble so many tokens, which increases speed for -% correct input. This will marginally slow down the error case, but that -% doesn't have to be fast anyway. -% \begin{macrocode} -\cs_new:Npn \@@_misplaced_equal_error: - { \__kernel_msg_expandable_error:nn { kernel } { misplaced-equals-sign } } +\cs_new:Npn \@@_blank_true:w \s_@@_mark \s_@@_stop \use:n #1 #2 #3 { } +\cs_new:Npn \@@_blank_key_error:w \s_@@_mark \s_@@_stop \exp_not:n #1 + { + \__kernel_msg_expandable_error:nn + { kernel } { blank-key-name } + } % \end{macrocode} % \end{macro} % -% One message for the low level parsing system. +% Two messages for the low level parsing system. % \begin{macrocode} \__kernel_msg_new:nnn { kernel } { misplaced-equals-sign } { Misplaced~equals~sign~in~key-value~input~\msg_line_context: } +\__kernel_msg_new:nnn { kernel } { blank-key-name } + { Blank~key~name~in~key-value~input~\msg_line_context: } % \end{macrocode} % % \begin{macro}[EXP]{\@@_trim:nN} @@ -1203,7 +1298,7 @@ \@@_trim_auxi:w ##1 \s_@@_nil - \s_@@_mark #1 {} + \s_@@_mark #1 { } \s_@@_mark \@@_trim_auxii:w \@@_trim_auxiii:w #1 \s_@@_nil @@ -1482,11 +1577,11 @@ \cs_if_exist:cTF { \c_@@_props_root_str \l_@@_property_str } { \@@_define_code:n {#2} } { - \str_if_empty:NF \l_@@_property_str - { - \__kernel_msg_error:nnxx { kernel } { key-property-unknown } - { \l_@@_property_str } { \l_keys_path_str } - } + \str_if_empty:NF \l_@@_property_str + { + \__kernel_msg_error:nnxx { kernel } { key-property-unknown } + { \l_@@_property_str } { \l_keys_path_str } + } } } % \end{macrocode} @@ -2729,7 +2824,7 @@ } { \__kernel_msg_error:nnxx { kernel } { key-unknown } - { \l_keys_path_str } { \l_@@_module_str } + { \l_keys_path_str } { \l_@@_module_str } } } } diff --git a/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx b/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx index 1c017035de8..b491255503c 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-05-11} +% \date{Released 2020-05-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx b/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx index 5b3c8243fe0..fd8c5ed6e01 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-05-11} +% \date{Released 2020-05-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx b/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx index feb233bf54c..5547c3ddc79 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-05-11} +% \date{Released 2020-05-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3names.dtx b/Master/texmf-dist/source/latex/l3kernel/l3names.dtx index 2878654f585..3f9a7309c96 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3names.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3names.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-05-11} +% \date{Released 2020-05-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx b/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx index d14576f08c0..34a14829c7d 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-05-11} +% \date{Released 2020-05-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx b/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx index c586164260d..33741fecf0a 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-05-11} +% \date{Released 2020-05-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx b/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx index f513fcb026a..9068f7bbecd 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-05-11} +% \date{Released 2020-05-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx b/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx index 7c2d8e7504a..80e2ffa8960 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-05-11} +% \date{Released 2020-05-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx b/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx index 56c4bc1fda7..830adba2cb3 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-05-11} +% \date{Released 2020-05-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx b/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx index 8cfd78d6f14..a4973652c1f 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2020-05-11} +% \date{Released 2020-05-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx b/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx index 6b41acfe3ee..89c085f7782 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-05-11} +% \date{Released 2020-05-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx b/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx index 4620342091a..88bf391f25b 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2020-05-11} +% \date{Released 2020-05-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3str.dtx b/Master/texmf-dist/source/latex/l3kernel/l3str.dtx index d4cbc2bb49f..d15ee54ed18 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3str.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3str.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-05-11} +% \date{Released 2020-05-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx b/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx index feef7117355..fe96f7aec5b 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-05-11} +% \date{Released 2020-05-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx b/Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx index ad71e493198..51819ed5145 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-05-11} +% \date{Released 2020-05-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3text-purify.dtx b/Master/texmf-dist/source/latex/l3kernel/l3text-purify.dtx index 070e41956fb..54266ba72c8 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3text-purify.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3text-purify.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-05-11} +% \date{Released 2020-05-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3text.dtx b/Master/texmf-dist/source/latex/l3kernel/l3text.dtx index 5113e03cc9c..0f8f24cafd3 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3text.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3text.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-05-11} +% \date{Released 2020-05-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx b/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx index 6fbe2f1bbb8..2a6b31f537a 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2020-05-11} +% \date{Released 2020-05-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx b/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx index 53f61e97508..b3d6c3ddaca 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-05-11} +% \date{Released 2020-05-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3token.dtx b/Master/texmf-dist/source/latex/l3kernel/l3token.dtx index 0608820bbac..0ed1350b035 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3token.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3token.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-05-11} +% \date{Released 2020-05-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx b/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx index bc0466eecae..6f2d533f584 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-05-11} +% \date{Released 2020-05-14} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx b/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx index d6701c4519a..6a09bb18bd7 100644 --- a/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx +++ b/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx @@ -62,7 +62,7 @@ % }^^A % } % -% \date{Released 2020-03-06} +% \date{Released 2020-05-14} % % \maketitle % @@ -139,7 +139,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3keys2e}{2020-03-06}{} +\ProvidesExplPackage{l3keys2e}{2020-05-14}{} {LaTeX2e option processing using LaTeX3 keys} % \end{macrocode} % @@ -299,8 +299,8 @@ % so that there will always be a sign available. % \begin{macrocode} \cs_new:Npn \@@_latexe_remove_equals:n #1 - { \@@_latexe_remove_equals:w #1 = \q_stop } -\cs_new:Npn \@@_latexe_remove_equals:w #1 = #2 \q_stop { \exp_not:n {#1} } + { \@@_latexe_remove_equals:w #1 = \s_@@_stop } +\cs_new:Npn \@@_latexe_remove_equals:w #1 = #2 \s_@@_stop { \exp_not:n {#1} } % \end{macrocode} % \end{macro} % \end{macro} diff --git a/Master/texmf-dist/source/latex/l3packages/xfp/xfp.dtx b/Master/texmf-dist/source/latex/l3packages/xfp/xfp.dtx index afdd9e189cd..e0ebede0f90 100644 --- a/Master/texmf-dist/source/latex/l3packages/xfp/xfp.dtx +++ b/Master/texmf-dist/source/latex/l3packages/xfp/xfp.dtx @@ -64,7 +64,7 @@ % }^^A % } % -% \date{Released 2020-03-06} +% \date{Released 2020-05-14} % % \maketitle % @@ -167,7 +167,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{xfp}{2020-03-06}{} +\ProvidesExplPackage{xfp}{2020-05-14}{} {L3 Floating point unit} % \end{macrocode} % diff --git a/Master/texmf-dist/source/latex/l3packages/xfrac/xfrac.dtx b/Master/texmf-dist/source/latex/l3packages/xfrac/xfrac.dtx index 7be07c978e6..275aa6859a8 100644 --- a/Master/texmf-dist/source/latex/l3packages/xfrac/xfrac.dtx +++ b/Master/texmf-dist/source/latex/l3packages/xfrac/xfrac.dtx @@ -65,7 +65,7 @@ % }^^A % } % -% \date{Released 2020-03-06} +% \date{Released 2020-05-14} % % \maketitle % @@ -535,7 +535,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{xfrac}{2020-03-06}{} +\ProvidesExplPackage{xfrac}{2020-05-14}{} {L3 Experimental split-level fractions} % \end{macrocode} % diff --git a/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx b/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx index f56bcdf5e97..c7004349030 100644 --- a/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx +++ b/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx @@ -67,7 +67,7 @@ % }^^A % } % -% \date{Released 2020-03-06} +% \date{Released 2020-05-14} % % \maketitle % @@ -304,7 +304,7 @@ % follow such a command. The most common example is the use of \cmd{\\} in % \pkg{amsmath} environments. In \pkg{xparse} terms it has signature % \begin{verbatim} -% \DeclareDocumentCommad \\ { !s !o } { ... } +% \DeclareDocumentCommand \\ { !s !o } { ... } % \end{verbatim} % % \subsection{Required delimited arguments} @@ -993,7 +993,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{xparse}{2020-03-06}{} +\ProvidesExplPackage{xparse}{2020-05-14}{} {L3 Experimental document command parser} % \end{macrocode} % @@ -1019,22 +1019,31 @@ % \end{variable} % \end{variable} % +% \begin{macrocode} +%</package> +% \end{macrocode} +% % \subsection{Reload check} % % A simple reload check. % \begin{macrocode} +%<*core> \cs_if_exist:NT \NewDocumentCommand { \file_input_stop: } +%</core> % \end{macrocode} % +% Load the core code. % \begin{macrocode} -%</package> +%<*2ekernel|package> +\file_input:n { xparse-generic.tex } +%</2ekernel|package> % \end{macrocode} % % \subsection{Variables and constants} % % \begin{macrocode} -%<*package|2ekernel> +%<*!package> % \end{macrocode} % % \begin{variable}{\c_@@_special_chars_seq} @@ -1049,6 +1058,17 @@ % \end{macrocode} % \end{variable} % +% \begin{macrocode} +%<*core> +\if_charcode:w xx + \cs_new:Npn \@@_file_end_hook: { } +\else + \ExplSyntaxOn + \cs_new:Npn \@@_file_end_hook: { \ExplSyntaxOff } +\fi: +%</core> +% \end{macrocode} +% % \begin{variable}{\l_@@_arg_spec_tl} % Holds the argument specification after normalization of shorthands. % \begin{macrocode} @@ -1477,9 +1497,9 @@ %<*initex> \cs_if_exist:cTF { environment~ \l_@@_environment_str } %</initex> -%<*package|2ekernel> +%<*core> \cs_if_exist:cTF { \l_@@_environment_str } -%</package|2ekernel> +%</core> { \__kernel_msg_info:nnxx { xparse } { redefine-environment } { \l_@@_environment_str } { \tl_to_str:n {#2} } @@ -1525,10 +1545,10 @@ \cs_generate_from_arg_count:cNnn { environment~ #1 ~end~aux~ } \cs_set:Npn \l_@@_current_arg_int {#4} -%<*package|2ekernel> +%<*core> \cs_set_eq:cc {#1} { environment~ #1 } \cs_set_eq:cc { end #1 } { environment~ #1 ~end } -%</package|2ekernel> +%</core> } } % \end{macrocode} @@ -1548,9 +1568,9 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_start_env:nnnnn #1#2 { -%<*package|2ekernel> +%<*core> \cs_if_exist_use:N \conditionally@traceoff -%</package|2ekernel> +%</core> \str_set:Nn \l_@@_environment_str {#2} \bool_set_true:N \l_@@_environment_bool \@@_start_aux:ccnnnn @@ -1560,9 +1580,9 @@ } \cs_new_protected:Npx \@@_start:nNNnnn #1#2#3 { -%<*package|2ekernel> +%<*core> \exp_not:n { \cs_if_exist_use:N \conditionally@traceoff } -%</package|2ekernel> +%</core> \exp_not:c { xparse~function~is~not~expandable } \exp_not:n { \bool_set_false:N \l_@@_environment_bool } \exp_not:N \@@_start_aux:NNnnnn @@ -1599,9 +1619,9 @@ { \tl_if_empty:NF \l_@@_defaults_tl { \@@_defaults: } \tl_if_empty:NF \l_@@_process_all_tl { \@@_args_process: } -%<*package|2ekernel> +%<*core> \cs_if_exist_use:N \conditionally@traceon -%</package|2ekernel> +%</core> \exp_after:wN \l_@@_fn_code_tl \l_@@_args_tl } % \end{macrocode} @@ -1885,11 +1905,39 @@ \int_incr:N \l_@@_current_arg_int \cs_if_exist_use:cF { @@_normalize_type_ \tl_to_str:n {#1} :w } { + \bool_lazy_any:nTF + { + { \str_if_eq_p:nn {#1} { G } } + { \str_if_eq_p:nn {#1} { g } } + { \str_if_eq_p:nn {#1} { l } } + { \str_if_eq_p:nn {#1} { u } } + } + { + \__kernel_msg_error:nnxx { xparse } { xparse-argument-type } + { \@@_environment_or_command: } { \tl_to_str:n {#1} } + } + { + \__kernel_msg_error:nnxx { xparse } { unknown-argument-type } + { \@@_environment_or_command: } { \tl_to_str:n {#1} } + } + \@@_bad_def:wn + } + } +%</!package> +%<*package> +\cs_gset_protected:Npn \@@_normalize_arg_spec_loop:n #1 + { + \quark_if_recursion_tail_stop:n {#1} + \int_incr:N \l_@@_current_arg_int + \cs_if_exist_use:cF { @@_normalize_type_ \tl_to_str:n {#1} :w } + { \__kernel_msg_error:nnxx { xparse } { unknown-argument-type } { \@@_environment_or_command: } { \tl_to_str:n {#1} } \@@_bad_def:wn } } +%</package> +%<*!package> % \end{macrocode} % \end{macro} % \end{macro} @@ -1923,8 +1971,6 @@ \quark_if_recursion_tail_stop_do:nn {##1} { \@@_bad_arg_spec:wn } \@@_normalize_type_E:w {##1} { } } - \cs_new_protected:Npn \@@_normalize_type_g:w - { \@@_normalize_type_G:w {#1} } \cs_new_protected:Npn \@@_normalize_type_o:w { \@@_normalize_type_D:w [ ] {#1} } \cs_new_protected:Npn \@@_normalize_type_O:w @@ -1938,6 +1984,12 @@ { \@@_normalize_type_t:w * } } \exp_args:No \@@_tmp:w { \c_novalue_tl } +%</!package> +%<*package> +\cs_new_protected:Npx \@@_normalize_type_g:w + { \exp_not:N \@@_normalize_type_G:w { \exp_not:V \c_novalue_tl } } +%</package> +%<*!package> % \end{macrocode} % \end{macro} % @@ -2051,6 +2103,8 @@ \@@_normalize_E_unique_check:w #2 \q_stop } } +%</!package> +%<*package> \cs_new_protected:Npn \@@_normalize_type_G:w #1 { \quark_if_recursion_tail_stop_do:nn {#1} { \@@_bad_arg_spec:wn } @@ -2059,6 +2113,8 @@ \tl_put_right:Nn \l_@@_last_delimiters_tl { { } } \@@_normalize_arg_spec_loop:n } +%</package> +%<*!package> \cs_new_protected:Npn \@@_normalize_type_t:w #1 { \quark_if_recursion_tail_stop_do:Nn #1 { \@@_bad_arg_spec:wn } @@ -2095,12 +2151,16 @@ % \cs{l_@@_arg_spec_tl}, count the mandatory argument, and empty the % list of last delimiters. % \begin{macrocode} +%</!package> +%<*package> \cs_new_protected:Npn \@@_normalize_type_l:w { \@@_normalize_check_lu:N l \@@_add_arg_spec_mandatory:n { l } \@@_normalize_arg_spec_loop:n } +%</package> +%<*!package> \cs_new_protected:Npn \@@_normalize_type_m:w { \@@_delimiter_check:nnn { } { m } { \iow_char:N \{ } @@ -2117,6 +2177,8 @@ \@@_add_arg_spec_mandatory:n { R #1 #2 {#3} } \@@_normalize_arg_spec_loop:n } +%</!package> +%<*package> \cs_new_protected:Npn \@@_normalize_type_u:w #1 { \quark_if_recursion_tail_stop_do:nn {#1} { \@@_bad_arg_spec:wn } @@ -2124,6 +2186,8 @@ \@@_add_arg_spec_mandatory:n { u {#1} } \@@_normalize_arg_spec_loop:n } +%</package> +%<*!package> \cs_new_protected:Npn \@@_normalize_type_v:w { \@@_normalize_check_gv:N v @@ -2482,6 +2546,8 @@ % For the \texttt{G} type, the grabber and the default are added to the % signature. % \begin{macrocode} +%</!package> +%<*package> \cs_new_protected:Npn \@@_add_type_G:w #1 { \@@_flush_m_args: @@ -2503,6 +2569,8 @@ \@@_add_grabber:N l \@@_prepare_signature:N } +%</package> +%<*!package> % \end{macrocode} % \end{macro} % @@ -2558,6 +2626,8 @@ % At the set up stage, the \texttt{u} type argument is identical to the % \texttt{G} type except for the name of the grabber function. % \begin{macrocode} +%</!package> +%<*package> \cs_new_protected:Npn \@@_add_type_u:w #1 { \@@_flush_m_args: @@ -2566,6 +2636,8 @@ \tl_put_right:Nn \l_@@_signature_tl { {#1} } \@@_prepare_signature:N } +%</package> +%<*!package> % \end{macrocode} % \end{macro} % @@ -2784,8 +2856,12 @@ % parameter text ends with |#| in fact end up being delimited by an % open brace. % \begin{macrocode} +%</!package> +%<*package> \cs_new_protected:Npn \@@_add_expandable_type_l:w { \@@_add_expandable_type_u:w ## } +%</package> +%<*!package> % \end{macrocode} % \end{macro} % @@ -2834,6 +2910,8 @@ % Define an auxiliary that will be used directly in the signature. It % grabs one argument delimited by |#1| and places it before \cs{q_@@}. % \begin{macrocode} +%</!package> +%<*package> \cs_new_protected:Npn \@@_add_expandable_type_u:w #1 { \@@_add_default: @@ -2846,6 +2924,8 @@ { \exp_not:c { \l_@@_expandable_aux_name_tl } } \@@_prepare_signature:N } +%</package> +%<*!package> % \end{macrocode} % \end{macro} % @@ -3249,6 +3329,8 @@ % Optional groups are checked by meaning, so that the same code will % work with, for example, \ConTeXt{}-like input. % \begin{macrocode} +%</!package> +%<*package> \cs_new_protected:Npn \@@_grab_G:w #1 \@@_run_code: { \@@_grab_G_aux:nNN {#1} \cs_set_protected_nopar:Npn @@ -3278,6 +3360,8 @@ { \l_@@_fn_tl } { \@@_add_arg:o \c_novalue_tl } } +%</package> +%<*!package> % \end{macrocode} % \end{macro} % \end{macro} @@ -3290,6 +3374,8 @@ % \begin{macro}{\@@_grab_l_aux:nN} % Argument grabbers for mandatory \TeX{} arguments are pretty simple. % \begin{macrocode} +%</!package> +%<*package> \cs_new_protected:Npn \@@_grab_l:w #1 \@@_run_code: { \@@_grab_l_aux:nN {#1} \cs_set_protected_nopar:Npn } \cs_new_protected:Npn \@@_grab_l_long:w #1 \@@_run_code: @@ -3301,6 +3387,8 @@ { \@@_add_arg:n {##1} } \l_@@_fn_tl } +%</package> +%<*!package> % \end{macrocode} % \end{macro} % \end{macro} @@ -3472,6 +3560,8 @@ % Grabbing up to a list of tokens is quite easy: define the grabber, % and then collect. % \begin{macrocode} +%</!package> +%<*package> \cs_new_protected:Npn \@@_grab_u:w #1#2 \@@_run_code: { \@@_grab_u_aux:nnN {#1} {#2} \cs_set_protected_nopar:Npn } \cs_new_protected:Npn \@@_grab_u_long:w #1#2 \@@_run_code: @@ -3483,6 +3573,8 @@ { \@@_add_arg:n {##1} } \l_@@_fn_tl } +%</package> +%<*!package> % \end{macrocode} % \end{macro} % \end{macro} @@ -3694,10 +3786,10 @@ \c_@@_special_chars_seq \char_set_catcode_other:N %</initex> -%<*package|2ekernel> +%<*core> \cs_set_eq:NN \do \char_set_catcode_other:N \dospecials -%</package|2ekernel> +%</core> \tex_endlinechar:D = `\^^M \scan_stop: \bool_if:NTF \l_@@_long_bool { \char_set_catcode_other:n { \tex_endlinechar:D } } @@ -4762,6 +4854,13 @@ The~letter~'#2'~does~not~specify~a~known~argument~type. \c_@@_ignore_def_tl } +\__kernel_msg_new:nnnn { xparse } { xparse-argument-type } + { Deprecated~argument~type~'#2'~for~the~#1~requires~xparse. } + { + The~letter~'#2'~specifies~a~known~argument~type~that~requires~ + the~xparse~package. + \c_@@_ignore_def_tl + } % \end{macrocode} % % Errors when using commands/environments. The \texttt{if-boolean} @@ -5112,18 +5211,15 @@ % % \begin{macrocode} %<*2ekernel> -% \end{macrocode} -% -% \begin{macrocode} \ExplSyntaxOff -% \end{macrocode} -% -% \begin{macrocode} %</2ekernel> % \end{macrocode} % % \begin{macrocode} -%</package|2ekernel> +%<*core> +\@@_file_end_hook: +%</core> +%</!package> % \end{macrocode} % % \end{implementation} diff --git a/Master/texmf-dist/source/latex/l3packages/xparse/xparse.ins b/Master/texmf-dist/source/latex/l3packages/xparse/xparse.ins index d40f7cd6f2a..17a94782a46 100644 --- a/Master/texmf-dist/source/latex/l3packages/xparse/xparse.ins +++ b/Master/texmf-dist/source/latex/l3packages/xparse/xparse.ins @@ -42,7 +42,8 @@ and all files in that bundle must be distributed together. \keepsilent -\generate{\file{xparse.sty} {\from{xparse.dtx} {package}} - \file{xparse.ltx} {\from{xparse.dtx} {2ekernel}}} +\generate{\file{xparse-generic.tex}{\from{xparse.dtx}{core}} + \file{xparse.sty}{\from{xparse.dtx}{package}} + \file{xparse.ltx}{\from{xparse.dtx}{2ekernel}}} \endbatchfile diff --git a/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx b/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx index 2236b30f979..897d1d3f844 100644 --- a/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx +++ b/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx @@ -63,7 +63,7 @@ % }^^A % } % -% \date{Released 2020-03-06} +% \date{Released 2020-05-14} % % \maketitle % @@ -682,7 +682,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{xtemplate}{2020-03-06}{} +\ProvidesExplPackage{xtemplate}{2020-05-14}{} {L3 Experimental prototype document functions} % \end{macrocode} % @@ -858,6 +858,28 @@ % \end{macrocode} % \end{variable} % +% \begin{variable}{\s_@@_mark,\s_@@_stop} +% Internal scan marks. +% \begin{macrocode} +\scan_new:N \s_@@_mark +\scan_new:N \s_@@_stop +% \end{macrocode} +% \end{variable} +% +% \begin{variable}{\q_@@_nil} +% Internal quarks. +% \begin{macrocode} +\quark_new:N \q_@@_nil +% \end{macrocode} +% \end{variable} +% +% \begin{macro}[pTF]{\@@_quark_if_nil:n} +% Branching quark conditional. +% \begin{macrocode} +\__kernel_quark_new_conditional:Nn \@@_quark_if_nil:N { F } +% \end{macrocode} +% \end{macro} +% % \subsection{Variant of prop functions} % % \begin{macro}[TF]{\prop_get:NoN} @@ -1300,7 +1322,7 @@ { \tl_clear:N \l_@@_key_name_tl \exp_after:wN \@@_split_keytype_aux:w - \l_@@_tmp_tl \q_stop + \l_@@_tmp_tl \s_@@_stop } } { @@ -1311,7 +1333,7 @@ \use:x { \cs_new_protected:Npn \exp_not:N \@@_split_keytype_aux:w - ##1 \token_to_str:N : ##2 \exp_not:N \q_stop + ##1 \token_to_str:N : ##2 \s_@@_stop { \tl_put_right:Nx \exp_not:N \l_@@_key_name_tl { \exp_not:N \tl_to_str:n {##1} } @@ -1319,7 +1341,7 @@ { \tl_put_right:Nn \exp_not:N \l_@@_key_name_tl { \token_to_str:N : } - \exp_not:N \@@_split_keytype_aux:w ##2 \exp_not:N \q_stop + \exp_not:N \@@_split_keytype_aux:w ##2 \s_@@_stop } { \exp_not:N \tl_if_empty:NTF \exp_not:N \l_@@_key_name_tl @@ -1357,7 +1379,7 @@ \tl_if_in:nnT {#1} {##1} { \cs_set:Npn \@@_split_keytype_arg_aux:w - ####1 ##1 ####2 \q_stop + ####1 ##1 ####2 \s_@@_stop { \tl_if_empty:nT {####1} { @@ -1366,7 +1388,7 @@ \seq_map_break: } } - \@@_split_keytype_arg_aux:w #1 \q_stop + \@@_split_keytype_arg_aux:w #1 \s_@@_stop } } \seq_map_function:NN \c_@@_keytypes_arg_seq @@ -1374,7 +1396,7 @@ } \cs_generate_variant:Nn \@@_split_keytype_arg:n { o } \cs_new:Npn \@@_split_keytype_arg_aux:n #1 { } -\cs_new:Npn \@@_split_keytype_arg_aux:w #1 \q_stop { } +\cs_new:Npn \@@_split_keytype_arg_aux:w #1 \s_@@_stop { } % \end{macrocode} % \end{macro} % \end{macro} @@ -1628,7 +1650,7 @@ } { \tl_if_in:nnTF {#1} { global } - { \@@_parse_vars_elt_aux:w #1 \q_stop } + { \@@_parse_vars_elt_aux:w #1 \s_@@_stop } { \msg_error:nnx { xtemplate } { bad-variable } { \tl_to_str:n {#1} } @@ -1637,7 +1659,7 @@ } } } -\cs_new_protected:Npn \@@_parse_vars_elt_aux:w #1 global #2 \q_stop +\cs_new_protected:Npn \@@_parse_vars_elt_aux:w #1 global #2 \s_@@_stop { \tl_if_empty:nTF {#1} { @@ -2060,10 +2082,10 @@ \bool_set_false:N \l_@@_global_bool \tl_if_in:onT \l_@@_var_tl { global } { - \exp_after:wN \@@_find_global_aux:w \l_@@_var_tl \q_stop + \exp_after:wN \@@_find_global_aux:w \l_@@_var_tl \s_@@_stop } } -\cs_new_protected:Npn \@@_find_global_aux:w #1 global #2 \q_stop +\cs_new_protected:Npn \@@_find_global_aux:w #1 global #2 \s_@@_stop { \tl_set:Nn \l_@@_var_tl {#2} \bool_set_true:N \l_@@_global_bool @@ -2377,16 +2399,16 @@ \l_@@_value_tl { \exp_after:wN \@@_key_to_value_auxii:w \l_@@_value_tl - \q_mark global \q_nil \q_stop + \s_@@_mark global \q_@@_nil \s_@@_stop } { \msg_error:nnx { xtemplate } { unknown-attribute } { \l_@@_tmp_tl } } } -\cs_new_protected:Npn \@@_key_to_value_auxii:w #1 global #2#3 \q_stop +\cs_new_protected:Npn \@@_key_to_value_auxii:w #1 global #2#3 \s_@@_stop { - \quark_if_nil:NF #2 + \@@_quark_if_nil:NF #2 { \tl_set:Nn \l_@@_value_tl {#2} } } % \end{macrocode} |