texlive[69537] Master/texmf-dist: l3kernel (22jan24)
commits+karl at tug.org
commits+karl at tug.org
Mon Jan 22 21:35:49 CET 2024
Revision: 69537
https://tug.org/svn/texlive?view=revision&revision=69537
Author: karl
Date: 2024-01-22 21:35:48 +0100 (Mon, 22 Jan 2024)
Log Message:
-----------
l3kernel (22jan24)
Modified Paths:
--------------
trunk/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md
trunk/Master/texmf-dist/doc/latex/l3kernel/README.md
trunk/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf
trunk/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf
trunk/Master/texmf-dist/doc/latex/l3kernel/l3doc.pdf
trunk/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf
trunk/Master/texmf-dist/doc/latex/l3kernel/l3news.pdf
trunk/Master/texmf-dist/doc/latex/l3kernel/l3news01.pdf
trunk/Master/texmf-dist/doc/latex/l3kernel/l3news02.pdf
trunk/Master/texmf-dist/doc/latex/l3kernel/l3news03.pdf
trunk/Master/texmf-dist/doc/latex/l3kernel/l3news04.pdf
trunk/Master/texmf-dist/doc/latex/l3kernel/l3news05.pdf
trunk/Master/texmf-dist/doc/latex/l3kernel/l3news06.pdf
trunk/Master/texmf-dist/doc/latex/l3kernel/l3news07.pdf
trunk/Master/texmf-dist/doc/latex/l3kernel/l3news08.pdf
trunk/Master/texmf-dist/doc/latex/l3kernel/l3news09.pdf
trunk/Master/texmf-dist/doc/latex/l3kernel/l3news10.pdf
trunk/Master/texmf-dist/doc/latex/l3kernel/l3news11.pdf
trunk/Master/texmf-dist/doc/latex/l3kernel/l3news12.pdf
trunk/Master/texmf-dist/doc/latex/l3kernel/l3obsolete.txt
trunk/Master/texmf-dist/doc/latex/l3kernel/l3prefixes.pdf
trunk/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf
trunk/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex
trunk/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf
trunk/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex
trunk/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.pdf
trunk/Master/texmf-dist/doc/latex/l3kernel/source3.pdf
trunk/Master/texmf-dist/doc/latex/l3kernel/source3body.tex
trunk/Master/texmf-dist/source/latex/l3kernel/expl3.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3.ins
trunk/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3bitset.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3box.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3cctab.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3color.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3debug.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3file.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-functions.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-symbolic.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-types.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3int.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3names.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3pdf.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3str.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3text-map.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3text-purify.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3text.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3tl-build.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3token.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx
trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex
trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex
trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.ltx
trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.sty
trunk/Master/texmf-dist/tex/latex/l3kernel/l3debug.def
trunk/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls
Removed Paths:
-------------
trunk/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md 2024-01-22 20:35:48 UTC (rev 69537)
@@ -7,6 +7,19 @@
## [Unreleased]
+## [2024-01-22]
+
+### Added
+- `\keys_set_exclude_groups:nnn(nN)` to replace `\keys_set_filter:nnn(nN)`
+- Flags with N-type names, like other variable types
+
+### Changed
+- Set `l3doc` option `kernel` off as-standard (issue \#1403)
+- Moved `\seq_set_filter:NNn` to stable
+
+### Deprecated
+- `\keys_set_filter:nnn(nN)` in favor of `\keys_set_exclude_groups:nnn(nN)`
+
## [2024-01-04]
### Added
@@ -1635,7 +1648,8 @@
- Step functions have been added for dim variables,
e.g. `\dim_step_inline:nnnn`
-[Unreleased]: https://github.com/latex3/latex3/compare/2024-01-04...HEAD
+[Unreleased]: https://github.com/latex3/latex3/compare/2024-01-22...HEAD
+[2024-01-22]: https://github.com/latex3/latex3/compare/2024-01-04...2024-01-22
[2024-01-04]: https://github.com/latex3/latex3/compare/2023-12-11...2024-01-04
[2023-12-11]: https://github.com/latex3/latex3/compare/2023-12-08...2023-12-11
[2023-12-08]: https://github.com/latex3/latex3/compare/2023-11-09...2023-12-08
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/README.md 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/README.md 2024-01-22 20:35:48 UTC (rev 69537)
@@ -1,7 +1,7 @@
LaTeX3 Programming Conventions
==============================
-Release 2024-01-04
+Release 2024-01-22
Overview
--------
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3doc.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news01.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news02.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news03.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news04.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news05.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news06.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news07.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news08.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news09.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news10.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news11.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news12.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3obsolete.txt
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/l3obsolete.txt 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/l3obsolete.txt 2024-01-22 20:35:48 UTC (rev 69537)
@@ -37,6 +37,18 @@
\iow_shipout_x:cx 2023-09-17
\iow_shipout_x:Nn 2023-09-17
\iow_shipout_x:Nx 2023-09-17
+\keys_set_filter:nnn 2024-01-10
+\keys_set_filter:nnV 2024-01-10
+\keys_set_filter:nnv 2024-01-10
+\keys_set_filter:nno 2024-01-10
+\keys_set_filter:nnnN 2024-01-10
+\keys_set_filter:nnVN 2024-01-10
+\keys_set_filter:nnvN 2024-01-10
+\keys_set_filter:nnoN 2024-01-10
+\keys_set_filter:nnnnN 2024-01-10
+\keys_set_filter:nnVnN 2024-01-10
+\keys_set_filter:nnvnN 2024-01-10
+\keys_set_filter:nnonN 2024-01-10
\l_keys_key_tl 2020-02-08
\l_keys_path_tl 2020-02-08
\l_text_accents_tl 2023-02-07
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3prefixes.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex 2024-01-22 20:35:48 UTC (rev 69537)
@@ -187,7 +187,7 @@
Any internal functions or variables \emph{must} be documented in the same way
as public ones.
-The \pkg{l3docstrip} method should be used for internal functions in a module.
+The \pkg{DocStrip} method should be used for internal functions in a module.
This requires a line
\begin{quote}
\ttfamily
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex 2024-01-22 20:35:48 UTC (rev 69537)
@@ -43,8 +43,8 @@
This file describes functions that were expected to be completely
stable, but whose syntax has changed in ways that may potentially
require code relying on them to be changed. This file does not include
-bug-fixes, nor backward-compatible extensions of the syntax, nor changes
-to functions in \pkg{l3candidates}, nor functions that were completely
+bug-fixes, nor backward-compatible extensions of the syntax,
+nor functions that were completely
deprecated: the latter are listed in \texttt{l3obsolete.txt}. Only
changes after August 2011 are listed, with an approximate date.
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/source3.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/source3body.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/source3body.tex 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/source3body.tex 2024-01-22 20:35:48 UTC (rev 69537)
@@ -321,7 +321,7 @@
\item[\texttt{box}] Box register.
\item[\texttt{coffin}] A \enquote{box with handles} --- a higher-level
data type for carrying out \texttt{box} alignment operations.
- \item[\texttt{flag}] Integer that can be incremented expandably.
+ \item[\texttt{flag}] Non-negative integer that can be incremented expandably.
\item[\texttt{fparray}] Fixed-size array of floating point values.
\item[\texttt{intarray}] Fixed-size array of integers.
\item[\texttt{ior}/\texttt{iow}] An input or output stream, for
@@ -335,7 +335,7 @@
Modules focussed on variable usage typically provide four scratch variables,
two local and two global, with names of the form
-\cs{\meta{scope}_tmpa_\meta{type}}/\cs{\meta{scope}_tmpb_\meta{type}}. These
+\cs[no-index]{\meta{scope}_tmpa_\meta{type}}/\cs[no-index]{\meta{scope}_tmpb_\meta{type}}. These
are never used by the core code. The nature of \TeX{} grouping means that as
with any other scratch variable, these should only be set and used with no
intervening third-party code.
@@ -607,10 +607,8 @@
\DocInput{l3color.dtx}
\DocInput{l3pdf.dtx}
-\part{Additions and removals}
+\part{Removals}
-\DocInput{l3candidates.dtx}
-
\ExplSyntaxOn
\clist_gput_right:Nn \g_docinput_clist { l3deprecation.dtx }
\clist_gput_right:Nn \g_docinput_clist { l3debug.dtx }
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/expl3.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/expl3.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/expl3.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -24,7 +24,7 @@
%
%<*driver|generic|package|2ekernel>
%</driver|generic|package|2ekernel>
-\def\ExplFileDate{2024-01-04}%
+\def\ExplFileDate{2024-01-22}%
%<*driver>
\documentclass[full]{l3doc}
\usepackage{graphicx}
@@ -51,7 +51,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
@@ -425,11 +425,14 @@
% type for carrying out |box| alignment operations;
% \item[dim] \enquote{rigid} lengths;
% \item[fp] floating-point values;
+% \item[fparray] fixed-size vector of floating-point values;
+% \item[int] integer-valued count register;
+% \item[intarray] fixed-size vector of integer values;
% \item[ior] an input stream (for reading from a file);
% \item[iow] an output stream (for writing to a file);
-% \item[int] integer-valued count register;
% \item[muskip] math mode \enquote{rubber} lengths;
% \item[prop] property list;
+% \item[regex] regular expression;
% \item[seq] sequence: a data-type used to implement lists (with
% access at both ends) and stacks;
% \item[skip] \enquote{rubber} lengths;
@@ -437,6 +440,7 @@
% characters have category \enquote{other} (catcode~$12$),
% other than spaces which are category \enquote{space}
% (catcode~$10$);
+% \item[token] equal to a single arbitrary token;
% \item[tl] \enquote{token list variables}: placeholders for token lists.
% \end{description}
% When the \meta{type} and \meta{module} are identical (as often happens in
@@ -819,22 +823,22 @@
%
% The distribution of \pkg{expl3} is split up into three packages on
% CTAN: \pkg{l3kernel}, \pkg{l3packages} and \pkg{l3experimental}.
-% For historical reasons,
+% The core programming layer provided by \pkg{l3kernel} has been loaded
+% as part of the \LaTeX{} since 2020-02-02. For historical reasons, in
+% older kernel releases
% \begin{verbatim}
% \RequirePackage{expl3}
% \end{verbatim}
-% loads the code now distributed as \pkg{l3kernel}. This monolithic
+% loads the code distributed as \pkg{l3kernel}. This monolithic
% package contains all of the modules regarded by the team as stable,
% and any changes in this code are very limited. This material is
% therefore suitable for use in third-party packages without concern
% about changes in support. All of this code is documented in
-% \texttt{interface3.pdf}. With an up-to-date \LaTeXe{} kernel, this
-% code is built into the format file and therefore can be used
-% without any further steps.
+% \texttt{interface3.pdf}.
%
-% The material in \pkg{l3packages} is also stable, but is not always
-% at a programming level: most notably, \pkg{xparse} is stable and
-% suitable for wider use.
+% The material in \pkg{l3packages} is also stable; this bundle provides
+% user-level commands, some of which have been integrated in the
+% \LaTeX{} kernel.
%
% Finally, \pkg{l3experimental} contains modules ready for public use
% but not yet integrated into \pkg{l3kernel}. These modules have to
@@ -856,8 +860,8 @@
% For example, you may well need \tn{IfPackageLoadedTF}, as there
% is currently no native \pkg{expl3} package loading module.
% \item User level macros should be generated using the mechanism
-% available in the \pkg{xparse} package, which is part of the
-% \texttt{l3package} bundle.
+% available in the \pkg{ltcmd} module, which is part of the
+% the \LaTeX{} kernel since 2020-10-01.
% \item At an internal level, most functions should be generated
% \tn{long} (using \cs{cs_new:Npn}) rather than \enquote{short} (using
% \cs{cs_new_nopar:Npn}).
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3.ins 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3.ins 2024-01-22 20:35:48 UTC (rev 69537)
@@ -113,7 +113,6 @@
\from{l3text-case.dtx} {package}
\from{l3text-map.dtx} {package}
\from{l3text-purify.dtx}{package}
- \from{l3candidates.dtx} {package}
\from{l3legacy.dtx} {package}
\from{l3deprecation.dtx}{package}
}
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
@@ -2824,6 +2824,8 @@
% The \texttt{c} variant is careful not to add the control sequence
% to the hash table if it isn't there yet, and it also avoids nesting
% \TeX{} conditionals in case |#1| is unbalanced in this matter.
+% We optimize the case where the command exists by reducing as much as
+% possible the tokens in the conditional.
% \begin{macrocode}
\cs_new_protected:Npn \cs_undefine:N #1
{ \cs_gset_eq:NN #1 \tex_undefined:D }
@@ -2830,11 +2832,10 @@
\cs_new_protected:Npn \cs_undefine:c #1
{
\if_cs_exist:w #1 \cs_end:
- \exp_after:wN \use:n
\else:
- \exp_after:wN \use_none:n
+ \use_i:nnnn
\fi:
- { \cs_gset_eq:cN {#1} \tex_undefined:D }
+ \exp_args:Nc \cs_undefine:N {#1}
}
% \end{macrocode}
% \end{macro}
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3bitset.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3bitset.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3bitset.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -42,7 +42,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3box.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3box.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3box.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
Deleted: trunk/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -1,150 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3candidates.dtx
-%
-% Copyright (C) 2012-2024 The LaTeX Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3candidates} module\\ Experimental additions to
-% \pkg{l3kernel}^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team at latex-project.org}
-% {latex-team at latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-01-04}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% \section{Important notice}
-%
-% This module provides a space in which functions can be added to
-% \pkg{l3kernel} (\pkg{expl3}) while still being experimental.
-% \begin{quote}
-% \bfseries
-% As such, the
-% functions here may not remain in their current form, or indeed at all,
-% in \pkg{l3kernel} in the future.
-% \end{quote}
-% In contrast to the material in
-% \pkg{l3experimental}, the functions here are all \emph{small} additions to
-% the kernel. We encourage programmers to test them out and report back on
-% the \texttt{LaTeX-L} mailing list.
-%
-% \medskip
-%
-% Thus, if you intend to use any of these functions from the candidate module in a public package
-% offered to others for productive use (e.g., being placed on CTAN) please consider the following points carefully:
-% \begin{itemize}
-% \item Be prepared that your public packages might require updating when such functions
-% are being finalized.
-% \item Consider informing us that you use a particular function in your public package, e.g., by
-% discussing this on the \texttt{LaTeX-L}
-% mailing list. This way it becomes easier to coordinate any updates necessary without issues
-% for the users of your package.
-% \item Discussing and understanding use cases for a particular addition or concept also helps to
-% ensure that we provide the right interfaces in the final version so please give us feedback
-% if you consider a certain candidate function useful (or not).
-% \end{itemize}
-% We only add functions in this space if we consider them being serious candidates for a final inclusion
-% into the kernel. However, real use sometimes leads to better ideas, so functions from this module are
-% \textbf{not necessarily stable} and we may have to adjust them!
-%
-% \section{Additions to \pkg{l3seq}}
-%
-% \begin{function}{\seq_set_filter:NNn, \seq_gset_filter:NNn}
-% \begin{syntax}
-% \cs{seq_set_filter:NNn} \meta{sequence_1} \meta{sequence_2} \Arg{inline boolexpr}
-% \end{syntax}
-% Evaluates the \meta{inline boolexpr} for every \meta{item} stored
-% within the \meta{sequence_2}. The \meta{inline boolexpr}
-% receives the \meta{item} as |#1|. The sequence of all \meta{items}
-% for which the \meta{inline boolexpr} evaluated to \texttt{true}
-% is assigned to \meta{sequence_1}.
-% \begin{texnote}
-% Contrarily to other mapping functions, \cs{seq_map_break:} cannot
-% be used in this function, and would lead to low-level \TeX{} errors.
-% \end{texnote}
-% \end{function}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3candidates} implementation}
-%
-% \begin{macrocode}
-%<*package>
-% \end{macrocode}
-%
-% \subsection{Additions to \pkg{l3seq}}
-%
-% \begin{macrocode}
-%<@@=seq>
-% \end{macrocode}
-%
-% \begin{macro}{\seq_set_filter:NNn, \seq_gset_filter:NNn}
-% \begin{macro}{\@@_set_filter:NNNn}
-% Similar to \cs{seq_map_inline:Nn}, without a
-% \cs{prg_break_point:} because the user's code
-% is performed within the evaluation of a boolean expression,
-% and skipping out of that would break horribly.
-% The \cs{@@_wrap_item:n} function inserts the relevant
-% \cs{@@_item:n} without expansion in the input stream,
-% hence in the \texttt{e}-expanding assignment.
-% \begin{macrocode}
-\cs_new_protected:Npn \seq_set_filter:NNn
- { \@@_set_filter:NNNn \__kernel_tl_set:Ne }
-\cs_new_protected:Npn \seq_gset_filter:NNn
- { \@@_set_filter:NNNn \__kernel_tl_gset:Ne }
-\cs_new_protected:Npn \@@_set_filter:NNNn #1#2#3#4
- {
- \@@_push_item_def:n { \bool_if:nT {#4} { \@@_wrap_item:n {##1} } }
- #1 #2 { #3 }
- \@@_pop_item_def:
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3cctab.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3cctab.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3cctab.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
@@ -165,10 +165,10 @@
% \clist_gset_eq:Nc, \clist_gset_eq:cc
% }
% \begin{syntax}
-% \cs{clist_set_eq:NN} \meta{comma list_1} \meta{comma list_2}
+% \cs{clist_set_eq:NN} \meta{clist~var_1} \meta{clist~var_2}
% \end{syntax}
-% Sets the content of \meta{comma list_1} equal to that of
-% \meta{comma list_2}. To set a token list variable equal to a comma
+% Sets the content of \meta{clist~var_1} equal to that of
+% \meta{clist~var_2}. To set a token list variable equal to a comma
% list variable, use \cs{tl_set_eq:NN}. Conversely, setting a comma
% list variable to a token list is unadvisable unless one checks
% space-trimming and related issues.
@@ -182,10 +182,10 @@
% \clist_gset_from_seq:Nc, \clist_gset_from_seq:cc
% }
% \begin{syntax}
-% \cs{clist_set_from_seq:NN} \meta{clist~var} \meta{sequence}
+% \cs{clist_set_from_seq:NN} \meta{clist~var} \meta{seq~var}
% \end{syntax}
-% Converts the data in the \meta{sequence} into a \meta{clist~var}:
-% the original \meta{sequence} is unchanged.
+% Converts the data in the \meta{seq~var} into a \meta{clist~var}:
+% the original \meta{seq~var} is unchanged.
% Items which contain either spaces or commas are surrounded by braces.
% \end{function}
%
@@ -195,11 +195,11 @@
% \clist_gconcat:NNN, \clist_gconcat:ccc
% }
% \begin{syntax}
-% \cs{clist_concat:NNN} \meta{comma list_1} \meta{comma list_2} \meta{comma list_3}
+% \cs{clist_concat:NNN} \meta{clist~var_1} \meta{clist~var_2} \meta{clist~var_3}
% \end{syntax}
-% Concatenates the content of \meta{comma list_2} and \meta{comma list_3}
-% together and saves the result in \meta{comma list_1}. The items in
-% \meta{comma list_2} are placed at the left side of the new comma list.
+% Concatenates the content of \meta{clist~var_2} and \meta{clist~var_3}
+% together and saves the result in \meta{clist~var_1}. The items in
+% \meta{clist~var_2} are placed at the left side of the new comma list.
% \end{function}
%
% \begin{function}[EXP, pTF, added=2012-03-03]
@@ -475,8 +475,8 @@
% (token list) \meta{variable} and applies the \meta{code}. The
% \meta{code} will usually make use of the \meta{variable}, but this
% is not enforced. The assignments to the \meta{variable} are local.
-% Its value after the loop is the last \meta{item} in the \meta{comma
-% list}, or its original value if there were no \meta{item}. The
+% Its value after the loop is the last \meta{item} in the \meta{clist~var},
+% or its original value if there were no \meta{item}. The
% \meta{items} are returned from left to right.
% \end{function}
%
@@ -1067,9 +1067,9 @@
% in the case of an empty comma-list.
% \begin{macrocode}
\cs_new_protected:Npn \clist_set_from_seq:NN
- { \@@_set_from_seq:NNNN \clist_clear:N \__kernel_tl_set:Ne }
+ { \@@_set_from_seq:NNNN \clist_clear:N \__kernel_tl_set:Nx }
\cs_new_protected:Npn \clist_gset_from_seq:NN
- { \@@_set_from_seq:NNNN \clist_gclear:N \__kernel_tl_gset:Ne }
+ { \@@_set_from_seq:NNNN \clist_gclear:N \__kernel_tl_gset:Nx }
\cs_new_protected:Npn \@@_set_from_seq:NNNN #1#2#3#4
{
\seq_if_empty:NTF #4
@@ -1108,9 +1108,9 @@
% a little work to do.
% \begin{macrocode}
\cs_new_protected:Npn \clist_concat:NNN
- { \@@_concat:NNNN \__kernel_tl_set:Ne }
+ { \@@_concat:NNNN \__kernel_tl_set:Nx }
\cs_new_protected:Npn \clist_gconcat:NNN
- { \@@_concat:NNNN \__kernel_tl_gset:Ne }
+ { \@@_concat:NNNN \__kernel_tl_gset:Nx }
\cs_new_protected:Npn \@@_concat:NNNN #1#2#3#4
{
#1 #2
@@ -1155,9 +1155,9 @@
% }
% \begin{macrocode}
\cs_new_protected:Npn \clist_set:Nn #1#2
- { \__kernel_tl_set:Ne #1 { \@@_sanitize:n {#2} } }
+ { \__kernel_tl_set:Nx #1 { \@@_sanitize:n {#2} } }
\cs_new_protected:Npn \clist_gset:Nn #1#2
- { \__kernel_tl_gset:Ne #1 { \@@_sanitize:n {#2} } }
+ { \__kernel_tl_gset:Nx #1 { \@@_sanitize:n {#2} } }
\cs_generate_variant:Nn \clist_set:Nn { NV , Ne , c , cV , ce }
\cs_generate_variant:Nn \clist_set:Nn { No , Nx , co , cx }
\cs_generate_variant:Nn \clist_gset:Nn { NV , Ne , c , cV , ce }
@@ -1295,9 +1295,9 @@
% result can safely be an empty comma list.
% \begin{macrocode}
\cs_new_protected:Npn \clist_pop:NN
- { \@@_pop:NNN \__kernel_tl_set:Ne }
+ { \@@_pop:NNN \__kernel_tl_set:Nx }
\cs_new_protected:Npn \clist_gpop:NN
- { \@@_pop:NNN \__kernel_tl_gset:Ne }
+ { \@@_pop:NNN \__kernel_tl_gset:Nx }
\cs_new_protected:Npn \@@_pop:NNN #1#2#3
{
\if_meaning:w #2 \c_empty_clist
@@ -1342,9 +1342,9 @@
}
\prg_generate_conditional_variant:Nnn \clist_get:NN { c } { T , F , TF }
\prg_new_protected_conditional:Npnn \clist_pop:NN #1#2 { T , F , TF }
- { \@@_pop_TF:NNN \__kernel_tl_set:Ne #1 #2 }
+ { \@@_pop_TF:NNN \__kernel_tl_set:Nx #1 #2 }
\prg_new_protected_conditional:Npnn \clist_gpop:NN #1#2 { T , F , TF }
- { \@@_pop_TF:NNN \__kernel_tl_gset:Ne #1 #2 }
+ { \@@_pop_TF:NNN \__kernel_tl_gset:Nx #1 #2 }
\cs_new_protected:Npn \@@_pop_TF:NNN #1#2#3
{
\if_meaning:w #2 \c_empty_clist
@@ -1473,9 +1473,9 @@
% the second step removes it.
% \begin{macrocode}
\cs_new_protected:Npn \clist_remove_all:Nn
- { \@@_remove_all:NNNn \clist_set_from_seq:NN \__kernel_tl_set:Ne }
+ { \@@_remove_all:NNNn \clist_set_from_seq:NN \__kernel_tl_set:Nx }
\cs_new_protected:Npn \clist_gremove_all:Nn
- { \@@_remove_all:NNNn \clist_gset_from_seq:NN \__kernel_tl_gset:Ne }
+ { \@@_remove_all:NNNn \clist_gset_from_seq:NN \__kernel_tl_gset:Nx }
\cs_new_protected:Npn \@@_remove_all:NNNn #1#2#3#4
{
\@@_if_wrap:nTF {#4}
@@ -1529,9 +1529,9 @@
% \texttt{N}-type comma lists, but the slow-down is not too bad.
% \begin{macrocode}
\cs_new_protected:Npn \clist_reverse:N #1
- { \__kernel_tl_set:Ne #1 { \exp_args:No \clist_reverse:n {#1} } }
+ { \__kernel_tl_set:Nx #1 { \exp_args:No \clist_reverse:n {#1} } }
\cs_new_protected:Npn \clist_greverse:N #1
- { \__kernel_tl_gset:Ne #1 { \exp_args:No \clist_reverse:n {#1} } }
+ { \__kernel_tl_gset:Nx #1 { \exp_args:No \clist_reverse:n {#1} } }
\cs_generate_variant:Nn \clist_reverse:N { c }
\cs_generate_variant:Nn \clist_greverse:N { c }
% \end{macrocode}
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3color.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3color.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3color.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3debug.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3debug.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3debug.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
@@ -99,13 +99,16 @@
% different.
% \end{function}
%
-% \begin{function}[EXP]{\__kernel_chk_flag_exist:n}
+% \begin{function}[EXP]{\__kernel_chk_flag_exist:NN}
% \begin{syntax}
-% \cs{__kernel_chk_flag_exist:n} \Arg{flag}
+% \cs{__kernel_chk_flag_exist:NN}
+% \meta{function} \meta{flag}
% \end{syntax}
% This function is only created if debugging is enabled. It checks
% that the \meta{flag} is defined according to the criterion for
-% \cs{flag_if_exist_p:n}, and if not raises a kernel-level error.
+% \cs{flag_if_exist_p:N}, and if not raises a kernel-level error and
+% calls the function with the argument \cs{l_tmpa_flag} to proceed
+% somehow without producing too many errors.
% \end{function}
%
% \begin{function}{\__kernel_debug_log:e}
@@ -128,7 +131,7 @@
%
% Standard file identification.
% \begin{macrocode}
-\ProvidesExplFile{l3debug.def}{2024-01-04}{}{L3 Debugging support}
+\ProvidesExplFile{l3debug.def}{2024-01-22}{}{L3 Debugging support}
% \end{macrocode}
%
% \begin{variable}{\s_@@_stop}
@@ -220,7 +223,7 @@
}
\cs_set_protected:Npn \debug_resume:
{
- \__kernel_tl_set:Ne \l_@@_suspended_tl
+ \__kernel_tl_set:Nx \l_@@_suspended_tl
{ \tl_tail:N \l_@@_suspended_tl }
\tl_if_empty:NT \l_@@_suspended_tl
{
@@ -241,7 +244,7 @@
% \__kernel_chk_cs_exist:N,
% \__kernel_chk_cs_exist:c
% }
-% \begin{macro}[EXP]{\__kernel_chk_flag_exist:n}
+% \begin{macro}[EXP]{\__kernel_chk_flag_exist:NN}
% \begin{macro}{\__kernel_chk_var_local:N, \__kernel_chk_var_global:N}
% \begin{macro}{\__kernel_chk_var_scope:NN}
% When debugging is enabled these two functions set up functions that
@@ -258,7 +261,7 @@
\cs_new_protected:Npn \__kernel_chk_var_exist:N #1 { }
\cs_new_protected:Npn \__kernel_chk_cs_exist:N #1 { }
\cs_generate_variant:Nn \__kernel_chk_cs_exist:N { c }
-\cs_new:Npn \__kernel_chk_flag_exist:n #1 { }
+\cs_new:Npn \__kernel_chk_flag_exist:NN { }
\cs_new_protected:Npn \__kernel_chk_var_local:N #1 { }
\cs_new_protected:Npn \__kernel_chk_var_global:N #1 { }
\cs_new_protected:Npn \__kernel_chk_var_scope:NN #1#2 { }
@@ -282,13 +285,14 @@
{ \token_to_str:N ##1 }
}
}
- \cs_set:Npn \__kernel_chk_flag_exist:n ##1
+ \cs_set:Npn \__kernel_chk_flag_exist:NN ##1##2
{
- \@@_suspended:T \use_none:nnn
- \flag_if_exist:nF {##1}
+ \@@_suspended:T \use_iii:nnnn
+ \flag_if_exist:NTF ##2
+ { ##1 ##2 }
{
- \msg_expandable_error:nnn
- { kernel } { bad-variable } { flag~##1~ }
+ \msg_expandable_error:nnn { kernel } { bad-variable } {##2}
+ ##1 \l_tmpa_flag
}
}
\cs_set_protected:Npn \__kernel_chk_var_scope:NN
@@ -313,7 +317,7 @@
{
\cs_set_protected:Npn \__kernel_chk_var_exist:N ##1 { }
\cs_set_protected:Npn \__kernel_chk_cs_exist:N ##1 { }
- \cs_set:Npn \__kernel_chk_flag_exist:N ##1 { }
+ \cs_set:Npn \__kernel_chk_flag_exist:NN { }
\cs_set_protected:Npn \__kernel_chk_var_local:N ##1 { }
\cs_set_protected:Npn \__kernel_chk_var_global:N ##1 { }
\cs_set_protected:Npn \__kernel_chk_var_scope:NN ##1##2 { }
@@ -510,11 +514,11 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_generate_parameter_list:NNN #1#2#3
{
- \__kernel_tl_set:Ne \l_@@_internal_tl
+ \__kernel_tl_set:Nx \l_@@_internal_tl
{ \exp_last_unbraced:Nf \use_ii:nnn \cs_split_function:N #1 }
- \__kernel_tl_set:Ne #2
+ \__kernel_tl_set:Nx #2
{ \exp_args:NV \@@_build_parm_text:n \l_@@_internal_tl }
- \__kernel_tl_set:Ne #3
+ \__kernel_tl_set:Nx #3
{ \exp_args:NV \@@_build_arg_list:n \l_@@_internal_tl }
}
\cs_new:Npn \@@_build_parm_text:n #1
@@ -790,8 +794,8 @@
%
%
% \begin{macrocode}
-\cs_gset_protected:Npn \__kernel_tl_set:Ne { \cs_set_nopar:Npe }
-\cs_gset_protected:Npn \__kernel_tl_gset:Ne { \cs_gset_nopar:Npe }
+\cs_gset_protected:Npn \__kernel_tl_set:Nx { \cs_set_nopar:Npe }
+\cs_gset_protected:Npn \__kernel_tl_gset:Nx { \cs_gset_nopar:Npe }
% \end{macrocode}
%
% Patching where the first argument to a function needs scope-checking:
@@ -842,7 +846,7 @@
\str_set_eq:NN
\str_put_left:Nn
\str_put_right:Nn
- \__kernel_tl_set:Ne
+ \__kernel_tl_set:Nx
\tl_clear:N
\tl_set_eq:NN
\tl_put_left:Nn
@@ -911,7 +915,7 @@
\str_gset_eq:NN
\str_gput_left:Nn
\str_gput_right:Nn
- \__kernel_tl_gset:Ne
+ \__kernel_tl_gset:Nx
\tl_gclear:N
\tl_gset_eq:NN
\tl_gput_left:Nn
@@ -957,16 +961,16 @@
% Flag functions.
% \begin{macrocode}
\__kernel_patch:nnn
- { \__kernel_chk_flag_exist:n {#1} }
+ { \__kernel_chk_flag_exist:NN }
{ }
{
- \flag_if_raised:nT
- \flag_if_raised:nF
- \flag_if_raised:nTF
- \flag_if_raised_p:n
- \flag_height:n
- \flag_ensure_raised:n
- \flag_clear:n
+ \flag_ensure_raised:N
+ \flag_height:N
+ \flag_if_raised:NT
+ \flag_if_raised:NF
+ \flag_if_raised:NTF
+ \flag_if_raised_p:N
+ \flag_raise:N
}
% \end{macrocode}
%
@@ -981,6 +985,17 @@
{ }
{ \cctab_new:N }
\__kernel_patch:nnn
+ { \__kernel_chk_var_scope:NN l #1 }
+ { }
+ { \flag_new:N }
+ \__kernel_patch:nnn
+ {
+ \__kernel_chk_var_scope:NN l #1
+ \__kernel_chk_flag_exist:NN
+ }
+ { }
+ { \flag_clear:N }
+ \__kernel_patch:nnn
{ \__kernel_chk_var_scope:NN g #1 }
{ }
{ \intarray_new:Nn }
@@ -1069,7 +1084,7 @@
{
\@@_trace_push:nnN { regex } { 1 } \@@_escape_use:nnnn
\group_begin:
- \__kernel_tl_set:Ne \l_@@_internal_a_tl
+ \__kernel_tl_set:Nx \l_@@_internal_a_tl
{ \@@_trace_pop:nnN { regex } { 1 } \@@_escape_use:nnnn }
\use_none:nnn
}
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
@@ -209,229 +209,6 @@
}
% \end{macrocode}
%
-% \subsection{Removed functions}
-%
-% \begin{macro}{\@@_old_protected:Nnn, \@@_old:Nnn}
-% Short-hands for old commands whose definition does not matter
-% any more as they were removed.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_old_protected:Nnn #1#2#3
- {
- \__kernel_patch_deprecation:nnNNpn {#3} {#2}
- \cs_gset_protected:Npn #1 { }
- }
-\cs_new_protected:Npn \@@_old:Nnn #1#2#3
- {
- \__kernel_patch_deprecation:nnNNpn {#3} {#2}
- \cs_gset:Npn #1 { }
- }
-\@@_old_protected:Nnn \box_gset_eq_clear:NN
- { \box_gset_eq_drop:NN } { 2021-07-01 }
-\@@_old_protected:Nnn \box_set_eq_clear:NN
- { \box_set_eq_drop:NN } { 2021-07-01 }
-\@@_old_protected:Nnn \box_resize:Nnn
- { \box_resize_to_wd_and_ht_plus_dp:Nnn } { 2019-01-01 }
-\@@_old_protected:Nnn \box_use_clear:N
- { \box_use_drop:N } { 2019-01-01 }
-\@@_old:Nnn \c_job_name_tl
- { \c_sys_jobname_str } { 2017-01-01 }
-\@@_old:Nnn \c_minus_one
- { -1 } { 2019-01-01 }
-\@@_old:Nnn \c_zero
- { 0 } { 2020-01-01 }
-\@@_old:Nnn \c_one
- { 1 } { 2020-01-01 }
-\@@_old:Nnn \c_two
- { 2 } { 2020-01-01 }
-\@@_old:Nnn \c_three
- { 3 } { 2020-01-01 }
-\@@_old:Nnn \c_four
- { 4 } { 2020-01-01 }
-\@@_old:Nnn \c_five
- { 5 } { 2020-01-01 }
-\@@_old:Nnn \c_six
- { 6 } { 2020-01-01 }
-\@@_old:Nnn \c_seven
- { 7 } { 2020-01-01 }
-\@@_old:Nnn \c_eight
- { 8 } { 2020-01-01 }
-\@@_old:Nnn \c_nine
- { 9 } { 2020-01-01 }
-\@@_old:Nnn \c_ten
- { 10 } { 2020-01-01 }
-\@@_old:Nnn \c_eleven
- { 11 } { 2020-01-01 }
-\@@_old:Nnn \c_twelve
- { 12 } { 2020-01-01 }
-\@@_old:Nnn \c_thirteen
- { 13 } { 2020-01-01 }
-\@@_old:Nnn \c_fourteen
- { 14 } { 2020-01-01 }
-\@@_old:Nnn \c_fifteen
- { 15 } { 2020-01-01 }
-\@@_old:Nnn \c_sixteen
- { 16 } { 2020-01-01 }
-\@@_old:Nnn \c_thirty_two
- { 32 } { 2020-01-01 }
-\@@_old:Nnn \c_one_hundred
- { 100 } { 2020-01-01 }
-\@@_old:Nnn \c_two_hundred_fifty_five
- { 255 } { 2020-01-01 }
-\@@_old:Nnn \c_two_hundred_fifty_six
- { 256 } { 2020-01-01 }
-\@@_old:Nnn \c_one_thousand
- { 1000 } { 2020-01-01 }
-\@@_old:Nnn \c_ten_thousand
- { 10000 } { 2020-01-01 }
-\@@_old:Nnn \c_term_ior
- { -1 } { 2021-07-01 }
-\@@_old:Nnn \dim_case:nnn
- { \dim_case:nnF } { 2015-07-14 }
-\@@_old_protected:Nnn \file_add_path:nN
- { \file_get_full_name:nN } { 2019-01-01 }
-\@@_old_protected:Nnn \file_if_exist_input:nT
- { \file_if_exist:nT and~ \file_input:n } { 2018-03-05 }
-\@@_old_protected:Nnn \file_if_exist_input:nTF
- { \file_if_exist:nT and~ \file_input:n } { 2018-03-05 }
-\@@_old_protected:Nnn \file_list:
- { \file_log_list: } { 2019-01-01 }
-\@@_old:Nnn \file_path_include:n
- { \seq_put_right:Nn \l_file_search_path_seq } { 2019-01-01 }
-\@@_old_protected:Nnn \file_path_remove:n
- { \seq_remove_all:Nn \l_file_search_path_seq } { 2019-01-01 }
-\@@_old:Nnn \g_file_current_name_tl
- { \g_file_curr_name_str } { 2019-01-01 }
-\@@_old_protected:Nnn \hbox_unpack_clear:N
- { \hbox_unpack_drop:N } { 2021-07-01 }
-\@@_old:Nnn \int_case:nnn
- { \int_case:nnF } { 2015-07-14 }
-\@@_old:Nnn \int_from_binary:n
- { \int_from_bin:n } { 2016-01-05 }
-\@@_old:Nnn \int_from_hexadecimal:n
- { \int_from_hex:n } { 2016-01-05 }
-\@@_old:Nnn \int_from_octal:n
- { \int_from_oct:n } { 2016-01-05 }
-\@@_old:Nnn \int_to_binary:n
- { \int_to_bin:n } { 2016-01-05 }
-\@@_old:Nnn \int_to_hexadecimal:n
- { \int_to_hex:n } { 2016-01-05 }
-\@@_old:Nnn \int_to_octal:n
- { \int_to_oct:n } { 2016-01-05 }
-\@@_old_protected:Nnn \ior_get_str:NN
- { \ior_str_get:NN } { 2018-03-05 }
-\@@_old_protected:Nnn \ior_list_streams:
- { \ior_show_list: } { 2019-01-01 }
-\@@_old_protected:Nnn \ior_log_streams:
- { \ior_log_list: } { 2019-01-01 }
-\@@_old_protected:Nnn \iow_list_streams:
- { \iow_show_list: } { 2019-01-01 }
-\@@_old_protected:Nnn \iow_log_streams:
- { \iow_log_list: } { 2019-01-01 }
-\@@_old:Nnn \lua_escape_x:n
- { \lua_escape:e } { 2020-01-01 }
-\@@_old:Nnn \lua_now_x:n
- { \lua_now:e } { 2020-01-01 }
-\@@_old_protected:Nnn \lua_shipout_x:n
- { \lua_shipout_e:n } { 2020-01-01 }
-\@@_old:Nnn \luatex_if_engine_p:
- { \sys_if_engine_luatex_p: } { 2017-01-01 }
-\@@_old:Nnn \luatex_if_engine:F
- { \sys_if_engine_luatex:F } { 2017-01-01 }
-\@@_old:Nnn \luatex_if_engine:T
- { \sys_if_engine_luatex:T } { 2017-01-01 }
-\@@_old:Nnn \luatex_if_engine:TF
- { \sys_if_engine_luatex:TF } { 2017-01-01 }
-\@@_old_protected:Nnn \msg_interrupt:nnn
- { [Defined~error~message] } { 2020-01-01 }
-\@@_old_protected:Nnn \msg_log:n
- { \iow_log:n } { 2020-01-01 }
-\@@_old_protected:Nnn \msg_term:n
- { \iow_term:n } { 2020-01-01 }
-\@@_old:Nnn \pdftex_if_engine_p:
- { \sys_if_engine_pdftex_p: } { 2017-01-01 }
-\@@_old:Nnn \pdftex_if_engine:F
- { \sys_if_engine_pdftex:F } { 2017-01-01 }
-\@@_old:Nnn \pdftex_if_engine:T
- { \sys_if_engine_pdftex:T } { 2017-01-01 }
-\@@_old:Nnn \pdftex_if_engine:TF
- { \sys_if_engine_pdftex:TF } { 2017-01-01 }
-\@@_old:Nnn \prop_get:cn
- { \prop_item:cn } { 2016-01-05 }
-\@@_old:Nnn \prop_get:Nn
- { \prop_item:Nn } { 2016-01-05 }
-\@@_old:Nnn \quark_if_recursion_tail_break:N
- { } { 2015-07-14 }
-\@@_old:Nnn \quark_if_recursion_tail_break:n
- { } { 2015-07-14 }
-\@@_old:Nnn \scan_align_safe_stop:
- { protected~commands } { 2017-01-01 }
-\@@_old:Nnn \sort_ordered:
- { \sort_return_same: } { 2019-01-01 }
-\@@_old:Nnn \sort_reversed:
- { \sort_return_swapped: } { 2019-01-01 }
-\@@_old:Nnn \str_case:nnn
- { \str_case:nnF } { 2015-07-14 }
-\@@_old:Nnn \str_case:onn
- { \str_case:onF } { 2015-07-14 }
-\@@_old:Nnn \str_case_x:nn
- { \str_case_e:nn } { 2020-01-01 }
-\@@_old:Nnn \str_case_x:nnn
- { \str_case_e:nnF } { 2015-07-14 }
-\@@_old:Nnn \str_case_x:nnT
- { \str_case_e:nnT } { 2020-01-01 }
-\@@_old:Nnn \str_case_x:nnTF
- { \str_case_e:nnTF } { 2020-01-01 }
-\@@_old:Nnn \str_case_x:nnF
- { \str_case_e:nnF } { 2020-01-01 }
-\@@_old:Nnn \str_if_eq_x_p:nn
- { \str_if_eq_p:ee } { 2020-01-01 }
-\@@_old:Nnn \str_if_eq_x:nnT
- { \str_if_eq:eeT } { 2020-01-01 }
-\@@_old:Nnn \str_if_eq_x:nnF
- { \str_if_eq:eeF } { 2020-01-01 }
-\@@_old:Nnn \str_if_eq_x:nnTF
- { \str_if_eq:eeTF } { 2020-01-01 }
-\@@_old_protected:Nnn \tl_show_analysis:N
- { \tl_analysis_show:N } { 2020-01-01 }
-\@@_old_protected:Nnn \tl_show_analysis:n
- { \tl_analysis_show:n } { 2020-01-01 }
-\@@_old:Nnn \tl_case:cnn
- { \exp_args:Nc \token_case_meaning:NnF } { 2015-07-14 }
-\@@_old:Nnn \tl_case:Nnn
- { \token_case_meaning:NnF } { 2015-07-14 }
-\@@_old_protected:Nnn \tl_gset_from_file:Nnn
- { \file_get:nnN } { 2021-07-01 }
-\@@_old_protected:Nnn \tl_gset_from_file_x:Nnn
- { \file_get:nnN } { 2021-07-01 }
-\@@_old_protected:Nnn \tl_set_from_file:Nnn
- { \file_get:nnN } { 2021-07-01 }
-\@@_old_protected:Nnn \tl_set_from_file_x:Nnn
- { \file_get:nnN } { 2021-07-01 }
-\@@_old_protected:Nnn \tl_to_lowercase:n
- { \tex_lowercase:D } { 2018-03-05 }
-\@@_old_protected:Nnn \tl_to_uppercase:n
- { \tex_uppercase:D } { 2018-03-05 }
-\@@_old:Nnn \token_get_arg_spec:N
- { \cs_argument_spec:N } { 2021-07-01 }
-\@@_old:Nnn \token_get_prefix_spec:N
- { \cs_prefix_spec:N } { 2021-07-01 }
-\@@_old:Nnn \token_get_replacement_spec:N
- { \cs_replacement_spec:N } { 2021-07-01 }
-\@@_old_protected:Nnn \token_new:Nn
- { \cs_new_eq:NN } { 2019-01-01 }
-\@@_old_protected:Nnn \vbox_unpack_clear:N
- { \vbox_unpack_drop:N } { 2021-07-01 }
-\@@_old:Nnn \xetex_if_engine_p:
- { \sys_if_engine_xetex_p: } { 2017-01-01 }
-\@@_old:Nnn \xetex_if_engine:F
- { \sys_if_engine_xetex:F } { 2017-01-01 }
-\@@_old:Nnn \xetex_if_engine:T
- { \sys_if_engine_xetex:T } { 2017-01-01 }
-\@@_old:Nnn \xetex_if_engine:TF
- { \sys_if_engine_xetex:TF } { 2017-01-01 }
-% \end{macrocode}
-% \end{macro}
-%
% \subsection{Deprecated \pkg{l3basics} functions}
%
% \begin{macrocode}
@@ -503,6 +280,39 @@
% \end{macro}
% \end{macro}
%
+% \begin{macro}[deprecated]
+% {
+% \keys_set_filter:nnnN, \keys_set_filter:nnVN,
+% \keys_set_filter:nnvN, \keys_set_filter:nnoN
+% }
+% \begin{macro}[deprecated]
+% {
+% \keys_set_filter:nnnnN, \keys_set_filter:nnVnN,
+% \keys_set_filter:nnvnN, \keys_set_filter:nnonN
+% }
+% \begin{macro}[deprecated]
+% {
+% \keys_set_filter:nnn, \keys_set_filter:nnV,
+% \keys_set_filter:nnv, \keys_set_filter:nno
+% }
+% We need a transition here so for the present this is commented out:
+% only needed for \texttt{latex-lab} code so this should not last for
+% too long.
+% \begin{macrocode}
+%\__kernel_patch_deprecation:nnNNpn { 2024-01-10 } { \keys_set_exclude_groups:nnn }
+\cs_set_protected:Npn \keys_set_filter:nnn { \keys_set_exclude_groups:nnn }
+\cs_generate_variant:Nn \keys_set_filter:nnn { nnV , nnv , nno }
+%\__kernel_patch_deprecation:nnNNpn { 2024-01-10 } { \keys_set_exclude_groups:nnnN }
+\cs_set_protected:Npn \keys_set_filter:nnnN { \keys_set_exclude_groups:nnnN }
+\cs_generate_variant:Nn \keys_set_filter:nnnN { nnV , nnv , nno }
+%\__kernel_patch_deprecation:nnNNpn { 2024-01-10 } { \keys_set_exclude_groups:nnnnN }
+\cs_set_protected:Npn \keys_set_filter:nnnnN { \keys_set_exclude_groups:nnnnN }
+\cs_generate_variant:Nn \keys_set_filter:nnnnN { nnV , nnv , nno }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
% \subsection{Deprecated \pkg{l3pdf} functions}
%
% \begin{macrocode}
@@ -729,7 +539,7 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\tl_build_get:NN}
+% \begin{macro}[deprecated]{\tl_build_get:NN}
% \begin{macrocode}
\__kernel_patch_deprecation:nnNNpn { 2023-10-25 } { \tl_build_get_intermediate:NN }
\cs_new_protected:Npn \tl_build_get:NN { \tl_build_get_intermediate:NN }
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -71,7 +71,7 @@
% This isn't included in the typeset documentation because it's a bit
% ugly:
%<*class>
-\ProvidesExplClass{l3doc}{2024-01-04}{}
+\ProvidesExplClass{l3doc}{2024-01-22}{}
{L3 Experimental documentation class}
%</class>
% \fi
@@ -84,7 +84,7 @@
% require you to do updates, if the class changes.}}
%
% \author{\Team}
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
% \maketitle
% \tableofcontents
%
@@ -237,8 +237,10 @@
% encoding (the standard setting) or leaves the font setup unchanged.
%
% \DescribeOption{kernel}
-% Determines whether \pkg{l3doc} treats |\__kernel_| commands and
-% |\(c|g|l)__kernel_| variables as allowable in code. In general,
+% Determines whether \pkg{l3doc} treats internal functions and variables
+% belonging to |kernel| module as allowable in code, for instance
+% \cs{__kernel_tl_to_str:w}, \cs{c__kernel_expl_date_tl}, and
+% \cs{l__kernel_expl_bool}. In general,
% \emph{no} internal material from outside the current module is allowed.
% However, for bootstrapping the \pkg{expl3} kernel, a small number of
% cross-module functions are needed. To suppress the error message that
@@ -270,6 +272,12 @@
% class option. To disable hyphenation of control sequences entirely, use
% \texttt{cs-break = false}.
%
+% By default, class options
+% \begin{verbatim}
+% full , check = false , checktest = false , lm-default
+% \end{verbatim}
+% are set.
+%
% \subsection{Partitioning documentation and implementation}
%
% \pkg{doc} uses the \cs{OnlyDocumentation}/\cs{AlsoImplementation}
@@ -322,7 +330,7 @@
% it doesn't rely on catcodes being \enquote{correct} and is therefore
% recommended.
%
-% These commands are aware of the |@@| \pkg{l3docstrip} syntax and
+% These commands are aware of the |@@| \pkg{DocStrip} syntax and
% replace such instances correctly in the typeset documentation.
% This only happens after a |%<@@=|\meta{module}|>| declaration.
%
@@ -343,7 +351,7 @@
% main index. By default, the \meta{module} is deduced
% automatically from the command name.
% \item |replace| is a boolean key (\texttt{true} by default) which
-% indicates whether to replace |@@| as \pkg{l3docstrip} does.
+% indicates whether to replace |@@| as \pkg{DocStrip} does.
% \end{itemize}
% These commands allow hyphenation of control sequences after (most) underscores.
% By default, a hyphen is used to mark the hyphenation, but this can be changed with
@@ -1046,7 +1054,7 @@
\cs_new_protected:Npn \@@_trim_right:Nn #1#2
{
\cs_set:Npn \@@_tmp:w ##1 #2 ##2 \q_stop { \exp_not:n {##1} }
- \__kernel_tl_set:Ne #1 { \exp_after:wN \@@_tmp:w #1 #2 \q_stop }
+ \__kernel_tl_set:Nx #1 { \exp_after:wN \@@_tmp:w #1 #2 \q_stop }
}
\cs_generate_variant:Nn \@@_trim_right:Nn { No }
% \end{macrocode}
@@ -1266,7 +1274,7 @@
\@@_if_almost_str:nTF {#1}
{
\@@_key_get_base_TF:nN {#1} \l_@@_tmpa_tl
- \__kernel_tl_set:Ne #2
+ \__kernel_tl_set:Nx #2
{ \@@_split_function_do:on \l_@@_tmpa_tl { \@@_base_form_aux:nnN } }
}
{ \tl_set:Nn #2 {#1} }
@@ -1273,7 +1281,7 @@
}
\cs_new:Npe \@@_key_get_base_TF:nN #1#2
{
- \__kernel_tl_set:Ne #2 { \exp_not:N \tl_to_str:n {#1} }
+ \__kernel_tl_set:Nx #2 { \exp_not:N \tl_to_str:n {#1} }
\tl_if_in:NoF #2 { \tl_to_str:n {:} }
{ \exp_not:N \prg_break: }
\tl_if_in:onT { #2 z } { \tl_to_str:n {TF} z }
@@ -1464,7 +1472,7 @@
\DeclareUnknownKeyHandler [ l3doc / options ]
{ \PassOptionsToClass { \CurrentOption } { article } }
\SetKeys [ l3doc / options ]
- { full , kernel , check = false , checktest = false , lm-default }
+ { full , check = false , checktest = false , lm-default }
\PassOptionsToClass { a4paper } { article }
% \end{macrocode}
%
@@ -1998,7 +2006,7 @@
\verbatim at font
\@@_if_almost_str:VT \l_@@_cmd_tl
{
- \__kernel_tl_set:Ne \l_@@_cmd_tl { \tl_to_str:N \l_@@_cmd_tl }
+ \__kernel_tl_set:Nx \l_@@_cmd_tl { \tl_to_str:N \l_@@_cmd_tl }
\bool_if:NT \g_@@_cs_break_bool
{
\regex_replace_all:nnN
@@ -2020,13 +2028,13 @@
{
\quark_if_no_value:NF \l_@@_cmd_index_tl
{
- \__kernel_tl_set:Ne \l_@@_cmd_tl
+ \__kernel_tl_set:Nx \l_@@_cmd_tl
{ \c_backslash_str \exp_not:o { \l_@@_cmd_index_tl } }
}
\exp_args:No \@@_key_get:n { \l_@@_cmd_tl }
\quark_if_no_value:NF \l_@@_cmd_module_tl
{
- \__kernel_tl_set:Ne \l_@@_index_module_tl
+ \__kernel_tl_set:Nx \l_@@_index_module_tl
{ \tl_to_str:N \l_@@_cmd_module_tl }
}
\@@_special_index_module:ooonN
@@ -2142,7 +2150,7 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_get_hyper_target:nN #1#2
{
- \__kernel_tl_set:Ne #2 { \tl_to_str:n {#1} }
+ \__kernel_tl_set:Nx #2 { \tl_to_str:n {#1} }
\tl_replace_all:NVn #2 \c_underscore_str { / }
\tl_remove_all:NV #2 \c_backslash_str
\tl_put_left:Nn #2 { doc/function// }
@@ -2165,7 +2173,7 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_names_get_seq:nN #1#2
{
- \__kernel_tl_set:Ne \l_@@_tmpa_tl { \tl_to_str:n {#1} }
+ \__kernel_tl_set:Nx \l_@@_tmpa_tl { \tl_to_str:n {#1} }
\bool_if:NTF \l_@@_names_verb_bool
{
\seq_clear:N #2
@@ -3051,7 +3059,7 @@
\l_@@_macro_do_not_index_tl
\exp_args:NNV \seq_set_from_clist:Nn
\l_@@_tmpa_seq \l_@@_macro_do_not_index_tl
- \__kernel_tl_set:Ne \l_@@_macro_do_not_index_tl
+ \__kernel_tl_set:Nx \l_@@_macro_do_not_index_tl
{ \seq_use:Nn \l_@@_tmpa_seq { , } }
\exp_args:NV \DoNotIndex \l_@@_macro_do_not_index_tl
}
@@ -4367,7 +4375,7 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_special_index_set:Nn #1#2
{
- \__kernel_tl_set:Ne #1 { \tl_to_str:n {#2} }
+ \__kernel_tl_set:Nx #1 { \tl_to_str:n {#2} }
\@@_if_almost_str:nTF {#2}
{
\tl_replace_all:Nen #1 { \tl_to_str:n { __ } }
@@ -4385,7 +4393,7 @@
\token_to_str:N \verb * \verbatimchar
}
}
- \__kernel_tl_set:Ne #1
+ \__kernel_tl_set:Nx #1
{
\token_to_str:N \verb * \verbatimchar
#1 \verbatimchar
@@ -4436,7 +4444,7 @@
\cs_new_protected:Npe \@@_key_get:n #1
{
\exp_not:N \@@_key_get_base:nN {#1} \exp_not:N \l_@@_index_macro_tl
- \__kernel_tl_set:Ne \exp_not:N \l_@@_index_key_tl
+ \__kernel_tl_set:Nx \exp_not:N \l_@@_index_key_tl
{ \exp_not:N \tl_to_str:N \exp_not:N \l_@@_index_macro_tl }
\tl_clear:N \exp_not:N \l_@@_index_module_tl
\tl_if_in:NnTF \exp_not:N \l_@@_index_key_tl { \tl_to_str:n { __ } }
@@ -4458,7 +4466,7 @@
}
\cs_new_protected:Npn \@@_key_pop:
{
- \__kernel_tl_set:Ne \l_@@_index_key_tl
+ \__kernel_tl_set:Nx \l_@@_index_key_tl
{ \tl_tail:N \l_@@_index_key_tl }
}
% \end{macrocode}
@@ -4473,7 +4481,7 @@
{
\cs_set:Npn \@@_tmpa:w ##1 #1 ##2 \q_stop
{ \exp_not:n {##1} }
- \__kernel_tl_set:Ne \l_@@_index_module_tl
+ \__kernel_tl_set:Nx \l_@@_index_module_tl
{ \exp_after:wN \@@_tmpa:w \l_@@_index_module_tl #1 \q_stop }
}
\cs_new_protected:Npn \@@_key_drop_underscores:
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -63,7 +63,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3file.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3file.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3file.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
@@ -1212,7 +1212,7 @@
{ \@@_open_stream:Nn #1 {#2} }
{
\@@_new:N #1
- \__kernel_tl_set:Ne \l_@@_stream_tl { \int_eval:n {#1} }
+ \__kernel_tl_set:Nx \l_@@_stream_tl { \int_eval:n {#1} }
\@@_open_stream:Nn #1 {#2}
}
}
@@ -1687,7 +1687,7 @@
% \begin{macrocode}
\cs_new_protected:Npn \iow_open:Nn #1#2
{
- \__kernel_tl_set:Ne \l_@@_file_name_tl
+ \__kernel_tl_set:Nx \l_@@_file_name_tl
{ \__kernel_file_name_sanitize:n {#2} }
\iow_close:N #1
\seq_gpop:NNTF \g_@@_streams_seq \l_@@_stream_tl
@@ -1694,7 +1694,7 @@
{ \@@_open_stream:NV #1 \l_@@_file_name_tl }
{
\@@_new:N #1
- \__kernel_tl_set:Ne \l_@@_stream_tl { \int_eval:n {#1} }
+ \__kernel_tl_set:Nx \l_@@_stream_tl { \int_eval:n {#1} }
\@@_open_stream:NV #1 \l_@@_file_name_tl
}
}
@@ -1966,7 +1966,7 @@
\cs_new:Npn \@@_unindent:w { }
\cs_new_protected:Npn \@@_set_indent:n #1
{
- \__kernel_tl_set:Ne \l_@@_one_indent_tl
+ \__kernel_tl_set:Nx \l_@@_one_indent_tl
{ \exp_args:No \__kernel_str_to_other_fast:n { \tl_to_str:n {#1} } }
\int_set:Nn \l_@@_one_indent_int
{ \str_count:N \l_@@_one_indent_tl }
@@ -2143,7 +2143,7 @@
% \cs{iow_wrap:nnnN}.
% \begin{macrocode}
\cs_set_eq:NN \protect \token_to_str:N
- \__kernel_tl_set:Ne \l_@@_wrap_tl {#1}
+ \__kernel_tl_set:Nx \l_@@_wrap_tl {#1}
\cs_set_eq:NN \iow_wrap_allow_break: \@@_wrap_allow_break_error:
\cs_set_eq:NN \iow_indent:n \@@_indent_error:n
% \end{macrocode}
@@ -2151,8 +2151,8 @@
% then convert to a string) and initialize the target count for lines
% (the first line has target count \cs{l_iow_line_count_int} instead).
% \begin{macrocode}
- \__kernel_tl_set:Ne \l_@@_newline_tl { \iow_newline: #2 }
- \__kernel_tl_set:Ne \l_@@_newline_tl { \tl_to_str:N \l_@@_newline_tl }
+ \__kernel_tl_set:Nx \l_@@_newline_tl { \iow_newline: #2 }
+ \__kernel_tl_set:Nx \l_@@_newline_tl { \tl_to_str:N \l_@@_newline_tl }
\int_set:Nn \l_@@_line_target_int
{ \l_iow_line_count_int - \str_count:N \l_@@_newline_tl + 1 }
% \end{macrocode}
@@ -2192,12 +2192,12 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_wrap_do:
{
- \__kernel_tl_set:Ne \l_@@_wrap_tl
+ \__kernel_tl_set:Nx \l_@@_wrap_tl
{
\exp_args:No \__kernel_str_to_other_fast:n \l_@@_wrap_tl
\c_@@_wrap_end_marker_tl
}
- \__kernel_tl_set:Ne \l_@@_wrap_tl
+ \__kernel_tl_set:Nx \l_@@_wrap_tl
{
\exp_after:wN \@@_wrap_fix_newline:w \l_@@_wrap_tl
^^J \q_@@_nil ^^J \s_@@_stop
@@ -2461,7 +2461,7 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_wrap_allow_break:n #1
{
- \__kernel_tl_set:Ne \l_@@_line_tl
+ \__kernel_tl_set:Nx \l_@@_line_tl
{ \l_@@_line_tl \@@_wrap_trim:N \l_@@_line_part_tl }
\bool_set_false:N \l_@@_line_break_bool
\tl_if_empty:NTF \l_@@_line_part_tl
@@ -2492,7 +2492,7 @@
\tl_put_right:Ne \l_@@_line_tl { \l_@@_line_part_tl }
\bool_set_false:N \l_@@_line_break_bool
\int_sub:Nn \l_@@_indent_int { \l_@@_one_indent_int }
- \__kernel_tl_set:Ne \l_@@_indent_tl
+ \__kernel_tl_set:Nx \l_@@_indent_tl
{ \exp_after:wN \@@_unindent:w \l_@@_indent_tl }
\@@_wrap_chunk:nw {#1}
}
@@ -2531,9 +2531,9 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_wrap_store_do:n #1
{
- \__kernel_tl_set:Ne \l_@@_line_tl
+ \__kernel_tl_set:Nx \l_@@_line_tl
{ \l_@@_line_tl \l_@@_line_part_tl }
- \__kernel_tl_set:Ne \l_@@_wrap_tl
+ \__kernel_tl_set:Nx \l_@@_wrap_tl
{
\l_@@_wrap_tl
\l_@@_newline_tl
@@ -3132,7 +3132,7 @@
\cs_generate_variant:Nn \file_get_full_name:nN { V }
\prg_new_protected_conditional:Npnn \file_get_full_name:nN #1#2 { T , F , TF }
{
- \__kernel_tl_set:Ne #2
+ \__kernel_tl_set:Nx #2
{ \file_full_name:n {#1} }
\tl_if_empty:NTF #2
{ \prg_return_false: }
@@ -3312,7 +3312,7 @@
{ V } { T , F , TF }
\cs_new_protected:Npn \@@_get_details:nnN #1#2#3
{
- \__kernel_tl_set:Ne #3
+ \__kernel_tl_set:Nx #3
{ \use:c { file_ #2 :n } {#1} }
\tl_if_empty:NTF #3
{ \prg_return_false: }
@@ -3334,7 +3334,7 @@
\prg_new_protected_conditional:Npnn \file_get_hex_dump:nnnN #1#2#3#4
{ T , F , TF }
{
- \__kernel_tl_set:Ne #4
+ \__kernel_tl_set:Nx #4
{ \file_hex_dump:nnn {#1} {#2} {#3} }
\tl_if_empty:NTF #4
{ \prg_return_false: }
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
@@ -54,16 +54,13 @@
% cases, booleans or integers should be preferred to flags because they
% are very significantly faster.
%
-% A flag can hold any non-negative value, which we call its
+% A flag can hold any (small) non-negative value, which we call its
% \meta{height}. In expansion-only contexts, a flag can only be
% \enquote{raised}: this increases the \meta{height} by $1$. The \meta{height}
% can also be queried expandably. However, decreasing it, or setting it
% to zero requires non-expandable assignments.
%
-% Flag variables are always local. They are referenced by a \meta{flag
-% name} such as \texttt{fp_overflow}. The \meta{flag name} is used as
-% part of \cs{use:c} constructions hence is expanded at point of use.
-% It must expand to character tokens only, with no spaces.
+% Flag variables are always local.
%
% A typical use case of flags would be to keep track of whether an
% exceptional condition has occurred during expandable processing, and
@@ -74,94 +71,111 @@
% error message describing incorrect inputs that were encountered.
%
% Flags should not be used without carefully considering the fact that
-% raising a flag takes a time and memory proportional to its height.
-% Flags should not be used unless unavoidable.
+% raising a flag takes a time and memory proportional to its height and
+% that the memory cannot be reclaimed even if the flag is cleared.
+% Flags should not be used unless it is unavoidable.
%
+% In earlier versions, flags were referenced by an \texttt{n}-type
+% \meta{flag name} such as \texttt{fp_overflow}, used as part of
+% \cs{use:c} constructions. All of the commands described below have
+% \texttt{n}-type analogues that can still appear in old code, but the
+% \texttt{N}-type commands are to be preferred moving forward. The
+% \texttt{n}-type \meta{flag name} is simply mapped to
+% \cs[no-index]{l_\meta{flag name}_flag}, which makes it easier for
+% packages using public flags (such as \pkg{l3fp}) to retain backwards
+% compatibility.
+%
% \section{Setting up flags}
%
-% \begin{function}{\flag_new:n}
+% \begin{function}[added = 2024-01-12]{\flag_new:N, \flag_new:c}
% \begin{syntax}
-% \cs{flag_new:n} \Arg{flag name}
+% \cs{flag_new:N} \meta{flag~var}
% \end{syntax}
-% Creates a new flag with a name given by \meta{flag name}, or raises
-% an error if the name is already taken. The \meta{flag name} may not
-% contain spaces. The declaration is global, but flags are always
-% local variables. The \meta{flag} initially has zero height.
+% Creates a new \meta{flag~var}, or raises an error if the name is
+% already taken. The declaration is global, but flags are always local
+% variables. The \meta{flag~var} initially has zero height.
% \end{function}
%
-% \begin{function}{\flag_clear:n}
+% \begin{function}[added = 2024-01-12]{\flag_clear:N, \flag_clear:c}
% \begin{syntax}
-% \cs{flag_clear:n} \Arg{flag name}
+% \cs{flag_clear:N} \meta{flag~var}
% \end{syntax}
-% The \meta{flag}'s height is set to zero. The assignment is local.
+% Sets the height of the \meta{flag~var} to zero. The assignment is local.
% \end{function}
%
-% \begin{function}{\flag_clear_new:n}
+% \begin{function}[added = 2024-01-12]{\flag_clear_new:N, \flag_clear_new:c}
% \begin{syntax}
-% \cs{flag_clear_new:n} \Arg{flag name}
+% \cs{flag_clear_new:N} \meta{flag~var}
% \end{syntax}
-% Ensures that the \meta{flag} exists globally by applying
-% \cs{flag_new:n} if necessary, then applies \cs{flag_clear:n}, setting
+% Ensures that the \meta{flag~var} exists globally by applying
+% \cs{flag_new:N} if necessary, then applies \cs{flag_clear:N}, setting
% the height to zero locally.
% \end{function}
%
-% \begin{function}{\flag_show:n}
+% \begin{function}[added = 2024-01-12]{\flag_show:N, \flag_show:c}
% \begin{syntax}
-% \cs{flag_show:n} \Arg{flag name}
+% \cs{flag_show:N} \meta{flag~var}
% \end{syntax}
-% Displays the \meta{flag}'s height in the terminal.
+% Displays the height of the \meta{flag~var} in the terminal.
% \end{function}
%
-% \begin{function}{\flag_log:n}
+% \begin{function}[added = 2024-01-12]{\flag_log:N, \flag_log:c}
% \begin{syntax}
-% \cs{flag_log:n} \Arg{flag name}
+% \cs{flag_log:N} \meta{flag~var}
% \end{syntax}
-% Writes the \meta{flag}'s height to the log file.
+% Writes the height of the \meta{flag~var} in the log file.
% \end{function}
%
% \section{Expandable flag commands}
%
-% \begin{function}[EXP,pTF]{\flag_if_exist:n}
+% \begin{function}[EXP, pTF, added = 2024-01-12]{\flag_if_exist:N, \flag_if_exist:c}
% \begin{syntax}
-% \cs{flag_if_exist_p:n} \Arg{flag name}
-% \cs{flag_if_exist:nTF} \Arg{flag name} \Arg{true code} \Arg{false code}
+% \cs{flag_if_exist_p:N} \meta{flag~var}
+% \cs{flag_if_exist:NTF} \meta{flag~var} \Arg{true code} \Arg{false code}
% \end{syntax}
-% This function returns \texttt{true} if the \meta{flag name}
-% references a flag that has been defined previously, and
-% \texttt{false} otherwise.
+% This function returns \texttt{true} if the \meta{flag~var} is
+% currently defined, and \texttt{false} otherwise. This does not check
+% that the \meta{flag~var} really is a flag variable.
% \end{function}
%
-% \begin{function}[EXP,pTF]{\flag_if_raised:n}
+% \begin{function}[EXP, pTF, added = 2024-01-12]{\flag_if_raised:N, \flag_if_raised:c}
% \begin{syntax}
-% \cs{flag_if_raised_p:n} \Arg{flag name}
-% \cs{flag_if_raised:nTF} \Arg{flag name} \Arg{true code} \Arg{false code}
+% \cs{flag_if_raised_p:N} \meta{flag~var}
+% \cs{flag_if_raised:NTF} \meta{flag~var} \Arg{true code} \Arg{false code}
% \end{syntax}
-% This function returns \texttt{true} if the \meta{flag} has non-zero
-% height, and \texttt{false} if the \meta{flag} has zero height.
+% This function returns \texttt{true} if the \meta{flag~var} has non-zero
+% height, and \texttt{false} if the \meta{flag~var} has zero height.
% \end{function}
%
-% \begin{function}[EXP]{\flag_height:n}
+% \begin{function}[EXP, added = 2024-01-12]{\flag_height:N, \flag_height:c}
% \begin{syntax}
-% \cs{flag_height:n} \Arg{flag name}
+% \cs{flag_height:N} \meta{flag~var}
% \end{syntax}
-% Expands to the height of the \meta{flag} as an integer denotation.
+% Expands to the height of the \meta{flag~var} as an integer denotation.
% \end{function}
%
-% \begin{function}[EXP]{\flag_raise:n}
+% \begin{function}[EXP, added = 2024-01-12]{\flag_raise:N, \flag_raise:c}
% \begin{syntax}
-% \cs{flag_raise:n} \Arg{flag name}
+% \cs{flag_raise:N} \meta{flag~var}
% \end{syntax}
-% The \meta{flag}'s height is increased by $1$ locally.
+% The height of \meta{flag~var} is increased by $1$ locally.
% \end{function}
%
-% \begin{function}[EXP, added = 2023-04-25]{\flag_ensure_raised:n}
+% \begin{function}[EXP, added = 2024-01-12]{\flag_ensure_raised:N, \flag_ensure_raised:c}
% \begin{syntax}
-% \cs{flag_ensure_raised:n} \Arg{flag name}
+% \cs{flag_ensure_raised:N} \meta{flag~var}
% \end{syntax}
-% Ensures the \meta{flag} is raised by making its height at least~$1$,
+% Ensures the \meta{flag~var} is raised by making its height at least~$1$,
% locally.
% \end{function}
%
+% \begin{variable}[added = 2024-01-12]{\l_tmpa_flag, \l_tmpb_flag}
+% Scratch flag for local assignment. These are never used by
+% the kernel code, and so are safe for use with any \LaTeX3-defined
+% function. However, they may be overwritten by other non-kernel
+% code and so should only be used for short-term storage.
+% \end{variable}
+%
% \end{documentation}
%
% \begin{implementation}
@@ -178,74 +192,80 @@
%
% \TestFiles{m3flag001}
%
-% \subsection{Non-expandable flag commands}
+% \subsection{Protected flag commands}
%
-% The height $h$ of a flag (initially zero) is stored by setting control
-% sequences of the form \cs[no-index]{flag \meta{name} \meta{integer}}
-% to \tn{relax} for $0\leq\meta{integer}<h$. When a flag is raised, a
-% \enquote{trap} function \cs[no-index]{flag \meta{name}} is called.
-% The existence of this function is also used to test for the existence
-% of a flag.
+% The height $h$ of a flag (which is initially zero) is stored by
+% setting control sequences of the form \cs[no-index]{\meta{flag
+% name}\meta{integer}} to \tn{relax} for $0\leq\meta{integer}<h$. These
+% control sequences are produced by \cs{cs:w} \meta{flag~var}
+% \meta{integer} \cs{cs_end:}, namely the \meta{flag~var} is actually a
+% (protected) macro expanding to its own csname.
%
-% \begin{macro}{\flag_new:n}
-% For each flag, we define a \enquote{trap} function, which by default
-% simply increases the flag by $1$ by letting the appropriate control
-% sequence to \tn{relax}. This can be done expandably!
+% \begin{macro}{\flag_new:N, \flag_new:c}
+% Evaluate the csname of~|#1| for use in constructing the various
+% indexed macros.
% \begin{macrocode}
-\cs_new_protected:Npn \flag_new:n #1
- {
- \cs_new:cpn { flag~#1 } ##1 ;
- { \exp_after:wN \use_none:n \cs:w flag~#1~##1 \cs_end: }
- }
+\cs_new_protected:Npn \flag_new:N #1
+ { \cs_new_protected:Npe #1 { \cs_to_str:N #1 } }
+\cs_generate_variant:Nn \flag_new:N { c }
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\flag_clear:n}
-% \begin{macro}{\@@_clear:wn}
+% \begin{variable}{\l_tmpa_flag, \l_tmpb_flag}
+% Two flag variables for scratch use.
+% \begin{macrocode}
+\flag_new:N \l_tmpa_flag
+\flag_new:N \l_tmpb_flag
+% \end{macrocode}
+% \end{variable}
+%
+% \begin{macro}{\flag_clear:N, \flag_clear:c}
+% \begin{macro}{\@@_clear:wN}
% Undefine control sequences, starting from the |0| flag, upwards,
% until reaching an undefined control sequence. We don't use
% \cs{cs_undefine:c} because that would act globally.
-% When the option \texttt{check-declarations} is used, check for the
-% function defined by \cs{flag_new:n}.
% \begin{macrocode}
-\cs_new_protected:Npn \flag_clear:n #1 { \@@_clear:wn 0 ; {#1} }
-\cs_new_protected:Npn \@@_clear:wn #1 ; #2
+\cs_new_protected:Npn \flag_clear:N #1
{
- \if_cs_exist:w flag~#2~#1 \cs_end:
- \cs_set_eq:cN { flag~#2~#1 } \tex_undefined:D
- \exp_after:wN \@@_clear:wn
- \int_value:w \int_eval:w 1 + #1
- \else:
- \use_i:nnn
+ \@@_clear:wN 0 ; #1
+ \prg_break_point:
+ }
+\cs_generate_variant:Nn \flag_clear:N { c }
+\cs_new_protected:Npn \@@_clear:wN #1 ; #2
+ {
+ \if_cs_exist:w #2 #1 \cs_end: \else:
+ \prg_break:n
\fi:
- ; {#2}
+ \cs_set_eq:cN { #2 #1 } \tex_undefined:D
+ \exp_after:wN \@@_clear:wN
+ \int_value:w \int_eval:w \c_one_int + #1 ; #2
}
% \end{macrocode}
% \end{macro}
% \end{macro}
%
-% \begin{macro}{\flag_clear_new:n}
-% As for other datatypes, clear the \meta{flag} or create a new one,
+% \begin{macro}{\flag_clear_new:N, \flag_clear_new:c}
+% As for other datatypes, clear the \meta{flag~var} or create a new one,
% as appropriate.
% \begin{macrocode}
-\cs_new_protected:Npn \flag_clear_new:n #1
- { \flag_if_exist:nTF {#1} { \flag_clear:n } { \flag_new:n } {#1} }
+\cs_new_protected:Npn \flag_clear_new:N #1
+ { \flag_if_exist:NTF #1 { \flag_clear:N } { \flag_new:N } #1 }
+\cs_generate_variant:Nn \flag_clear_new:N { c }
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\flag_show:n, \flag_log:n, \@@_show:Nn}
+% \begin{macro}{\flag_show:N, \flag_show:c, \flag_log:N, \flag_log:c, \@@_show:NN}
% Show the height (terminal or log file) using appropriate \pkg{l3msg}
% auxiliaries.
% \begin{macrocode}
-\cs_new_protected:Npn \flag_show:n { \@@_show:Nn \tl_show:n }
-\cs_new_protected:Npn \flag_log:n { \@@_show:Nn \tl_log:n }
-\cs_new_protected:Npn \@@_show:Nn #1#2
+\cs_new_protected:Npn \flag_show:N { \@@_show:NN \tl_show:n }
+\cs_generate_variant:Nn \flag_show:N { c }
+\cs_new_protected:Npn \flag_log:N { \@@_show:NN \tl_log:n }
+\cs_generate_variant:Nn \flag_log:N { c }
+\cs_new_protected:Npn \@@_show:NN #1#2
{
- \exp_args:Nc \__kernel_chk_defined:NT { flag~#2 }
- {
- \exp_args:Ne #1
- { \tl_to_str:n { flag~#2~height } = \flag_height:n {#2} }
- }
+ \__kernel_chk_defined:NT #2
+ { \exp_args:Ne #1 { \tl_to_str:n { #2 height } = \flag_height:N #2 } }
}
% \end{macrocode}
% \end{macro}
@@ -252,75 +272,117 @@
%
% \subsection{Expandable flag commands}
%
-% \begin{macro}[EXP, pTF]{\flag_if_exist:n}
-% A flag exist if the corresponding trap \cs[no-index]{flag \meta{flag
-% name}:n} is defined.
+% \begin{macro}[EXP, pTF]{\flag_if_exist:N, \flag_if_exist:c}
+% Copies of the \texttt{cs} functions defined in \pkg{l3basics}.
% \begin{macrocode}
-\prg_new_conditional:Npnn \flag_if_exist:n #1 { p , T , F , TF }
- {
- \cs_if_exist:cTF { flag~#1 }
- { \prg_return_true: } { \prg_return_false: }
- }
+\prg_new_eq_conditional:NNn \flag_if_exist:N \cs_if_exist:N
+ { TF , T , F , p }
+\prg_new_eq_conditional:NNn \flag_if_exist:c \cs_if_exist:c
+ { TF , T , F , p }
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[EXP, pTF]{\flag_if_raised:n}
+% \begin{macro}[EXP, pTF]{\flag_if_raised:N, \flag_if_raised:c}
% Test if the flag has a non-zero height, by checking the |0| control sequence.
% \begin{macrocode}
-\prg_new_conditional:Npnn \flag_if_raised:n #1 { p , T , F , TF }
+\prg_new_conditional:Npnn \flag_if_raised:N #1 { p , T , F , TF }
{
- \if_cs_exist:w flag~#1~0 \cs_end:
+ \if_cs_exist:w #1 0 \cs_end:
\prg_return_true:
\else:
\prg_return_false:
\fi:
}
+\prg_generate_conditional_variant:Nnn \flag_if_raised:N
+ { c } { p , T , F , TF }
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[EXP]{\flag_height:n}
-% \begin{macro}[EXP]{\@@_height_loop:wn, \@@_height_end:wn}
+% \begin{macro}[EXP]{\flag_height:N, \flag_height:c}
+% \begin{macro}[EXP]{\@@_height_loop:wN, \@@_height_end:wN}
% Extract the value of the flag by going through all of the
% control sequences starting from |0|.
% \begin{macrocode}
-\cs_new:Npn \flag_height:n #1 { \@@_height_loop:wn 0; {#1} }
-\cs_new:Npn \@@_height_loop:wn #1 ; #2
+\cs_new:Npn \flag_height:N #1 { \@@_height_loop:wN 0; #1 }
+\cs_new:Npn \@@_height_loop:wN #1 ; #2
{
- \if_cs_exist:w flag~#2~#1 \cs_end:
- \exp_after:wN \@@_height_loop:wn \int_value:w \int_eval:w 1 +
- \else:
- \exp_after:wN \@@_height_end:wn
+ \if_cs_exist:w #2 #1 \cs_end: \else:
+ \exp_after:wN \@@_height_end:wN
\fi:
- #1 ; {#2}
+ \exp_after:wN \@@_height_loop:wN
+ \int_value:w \int_eval:w \c_one_int + #1 ; #2
}
-\cs_new:Npn \@@_height_end:wn #1 ; #2 {#1}
+\cs_new:Npn \@@_height_end:wN #1 + #2 ; #3 {#2}
+\cs_generate_variant:Nn \flag_height:N { c }
% \end{macrocode}
% \end{macro}
% \end{macro}
%
-% \begin{macro}[EXP]{\flag_raise:n}
-% Simply apply the trap to the height, after expanding the latter.
+% \begin{macro}[EXP]{\flag_raise:N, \flag_raise:c}
+% Change the appropriate control sequence to \tn{relax} by expanding a
+% \cs{cs:w} \ldots{} \cs{cs_end:} construction, then pass it to
+% \cs{use_none:n} to avoid leaving anything in the input stream.
% \begin{macrocode}
-\cs_new:Npn \flag_raise:n #1
- {
- \cs:w flag~#1 \exp_after:wN \cs_end:
- \int_value:w \flag_height:n {#1} ;
- }
+\cs_new:Npn \flag_raise:N #1
+ { \exp_after:wN \use_none:n \cs:w #1 \flag_height:N #1 \cs_end: }
+\cs_generate_variant:Nn \flag_raise:N { c }
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[EXP]{\flag_ensure_raised:n}
-% It might be faster to just call the \enquote{trap} function in all
-% cases but conceptually the function name suggests we should only run
-% it if the flag is zero in case the \enquote{trap} made customizable
-% in the future.
+% \begin{macro}[EXP]{\flag_ensure_raised:N, \flag_ensure_raised:c}
+% Pass the control sequence with name \meta{flag name}\texttt{0} to
+% \cs{use_none:n}. Constructing the control sequence ensures that it
+% changes from being undefined (if it was so) to being \tn{relax}.
% \begin{macrocode}
-\cs_new:Npn \flag_ensure_raised:n #1
+\cs_new:Npn \flag_ensure_raised:N #1
+ { \exp_after:wN \use_none:n \cs:w #1 0 \cs_end: }
+\cs_generate_variant:Nn \flag_ensure_raised:N { c }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Old \texttt{n}-type flag commands}
+%
+% Here we keep the old flag commands since our policy is to no longer
+% delete deprecated functions. The idea is to simply map \meta{flag
+% name} to \cs[no-index]{l_\meta{flag name}_flag}. When the debugging
+% code is activated, it checks existence of the \texttt{N}-type flag
+% variables that result.
+%
+% \begin{macro}{\flag_new:n, \flag_clear:n, \flag_clear_new:n}
+% \begin{macro}[EXP, pTF]{\flag_if_exist:n, \flag_if_raised:n}
+% \begin{macro}[EXP]{\flag_height:n, \flag_raise:n, \flag_ensure_raised:n}
+% \begin{macrocode}
+\cs_new_protected:Npn \flag_new:n #1 { \flag_new:c { l_#1_flag } }
+\cs_new_protected:Npn \flag_clear:n #1 { \flag_clear:c { l_#1_flag } }
+\cs_new_protected:Npn \flag_clear_new:n #1 { \flag_clear_new:c { l_#1_flag } }
+\cs_new:Npn \flag_if_exist_p:n #1 { \flag_if_exist_p:c { l_#1_flag } }
+\cs_new:Npn \flag_if_exist:nT #1 { \flag_if_exist:cT { l_#1_flag } }
+\cs_new:Npn \flag_if_exist:nF #1 { \flag_if_exist:cF { l_#1_flag } }
+\cs_new:Npn \flag_if_exist:nTF #1 { \flag_if_exist:cTF { l_#1_flag } }
+\cs_new:Npn \flag_if_raised_p:n #1 { \flag_if_raised_p:c { l_#1_flag } }
+\cs_new:Npn \flag_if_raised:nT #1 { \flag_if_raised:cT { l_#1_flag } }
+\cs_new:Npn \flag_if_raised:nF #1 { \flag_if_raised:cF { l_#1_flag } }
+\cs_new:Npn \flag_if_raised:nTF #1 { \flag_if_raised:cTF { l_#1_flag } }
+\cs_new:Npn \flag_height:n #1 { \flag_height:c { l_#1_flag } }
+\cs_new:Npn \flag_raise:n #1 { \flag_raise:c { l_#1_flag } }
+\cs_new:Npn \flag_ensure_raised:n #1 { \flag_ensure_raised:c { l_#1_flag } }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\flag_show:n, \flag_log:n, \@@_show:Nn}
+% To avoid changing the output here we mostly keep the old code.
+% \begin{macrocode}
+\cs_new_protected:Npn \flag_show:n { \@@_show:Nn \tl_show:n }
+\cs_new_protected:Npn \flag_log:n { \@@_show:Nn \tl_log:n }
+\cs_new_protected:Npn \@@_show:Nn #1#2
{
- \if_cs_exist:w flag~#1~0 \cs_end:
- \else:
- \cs:w flag~#1 \cs_end: 0 ;
- \fi:
+ \exp_args:Nc \__kernel_chk_defined:NT { l_#2_flag }
+ {
+ \exp_args:Ne #1
+ { \tl_to_str:n { flag~#2~height } = \flag_height:n {#2} }
+ }
}
% \end{macrocode}
% \end{macro}
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -42,7 +42,7 @@
% {latex-team at latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
% \maketitle
%
% \begin{documentation}
@@ -82,9 +82,9 @@
% assignments.
% \begin{macrocode}
\cs_new_protected:Npn \fp_set:Nn #1#2
- { \__kernel_tl_set:Ne #1 { \exp_not:f { \@@_parse:n {#2} } } }
+ { \__kernel_tl_set:Nx #1 { \exp_not:f { \@@_parse:n {#2} } } }
\cs_new_protected:Npn \fp_gset:Nn #1#2
- { \__kernel_tl_gset:Ne #1 { \exp_not:f { \@@_parse:n {#2} } } }
+ { \__kernel_tl_gset:Nx #1 { \exp_not:f { \@@_parse:n {#2} } } }
\cs_new_protected:Npn \fp_const:Nn #1#2
{ \tl_const:Ne #1 { \exp_not:f { \@@_parse:n {#2} } } }
\cs_generate_variant:Nn \fp_set:Nn {c}
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -42,7 +42,7 @@
% {latex-team at latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -42,7 +42,7 @@
% {latex-team at latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -42,7 +42,7 @@
% {latex-team at latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-functions.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-functions.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-functions.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -42,7 +42,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -42,7 +42,7 @@
% {latex-team at latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -42,7 +42,7 @@
% {latex-team at latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -42,7 +42,7 @@
% {latex-team at latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-symbolic.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-symbolic.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-symbolic.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -42,7 +42,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
@@ -599,7 +599,7 @@
% \end{macro}
% \end{macro}
%
-% \begin{variable}{@@_symbolic}
+% \begin{variable}{\l_@@_symbolic_flag}
% \begin{macro}{\fp_set_variable:nn, \@@_set_variable:nn}
% Refuse invalid identifiers. If the variable does not exist yet,
% define it just as in \cs{fp_new_variable:n} (but without unnecessary
@@ -615,7 +615,7 @@
% raised, |#1|~was present in \cs{l_@@_symbolic_fp}. In all cases,
% the |#1|-free result ends up in |\l__fp_variable_#1_fp|.
% \begin{macrocode}
-\flag_new:n { @@_symbolic }
+\flag_new:N \l_@@_symbolic_flag
\cs_new_protected:Npn \fp_set_variable:nn #1
{
\exp_args:No \@@_set_variable:nn { \tl_to_str:n {#1} }
@@ -628,10 +628,10 @@
\@@_variable_set_parsing:Nn \cs_set_eq:NN {#1}
\fp_set:Nn \l_@@_symbolic_fp {#2}
\cs_set_nopar:cpn { l_@@_variable_#1_fp }
- { \flag_ensure_raised:n { @@_symbolic } \c_nan_fp }
- \flag_clear:n { @@_symbolic }
+ { \flag_ensure_raised:N \l_@@_symbolic_flag \c_nan_fp }
+ \flag_clear:N \l_@@_symbolic_flag
\fp_set:cn { l_@@_variable_#1_fp } { \l_@@_symbolic_fp }
- \flag_if_raised:nT { @@_symbolic }
+ \flag_if_raised:NT \l_@@_symbolic_flag
{
\msg_error:nneee { fp } { id-loop }
{ #1 }
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -42,7 +42,7 @@
% {latex-team at latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
% \maketitle
%
% \begin{documentation}
@@ -74,17 +74,17 @@
%
% \begin{variable}[module = fp]
% {
-% fp_invalid_operation,
-% fp_division_by_zero,
-% fp_overflow,
-% fp_underflow
+% \l_fp_invalid_operation_flag,
+% \l_fp_division_by_zero_flag,
+% \l_fp_overflow_flag,
+% \l_fp_underflow_flag
% }
% Flags to denote exceptions.
% \begin{macrocode}
-\flag_new:n { fp_invalid_operation }
-\flag_new:n { fp_division_by_zero }
-\flag_new:n { fp_overflow }
-\flag_new:n { fp_underflow }
+\flag_new:N \l_fp_invalid_operation_flag
+\flag_new:N \l_fp_division_by_zero_flag
+\flag_new:N \l_fp_overflow_flag
+\flag_new:N \l_fp_underflow_flag
% \end{macrocode}
% \end{variable}
%
@@ -167,7 +167,7 @@
{
#1
\@@_error:nnfn { invalid } {##2} { \fp_to_tl:n { ##3; } } { }
- \flag_ensure_raised:n { fp_invalid_operation }
+ \flag_ensure_raised:N \l_fp_invalid_operation_flag
##1
}
\exp_args:Nno \use:n
@@ -176,7 +176,7 @@
#1
\@@_error:nffn { invalid-ii }
{ \fp_to_tl:n { ##2; } } { \fp_to_tl:n { ##3; } } {##1}
- \flag_ensure_raised:n { fp_invalid_operation }
+ \flag_ensure_raised:N \l_fp_invalid_operation_flag
\exp_after:wN \c_nan_fp
}
\exp_args:Nno \use:n
@@ -184,7 +184,7 @@
{
#1
\@@_error:nffn { invalid } {##1} {##2} { }
- \flag_ensure_raised:n { fp_invalid_operation }
+ \flag_ensure_raised:N \l_fp_invalid_operation_flag
\exp_after:wN \c_nan_fp
}
}
@@ -217,7 +217,7 @@
{
#1
\@@_error:nnfn { zero-div } {##2} { \fp_to_tl:n { ##3; } } { }
- \flag_ensure_raised:n { fp_division_by_zero }
+ \flag_ensure_raised:N \l_fp_division_by_zero_flag
\exp_after:wN ##1
}
\exp_args:Nno \use:n
@@ -226,7 +226,7 @@
#1
\@@_error:nffn { zero-div-ii }
{ \fp_to_tl:n { ##3; } } { \fp_to_tl:n { ##4; } } {##2}
- \flag_ensure_raised:n { fp_division_by_zero }
+ \flag_ensure_raised:N \l_fp_division_by_zero_flag
\exp_after:wN ##1
}
}
@@ -289,7 +289,7 @@
{ \fp_to_tl:n { \s_@@ \@@_chk:w ##1##2##3; } }
{ \token_if_eq_meaning:NNF 0 ##2 { - } #4 }
{#2}
- \flag_ensure_raised:n { fp_#2 }
+ \flag_ensure_raised:c { l_fp_#2_flag }
#3 ##2
}
}
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -42,7 +42,7 @@
% {latex-team at latex-project.org}^^A
% }^^A
% }
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-types.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-types.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-types.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -42,7 +42,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -49,7 +49,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
@@ -874,9 +874,9 @@
% a computation is not exact, in other words, almost always. At the
% moment, this exception is entirely ignored in \LaTeX3.
% \end{itemize}
-% To each exception we associate a \enquote{flag}: \texttt{fp_overflow},
-% \texttt{fp_underflow}, \texttt{fp_invalid_operation} and
-% \texttt{fp_division_by_zero}. The state of these flags can be tested
+% To each exception we associate a \enquote{flag}: \cs{l_fp_overflow_flag},
+% \cs{l_fp_underflow_flag}, \cs{l_fp_invalid_operation_flag} and
+% \cs{l_fp_division_by_zero_flag}. The state of these flags can be tested
% and modified with commands from \pkg{l3flag}
%
% By default, the \enquote{invalid operation} exception triggers an
@@ -907,12 +907,12 @@
% \emph{This function is experimental, and may be altered or removed.}
% \end{function}
%
-% \begin{variable}[module = fp]
+% \begin{variable}
% {
-% fp_overflow,
-% fp_underflow,
-% fp_invalid_operation,
-% fp_division_by_zero
+% \l_fp_overflow_flag,
+% \l_fp_underflow_flag,
+% \l_fp_invalid_operation_flag,
+% \l_fp_division_by_zero_flag
% }
% Flags denoting the occurrence of various floating-point exceptions.
% \end{variable}
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3int.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3int.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3int.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
@@ -770,7 +770,7 @@
% \end{macro}
%
% \begin{macro}[EXP]{\intarray_item:Nn, \intarray_item:cn, \__kernel_intarray_item:Nn}
-% \begin{macro}{\@@_item:Nn}
+% \begin{macro}{\@@_item:Nw}
% Get the appropriate \tn{fontdimen} and perform bound checks. The
% \cs{__kernel_intarray_item:Nn} function omits bound checks and omits
% \cs{int_eval:n}, namely its argument must be a \TeX{} integer
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
@@ -498,9 +498,9 @@
% only a single expansion.
% \end{function}
%
-% \begin{function}{\__kernel_tl_set:Ne, \__kernel_tl_gset:Ne}
+% \begin{function}{\__kernel_tl_set:Nx, \__kernel_tl_gset:Nx}
% \begin{syntax}
-% \cs{__kernel_tl_set:Ne} \meta{tl~var} \Arg{tokens}
+% \cs{__kernel_tl_set:Nx} \meta{tl~var} \Arg{tokens}
% \end{syntax}
% Fully expands \meta{tokens} and assigns the result to \meta{tl~var}.
% \meta{tokens} must be given in braces and there must be no token between
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
@@ -109,8 +109,8 @@
% Key names may contain any tokens, as they are handled internally
% using \cs{tl_to_str:n}. As discussed in
% section~\ref{sec:l3keys:subdivision}, it is suggested that the character
-% |/| is reserved for sub-division of keys into logical
-% groups. Functions and variables are \emph{not} expanded when creating
+% |/| is reserved for sub-division of keys into different subsets.
+% Functions and variables are \emph{not} expanded when creating
% key names, and so
% \begin{verbatim}
% \tl_set:Nn \l_mymodule_tmp_tl { key }
@@ -323,9 +323,15 @@
% \begin{syntax}
% \meta{key} .groups:n = \Arg{groups}
% \end{syntax}
-% Defines \meta{key} as belonging to the \meta{groups} declared. Groups
+% Defines \meta{key} as belonging to the \meta{groups} (a
+% comma-separated list). Groups
% provide a \enquote{secondary axis} for selectively setting keys, and are
% described in Section~\ref{sec:l3keys:selective}.
+% \begin{texnote}
+% The \meta{groups} argument is turned into a string then
+% interpreted as a comma-separated list, so group names cannot
+% contain commas nor start or end with a space character.
+% \end{texnote}
% \end{function}
%
% \begin{function}[added = 2016-11-22]{.inherit:n}
@@ -334,7 +340,7 @@
% \end{syntax}
% Specifies that the \meta{key} path should inherit the keys listed
% as any of the \meta{parents} (a comma list), which can be a module
-% or a subgroup. For example, after setting
+% or a sub-division thereof. For example, after setting
% \begin{verbatim}
% \keys_define:nn { foo } { test .code:n = \tl_show:n {#1} }
% \keys_define:nn { } { bar .inherit:n = foo }
@@ -541,21 +547,21 @@
% \label{sec:l3keys:subdivision}
%
% When creating large numbers of keys, it may be desirable to divide
-% them into several sub-groups for a given module. This can be achieved
+% them into several subsets for a given module. This can be achieved
% either by adding a sub-division to the module name:
% \begin{verbatim}
-% \keys_define:nn { mymodule / subgroup }
+% \keys_define:nn { mymodule / subset }
% { key .code:n = code }
% \end{verbatim}
% or to the key name:
% \begin{verbatim}
% \keys_define:nn { mymodule }
-% { subgroup / key .code:n = code }
+% { subset / key .code:n = code }
% \end{verbatim}
% As illustrated, the best choice of token for sub-dividing keys in
% this way is |/|. This is because of the method that is
% used to represent keys internally. Both of the above code fragments
-% set the same key, which has full name \texttt{mymodule/subgroup/key}.
+% set the same key, which has full name \texttt{mymodule/subset/key}.
%
% As illustrated in the next section, this subdivision is
% particularly relevant to making multiple choices.
@@ -856,29 +862,29 @@
% groups to be made \enquote{active}, or by marking one or more groups to
% be ignored in key setting.
%
-% \begin{function}[added = 2013-07-14, updated = 2019-01-29]
+% \begin{function}[added = 2024-01-10]
% {
-% \keys_set_filter:nnn, \keys_set_filter:nnV,
-% \keys_set_filter:nnv, \keys_set_filter:nno,
-% \keys_set_filter:nnnN, \keys_set_filter:nnVN,
-% \keys_set_filter:nnvN, \keys_set_filter:nnoN,
-% \keys_set_filter:nnnnN, \keys_set_filter:nnVnN,
-% \keys_set_filter:nnvnN, \keys_set_filter:nnonN,
+% \keys_set_exclude_groups:nnn, \keys_set_exclude_groups:nnV,
+% \keys_set_exclude_groups:nnv, \keys_set_exclude_groups:nno,
+% \keys_set_exclude_groups:nnnN, \keys_set_exclude_groups:nnVN,
+% \keys_set_exclude_groups:nnvN, \keys_set_exclude_groups:nnoN,
+% \keys_set_exclude_groups:nnnnN, \keys_set_exclude_groups:nnVnN,
+% \keys_set_exclude_groups:nnvnN, \keys_set_exclude_groups:nnonN,
% }
% \begin{syntax}
-% \cs{keys_set_filter:nnn} \Arg{module} \Arg{groups} \Arg{keyval list}
-% \cs{keys_set_filter:nnnN} \Arg{module} \Arg{groups} \Arg{keyval list} \meta{tl}
-% \cs{keys_set_filter:nnnnN} \Arg{module} \Arg{groups} \Arg{keyval list} \meta{root} \meta{tl}
+% \cs{keys_set_exclude_groups:nnn} \Arg{module} \Arg{groups} \Arg{keyval list}
+% \cs{keys_set_exclude_groups:nnnN} \Arg{module} \Arg{groups} \Arg{keyval list} \meta{tl}
+% \cs{keys_set_exclude_groups:nnnnN} \Arg{module} \Arg{groups} \Arg{keyval list} \meta{root} \meta{tl}
% \end{syntax}
-% Activates key filtering in an \enquote{opt-out} sense: keys assigned to any
-% of the \meta{groups} specified are ignored. The \meta{groups} are
+% Sets keys by excluding those in the specificied \meta{groups}.
+% The \meta{groups} are
% given as a comma-separated list. Unknown keys are not assigned to any
% group and are thus always set. The key--value pairs for each
% key which is filtered out are stored in the \meta{tl} in a
% comma-separated form (\emph{i.e.}~an edited version of the \meta{keyval
-% list}). The \cs{keys_set_filter:nnn} version skips this stage.
+% list}). The \cs{keys_set_exclude_groups:nnn} version skips this stage.
%
-% Use of \cs{keys_set_filter:nnnN} can be nested, with the correct residual
+% Use of \cs{keys_set_exclude_groups:nnnN} can be nested, with the correct residual
% \meta{keyval list} returned at each stage. In the version which takes
% a \meta{root} argument, the key list is returned relative to that point
% in the key tree. In the cases without a \meta{root} argument, only
@@ -1662,7 +1668,7 @@
% \end{variable}
%
% \begin{variable}{\l_@@_selective_bool, \l_@@_filtered_bool}
-% Two flags for using key groups: one to indicate that \enquote{selective}
+% Two booleans for using key groups: one to indicate that \enquote{selective}
% setting is active, a second to specify which type (\enquote{opt-in}
% or \enquote{opt-out}).
% \begin{macrocode}
@@ -1755,6 +1761,21 @@
% \end{macrocode}
% \end{macro}
%
+% \begin{macro}{\@@_cs_undefine:c}
+% Local version of \cs{cs_undefine:c} to avoid sprinkling
+% \cs{tex_undefined:D} everywhere.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_cs_undefine:c #1
+ {
+ \if_cs_exist:w #1 \cs_end:
+ \else:
+ \use_i:nnnn
+ \fi:
+ \cs_set_eq:cN {#1} \tex_undefined:D
+ }
+% \end{macrocode}
+% \end{macro}
+%
% \subsection{The key defining mechanism}
%
% \begin{macro}{\keys_define:nn, \keys_define:ne, \keys_define:nx}
@@ -2061,9 +2082,8 @@
{
\tl_if_empty:nTF {#1}
{
- \cs_set_eq:cN
+ \@@_cs_undefine:c
{ \c_@@_default_root_str \l_keys_path_str }
- \tex_undefined:D
}
{
\cs_set_nopar:cpe
@@ -2084,11 +2104,11 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_groups_set:n #1
{
- \clist_set:Nn \l_@@_groups_clist {#1}
+ \clist_set:Ne \l_@@_groups_clist { \tl_to_str:n {#1} }
\clist_if_empty:NTF \l_@@_groups_clist
{
- \cs_set_eq:cN { \c_@@_groups_root_str \l_keys_path_str }
- \tex_undefined:D
+ \@@_cs_undefine:c
+ { \c_@@_groups_root_str \l_keys_path_str }
}
{
\cs_set_eq:cN { \c_@@_groups_root_str \l_keys_path_str }
@@ -2222,9 +2242,8 @@
\clist_map_inline:nn
{ code , default , groups , inherit , type , check }
{
- \cs_set_eq:cN
+ \@@_cs_undefine:c
{ \tl_use:c { c_@@_ ##1 _root_str } \l_keys_path_str }
- \tex_undefined:D
}
}
% \end{macrocode}
@@ -2254,9 +2273,8 @@
{ \c_@@_check_root_str \l_keys_path_str }
{ @@_check_ #1 : }
{
- \cs_set_eq:cN
+ \@@_cs_undefine:c
{ \c_@@_check_root_str \l_keys_path_str }
- \tex_undefined:D
}
}
}
@@ -2831,7 +2849,7 @@
% \keys_set_known:no
% }
% \begin{macro}{\@@_set_known:nnn}
-% Setting known keys simply means setting the appropriate flag, then
+% Setting known keys simply means setting the appropriate boolean, then
% running the standard code. To allow for nested setting, any existing
% value of \cs{l_@@_unused_clist} is saved on the stack and reset
% afterwards. Note that for speed/simplicity reasons we use a \texttt{tl}
@@ -2853,8 +2871,8 @@
{
\clist_clear:N \l_@@_unused_clist
\@@_set_known:nnn {#2} {#3} {#4}
- \__kernel_tl_set:Ne #5 { \exp_not:o \l_@@_unused_clist }
- \__kernel_tl_set:Ne \l_@@_unused_clist { \exp_not:n {#1} }
+ \__kernel_tl_set:Nx #5 { \exp_not:o \l_@@_unused_clist }
+ \__kernel_tl_set:Nx \l_@@_unused_clist { \exp_not:n {#1} }
}
\cs_new_protected:Npn \keys_set_known:nn #1#2
{ \@@_set_known:nnn \q_@@_no_value {#1} {#2} }
@@ -2887,21 +2905,21 @@
%
% \begin{macro}
% {
-% \keys_set_filter:nnnN, \keys_set_filter:nnVN, \keys_set_filter:nnvN,
-% \keys_set_filter:nnoN
+% \keys_set_exclude_groups:nnnN, \keys_set_exclude_groups:nnVN,
+% \keys_set_exclude_groups:nnvN, \keys_set_exclude_groups:nnoN
% }
% \begin{macro}
% {
-% \keys_set_filter:nnnnN, \keys_set_filter:nnVnN,
-% \keys_set_filter:nnvnN, \keys_set_filter:nnonN
+% \keys_set_exclude_groups:nnnnN, \keys_set_exclude_groups:nnVnN,
+% \keys_set_exclude_groups:nnvnN, \keys_set_exclude_groups:nnonN
% }
-% \begin{macro}{\@@_set_filter:nnnnnN}
+% \begin{macro}{\@@_set_exclude_groups:nnnnnN}
% \begin{macro}
% {
-% \keys_set_filter:nnn, \keys_set_filter:nnV, \keys_set_filter:nnv,
-% \keys_set_filter:nno
+% \keys_set_exclude_groups:nnn, \keys_set_exclude_groups:nnV,
+% \keys_set_exclude_groups:nnv, \keys_set_exclude_groups:nno
% }
-% \begin{macro}{\@@_set_filter:nnnn}
+% \begin{macro}{\@@_set_exclude_groups:nnnn}
% \begin{macro}
% {
% \keys_set_groups:nnn, \keys_set_groups:nnV, \keys_set_groups:nnv,
@@ -2909,35 +2927,35 @@
% }
% \begin{macro}{\@@_set_selective:nnn}
% \begin{macro}{\@@_set_selective:nnnn}
-% The idea of setting keys in a selective manner again uses flags
+% The idea of setting keys in a selective manner again uses booleans
% wrapped around the basic code. The comments on \cs{keys_set_known:nnN}
% also apply here. We have a bit more shuffling to do to keep everything
% nestable.
% \begin{macrocode}
-\cs_new_protected:Npn \keys_set_filter:nnnN #1#2#3#4
+\cs_new_protected:Npn \keys_set_exclude_groups:nnnN #1#2#3#4
{
- \exp_args:No \@@_set_filter:nnnnnN
+ \exp_args:No \@@_set_exclude_groups:nnnnnN
\l_@@_unused_clist
\q_@@_no_value {#1} {#2} {#3} #4
}
-\cs_generate_variant:Nn \keys_set_filter:nnnN { nnV , nnv , nno }
-\cs_new_protected:Npn \keys_set_filter:nnnnN #1#2#3#4#5
+\cs_generate_variant:Nn \keys_set_exclude_groups:nnnN { nnV , nnv , nno }
+\cs_new_protected:Npn \keys_set_exclude_groups:nnnnN #1#2#3#4#5
{
- \exp_args:No \@@_set_filter:nnnnnN
+ \exp_args:No \@@_set_exclude_groups:nnnnnN
\l_@@_unused_clist {#4} {#1} {#2} {#3} #5
}
-\cs_generate_variant:Nn \keys_set_filter:nnnnN { nnV , nnv , nno }
-\cs_new_protected:Npn \@@_set_filter:nnnnnN #1#2#3#4#5#6
+\cs_generate_variant:Nn \keys_set_exclude_groups:nnnnN { nnV , nnv , nno }
+\cs_new_protected:Npn \@@_set_exclude_groups:nnnnnN #1#2#3#4#5#6
{
\clist_clear:N \l_@@_unused_clist
- \@@_set_filter:nnnn {#2} {#3} {#4} {#5}
- \__kernel_tl_set:Ne #6 { \exp_not:o \l_@@_unused_clist }
- \__kernel_tl_set:Ne \l_@@_unused_clist { \exp_not:n {#1} }
+ \@@_set_exclude_groups:nnnn {#2} {#3} {#4} {#5}
+ \__kernel_tl_set:Nx #6 { \exp_not:o \l_@@_unused_clist }
+ \__kernel_tl_set:Nx \l_@@_unused_clist { \exp_not:n {#1} }
}
-\cs_new_protected:Npn \keys_set_filter:nnn #1#2#3
- {\@@_set_filter:nnnn \q_@@_no_value {#1} {#2} {#3} }
-\cs_generate_variant:Nn \keys_set_filter:nnn { nnV , nnv , nno }
-\cs_new_protected:Npn \@@_set_filter:nnnn #1#2#3#4
+\cs_new_protected:Npn \keys_set_exclude_groups:nnn #1#2#3
+ {\@@_set_exclude_groups:nnnn \q_@@_no_value {#1} {#2} {#3} }
+\cs_generate_variant:Nn \keys_set_exclude_groups:nnn { nnV , nnv , nno }
+\cs_new_protected:Npn \@@_set_exclude_groups:nnnn #1#2#3#4
{
\use:e
{
@@ -2981,7 +2999,8 @@
{ \exp_args:No \@@_set_selective:nnnn \l_@@_selective_seq }
\cs_new_protected:Npn \@@_set_selective:nnnn #1#2#3#4
{
- \seq_set_from_clist:Nn \l_@@_selective_seq {#3}
+ \exp_args:NNe \seq_set_from_clist:Nn
+ \l_@@_selective_seq { \tl_to_str:n {#3} }
\@@_set:nn {#2} {#4}
\tl_set:Nn \l_@@_selective_seq {#1}
}
@@ -3044,7 +3063,7 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_set_keyval:nnn #1#2#3
{
- \__kernel_tl_set:Ne \l_keys_path_str
+ \__kernel_tl_set:Nx \l_keys_path_str
{
\tl_if_blank:nF {#1}
{ #1 / }
@@ -3118,10 +3137,11 @@
% of groups which apply to a key with the list of those which have been
% set active. That requires two mappings, and again a different outcome
% depending on whether opt-in or opt-out is set.
-% We cannot replace the clist mapping by \cs{clist_if_in:NnTF} because
-% catcodes may not be the same; they cannot be normalized easily in the
-% clist because of the remote possibility that some items need braces
-% if they involve commas or leading/trailing spaces.
+% It is safe to use \cs{clist_if_in:NnTF} because
+% both \cs{l_@@_selective_seq} and \cs{l_@@_groups_clist} contain the
+% groups as strings, without leading/trailing spaces in any item,
+% since the \pkg{l3clist} functions were applied to the result of
+% applying \cs{tl_to_str:n}.
% \begin{macrocode}
\cs_new_protected:Npn \@@_check_groups:
{
@@ -3128,13 +3148,10 @@
\bool_set_false:N \l_@@_tmp_bool
\seq_map_inline:Nn \l_@@_selective_seq
{
- \clist_map_inline:Nn \l_@@_groups_clist
+ \clist_if_in:NnT \l_@@_groups_clist {##1}
{
- \str_if_eq:nnT {##1} {####1}
- {
- \bool_set_true:N \l_@@_tmp_bool
- \clist_map_break:n \seq_map_break:
- }
+ \bool_set_true:N \l_@@_tmp_bool
+ \seq_map_break:
}
}
\bool_if:NTF \l_@@_tmp_bool
@@ -3325,7 +3342,7 @@
}
\cs_new_protected:Npn \@@_store_unused_aux:
{
- \__kernel_tl_set:Ne \l_@@_relative_tl
+ \__kernel_tl_set:Nx \l_@@_relative_tl
{ \exp_args:No \@@_trim_spaces:n \l_@@_relative_tl }
\use:e
{
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
@@ -634,7 +634,7 @@
% \cs{msg_expandable_error:nnnnnn} \Arg{module} \Arg{message} \Arg{arg one} \Arg{arg two} \Arg{arg three} \Arg{arg four}
% \end{syntax}
% Issues an \enquote{Undefined error} message from \TeX{} itself
-% using the undefined control sequence \cs{::error} then prints
+% using the undefined control sequence \cs{???} then prints
% \enquote{! \meta{module}: }\meta{error message}, which should be
% short. With default settings, anything beyond approximately $60$
% characters long (or bytes in some engines) is cropped. A leading
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3names.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3names.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3names.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3pdf.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3pdf.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3pdf.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
@@ -275,7 +275,7 @@
% \end{variable}
%
% \begin{variable}{\g_@@_init_bool}
-% A flag so we have some chance of avoiding setting things we are not
+% A boolean so we have some chance of avoiding setting things we are not
% allowed to. As we are potentially early in the format, we have to work
% a bit harder than ideal.
% \begin{macrocode}
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
@@ -171,6 +171,10 @@
% state. There must be a return statement for each branch; failing to do
% so will result in erroneous output if that branch is executed.
%
+% The special case where the code of a conditional ends with
+% \cs{prg_return_true:} \cs{else:} \cs{prg_return_false:} \cs{fi:} is
+% optimized.
+%
% \begin{function}[updated = 2023-05-26]
% {
% \prg_new_eq_conditional:NNn,
@@ -1789,9 +1793,10 @@
\tex_catcode:D `\^^@ = 2 \exp_stop_f:
\cs_new:Npn \group_align_safe_begin:
{ \exp:w \if_false: { \fi: `^^@ \exp_stop_f: }
+\tex_catcode:D `\^^@ = 1 \exp_stop_f:
+\cs_new:Npn \group_align_safe_end:
+ { \exp:w `^^@ \if_false: } \fi: \exp_stop_f: }
\group_end:
-\cs_new:Npn \group_align_safe_end:
- { \if_int_compare:w `{ = \c_zero_int } \fi: }
% \end{macrocode}
% \end{macro}
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -43,16 +43,16 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
% \begin{documentation}
%
-% \pkg{expl3} implements a \meta{property list} data type, which contain
+% \pkg{expl3} implements a property list data type, which contain
% an unordered list of entries each of which consists of a \meta{key} and
% an associated \meta{value}. The \meta{key} and \meta{value} may both
-% be any \meta{balanced text}, the \meta{key} is processed using
+% be any balanced text, and the \meta{key} is processed using
% \cs{tl_to_str:n}, meaning that category codes are ignored. It is possible to
% map functions to property lists such that the function is applied to every
% key--value pair within the list.
@@ -1266,8 +1266,8 @@
% updated entry is placed at the same spot as the original \meta{key}
% in the property list, preserving the order of entries.
% \begin{macrocode}
-\cs_new_protected:Npn \prop_put:Nnn { \@@_put:NNnn \__kernel_tl_set:Ne }
-\cs_new_protected:Npn \prop_gput:Nnn { \@@_put:NNnn \__kernel_tl_gset:Ne }
+\cs_new_protected:Npn \prop_put:Nnn { \@@_put:NNnn \__kernel_tl_set:Nx }
+\cs_new_protected:Npn \prop_gput:Nnn { \@@_put:NNnn \__kernel_tl_gset:Nx }
\cs_new_protected:Npn \@@_put:NNnn #1#2#3#4
{
\tl_set:Nn \l_@@_internal_tl
@@ -1329,9 +1329,9 @@
% convert the key to a string using \cs{tl_to_str:n}.
% \begin{macrocode}
\cs_new_protected:Npn \prop_put_if_new:Nnn
- { \@@_put_if_new:NNnn \__kernel_tl_set:Ne }
+ { \@@_put_if_new:NNnn \__kernel_tl_set:Nx }
\cs_new_protected:Npn \prop_gput_if_new:Nnn
- { \@@_put_if_new:NNnn \__kernel_tl_gset:Ne }
+ { \@@_put_if_new:NNnn \__kernel_tl_gset:Nx }
\cs_new_protected:Npn \@@_put_if_new:NNnn #1#2#3#4
{
\tl_set:Nn \l_@@_internal_tl
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
@@ -970,7 +970,7 @@
% Can't use \cs{scan_new:N} yet because \pkg{l3tl} isn't loaded,
% so define \cs{s_stop} by hand and add it to \cs{g_@@_marks_tl}.
% We also add the scan marks declared earlier to the pool here.
-% Since they lives in a different namespace, a little \pkg{l3docstrip}
+% Since they lives in a different namespace, a little \pkg{DocStrip}
% cheating is necessary.
% \begin{macrocode}
\cs_new_eq:NN \s_stop \scan_stop:
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
@@ -228,7 +228,7 @@
% Matches any of the specified tokens.
% \item[{[\char`\^\ldots{}]}] Negative character class.
% Matches any token other than the specified characters.
-% \item[{x-y}] Within a character class, this denotes a range (can be
+% \item[{[x-y]}] Within a character class, this denotes a range (can be
% used with escaped characters).
% \item[{[:\meta{name}:]}] Within a character class (one more set of
% brackets), this denotes the \textsc{posix} character class
@@ -928,9 +928,6 @@
% \item Does |\K| really need a new state for itself?
% \item When compiling, use a boolean \texttt{in_cs} and less magic
% numbers.
-% \item Instead of checking whether the character is special or
-% alphanumeric using its character code, check if it is special in
-% regexes with \cs[no-index]{cs_if_exist} tests.
% \end{itemize}
%
% The following features are likely to be implemented at some point
@@ -1135,10 +1132,10 @@
% Empty a \tn{toks} or set it to a value, given its number.
% \begin{macrocode}
\cs_new_protected:Npn \@@_toks_clear:N #1
- { \@@_toks_set:Nn #1 { } }
+ { \tex_toks:D #1 = { } }
\cs_new_eq:NN \@@_toks_set:Nn \tex_toks:D
\cs_new_protected:Npn \@@_toks_set:No #1
- { \tex_toks:D #1 \exp_after:wN }
+ { \tex_toks:D #1 = \exp_after:wN }
% \end{macrocode}
% \end{macro}
%
@@ -1167,20 +1164,24 @@
% \cs{@@_toks_put_right:Ne} is provided because it is more
% efficient than \texttt{e}-expanding with \cs{exp_not:n}.
% \begin{macrocode}
-\cs_new_protected:Npn \@@_toks_put_left:Ne #1#2
+\cs_if_exist:NTF \tex_etokspre:D
+ { \cs_new_eq:NN \@@_toks_put_left:Ne \tex_etokspre:D }
{
- \cs_set_nopar:Npe \@@_tmp:w { #2 }
- \tex_toks:D #1 \exp_after:wN \exp_after:wN \exp_after:wN
- { \exp_after:wN \@@_tmp:w \tex_the:D \tex_toks:D #1 }
+ \cs_new_protected:Npn \@@_toks_put_left:Ne #1#2
+ { \tex_toks:D #1 = \tex_expanded:D {{ #2 \tex_the:D \tex_toks:D #1 }} }
}
-\cs_new_protected:Npn \@@_toks_put_right:Ne #1#2
+\cs_if_exist:NTF \tex_etoksapp:D
+ { \cs_new_eq:NN \@@_toks_put_right:Ne \tex_etoksapp:D }
{
- \cs_set_nopar:Npe \@@_tmp:w {#2}
- \tex_toks:D #1 \exp_after:wN
- { \tex_the:D \tex_toks:D \exp_after:wN #1 \@@_tmp:w }
+ \cs_new_protected:Npn \@@_toks_put_right:Ne #1#2
+ { \tex_toks:D #1 = \tex_expanded:D {{ \tex_the:D \tex_toks:D #1 #2 }} }
}
-\cs_new_protected:Npn \@@_toks_put_right:Nn #1#2
- { \tex_toks:D #1 \exp_after:wN { \tex_the:D \tex_toks:D #1 #2 } }
+\cs_if_exist:NTF \tex_toksapp:D
+ { \cs_new_eq:NN \@@_toks_put_right:Nn \tex_toksapp:D }
+ {
+ \cs_new_protected:Npn \@@_toks_put_right:Nn #1#2
+ { \tex_toks:D #1 = \exp_after:wN { \tex_the:D \tex_toks:D #1 #2 } }
+ }
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -1203,15 +1204,13 @@
% Item of intarray, with a default value.
% \begin{macrocode}
\cs_new:Npn \@@_intarray_item:NnF #1#2
- { \exp_args:Nf \@@_intarray_item_aux:nNF { \int_eval:n {#2} } #1 }
+ { \exp_args:No \@@_intarray_item_aux:nNF { \tex_the:D \@@_int_eval:w #2 } #1 }
\cs_new:Npn \@@_intarray_item_aux:nNF #1#2
{
\if_int_compare:w #1 > \c_zero_int
- \exp_after:wN \use_i:nn
- \else:
- \exp_after:wN \use_ii:nn
+ \exp_after:wN \use_ii:nnn
\fi:
- { \__kernel_intarray_item:Nn #2 {#1} }
+ \use_ii:nn { \__kernel_intarray_item:Nn #2 {#1} }
}
% \end{macrocode}
% \end{macro}
@@ -1465,14 +1464,12 @@
\if_int_compare:w \l_@@_curr_char_int > `Z \exp_stop_f:
\if_int_compare:w \l_@@_curr_char_int > `z \exp_stop_f: \else:
\if_int_compare:w \l_@@_curr_char_int < `a \exp_stop_f: \else:
- \int_sub:Nn \l_@@_case_changed_char_int
- { \c_@@_ascii_lower_int }
+ \int_sub:Nn \l_@@_case_changed_char_int \c_@@_ascii_lower_int
\fi:
\fi:
\else:
\if_int_compare:w \l_@@_curr_char_int < `A \exp_stop_f: \else:
- \int_add:Nn \l_@@_case_changed_char_int
- { \c_@@_ascii_lower_int }
+ \int_add:Nn \l_@@_case_changed_char_int \c_@@_ascii_lower_int
\fi:
\fi:
\cs_set_eq:NN \@@_maybe_compute_ccc: \prg_do_nothing:
@@ -1510,12 +1507,12 @@
\or: 1000000 \or: 4000000 \else: 1*0
\fi:
}
-\cs_new_protected:Npn \@@_item_catcode:nT #1
+\prg_new_protected_conditional:Npnn \@@_item_catcode:n #1 { T }
{
- \if_int_odd:w \int_eval:n { #1 / \@@_item_catcode: } \exp_stop_f:
- \exp_after:wN \use:n
+ \if_int_odd:w \@@_int_eval:w #1 / \@@_item_catcode: \scan_stop:
+ \prg_return_true:
\else:
- \exp_after:wN \use_none:n
+ \prg_return_false:
\fi:
}
\cs_new_protected:Npn \@@_item_catcode_reverse:nT #1#2
@@ -1539,9 +1536,9 @@
}
\cs_new_protected:Npn \@@_item_exact_cs:n #1
{
- \int_compare:nNnTF \l_@@_curr_catcode_int = 0
+ \int_compare:nNnTF \l_@@_curr_catcode_int = \c_zero_int
{
- \__kernel_tl_set:Ne \l_@@_internal_a_tl
+ \__kernel_tl_set:Nx \l_@@_internal_a_tl
{ \scan_stop: \@@_curr_cs_to_str: \scan_stop: }
\tl_if_in:noTF { \scan_stop: #1 \scan_stop: }
\l_@@_internal_a_tl
@@ -1560,7 +1557,7 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_item_cs:n #1
{
- \int_compare:nNnT \l_@@_curr_catcode_int = 0
+ \int_compare:nNnT \l_@@_curr_catcode_int = \c_zero_int
{
\group_begin:
\@@_single_match:
@@ -1729,7 +1726,7 @@
\cs_set:Npn \@@_escape_escaped:N ##1 { #2 }
\cs_set:Npn \@@_escape_raw:N ##1 { #3 }
\@@_standard_escapechar:
- \__kernel_tl_gset:Ne \g_@@_internal_tl
+ \__kernel_tl_gset:Nx \g_@@_internal_tl
{ \__kernel_str_to_other_fast:n {#4} }
\tl_put_right:Ne \l_@@_internal_a_tl
{
@@ -1936,13 +1933,13 @@
% lowercase letters, which we need to detect and replace by their
% uppercase counterpart.
% \begin{macrocode}
-\prg_new_conditional:Npnn \@@_hexadecimal_use:N #1 { TF }
+\cs_new:Npn \@@_hexadecimal_use:NTF #1
{
- \if_int_compare:w 1 < "1 \token_to_str:N #1 \exp_stop_f:
- #1 \prg_return_true:
+ \if_int_compare:w \c_one_int < "1 \token_to_str:N #1 \exp_stop_f:
+ #1
\else:
\if_case:w
- \int_eval:n { \exp_after:wN ` \token_to_str:N #1 - `a }
+ \@@_int_eval:w \exp_after:wN ` \token_to_str:N #1 - `a \scan_stop:
A
\or: B
\or: C
@@ -1950,11 +1947,10 @@
\or: E
\or: F
\else:
- \prg_return_false:
- \exp_after:wN \use_none:n
+ \exp_after:wN \exp_after:wN \exp_after:wN \use_iii:nnn
\fi:
- \prg_return_true:
\fi:
+ \use_i:nn
}
% \end{macrocode}
% \end{macro}
@@ -1986,43 +1982,57 @@
% \begin{macrocode}
\prg_new_conditional:Npnn \@@_char_if_special:N #1 { TF }
{
- \if_int_compare:w `#1 > `Z \exp_stop_f:
- \if_int_compare:w `#1 > `z \exp_stop_f:
- \if_int_compare:w `#1 < \c_@@_ascii_max_int
- \prg_return_true: \else: \prg_return_false: \fi:
- \else:
- \if_int_compare:w `#1 < `a \exp_stop_f:
- \prg_return_true: \else: \prg_return_false: \fi:
- \fi:
+ \if:w
+ T
+ \if_int_compare:w `#1 > `Z \exp_stop_f:
+ \if_int_compare:w `#1 > `z \exp_stop_f:
+ \if_int_compare:w `#1 < \c_@@_ascii_max_int
+ \else: F \fi:
+ \else:
+ \if_int_compare:w `#1 < `a \exp_stop_f:
+ \else: F \fi:
+ \fi:
+ \else:
+ \if_int_compare:w `#1 > `9 \exp_stop_f:
+ \if_int_compare:w `#1 < `A \exp_stop_f:
+ \else: F \fi:
+ \else:
+ \if_int_compare:w `#1 < `0 \exp_stop_f:
+ \if_int_compare:w `#1 < `\ \exp_stop_f:
+ F \fi:
+ \else: F \fi:
+ \fi:
+ \fi:
+ T
+ \prg_return_true:
\else:
- \if_int_compare:w `#1 > `9 \exp_stop_f:
- \if_int_compare:w `#1 < `A \exp_stop_f:
- \prg_return_true: \else: \prg_return_false: \fi:
- \else:
- \if_int_compare:w `#1 < `0 \exp_stop_f:
- \if_int_compare:w `#1 < `\ \exp_stop_f:
- \prg_return_false: \else: \prg_return_true: \fi:
- \else: \prg_return_false: \fi:
- \fi:
+ \prg_return_false:
\fi:
}
\prg_new_conditional:Npnn \@@_char_if_alphanumeric:N #1 { TF }
{
- \if_int_compare:w `#1 > `Z \exp_stop_f:
- \if_int_compare:w `#1 > `z \exp_stop_f:
- \prg_return_false:
- \else:
- \if_int_compare:w `#1 < `a \exp_stop_f:
- \prg_return_false: \else: \prg_return_true: \fi:
- \fi:
+ \if:w
+ T
+ \if_int_compare:w `#1 > `Z \exp_stop_f:
+ \if_int_compare:w `#1 > `z \exp_stop_f:
+ F
+ \else:
+ \if_int_compare:w `#1 < `a \exp_stop_f:
+ F \fi:
+ \fi:
+ \else:
+ \if_int_compare:w `#1 > `9 \exp_stop_f:
+ \if_int_compare:w `#1 < `A \exp_stop_f:
+ F \fi:
+ \else:
+ \if_int_compare:w `#1 < `0 \exp_stop_f:
+ F \fi:
+ \fi:
+ \fi:
+ T
+ \prg_return_true:
\else:
- \if_int_compare:w `#1 > `9 \exp_stop_f:
- \if_int_compare:w `#1 < `A \exp_stop_f:
- \prg_return_false: \else: \prg_return_true: \fi:
- \else:
- \if_int_compare:w `#1 < `0 \exp_stop_f:
- \prg_return_false: \else: \prg_return_true: \fi:
- \fi:
+ \prg_return_false:
\fi:
}
% \end{macrocode}
@@ -2179,17 +2189,14 @@
% Besides, the expanding behaviour of \cs{if:w} is very useful as that
% means we can use \cs{c_left_brace_str} and the like.
% \begin{macrocode}
-\prg_new_conditional:Npnn \@@_two_if_eq:NNNN #1#2#3#4 { TF }
+\cs_new:Npn \@@_two_if_eq:NNNNTF #1#2#3#4
{
\if_meaning:w #1 #3
\if:w #2 #4
- \prg_return_true:
- \else:
- \prg_return_false:
+ \exp_after:wN \exp_after:wN \exp_after:wN \use_ii:nnn
\fi:
- \else:
- \prg_return_false:
\fi:
+ \use_ii:nn
}
% \end{macrocode}
% \end{macro}
@@ -2220,17 +2227,14 @@
% Test used when grabbing digits for the |{m,n}| quantifier.
% It only accepts non-escaped digits.
% \begin{macrocode}
-\prg_new_conditional:Npnn \@@_if_raw_digit:NN #1#2 { TF }
+\cs_new:Npn \@@_if_raw_digit:NNTF #1#2
{
\if_meaning:w \@@_compile_raw:N #1
- \if_int_compare:w 1 < 1 #2 \exp_stop_f:
- \prg_return_true:
- \else:
- \prg_return_false:
+ \if_int_compare:w \c_one_int < 1 #2 \exp_stop_f:
+ \exp_after:wN \exp_after:wN \exp_after:wN \use_ii:nnn
\fi:
- \else:
- \prg_return_false:
\fi:
+ \use_ii:nn
}
% \end{macrocode}
% \end{macro}
@@ -2284,12 +2288,12 @@
% and special characters are normal. Also, for every raw character, we
% must look ahead for a possible raw dash.
% \begin{macrocode}
-\cs_new:Npn \@@_if_in_class:TF
+\prg_new_conditional:Npnn \@@_if_in_class: { TF }
{
\if_int_odd:w \l_@@_mode_int
- \exp_after:wN \use_i:nn
+ \prg_return_true:
\else:
- \exp_after:wN \use_ii:nn
+ \prg_return_false:
\fi:
}
% \end{macrocode}
@@ -2302,14 +2306,12 @@
\cs_new:Npn \@@_if_in_cs:TF
{
\if_int_odd:w \l_@@_mode_int
- \exp_after:wN \use_ii:nn
\else:
\if_int_compare:w \l_@@_mode_int < \c_@@_outer_mode_int
- \exp_after:wN \exp_after:wN \exp_after:wN \use_i:nn
- \else:
- \exp_after:wN \exp_after:wN \exp_after:wN \use_ii:nn
+ \exp_after:wN \exp_after:wN \exp_after:wN \use_ii:nnn
\fi:
\fi:
+ \use_ii:nn
}
% \end{macrocode}
% \end{macro}
@@ -2321,14 +2323,13 @@
\cs_new:Npn \@@_if_in_class_or_catcode:TF
{
\if_int_odd:w \l_@@_mode_int
- \exp_after:wN \use_i:nn
\else:
\if_int_compare:w \l_@@_mode_int > \c_@@_outer_mode_int
- \exp_after:wN \exp_after:wN \exp_after:wN \use_i:nn
\else:
- \exp_after:wN \exp_after:wN \exp_after:wN \use_ii:nn
+ \exp_after:wN \exp_after:wN \exp_after:wN \use_iii:nnn
\fi:
\fi:
+ \use_i:nn
}
% \end{macrocode}
% \end{macro}
@@ -2339,12 +2340,12 @@
% it applies (modes $23$ and $63$). This is used to tweak how left
% brackets behave in modes $2$ and $6$.
% \begin{macrocode}
-\cs_new:Npn \@@_if_within_catcode:TF
+\prg_new_conditional:Npnn \@@_if_within_catcode: { TF }
{
\if_int_compare:w \l_@@_mode_int > \c_@@_outer_mode_int
- \exp_after:wN \use_i:nn
+ \prg_return_true:
\else:
- \exp_after:wN \use_ii:nn
+ \prg_return_false:
\fi:
}
% \end{macrocode}
@@ -2357,15 +2358,14 @@
\cs_new_protected:Npn \@@_chk_c_allowed:T
{
\if_int_compare:w \l_@@_mode_int = \c_@@_outer_mode_int
- \exp_after:wN \use:n
\else:
\if_int_compare:w \l_@@_mode_int = \c_@@_class_mode_int
- \exp_after:wN \exp_after:wN \exp_after:wN \use:n
\else:
\msg_error:nn { regex } { c-bad-mode }
- \exp_after:wN \exp_after:wN \exp_after:wN \use_none:n
+ \exp_after:wN \use_i:nnn
\fi:
\fi:
+ \use:n
}
% \end{macrocode}
% \end{macro}
@@ -2424,7 +2424,7 @@
\msg_error:nne { regex } { missing-rparen }
{ \int_use:N \l_@@_group_level_int }
\prg_replicate:nn
- { \l_@@_group_level_int }
+ \l_@@_group_level_int
{
\tl_build_put_right:Nn \l_@@_build_tl
{
@@ -2712,7 +2712,7 @@
{ \@@_compile_special:N \c_right_brace_str }
{
\exp_args:No \@@_compile_quantifier_lazyness:nnNN
- { \int_use:N \l_@@_internal_a_int } { 0 }
+ { \int_use:N \l_@@_internal_a_int } 0
}
{ \@@_compile_special:N , }
{
@@ -2818,21 +2818,19 @@
% raw character; any special character, except a right bracket. In
% particular, escaped characters are forbidden.
% \begin{macrocode}
-\prg_new_protected_conditional:Npnn \@@_if_end_range:NN #1#2 { TF }
+\cs_new_protected:Npn \@@_if_end_range:NNTF #1#2
{
\if_meaning:w \@@_compile_raw:N #1
- \prg_return_true:
\else:
\if_meaning:w \@@_compile_special:N #1
\if_charcode:w ] #2
- \prg_return_false:
- \else:
- \prg_return_true:
+ \use_i:nn
\fi:
\else:
- \prg_return_false:
+ \exp_after:wN \exp_after:wN \exp_after:wN \use_iii:nnn
\fi:
\fi:
+ \use_i:nn
}
\cs_new_protected:Npn \@@_compile_range:Nw #1#2#3
{
@@ -3133,12 +3131,12 @@
\@@_two_if_eq:NNNNTF #5 #6 \@@_compile_special:N ^
{
\bool_set_false:N \l_@@_internal_bool
- \__kernel_tl_set:Ne \l_@@_internal_a_tl { \if_false: } \fi:
+ \__kernel_tl_set:Nx \l_@@_internal_a_tl { \if_false: } \fi:
\@@_compile_class_posix_loop:w
}
{
\bool_set_true:N \l_@@_internal_bool
- \__kernel_tl_set:Ne \l_@@_internal_a_tl { \if_false: } \fi:
+ \__kernel_tl_set:Nx \l_@@_internal_a_tl { \if_false: } \fi:
\@@_compile_class_posix_loop:w #5 #6
}
}
@@ -3460,7 +3458,7 @@
}
\cs_new_protected:Npn \@@_compile_c_lbrack_add:N #1
{
- \if_int_odd:w \int_eval:n { \l_@@_catcodes_int / #1 } \exp_stop_f:
+ \if_int_odd:w \@@_int_eval:w \l_@@_catcodes_int / #1 \scan_stop:
\else:
\int_add:Nn \l_@@_catcodes_int {#1}
\fi:
@@ -3510,7 +3508,7 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{variable}{@@_cs}
+% \begin{variable}{\l_@@_cs_flag}
% \begin{macro}+\@@_compile_}:+
% \begin{macro}{\@@_compile_end_cs:}
% \begin{macro}[EXP]{\@@_compile_cs_aux:Nn, \@@_compile_cs_aux:NNnnnN}
@@ -3524,7 +3522,7 @@
% \cs{@@_item_exact_cs:n} with an argument consisting of all
% possibilities separated by \cs{scan_stop:}.
% \begin{macrocode}
-\flag_new:n { @@_cs }
+\flag_new:N \l_@@_cs_flag
\cs_new_protected:cpn { @@_compile_ \c_right_brace_str : }
{
\@@_if_in_cs:TF
@@ -3534,8 +3532,8 @@
\cs_new_protected:Npn \@@_compile_end_cs:
{
\@@_compile_end:
- \flag_clear:n { @@_cs }
- \__kernel_tl_set:Ne \l_@@_internal_a_tl
+ \flag_clear:N \l_@@_cs_flag
+ \__kernel_tl_set:Nx \l_@@_internal_a_tl
{
\exp_after:wN \@@_compile_cs_aux:Nn \l_@@_internal_regex
\q_@@_nil \q_@@_nil \q_@@_recursion_stop
@@ -3542,7 +3540,7 @@
}
\exp_args:Ne \@@_compile_one:n
{
- \flag_if_raised:nTF { @@_cs }
+ \flag_if_raised:NTF \l_@@_cs_flag
{ \@@_item_cs:n { \exp_not:o \l_@@_internal_regex } }
{
\@@_item_exact_cs:n
@@ -3561,7 +3559,7 @@
\@@_compile_cs_aux:Nn
}
{
- \@@_quark_if_nil:NF #1 { \flag_ensure_raised:n { @@_cs } }
+ \@@_quark_if_nil:NF #1 { \flag_ensure_raised:N \l_@@_cs_flag }
\@@_use_none_delimit_by_q_recursion_stop:w
}
}
@@ -3573,7 +3571,7 @@
{#2}
{ \tl_if_head_eq_meaning_p:nN {#3} \@@_item_caseful_equal:n }
{ \int_compare_p:nNn { \tl_count:n {#3} } = { 2 } }
- { \int_compare_p:nNn {#5} = { 0 } }
+ { \int_compare_p:nNn {#5} = \c_zero_int }
}
{
\prg_replicate:nn {#4}
@@ -3583,7 +3581,7 @@
{
\@@_quark_if_nil:NF #1
{
- \flag_ensure_raised:n { @@_cs }
+ \flag_ensure_raised:N \l_@@_cs_flag
\@@_use_i_delimit_by_q_recursion_stop:nw
}
\@@_use_none_delimit_by_q_recursion_stop:w
@@ -3624,7 +3622,7 @@
\@@_two_if_eq:NNNNTF #2 #3 \@@_compile_special:N \c_left_brace_str
{
\tl_set:Nn \l_@@_internal_b_tl {#1}
- \__kernel_tl_set:Ne \l_@@_internal_a_tl { \if_false: } \fi:
+ \__kernel_tl_set:Nx \l_@@_internal_a_tl { \if_false: } \fi:
\@@_compile_u_loop:NN
}
{
@@ -3758,7 +3756,7 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_compile_u_in_cs:
{
- \__kernel_tl_gset:Ne \g_@@_internal_tl
+ \__kernel_tl_gset:Nx \g_@@_internal_tl
{
\exp_args:No \__kernel_str_to_other_fast:n
{ \l_@@_internal_a_tl }
@@ -3857,10 +3855,10 @@
}
\cs_new:Npn \@@_clean_int_aux:N #1
{
- \if_int_compare:w 1 < 1 #1 ~
+ \if_int_compare:w \c_one_int < 1 #1 ~
#1
\else:
- \exp_after:wN \str_map_break:
+ \str_map_break:n
\fi:
}
\cs_new:Npn \@@_clean_regex:n #1
@@ -3881,7 +3879,7 @@
}
\cs_new:Npn \@@_clean_branch_loop:n #1
{
- \tl_if_single:nF {#1} { \prg_break: }
+ \tl_if_single:nF {#1} \prg_break:
\token_case_meaning:NnF #1
{
\@@_command_K: { #1 \@@_clean_branch_loop:n }
@@ -3891,7 +3889,7 @@
\@@_group_no_capture:nnnN { #1 \@@_clean_group:nnnN }
\@@_group_resetting:nnnN { #1 \@@_clean_group:nnnN }
}
- { \prg_break: }
+ \prg_break:
}
\cs_new:Npn \@@_clean_assertion:Nn #1#2
{
@@ -3912,8 +3910,8 @@
{
\@@_clean_bool:n {#1}
{ \@@_clean_class:n {#2} }
- { \int_max:nn { 0 } { \@@_clean_int:n {#3} } }
- { \int_max:nn { -1 } { \@@_clean_int:n {#4} } }
+ { \int_max:nn \c_zero_int { \@@_clean_int:n {#3} } }
+ { \int_max:nn { -\c_one_int } { \@@_clean_int:n {#4} } }
\@@_clean_bool:n {#5}
\@@_clean_branch_loop:n
}
@@ -3920,8 +3918,8 @@
\cs_new:Npn \@@_clean_group:nnnN #1#2#3#4
{
{ \@@_clean_regex:n {#1} }
- { \int_max:nn { 0 } { \@@_clean_int:n {#2} } }
- { \int_max:nn { -1 } { \@@_clean_int:n {#3} } }
+ { \int_max:nn \c_zero_int { \@@_clean_int:n {#2} } }
+ { \int_max:nn { -\c_one_int } { \@@_clean_int:n {#3} } }
\@@_clean_bool:n {#4}
\@@_clean_branch_loop:n
}
@@ -3936,7 +3934,7 @@
% \begin{macrocode}
\cs_new:Npn \@@_clean_class_loop:nnn #1#2#3
{
- \tl_if_single:nF {#1} { \prg_break: }
+ \tl_if_single:nF {#1} \prg_break:
\token_case_meaning:NnTF #1
{
\@@_item_cs:n { #1 { \@@_clean_regex:n {#2} } }
@@ -3968,10 +3966,10 @@
\@@_clean_class_loop:nnn
}
{
- \exp_args:Nf \str_case:nnTF
+ \exp_args:Ne \str_case:nnTF
{
- \exp_args:Nf \str_range:nnn
- { \cs_to_str:N #1 } { 1 } { 13 }
+ \exp_args:Ne \str_range:nnn
+ { \cs_to_str:N #1 } \c_one_int { 13 }
}
{
{ @@_prop_ } { }
@@ -3981,7 +3979,7 @@
#1
\@@_clean_class_loop:nnn {#2} {#3}
}
- { \prg_break: }
+ \prg_break:
}
}
}
@@ -4164,7 +4162,7 @@
\int_zero:N \l_@@_show_lines_int
\@@_show_push:n {~}
#2
- \int_compare:nTF { \l_@@_show_lines_int = 0 }
+ \int_compare:nTF { \l_@@_show_lines_int = \c_zero_int }
{
\group_end:
\@@_show_one:n { \bool_if:NTF #1 { Fail } { Pass } }
@@ -4171,7 +4169,7 @@
}
{
\bool_if:nTF
- { #1 && \int_compare_p:n { \l_@@_show_lines_int = 1 } }
+ { #1 && \int_compare_p:n { \l_@@_show_lines_int = \c_one_int } }
{
\group_end:
#2
@@ -4389,7 +4387,7 @@
%
\@@_build_new_state:
\@@_toks_put_left:Ne \l_@@_left_state_int
- { \@@_action_submatch:nN { 0 } < }
+ { \@@_action_submatch:nN \c_zero_int < }
\@@_push_lr_states:
\int_zero:N \l_@@_case_max_group_int
\int_gzero:N \g_@@_case_int
@@ -4403,18 +4401,15 @@
}
\cs_new_protected:Npn \@@_case_build_loop:n #1
{
- \int_set:Nn \l_@@_capturing_group_int { 1 }
+ \int_set_eq:NN \l_@@_capturing_group_int \c_one_int
\@@_compile_use:n {#1}
\int_set:Nn \l_@@_case_max_group_int
- {
- \int_max:nn { \l_@@_case_max_group_int }
- { \l_@@_capturing_group_int }
- }
+ { \int_max:nn \l_@@_case_max_group_int \l_@@_capturing_group_int }
\seq_pop:NN \l_@@_right_state_seq \l_@@_internal_a_tl
\int_set:Nn \l_@@_right_state_int \l_@@_internal_a_tl
\@@_toks_put_left:Ne \l_@@_right_state_int
{
- \@@_action_submatch:nN { 0 } >
+ \@@_action_submatch:nN \c_zero_int >
\int_gset:Nn \g_@@_case_int
{ \int_use:N \g_@@_case_int }
\@@_action_success:
@@ -4500,9 +4495,9 @@
% differing usage later on. Both functions could be optimized.
% \begin{macrocode}
\cs_new_protected:Npn \@@_build_transition_left:NNN #1#2#3
- { \@@_toks_put_left:Ne #2 { #1 { \int_eval:n { #3 - #2 } } } }
+ { \@@_toks_put_left:Ne #2 { #1 { \tex_the:D \@@_int_eval:w #3 - #2 } } }
\cs_new_protected:Npn \@@_build_transition_right:nNn #1#2#3
- { \@@_toks_put_right:Ne #2 { #1 { \int_eval:n { #3 - #2 } } } }
+ { \@@_toks_put_right:Ne #2 { #1 { \tex_the:D \@@_int_eval:w #3 - #2 } } }
% \end{macrocode}
% \end{macro}
%
@@ -4534,11 +4529,11 @@
\@@_toks_put_right:Ne \l_@@_left_state_int
{
\if_meaning:w \c_true_bool #1
- #2 { \int_eval:n { #3 - \l_@@_left_state_int } }
- #4 { \int_eval:n { #5 - \l_@@_left_state_int } }
+ #2 { \tex_the:D \@@_int_eval:w #3 - \l_@@_left_state_int }
+ #4 { \tex_the:D \@@_int_eval:w #5 - \l_@@_left_state_int }
\else:
- #4 { \int_eval:n { #5 - \l_@@_left_state_int } }
- #2 { \int_eval:n { #3 - \l_@@_left_state_int } }
+ #4 { \tex_the:D \@@_int_eval:w #5 - \l_@@_left_state_int }
+ #2 { \tex_the:D \@@_int_eval:w #3 - \l_@@_left_state_int }
\fi:
}
}
@@ -4636,7 +4631,7 @@
{
\@@_class_repeat:n {#1}
\int_set:Nn \l_@@_internal_a_int
- { \l_@@_max_state_int + #2 - 1 }
+ { \l_@@_max_state_int + #2 - \c_one_int }
\prg_replicate:nn { #2 }
{
\@@_build_transitions_lazyness:NNNNN #3
@@ -4730,8 +4725,8 @@
\use_none:nn #3 { \int_set:Nn \l_@@_capturing_group_int {#1} }
\int_set:Nn \l_@@_capturing_group_int {#2}
#3 {#4}
- \exp_args:Nf \@@_group_resetting_loop:nnNn
- { \int_max:nn {#1} { \l_@@_capturing_group_int } }
+ \exp_args:Ne \@@_group_resetting_loop:nnNn
+ { \int_max:nn {#1} \l_@@_capturing_group_int }
{#2}
}
% \end{macrocode}
@@ -4774,7 +4769,7 @@
{
\if_int_compare:w #2 = \c_zero_int
\int_set:Nn \l_@@_max_state_int
- { \l_@@_left_state_int - 1 }
+ { \l_@@_left_state_int - \c_one_int }
\@@_build_new_state:
\else:
\@@_group_repeat_aux:n {#2}
@@ -4816,14 +4811,14 @@
\l_@@_right_state_int \l_@@_max_state_int
\int_set_eq:NN \l_@@_internal_a_int \l_@@_left_state_int
\int_set_eq:NN \l_@@_internal_b_int \l_@@_max_state_int
- \if_int_compare:w \int_eval:n {#1} > \c_one_int
+ \if_int_compare:w \@@_int_eval:w #1 > \c_one_int
\int_set:Nn \l_@@_internal_c_int
{
- ( #1 - 1 )
+ ( #1 - \c_one_int )
* ( \l_@@_internal_b_int - \l_@@_internal_a_int )
}
- \int_add:Nn \l_@@_right_state_int { \l_@@_internal_c_int }
- \int_add:Nn \l_@@_max_state_int { \l_@@_internal_c_int }
+ \int_add:Nn \l_@@_right_state_int \l_@@_internal_c_int
+ \int_add:Nn \l_@@_max_state_int \l_@@_internal_c_int
\@@_toks_memcpy:NNn
\l_@@_internal_b_int
\l_@@_internal_a_int
@@ -4859,7 +4854,7 @@
\@@_group_submatches:nNN {#1}
\l_@@_left_state_int \l_@@_right_state_int
\int_set:Nn \l_@@_internal_a_int
- { \l_@@_left_state_int - 1 }
+ { \l_@@_left_state_int - \c_one_int }
\@@_build_transition_right:nNn \@@_action_free:n
\l_@@_right_state_int \l_@@_internal_a_int
\@@_build_new_state:
@@ -4919,7 +4914,7 @@
\l_@@_left_state_int \l_@@_max_state_int
}
\else:
- \prg_replicate:nn { #3 - 1 }
+ \prg_replicate:nn { #3 - \c_one_int }
{
\int_sub:Nn \l_@@_right_state_int
{ \l_@@_internal_b_int - \l_@@_internal_a_int }
@@ -4928,7 +4923,7 @@
}
\if_int_compare:w #2 = \c_zero_int
\int_set:Nn \l_@@_right_state_int
- { \l_@@_left_state_int - 1 }
+ { \l_@@_left_state_int - \c_one_int }
\else:
\int_sub:Nn \l_@@_right_state_int
{ \l_@@_internal_b_int - \l_@@_internal_a_int }
@@ -4963,8 +4958,8 @@
{
\@@_action_free:n
{
- \int_eval:n
- { \l_@@_right_state_int - \l_@@_left_state_int }
+ \tex_the:D \@@_int_eval:w
+ \l_@@_right_state_int - \l_@@_left_state_int
}
}
\bool_if:NT #1 { { } }
@@ -5009,12 +5004,12 @@
\@@_build_new_state:
\@@_toks_put_right:Ne \l_@@_left_state_int
{
- \@@_action_submatch:nN { 0 } <
+ \@@_action_submatch:nN \c_zero_int <
\bool_set_true:N \l_@@_fresh_thread_bool
\@@_action_free:n
{
- \int_eval:n
- { \l_@@_right_state_int - \l_@@_left_state_int }
+ \tex_the:D \@@_int_eval:w
+ \l_@@_right_state_int - \l_@@_left_state_int
}
\bool_set_false:N \l_@@_fresh_thread_bool
}
@@ -5300,10 +5295,10 @@
{
\bool_gset_false:N \g_@@_success_bool
\int_step_inline:nnn
- \l_@@_min_state_int { \l_@@_max_state_int - 1 }
+ \l_@@_min_state_int { \l_@@_max_state_int - \c_one_int }
{
\__kernel_intarray_gset:Nnn
- \g_@@_state_active_intarray {##1} { 1 }
+ \g_@@_state_active_intarray {##1} \c_one_int
}
\int_zero:N \l_@@_step_int
\int_set:Nn \l_@@_min_pos_int { 2 }
@@ -5311,7 +5306,7 @@
\int_set:Nn \l_@@_last_char_success_int { -2 }
\tl_build_begin:N \l_@@_matched_analysis_tl
\tl_clear:N \l_@@_curr_analysis_tl
- \int_set:Nn \l_@@_min_submatch_int { 1 }
+ \int_set_eq:NN \l_@@_min_submatch_int \c_one_int
\int_set_eq:NN \l_@@_submatch_int \l_@@_min_submatch_int
\bool_set_false:N \l_@@_empty_success_bool
}
@@ -5353,8 +5348,7 @@
{ \prg_replicate:nn { 2 * \l_@@_capturing_group_int } { 0 , } }
\int_set_eq:NN \l_@@_max_thread_int \l_@@_min_thread_int
\@@_store_state:n { \l_@@_min_state_int }
- \int_set:Nn \l_@@_curr_pos_int
- { \l_@@_start_pos_int - 1 }
+ \int_set:Nn \l_@@_curr_pos_int { \l_@@_start_pos_int - \c_one_int }
\int_set_eq:NN \l_@@_curr_char_int \l_@@_last_char_success_int
\tl_build_get_intermediate:NN \l_@@_matched_analysis_tl \l_@@_internal_a_tl
\exp_args:NNf \@@_match_once_init_aux:
@@ -5432,8 +5426,8 @@
{
\int_set_eq:NN \l_@@_max_thread_int \l_@@_min_thread_int
\int_step_function:nnN
- { \l_@@_min_thread_int }
- { \l_@@_max_thread_int - 1 }
+ \l_@@_min_thread_int
+ { \l_@@_max_thread_int - \c_one_int }
\@@_match_one_active:n
}
\prg_break_point:
@@ -5440,7 +5434,7 @@
\bool_set_false:N \l_@@_fresh_thread_bool
\if_int_compare:w \l_@@_max_thread_int > \l_@@_min_thread_int
\if_int_compare:w -2 < \l_@@_curr_char_int
- \exp_after:wN \exp_after:wN \exp_after:wN \use_none:n
+ \exp_after:wN \use_i:nn
\fi:
\fi:
\l_@@_every_match_tl
@@ -5450,8 +5444,8 @@
\@@_use_state_and_submatches:w
\__kernel_intarray_range_to_clist:Nnn
\g_@@_thread_info_intarray
- { 1 + #1 * (\l_@@_capturing_group_int * 2 + 1) }
- { (1 + #1) * (\l_@@_capturing_group_int * 2 + 1) }
+ { \c_one_int + #1 * (\l_@@_capturing_group_int * 2 + \c_one_int) }
+ { (\c_one_int + #1) * (\l_@@_capturing_group_int * 2 + \c_one_int) }
;
}
% \end{macrocode}
@@ -5471,11 +5465,11 @@
\cs_new_protected:Npn \@@_use_state:
{
\__kernel_intarray_gset:Nnn \g_@@_state_active_intarray
- { \l_@@_curr_state_int } { \l_@@_step_int }
+ \l_@@_curr_state_int \l_@@_step_int
\@@_toks_use:w \l_@@_curr_state_int
\__kernel_intarray_gset:Nnn \g_@@_state_active_intarray
- { \l_@@_curr_state_int }
- { \int_eval:n { \l_@@_step_int + 1 } }
+ \l_@@_curr_state_int
+ { \@@_int_eval:w \l_@@_step_int + \c_one_int \scan_stop: }
}
% \end{macrocode}
% \end{macro}
@@ -5491,7 +5485,7 @@
\int_set:Nn \l_@@_curr_state_int {#1}
\if_int_compare:w
\__kernel_intarray_item:Nn \g_@@_state_active_intarray
- { \l_@@_curr_state_int }
+ \l_@@_curr_state_int
< \l_@@_step_int
\tl_set:Nn \l_@@_curr_submatches_tl { #2 , }
\exp_after:wN \@@_use_state:
@@ -5548,7 +5542,7 @@
{
\if_int_compare:w
\__kernel_intarray_item:Nn \g_@@_state_active_intarray
- { \l_@@_curr_state_int }
+ \l_@@_curr_state_int
#1
\exp_after:wN \@@_use_state:
\fi:
@@ -5571,8 +5565,8 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_action_cost:n #1
{
- \exp_args:Ne \@@_store_state:n
- { \int_eval:n { \l_@@_curr_state_int + #1 } }
+ \exp_args:No \@@_store_state:n
+ { \tex_the:D \@@_int_eval:w \l_@@_curr_state_int + #1 }
}
% \end{macrocode}
% \end{macro}
@@ -5595,8 +5589,8 @@
\g_@@_thread_info_intarray
{
\@@_int_eval:w
- 1 + \l_@@_max_thread_int *
- (\l_@@_capturing_group_int * 2 + 1)
+ \c_one_int + \l_@@_max_thread_int *
+ (\l_@@_capturing_group_int * 2 + \c_one_int)
}
{ #2 , #1 }
}
@@ -5792,11 +5786,11 @@
{
\if_int_compare:w #1 < #2 \exp_stop_f:
\else:
- \exp_after:wN \prg_break:
+ \prg_break:n
\fi:
\@@_toks_use:w #1 \exp_stop_f:
\exp_after:wN \@@_query_range_loop:ww
- \int_value:w \@@_int_eval:w #1 + 1 ; #2 ;
+ \int_value:w \@@_int_eval:w #1 + \c_one_int ; #2 ;
}
% \end{macrocode}
% \end{macro}
@@ -5824,22 +5818,21 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_submatch_balance:n #1
{
- \int_eval:n
- {
- \@@_intarray_item:NnF \g_@@_balance_intarray
- {
- \__kernel_intarray_item:Nn
- \g_@@_submatch_end_intarray {#1}
- }
- { 0 }
- -
- \@@_intarray_item:NnF \g_@@_balance_intarray
- {
- \__kernel_intarray_item:Nn
- \g_@@_submatch_begin_intarray {#1}
- }
- { 0 }
- }
+ \tex_the:D \@@_int_eval:w
+ \@@_intarray_item:NnF \g_@@_balance_intarray
+ {
+ \__kernel_intarray_item:Nn
+ \g_@@_submatch_end_intarray {#1}
+ }
+ \c_zero_int
+ -
+ \@@_intarray_item:NnF \g_@@_balance_intarray
+ {
+ \__kernel_intarray_item:Nn
+ \g_@@_submatch_begin_intarray {#1}
+ }
+ \c_zero_int
+ \scan_stop:
}
% \end{macrocode}
% \end{macro}
@@ -5984,7 +5977,7 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_replacement_normal:n #1
{
- \int_compare:nNnTF { \l_@@_replacement_csnames_int } > 0
+ \int_compare:nNnTF \l_@@_replacement_csnames_int > \c_zero_int
{ \exp_args:No \@@_replacement_put:n { \token_to_str:N #1 } }
{
\tl_if_empty:NTF \l_@@_replacement_category_tl
@@ -6040,7 +6033,7 @@
{
\cs_if_exist_use:cF { @@_replacement_#1:w }
{
- \if_int_compare:w 1 < 1#1 \exp_stop_f:
+ \if_int_compare:w \c_one_int < 1#1 \exp_stop_f:
\@@_replacement_put_submatch:n {#1}
\else:
\@@_replacement_normal:n {#1}
@@ -6066,16 +6059,16 @@
\@@_replacement_put_submatch_aux:n {#1}
\else:
\msg_expandable_error:nnff { regex } { submatch-too-big }
- {#1} { \int_eval:n { \l_@@_capturing_group_int - 1 } }
+ {#1} { \int_eval:n { \l_@@_capturing_group_int - \c_one_int } }
\fi:
}
\cs_new_protected:Npn \@@_replacement_put_submatch_aux:n #1
{
\tl_build_put_right:Nn \l_@@_build_tl
- { \@@_query_submatch:n { \int_eval:n { #1 + ##1 } } }
+ { \@@_query_submatch:n { \@@_int_eval:w #1 + ##1 \scan_stop: } }
\if_int_compare:w \l_@@_replacement_csnames_int = \c_zero_int
\tl_gput_right:Nn \g_@@_balance_tl
- { + \@@_submatch_balance:n { \int_eval:n { #1 + ##1 } } }
+ { + \@@_submatch_balance:n { \@@_int_eval:w #1 + ##1 \scan_stop: } }
\fi:
}
% \end{macrocode}
@@ -6097,7 +6090,7 @@
{
\token_if_eq_meaning:NNTF #1 \@@_replacement_normal:n
{
- \if_int_compare:w 1 < 1#2 \exp_stop_f:
+ \if_int_compare:w \c_one_int < 1#2 \exp_stop_f:
#2
\exp_after:wN \use_i:nnn
\exp_after:wN \@@_replacement_g_digits:NN
@@ -6232,7 +6225,7 @@
\token_if_eq_meaning:NNTF \prg_do_nothing: #3
{ \msg_error:nn { regex } { replacement-catcode-end } }
{
- \int_compare:nNnTF { \l_@@_replacement_csnames_int } > 0
+ \int_compare:nNnTF \l_@@_replacement_csnames_int > \c_zero_int
{
\msg_error:nnnn
{ regex } { replacement-catcode-in-cs } {#1} {#3}
@@ -6284,7 +6277,7 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_replacement_char:nNN #1#2#3
{
- \tex_lccode:D 0 = `#3 \scan_stop:
+ \tex_lccode:D \c_zero_int = `#3 \scan_stop:
\tex_lowercase:D { \@@_replacement_put:n {#1} }
}
% \end{macrocode}
@@ -6637,7 +6630,6 @@
\prg_generate_conditional_variant:Nnn #2 { nV } { T , F , TF }
\cs_generate_variant:Nn #3 { NV }
\prg_generate_conditional_variant:Nnn #3 { NV } { T , F , TF }
-
}
\@@_tmp:w \@@_extract_once:nnN
\regex_extract_once:nnN \regex_extract_once:NnN
@@ -6728,12 +6720,12 @@
% \end{macrocode}
% \end{variable}
%
-% \begin{variable}{@@_begin, @@_end}
+% \begin{variable}{\l_@@_begin_flag, \l_@@_end_flag}
% Those flags are raised to indicate begin-group or end-group tokens
% that had to be added when extracting submatches.
% \begin{macrocode}
-\flag_new:n { @@_begin }
-\flag_new:n { @@_end }
+\flag_new:N \l_@@_begin_flag
+\flag_new:N \l_@@_end_flag
% \end{macrocode}
% \end{variable}
%
@@ -6819,7 +6811,7 @@
\int_incr:N \l_@@_curr_pos_int
\@@_toks_set:Nn \l_@@_curr_pos_int {#1}
\__kernel_intarray_gset:Nnn \g_@@_balance_intarray
- { \l_@@_curr_pos_int } { \l_@@_balance_int }
+ \l_@@_curr_pos_int \l_@@_balance_int
\if_case:w "#2 \exp_stop_f:
\or: \int_incr:N \l_@@_balance_int
\or: \int_decr:N \l_@@_balance_int
@@ -6946,16 +6938,16 @@
\l_@@_start_pos_int < \l_@@_success_pos_int
\@@_extract:
\__kernel_intarray_gset:Nnn \g_@@_submatch_prev_intarray
- { \l_@@_zeroth_submatch_int } { 0 }
+ \l_@@_zeroth_submatch_int \c_zero_int
\__kernel_intarray_gset:Nnn \g_@@_submatch_end_intarray
- { \l_@@_zeroth_submatch_int }
+ \l_@@_zeroth_submatch_int
{
\__kernel_intarray_item:Nn \g_@@_submatch_begin_intarray
- { \l_@@_zeroth_submatch_int }
+ \l_@@_zeroth_submatch_int
}
\__kernel_intarray_gset:Nnn \g_@@_submatch_begin_intarray
- { \l_@@_zeroth_submatch_int }
- { \l_@@_start_pos_int }
+ \l_@@_zeroth_submatch_int
+ \l_@@_start_pos_int
\fi:
}
#1
@@ -6962,13 +6954,13 @@
\@@_match:n {#2}
\@@_query_set:n {#2}
\__kernel_intarray_gset:Nnn \g_@@_submatch_prev_intarray
- { \l_@@_submatch_int } { 0 }
+ \l_@@_submatch_int \c_zero_int
\__kernel_intarray_gset:Nnn \g_@@_submatch_end_intarray
- { \l_@@_submatch_int }
- { \l_@@_max_pos_int }
+ \l_@@_submatch_int
+ \l_@@_max_pos_int
\__kernel_intarray_gset:Nnn \g_@@_submatch_begin_intarray
- { \l_@@_submatch_int }
- { \l_@@_start_pos_int }
+ \l_@@_submatch_int
+ \l_@@_start_pos_int
\int_incr:N \l_@@_submatch_int
\if_meaning:w \c_true_bool \l_@@_empty_success_bool
\if_int_compare:w \l_@@_start_pos_int = \l_@@_max_pos_int
@@ -6998,24 +6990,24 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_group_end_extract_seq:N #1
{
- \flag_clear:n { @@_begin }
- \flag_clear:n { @@_end }
+ \flag_clear:N \l_@@_begin_flag
+ \flag_clear:N \l_@@_end_flag
\cs_set_eq:NN \@@_tmp:w \scan_stop:
- \__kernel_tl_gset:Ne \g_@@_internal_tl
+ \__kernel_tl_gset:Nx \g_@@_internal_tl
{
- \int_step_function:nnN { \l_@@_min_submatch_int }
- { \l_@@_submatch_int - 1 } \@@_extract_seq_aux:n
+ \int_step_function:nnN \l_@@_min_submatch_int
+ { \l_@@_submatch_int - \c_one_int } \@@_extract_seq_aux:n
\@@_tmp:w
}
\int_set:Nn \l_@@_added_begin_int
- { \flag_height:n { @@_begin } }
+ { \flag_height:N \l_@@_begin_flag }
\int_set:Nn \l_@@_added_end_int
- { \flag_height:n { @@_end } }
+ { \flag_height:N \l_@@_end_flag }
\tex_afterassignment:D \@@_extract_check:w
- \__kernel_tl_gset:Ne \g_@@_internal_tl
+ \__kernel_tl_gset:Nx \g_@@_internal_tl
{ \g_@@_internal_tl \if_false: { \fi: } }
\int_compare:nNnT
- { \l_@@_added_begin_int + \l_@@_added_end_int } > 0
+ { \l_@@_added_begin_int + \l_@@_added_end_int } > \c_zero_int
{
\msg_error:nneee { regex } { result-unbalanced }
{ splitting~or~extracting~submatches }
@@ -7063,7 +7055,7 @@
\if_int_compare:w #1 < \c_zero_int
\prg_replicate:nn {-#1}
{
- \flag_raise:n { @@_begin }
+ \flag_raise:N \l_@@_begin_flag
\exp_not:n { { \if_false: } \fi: }
}
\fi:
@@ -7071,7 +7063,7 @@
\if_int_compare:w #1 > \c_zero_int
\prg_replicate:nn {#1}
{
- \flag_raise:n { @@_end }
+ \flag_raise:N \l_@@_end_flag
\exp_not:n { \if_false: { \fi: } }
}
\fi:
@@ -7087,17 +7079,17 @@
% In \cs{@@_group_end_extract_seq:N} we had to expand
% \cs{g_@@_internal_tl} to turn \cs{if_false:} constructions into
% actual begin-group and end-group tokens. This is done with a
-% \cs{__kernel_tl_gset:Ne} assignment, and \cs{@@_extract_check:w} is
+% \cs{__kernel_tl_gset:Nx} assignment, and \cs{@@_extract_check:w} is
% run immediately after this assignment ends, thanks to the
% \tn{afterassignment} primitive. If all of the items were properly
% balanced (enough begin-group tokens before end-group tokens, so |}{|
% is not) then \cs{@@_extract_check:w} is called just before the
-% closing brace of the \cs{__kernel_tl_gset:Ne} (thanks to our sneaky
+% closing brace of the \cs{__kernel_tl_gset:Nx} (thanks to our sneaky
% \cs{if_false:} |{| \cs{fi:} |}| construction), and finds that there
% is nothing left to expand. If any of the items is unbalanced, the
% assignment gets ended early by an extra end-group token, and our
% check finds more tokens needing to be expanded in a new
-% \cs{__kernel_tl_gset:Ne} assignment. We need to add a begin-group
+% \cs{__kernel_tl_gset:Nx} assignment. We need to add a begin-group
% and an end-group tokens to the unbalanced item, namely to the last
% item found so far, which we reach through a loop.
% \begin{macrocode}
@@ -7113,7 +7105,7 @@
\int_incr:N \l_@@_added_begin_int
\int_incr:N \l_@@_added_end_int
\tex_afterassignment:D \@@_extract_check:w
- \__kernel_tl_gset:Ne \g_@@_internal_tl
+ \__kernel_tl_gset:Nx \g_@@_internal_tl
{
\exp_after:wN \@@_extract_check_loop:w
\g_@@_internal_tl
@@ -7169,15 +7161,15 @@
\prg_replicate:nn \l_@@_capturing_group_int
{
\__kernel_intarray_gset:Nnn \g_@@_submatch_prev_intarray
- { \l_@@_submatch_int } { 0 }
+ \l_@@_submatch_int \c_zero_int
\__kernel_intarray_gset:Nnn \g_@@_submatch_case_intarray
- { \l_@@_submatch_int } { 0 }
+ \l_@@_submatch_int \c_zero_int
\int_incr:N \l_@@_submatch_int
}
\__kernel_intarray_gset:Nnn \g_@@_submatch_prev_intarray
- { \l_@@_zeroth_submatch_int } { \l_@@_start_pos_int }
+ \l_@@_zeroth_submatch_int \l_@@_start_pos_int
\__kernel_intarray_gset:Nnn \g_@@_submatch_case_intarray
- { \l_@@_zeroth_submatch_int } { \g_@@_case_int }
+ \l_@@_zeroth_submatch_int \g_@@_case_int
\int_zero:N \l_@@_internal_a_int
\exp_after:wN \@@_extract_aux:w \l_@@_success_submatches_tl
\prg_break_point: \@@_use_none_delimit_by_q_recursion_stop:w ,
@@ -7192,7 +7184,12 @@
{ \@@_int_eval:w \l_@@_zeroth_submatch_int + \l_@@_internal_a_int } {#1}
\else:
\__kernel_intarray_gset:Nnn \g_@@_submatch_end_intarray
- { \@@_int_eval:w \l_@@_zeroth_submatch_int + \l_@@_internal_a_int - \l_@@_capturing_group_int } {#1}
+ {
+ \@@_int_eval:w
+ \l_@@_zeroth_submatch_int + \l_@@_internal_a_int
+ - \l_@@_capturing_group_int
+ }
+ {#1}
\fi:
\int_incr:N \l_@@_internal_a_int
\@@_extract_aux:w
@@ -7230,20 +7227,16 @@
\exp_args:No \@@_query_set:n {#3}
#2
\int_set:Nn \l_@@_balance_int
+ { \@@_replacement_balance_one_match:n \l_@@_zeroth_submatch_int }
+ \__kernel_tl_set:Nx \l_@@_internal_a_tl
{
- \@@_replacement_balance_one_match:n
- { \l_@@_zeroth_submatch_int }
- }
- \__kernel_tl_set:Ne \l_@@_internal_a_tl
- {
- \@@_replacement_do_one_match:n
- { \l_@@_zeroth_submatch_int }
+ \@@_replacement_do_one_match:n \l_@@_zeroth_submatch_int
\@@_query_range:nn
{
\__kernel_intarray_item:Nn \g_@@_submatch_end_intarray
- { \l_@@_zeroth_submatch_int }
+ \l_@@_zeroth_submatch_int
}
- { \l_@@_max_pos_int }
+ \l_@@_max_pos_int
}
\@@_group_end_replace:N #3
}
@@ -7276,19 +7269,19 @@
#2
\int_set:Nn \l_@@_balance_int
{
- 0
+ \c_zero_int
\int_step_function:nnnN
- { \l_@@_min_submatch_int }
+ \l_@@_min_submatch_int
\l_@@_capturing_group_int
- { \l_@@_submatch_int - 1 }
+ { \l_@@_submatch_int - \c_one_int }
\@@_replacement_balance_one_match:n
}
- \__kernel_tl_set:Ne \l_@@_internal_a_tl
+ \__kernel_tl_set:Nx \l_@@_internal_a_tl
{
\int_step_function:nnnN
- { \l_@@_min_submatch_int }
+ \l_@@_min_submatch_int
\l_@@_capturing_group_int
- { \l_@@_submatch_int - 1 }
+ { \l_@@_submatch_int - \c_one_int }
\@@_replacement_do_one_match:n
\@@_query_range:nn
\l_@@_start_pos_int \l_@@_max_pos_int
@@ -7321,11 +7314,12 @@
\cs_new_protected:Npn \@@_group_end_replace:N #1
{
\int_set:Nn \l_@@_added_begin_int
- { \int_max:nn { - \l_@@_balance_int } { 0 } }
+ { \int_max:nn { - \l_@@_balance_int } \c_zero_int }
\int_set:Nn \l_@@_added_end_int
- { \int_max:nn { \l_@@_balance_int } { 0 } }
+ { \int_max:nn \l_@@_balance_int \c_zero_int }
\@@_group_end_replace_try:
- \int_compare:nNnT { \l_@@_added_begin_int + \l_@@_added_end_int } > 0
+ \int_compare:nNnT { \l_@@_added_begin_int + \l_@@_added_end_int }
+ > \c_zero_int
{
\msg_error:nneee { regex } { result-unbalanced }
{ replacing } { \int_use:N \l_@@_added_begin_int }
@@ -7337,11 +7331,11 @@
\cs_new_protected:Npn \@@_group_end_replace_try:
{
\tex_afterassignment:D \@@_group_end_replace_check:w
- \__kernel_tl_gset:Ne \g_@@_internal_tl
+ \__kernel_tl_gset:Nx \g_@@_internal_tl
{
- \prg_replicate:nn { \l_@@_added_begin_int } { { \if_false: } \fi: }
+ \prg_replicate:nn \l_@@_added_begin_int { { \if_false: } \fi: }
\l_@@_internal_a_tl
- \prg_replicate:nn { \l_@@_added_end_int } { \if_false: { \fi: } }
+ \prg_replicate:nn \l_@@_added_end_int { \if_false: { \fi: } }
\if_false: { \fi: }
}
}
@@ -7618,14 +7612,13 @@
\use:e
{
\exp_not:n { \exp_after:wN \l_@@_peek_true_tl \exp:w }
- \@@_replacement_do_one_match:n
- { \l_@@_zeroth_submatch_int }
+ \@@_replacement_do_one_match:n \l_@@_zeroth_submatch_int
\@@_query_range:nn
{
\__kernel_intarray_item:Nn \g_@@_submatch_end_intarray
- { \l_@@_zeroth_submatch_int }
+ \l_@@_zeroth_submatch_int
}
- { \l_@@_max_pos_int }
+ \l_@@_max_pos_int
\exp_end:
}
}
@@ -7708,10 +7701,14 @@
{
\if_case:w \l_@@_replacement_csnames_int
\tl_build_put_right:Nn \l_@@_build_tl
- { \@@_query_submatch:n { \int_eval:n { #1 + ##1 } } }
+ { \@@_query_submatch:n { \@@_int_eval:w #1 + ##1 \scan_stop: } }
\else:
\tl_build_put_right:Nn \l_@@_build_tl
- { \exp:w \@@_query_submatch:n { \int_eval:n { #1 + ##1 } } \exp_end: }
+ {
+ \exp:w
+ \@@_query_submatch:n { \@@_int_eval:w #1 + ##1 \scan_stop: }
+ \exp_end:
+ }
\fi:
}
% \end{macrocode}
@@ -8141,7 +8138,7 @@
{
\int_step_inline:nnn
\l_@@_min_state_int
- { \l_@@_max_state_int - 1 }
+ { \l_@@_max_state_int - \c_one_int }
{
\@@_trace:nne { regex } {#1}
{ \iow_char:N \\toks ##1 = { \@@_toks_use:w ##1 } }
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
@@ -173,6 +173,22 @@
% See also \cs{seq_set_split:Nnn}, which removes spaces around the delimiters.
% \end{function}
%
+% \begin{function}[added = 2012-06-15]
+% {\seq_set_filter:NNn, \seq_gset_filter:NNn}
+% \begin{syntax}
+% \cs{seq_set_filter:NNn} \meta{seq~var_1} \meta{seq~var_2} \Arg{inline boolexpr}
+% \end{syntax}
+% Evaluates the \meta{inline boolexpr} for every \meta{item} stored
+% within the \meta{seq~var_2}. The \meta{inline boolexpr}
+% receives the \meta{item} as |#1|. The sequence of all \meta{items}
+% for which the \meta{inline boolexpr} evaluated to \texttt{true}
+% is assigned to \meta{seq~var_1}.
+% \begin{texnote}
+% Contrarily to other mapping functions, \cs{seq_map_break:} cannot
+% be used in this function, and would lead to low-level \TeX{} errors.
+% \end{texnote}
+% \end{function}
+%
% \begin{function}
% {\seq_concat:NNN, \seq_concat:ccc, \seq_gconcat:NNN, \seq_gconcat:ccc}
% \begin{syntax}
@@ -635,8 +651,8 @@
% \begin{syntax}
% \cs{seq_map_indexed_function:NN} \meta{seq~var} \meta{function}
% \end{syntax}
-% Applies \meta{function} to every entry in the \meta{sequence
-% variable}. The \meta{function} should have signature |:nn|. It
+% Applies \meta{function} to every entry in the \meta{seq~var}.
+% The \meta{function} should have signature |:nn|. It
% receives two arguments for each iteration: the \meta{index} (namely
% |1| for the first entry, then |2| and so on) and the \meta{item}.
% \end{function}
@@ -645,8 +661,8 @@
% \begin{syntax}
% \cs{seq_map_indexed_inline:Nn} \meta{seq~var} \Arg{inline function}
% \end{syntax}
-% Applies \meta{inline function} to every entry in the \meta{sequence
-% variable}. The \meta{inline function} should consist of code which
+% Applies \meta{inline function} to every entry in the \meta{seq~var}.
+% The \meta{inline function} should consist of code which
% receives the \meta{index} (namely |1| for the first entry, then |2|
% and so on) as~|#1| and the \meta{item} as~|#2|.
% \end{function}
@@ -933,8 +949,8 @@
% items in the sequence representing the set.
%
% Sets should not contain several occurrences of a given item. To make
-% sure that a \meta{sequence variable} only has distinct items, use
-% \cs{seq_remove_duplicates:N} \meta{sequence variable}. This function
+% sure that a \meta{seq~var} only has distinct items, use
+% \cs{seq_remove_duplicates:N} \meta{seq~var}. This function
% is relatively slow, and to avoid performance issues one should only
% use it when necessary.
%
@@ -1238,22 +1254,22 @@
% \begin{macrocode}
\cs_new_protected:Npn \seq_set_from_clist:NN #1#2
{
- \__kernel_tl_set:Ne #1
+ \__kernel_tl_set:Nx #1
{ \s_@@ \clist_map_function:NN #2 \@@_wrap_item:n }
}
\cs_new_protected:Npn \seq_set_from_clist:Nn #1#2
{
- \__kernel_tl_set:Ne #1
+ \__kernel_tl_set:Nx #1
{ \s_@@ \clist_map_function:nN {#2} \@@_wrap_item:n }
}
\cs_new_protected:Npn \seq_gset_from_clist:NN #1#2
{
- \__kernel_tl_gset:Ne #1
+ \__kernel_tl_gset:Nx #1
{ \s_@@ \clist_map_function:NN #2 \@@_wrap_item:n }
}
\cs_new_protected:Npn \seq_gset_from_clist:Nn #1#2
{
- \__kernel_tl_gset:Ne #1
+ \__kernel_tl_gset:Nx #1
{ \s_@@ \clist_map_function:nN {#2} \@@_wrap_item:n }
}
\cs_generate_variant:Nn \seq_set_from_clist:NN { Nc }
@@ -1322,13 +1338,13 @@
% braces which are outermost after space trimming.
% \begin{macrocode}
\cs_new_protected:Npn \seq_set_split:Nnn
- { \@@_set_split:NNNnn \__kernel_tl_set:Ne \tl_trim_spaces:n }
+ { \@@_set_split:NNNnn \__kernel_tl_set:Nx \tl_trim_spaces:n }
\cs_new_protected:Npn \seq_gset_split:Nnn
- { \@@_set_split:NNNnn \__kernel_tl_gset:Ne \tl_trim_spaces:n }
+ { \@@_set_split:NNNnn \__kernel_tl_gset:Nx \tl_trim_spaces:n }
\cs_new_protected:Npn \seq_set_split_keep_spaces:Nnn
- { \@@_set_split:NNNnn \__kernel_tl_set:Ne \exp_not:n }
+ { \@@_set_split:NNNnn \__kernel_tl_set:Nx \exp_not:n }
\cs_new_protected:Npn \seq_gset_split_keep_spaces:Nnn
- { \@@_set_split:NNNnn \__kernel_tl_gset:Ne \exp_not:n }
+ { \@@_set_split:NNNnn \__kernel_tl_gset:Nx \exp_not:n }
\cs_new_protected:Npn \@@_set_split:NNNnn #1#2#3#4#5
{
\tl_if_empty:nTF {#4}
@@ -1348,7 +1364,7 @@
\@@_set_split_end:
\@@_set_split:Nw #2 \prg_do_nothing:
}
- \__kernel_tl_set:Ne \l_@@_internal_a_tl { \l_@@_internal_a_tl }
+ \__kernel_tl_set:Nx \l_@@_internal_a_tl { \l_@@_internal_a_tl }
}
#1 #3 { \s_@@ \l_@@_internal_a_tl }
}
@@ -1372,6 +1388,30 @@
% \end{macro}
% \end{macro}
%
+% \begin{macro}{\seq_set_filter:NNn, \seq_gset_filter:NNn}
+% \begin{macro}{\@@_set_filter:NNNn}
+% Similar to \cs{seq_map_inline:Nn}, without a
+% \cs{prg_break_point:} because the user's code
+% is performed within the evaluation of a boolean expression,
+% and skipping out of that would break horribly.
+% The \cs{@@_wrap_item:n} function inserts the relevant
+% \cs{@@_item:n} without expansion in the input stream,
+% hence in the \texttt{e}-expanding assignment.
+% \begin{macrocode}
+\cs_new_protected:Npn \seq_set_filter:NNn
+ { \@@_set_filter:NNNn \__kernel_tl_set:Nx }
+\cs_new_protected:Npn \seq_gset_filter:NNn
+ { \@@_set_filter:NNNn \__kernel_tl_gset:Nx }
+\cs_new_protected:Npn \@@_set_filter:NNNn #1#2#3#4
+ {
+ \@@_push_item_def:n { \bool_if:nT {#4} { \@@_wrap_item:n {##1} } }
+ #1 #2 { #3 }
+ \@@_pop_item_def:
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
% \begin{macro}{\seq_concat:NNN, \seq_concat:ccc}
% \UnitTested
% \begin{macro}{\seq_gconcat:NNN, \seq_gconcat:ccc}
@@ -1422,7 +1462,7 @@
% \begin{macrocode}
\cs_new_protected:Npn \seq_put_left:Nn #1#2
{
- \__kernel_tl_set:Ne #1
+ \__kernel_tl_set:Nx #1
{
\exp_not:n { \s_@@ \@@_item:n {#2} }
\exp_not:f { \exp_after:wN \@@_put_left_aux:w #1 }
@@ -1430,7 +1470,7 @@
}
\cs_new_protected:Npn \seq_gput_left:Nn #1#2
{
- \__kernel_tl_gset:Ne #1
+ \__kernel_tl_gset:Nx #1
{
\exp_not:n { \s_@@ \@@_item:n {#2} }
\exp_not:f { \exp_after:wN \@@_put_left_aux:w #1 }
@@ -1553,9 +1593,9 @@
% \texttt{e}-type expansion (|#1 #2 {#2}|) ensures that nothing is lost.
% \begin{macrocode}
\cs_new_protected:Npn \seq_remove_all:Nn
- { \@@_remove_all_aux:NNn \__kernel_tl_set:Ne }
+ { \@@_remove_all_aux:NNn \__kernel_tl_set:Nx }
\cs_new_protected:Npn \seq_gremove_all:Nn
- { \@@_remove_all_aux:NNn \__kernel_tl_gset:Ne }
+ { \@@_remove_all_aux:NNn \__kernel_tl_gset:Nx }
\cs_new_protected:Npn \@@_remove_all_aux:NNn #1#2#3
{
\@@_push_item_def:n
@@ -1599,15 +1639,15 @@
% last argument \cs{use_ii:nn} vs \cs{use_i:nn}.
% \begin{macrocode}
\cs_new_protected:Npn \seq_set_item:Nnn #1#2#3
- { \@@_set_item:NnnNN #1 {#2} {#3} \__kernel_tl_set:Ne \use_i:nn }
+ { \@@_set_item:NnnNN #1 {#2} {#3} \__kernel_tl_set:Nx \use_i:nn }
\cs_new_protected:Npn \seq_gset_item:Nnn #1#2#3
- { \@@_set_item:NnnNN #1 {#2} {#3} \__kernel_tl_gset:Ne \use_i:nn }
+ { \@@_set_item:NnnNN #1 {#2} {#3} \__kernel_tl_gset:Nx \use_i:nn }
\cs_generate_variant:Nn \seq_set_item:Nnn { c }
\cs_generate_variant:Nn \seq_gset_item:Nnn { c }
\prg_new_protected_conditional:Npnn \seq_set_item:Nnn #1#2#3 { TF , T , F }
- { \@@_set_item:NnnNN #1 {#2} {#3} \__kernel_tl_set:Ne \use_ii:nn }
+ { \@@_set_item:NnnNN #1 {#2} {#3} \__kernel_tl_set:Nx \use_ii:nn }
\prg_new_protected_conditional:Npnn \seq_gset_item:Nnn #1#2#3 { TF , T , F }
- { \@@_set_item:NnnNN #1 {#2} {#3} \__kernel_tl_gset:Ne \use_ii:nn }
+ { \@@_set_item:NnnNN #1 {#2} {#3} \__kernel_tl_gset:Nx \use_ii:nn }
\prg_generate_conditional_variant:Nnn \seq_set_item:Nnn { c } { TF , T , F }
\prg_generate_conditional_variant:Nnn \seq_gset_item:Nnn { c } { TF , T , F }
% \end{macrocode}
@@ -1729,9 +1769,9 @@
% from the stack, and the memory consumption becomes linear.
% \begin{macrocode}
\cs_new_protected:Npn \seq_reverse:N
- { \@@_reverse:NN \__kernel_tl_set:Ne }
+ { \@@_reverse:NN \__kernel_tl_set:Nx }
\cs_new_protected:Npn \seq_greverse:N
- { \@@_reverse:NN \__kernel_tl_gset:Ne }
+ { \@@_reverse:NN \__kernel_tl_gset:Nx }
\cs_new_protected:Npn \@@_reverse:NN #1 #2
{
\cs_set_eq:NN \@@_tmp:w \@@_item:n
@@ -1912,7 +1952,7 @@
% \begin{macrocode}
\cs_new_protected:Npn \seq_get_left:NN #1#2
{
- \__kernel_tl_set:Ne #2
+ \__kernel_tl_set:Nx #2
{
\exp_after:wN \@@_get_left:wnw
#1 \@@_item:n { \q_no_value } \s_@@_stop
@@ -1964,7 +2004,7 @@
% \begin{macrocode}
\cs_new_protected:Npn \seq_get_right:NN #1#2
{
- \__kernel_tl_set:Ne #2
+ \__kernel_tl_set:Nx #2
{
\exp_after:wN \use_i_ii:nnn
\exp_after:wN \@@_get_right_loop:nw
@@ -2005,9 +2045,9 @@
% finally stops the loop.
% \begin{macrocode}
\cs_new_protected:Npn \seq_pop_right:NN
- { \@@_pop:NNNN \@@_pop_right:NNN \__kernel_tl_set:Ne }
+ { \@@_pop:NNNN \@@_pop_right:NNN \__kernel_tl_set:Nx }
\cs_new_protected:Npn \seq_gpop_right:NN
- { \@@_pop:NNNN \@@_pop_right:NNN \__kernel_tl_gset:Ne }
+ { \@@_pop:NNNN \@@_pop_right:NNN \__kernel_tl_gset:Nx }
\cs_new_protected:Npn \@@_pop_right:NNN #1#2#3
{
\cs_set_eq:NN \@@_tmp:w \@@_item:n
@@ -2019,7 +2059,7 @@
#2
{
\if_false: { \fi: }
- \__kernel_tl_set:Ne #3
+ \__kernel_tl_set:Nx #3
}
{ } \use_none:nn
\cs_set_eq:NN \@@_item:n \@@_tmp:w
@@ -2067,10 +2107,10 @@
{ \@@_pop_TF:NNNN \@@_pop_left:NNN \tl_gset:Nn #1 #2 }
\prg_new_protected_conditional:Npnn \seq_pop_right:NN #1#2
{ T , F , TF }
- { \@@_pop_TF:NNNN \@@_pop_right:NNN \__kernel_tl_set:Ne #1 #2 }
+ { \@@_pop_TF:NNNN \@@_pop_right:NNN \__kernel_tl_set:Nx #1 #2 }
\prg_new_protected_conditional:Npnn \seq_gpop_right:NN #1#2
{ T , F , TF }
- { \@@_pop_TF:NNNN \@@_pop_right:NNN \__kernel_tl_gset:Ne #1 #2 }
+ { \@@_pop_TF:NNNN \@@_pop_right:NNN \__kernel_tl_gset:Nx #1 #2 }
\prg_generate_conditional_variant:Nnn \seq_pop_left:NN { c }
{ T , F , TF }
\prg_generate_conditional_variant:Nnn \seq_gpop_left:NN { c }
@@ -2396,9 +2436,9 @@
% semantics.
% \begin{macrocode}
\cs_new_protected:Npn \seq_set_map_e:NNn
- { \@@_set_map_e:NNNn \__kernel_tl_set:Ne }
+ { \@@_set_map_e:NNNn \__kernel_tl_set:Nx }
\cs_new_protected:Npn \seq_gset_map_e:NNn
- { \@@_set_map_e:NNNn \__kernel_tl_gset:Ne }
+ { \@@_set_map_e:NNNn \__kernel_tl_gset:Nx }
\cs_new_protected:Npn \@@_set_map_e:NNNn #1#2#3#4
{
\@@_push_item_def:n { \exp_not:N \@@_item:n {#4} }
@@ -2415,9 +2455,9 @@
% <inline function>.
% \begin{macrocode}
\cs_new_protected:Npn \seq_set_map:NNn
- { \@@_set_map:NNNn \__kernel_tl_set:Ne }
+ { \@@_set_map:NNNn \__kernel_tl_set:Nx }
\cs_new_protected:Npn \seq_gset_map:NNn
- { \@@_set_map:NNNn \__kernel_tl_gset:Ne }
+ { \@@_set_map:NNNn \__kernel_tl_gset:Nx }
\cs_new_protected:Npn \@@_set_map:NNNn #1#2#3#4
{
\@@_push_item_def:n { \exp_not:n { \@@_item:n {#4} } }
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
@@ -376,7 +376,7 @@
{
\group_begin:
\@@_main:NNNn \tl_map_inline:Nn \tl_map_break:n #2 {#3}
- \__kernel_tl_gset:Ne \g_@@_internal_tl
+ \__kernel_tl_gset:Nx \g_@@_internal_tl
{ \@@_tl_toks:w \l_@@_min_int ; }
\group_end:
#1 #2 \g_@@_internal_tl
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
@@ -343,13 +343,13 @@
% \end{macrocode}
% \end{variable}
%
-% \begin{variable}{@@_byte, @@_error}
+% \begin{variable}{\l_@@_byte_flag, \l_@@_error_flag}
% Conversions from one \meta{encoding}/\meta{escaping} pair to another
% are done within \texttt{e}-expanding assignments. Errors are
% signalled by raising the relevant flag.
% \begin{macrocode}
-\flag_new:n { @@_byte }
-\flag_new:n { @@_error }
+\flag_new:N \l_@@_byte_flag
+\flag_new:N \l_@@_error_flag
% \end{macrocode}
% \end{variable}
%
@@ -468,7 +468,7 @@
% an empty result for the input $-1$.
% \begin{macrocode}
\group_begin:
- \__kernel_tl_set:Ne \l_@@_internal_tl { \tl_to_str:n { 0123456789ABCDEF } }
+ \__kernel_tl_set:Nx \l_@@_internal_tl { \tl_to_str:n { 0123456789ABCDEF } }
\tl_map_inline:Nn \l_@@_internal_tl
{
\tl_map_inline:Nn \l_@@_internal_tl
@@ -554,7 +554,7 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_convert_gmap:N #1
{
- \__kernel_tl_gset:Ne \g_@@_result_tl
+ \__kernel_tl_gset:Nx \g_@@_result_tl
{
\exp_after:wN \@@_convert_gmap_loop:NN
\exp_after:wN #1
@@ -579,7 +579,7 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_convert_gmap_internal:N #1
{
- \__kernel_tl_gset:Ne \g_@@_result_tl
+ \__kernel_tl_gset:Nx \g_@@_result_tl
{
\exp_after:wN \@@_convert_gmap_internal_loop:Nww
\exp_after:wN #1
@@ -599,8 +599,8 @@
%
% \subsubsection{Error-reporting during conversion}
%
-% \begin{macro}{\@@_if_flag_error:nne}
-% \begin{macro}{\@@_if_flag_no_error:nne}
+% \begin{macro}{\@@_if_flag_error:Nne}
+% \begin{macro}{\@@_if_flag_no_error:Nne}
% When converting using the function \cs{str_set_convert:Nnnn}, errors
% should be reported to the user after each step in the
% conversion. Errors are signalled by raising some flag (typically
@@ -608,22 +608,22 @@
% give the user an error, otherwise remove the arguments. On the other
% hand, in the conditional functions \cs{str_set_convert:NnnnTF},
% errors should be suppressed. This is done by changing
-% \cs{@@_if_flag_error:nne} into \cs{@@_if_flag_no_error:nne}
+% \cs{@@_if_flag_error:Nne} into \cs{@@_if_flag_no_error:Nne}
% locally.
% \begin{macrocode}
-\cs_new_protected:Npn \@@_if_flag_error:nne #1
+\cs_new_protected:Npn \@@_if_flag_error:Nne #1
{
- \flag_if_raised:nTF {#1}
+ \flag_if_raised:NTF #1
{ \msg_error:nne { str } }
{ \use_none:nn }
}
-\cs_new_protected:Npn \@@_if_flag_no_error:nne #1#2#3
- { \flag_if_raised:nT {#1} { \bool_gset_true:N \g_@@_error_bool } }
+\cs_new_protected:Npn \@@_if_flag_no_error:Nne #1#2#3
+ { \flag_if_raised:NT #1 { \bool_gset_true:N \g_@@_error_bool } }
% \end{macrocode}
% \end{macro}
% \end{macro}
%
-% \begin{macro}[rEXP]{\@@_if_flag_times:nT}
+% \begin{macro}[rEXP]{\@@_if_flag_times:NT}
% At the end of each conversion step, we raise all relevant errors as
% one error message, built on the fly. The height of each flag
% indicates how many times a given error was encountered. This
@@ -630,8 +630,8 @@
% function prints |#2| followed by the number of occurrences of an
% error if it occurred, nothing otherwise.
% \begin{macrocode}
-\cs_new:Npn \@@_if_flag_times:nT #1#2
- { \flag_if_raised:nT {#1} { #2~(x \flag_height:n {#1} ) } }
+\cs_new:Npn \@@_if_flag_times:NT #1#2
+ { \flag_if_raised:NT #1 { #2~(x \flag_height:N #1 ) } }
% \end{macrocode}
% \end{macro}
%
@@ -675,7 +675,7 @@
% unescape and decode; encode and escape; exit the group and store the
% result in the user's variable. The various conversion functions all
% act on \cs{g_@@_result_tl}. Errors are silenced for the conditional
-% functions by redefining \cs{@@_if_flag_error:nne} locally.
+% functions by redefining \cs{@@_if_flag_error:Nne} locally.
% \begin{macrocode}
\cs_new_protected:Npn \str_set_convert:Nnnn
{ \@@_convert:nNNnnn { } \tl_set_eq:NN }
@@ -686,7 +686,7 @@
{
\bool_gset_false:N \g_@@_error_bool
\@@_convert:nNNnnn
- { \cs_set_eq:NN \@@_if_flag_error:nne \@@_if_flag_no_error:nne }
+ { \cs_set_eq:NN \@@_if_flag_error:Nne \@@_if_flag_no_error:Nne }
\tl_set_eq:NN #1 {#2} {#3} {#4}
\bool_if:NTF \g_@@_error_bool \prg_return_false: \prg_return_true:
}
@@ -695,7 +695,7 @@
{
\bool_gset_false:N \g_@@_error_bool
\@@_convert:nNNnnn
- { \cs_set_eq:NN \@@_if_flag_error:nne \@@_if_flag_no_error:nne }
+ { \cs_set_eq:NN \@@_if_flag_error:Nne \@@_if_flag_no_error:Nne }
\tl_gset_eq:NN #1 {#2} {#3} {#4}
\bool_if:NTF \g_@@_error_bool \prg_return_false: \prg_return_true:
}
@@ -703,7 +703,7 @@
{
\group_begin:
#1
- \__kernel_tl_gset:Ne \g_@@_result_tl { \__kernel_str_to_other_fast:n {#4} }
+ \__kernel_tl_gset:Nx \g_@@_result_tl { \__kernel_str_to_other_fast:n {#4} }
\exp_after:wN \@@_convert:wwwnn
\tl_to_str:n {#5} /// \s_@@_stop
{ decode } { unescape }
@@ -714,7 +714,7 @@
{ encode } { escape }
\use_ii_i:nn
\@@_convert_encode_:
- \__kernel_tl_gset:Ne \g_@@_result_tl
+ \__kernel_tl_gset:Nx \g_@@_result_tl
{ \tl_to_str:V \g_@@_result_tl }
\group_end:
#2 #3 \g_@@_result_tl
@@ -893,7 +893,7 @@
% \begin{macro}[rEXP]{\@@_filter_bytes_aux:N}
% In the case of 8-bit engines, every character is a byte. For
% Unicode-aware engines, test the character code; non-bytes cause us
-% to raise the flag \texttt{@@_byte}. Spaces have already been given
+% to raise the flag \cs{l_@@_byte_flag}. Spaces have already been given
% the correct category code when this function is called.
% \begin{macrocode}
\bool_lazy_any:nTF
@@ -914,7 +914,7 @@
\if_int_compare:w `#1 < 256 \exp_stop_f:
#1
\else:
- \flag_raise:n { @@_byte }
+ \flag_raise:N \l_@@_byte_flag
\fi:
\@@_filter_bytes_aux:N
}
@@ -937,10 +937,10 @@
{
\cs_new_protected:Npn \@@_convert_unescape_:
{
- \flag_clear:n { @@_byte }
- \__kernel_tl_gset:Ne \g_@@_result_tl
+ \flag_clear:N \l_@@_byte_flag
+ \__kernel_tl_gset:Nx \g_@@_result_tl
{ \exp_args:No \@@_filter_bytes:n \g_@@_result_tl }
- \@@_if_flag_error:nne { @@_byte } { non-byte } { bytes }
+ \@@_if_flag_error:Nne \l_@@_byte_flag { non-byte } { bytes }
}
}
{ \cs_new_protected:Npn \@@_convert_unescape_: { } }
@@ -997,15 +997,15 @@
{
\cs_new_protected:Npn \@@_convert_encode_:
{
- \flag_clear:n { @@_error }
+ \flag_clear:N \l_@@_error_flag
\@@_convert_gmap_internal:N \@@_encode_native_char:n
- \@@_if_flag_error:nne { @@_error }
+ \@@_if_flag_error:Nne \l_@@_error_flag
{ native-overflow } { }
}
\cs_new:Npn \@@_encode_native_char:n #1
{
\if_int_compare:w #1 > \c_@@_max_byte_int
- \flag_raise:n { @@_error }
+ \flag_raise:N \l_@@_error_flag
?
\else:
\char_generate:nn {#1} {12}
@@ -1034,7 +1034,7 @@
\cs_new_protected:Npn \@@_convert_decode_clist:
{
\clist_gset:No \g_@@_result_tl \g_@@_result_tl
- \__kernel_tl_gset:Ne \g_@@_result_tl
+ \__kernel_tl_gset:Nx \g_@@_result_tl
{
\exp_args:No \clist_map_function:nN
\g_@@_result_tl \@@_decode_clist_char:n
@@ -1057,7 +1057,7 @@
\cs_new_protected:Npn \@@_convert_encode_clist:
{
\@@_convert_gmap_internal:N \@@_encode_clist_char:n
- \__kernel_tl_gset:Ne \g_@@_result_tl { \tl_tail:N \g_@@_result_tl }
+ \__kernel_tl_gset:Nx \g_@@_result_tl { \tl_tail:N \g_@@_result_tl }
}
\cs_new:Npn \@@_encode_clist_char:n #1 { , #1 }
% \end{macrocode}
@@ -1186,9 +1186,9 @@
\exp_not:N \@@_decode_eight_bit_aux:Nn
\exp_not:c { g_@@_decode_#1_intarray }
}
- \flag_clear:n { @@_error }
+ \flag_clear:N \l_@@_error_flag
\@@_convert_gmap:N \@@_tmp:w
- \@@_if_flag_error:nne { @@_error } { decode-8-bit } {#1}
+ \@@_if_flag_error:Nne \l_@@_error_flag { decode-8-bit } {#1}
}
\cs_new:Npn \@@_decode_eight_bit_aux:Nn #1#2
{
@@ -1200,7 +1200,7 @@
\cs_new:Npn \@@_decode_eight_bit_aux:n #1
{
\if_int_compare:w #1 < \c_zero_int
- \flag_raise:n { @@_error }
+ \flag_raise:N \l_@@_error_flag
\int_value:w \c_@@_replacement_char_int
\else:
#1
@@ -1230,9 +1230,9 @@
\exp_not:c { g_@@_encode_#1_intarray }
\exp_not:c { g_@@_decode_#1_intarray }
}
- \flag_clear:n { @@_error }
+ \flag_clear:N \l_@@_error_flag
\@@_convert_gmap_internal:N \@@_tmp:w
- \@@_if_flag_error:nne { @@_error } { encode-8-bit } {#1}
+ \@@_if_flag_error:Nne \l_@@_error_flag { encode-8-bit } {#1}
}
\cs_new:Npn \@@_encode_eight_bit_aux:NNn #1#2#3
{
@@ -1248,7 +1248,7 @@
{
\int_compare:nNnTF { \intarray_item:Nn #3 { 1 + #1 } } = {#2}
{ \@@_output_byte:n {#1} }
- { \flag_raise:n { @@_error } }
+ { \flag_raise:N \l_@@_error_flag }
}
% \end{macrocode}
% \end{macro}
@@ -1349,9 +1349,9 @@
\cs_new_protected:Npn \@@_convert_unescape_hex:
{
\group_begin:
- \flag_clear:n { @@_error }
+ \flag_clear:N \l_@@_error_flag
\int_set:Nn \tex_escapechar:D { 92 }
- \__kernel_tl_gset:Ne \g_@@_result_tl
+ \__kernel_tl_gset:Nx \g_@@_result_tl
{
\@@_output_byte:w "
\exp_last_unbraced:Nf \@@_unescape_hex_auxi:N
@@ -1360,7 +1360,7 @@
\prg_break_point:
\@@_output_end:
}
- \@@_if_flag_error:nne { @@_error } { unescape-hex } { }
+ \@@_if_flag_error:Nne \l_@@_error_flag { unescape-hex } { }
\group_end:
}
\cs_new:Npn \@@_unescape_hex_auxi:N #1
@@ -1369,7 +1369,7 @@
\@@_hexadecimal_use:NTF #1
{ \@@_unescape_hex_auxii:N }
{
- \flag_raise:n { @@_error }
+ \flag_raise:N \l_@@_error_flag
\@@_unescape_hex_auxi:N
}
}
@@ -1382,7 +1382,7 @@
\@@_output_byte:w " \@@_unescape_hex_auxi:N
}
{
- \flag_raise:n { @@_error }
+ \flag_raise:N \l_@@_error_flag
\@@_unescape_hex_auxii:N
}
}
@@ -1427,17 +1427,17 @@
\cs_new_protected:cpn { @@_convert_unescape_#2: }
{
\group_begin:
- \flag_clear:n { @@_byte }
- \flag_clear:n { @@_error }
+ \flag_clear:N \l_@@_byte_flag
+ \flag_clear:N \l_@@_error_flag
\int_set:Nn \tex_escapechar:D { 92 }
- \__kernel_tl_gset:Ne \g_@@_result_tl
+ \__kernel_tl_gset:Nx \g_@@_result_tl
{
\exp_after:wN #3 \g_@@_result_tl
#1 ? { ? \prg_break: }
\prg_break_point:
}
- \@@_if_flag_error:nne { @@_byte } { non-byte } { #2 }
- \@@_if_flag_error:nne { @@_error } { unescape-#2 } { }
+ \@@_if_flag_error:Nne \l_@@_byte_flag { non-byte } { #2 }
+ \@@_if_flag_error:Nne \l_@@_error_flag { unescape-#2 } { }
\group_end:
}
\cs_new:Npn #3 ##1#1##2##3
@@ -1450,12 +1450,12 @@
\@@_hexadecimal_use:NTF ##3
{ }
{
- \flag_raise:n { @@_error }
+ \flag_raise:N \l_@@_error_flag
* 0 + `#1 \use_i:nn
}
}
{
- \flag_raise:n { @@_error }
+ \flag_raise:N \l_@@_error_flag
0 + `#1 \use_i:nn
}
\@@_output_end:
@@ -1513,23 +1513,23 @@
\cs_new_protected:Npn \@@_convert_unescape_string:
{
\group_begin:
- \flag_clear:n { @@_byte }
- \flag_clear:n { @@_error }
+ \flag_clear:N \l_@@_byte_flag
+ \flag_clear:N \l_@@_error_flag
\int_set:Nn \tex_escapechar:D { 92 }
- \__kernel_tl_gset:Ne \g_@@_result_tl
+ \__kernel_tl_gset:Nx \g_@@_result_tl
{
\exp_after:wN \@@_unescape_string_newlines:wN
\g_@@_result_tl \prg_break: ^^M ?
\prg_break_point:
}
- \__kernel_tl_gset:Ne \g_@@_result_tl
+ \__kernel_tl_gset:Nx \g_@@_result_tl
{
\exp_after:wN \@@_unescape_string_loop:wNNN
\g_@@_result_tl #1 ?? { ? \prg_break: }
\prg_break_point:
}
- \@@_if_flag_error:nne { @@_byte } { non-byte } { string }
- \@@_if_flag_error:nne { @@_error } { unescape-string } { }
+ \@@_if_flag_error:Nne \l_@@_byte_flag { non-byte } { string }
+ \@@_if_flag_error:Nne \l_@@_error_flag { unescape-string } { }
\group_end:
}
}
@@ -1569,7 +1569,7 @@
{ ^^J } { 0 - 1 }
}
{
- \flag_raise:n { @@_error }
+ \flag_raise:N \l_@@_error_flag
0 - 1 \use_i:nn
}
}
@@ -1825,8 +1825,8 @@
% }
% When decoding a string that is purportedly in the \textsc{utf-8}
% encoding, four different errors can occur, signalled by a specific
-% flag for each (we define those flags using \cs{flag_clear_new:n}
-% rather than \cs{flag_new:n}, because they are shared with other
+% flag for each (we define those flags using \cs{flag_clear_new:N}
+% rather than \cs{flag_new:N}, because they are shared with other
% encoding definition files).
% \begin{itemize}
% \item \enquote{Missing continuation byte}: a leading byte is not
@@ -1846,19 +1846,19 @@
% first remind the user what a correct \textsc{utf-8} string should
% look like, then add error-specific information.
% \begin{macrocode}
-\flag_clear_new:n { @@_missing }
-\flag_clear_new:n { @@_extra }
-\flag_clear_new:n { @@_overlong }
-\flag_clear_new:n { @@_overflow }
+\flag_clear_new:N \l_@@_missing_flag
+\flag_clear_new:N \l_@@_extra_flag
+\flag_clear_new:N \l_@@_overlong_flag
+\flag_clear_new:N \l_@@_overflow_flag
\msg_new:nnnn { str } { utf8-decode }
{
Invalid~UTF-8~string:
\exp_last_unbraced:Nf \use_none:n
{
- \@@_if_flag_times:nT { @@_missing } { ,~missing~continuation~byte }
- \@@_if_flag_times:nT { @@_extra } { ,~extra~continuation~byte }
- \@@_if_flag_times:nT { @@_overlong } { ,~overlong~form }
- \@@_if_flag_times:nT { @@_overflow } { ,~code~point~too~large }
+ \@@_if_flag_times:NT \l_@@_missing_flag { ,~missing~continuation~byte }
+ \@@_if_flag_times:NT \l_@@_extra_flag { ,~extra~continuation~byte }
+ \@@_if_flag_times:NT \l_@@_overlong_flag { ,~overlong~form }
+ \@@_if_flag_times:NT \l_@@_overflow_flag { ,~code~point~too~large }
}
.
}
@@ -1873,18 +1873,18 @@
Code~point~ <~1114112:~11110xxx~10xxxxxx~10xxxxxx~10xxxxxx \\
}
Bytes~of~the~form~10xxxxxx~are~called~continuation~bytes.
- \flag_if_raised:nT { @@_missing }
+ \flag_if_raised:NT \l_@@_missing_flag
{
\\\\
A~leading~byte~(in~the~range~[192,255])~was~not~followed~by~
the~appropriate~number~of~continuation~bytes.
}
- \flag_if_raised:nT { @@_extra }
+ \flag_if_raised:NT \l_@@_extra_flag
{
\\\\
LaTeX~came~across~a~continuation~byte~when~it~was~not~expected.
}
- \flag_if_raised:nT { @@_overlong }
+ \flag_if_raised:NT \l_@@_overlong_flag
{
\\\\
Every~Unicode~code~point~must~be~expressed~in~the~shortest~
@@ -1891,7 +1891,7 @@
possible~form.~For~instance,~'0xC0'~'0x83'~is~not~a~valid~
representation~for~the~code~point~3.
}
- \flag_if_raised:nT { @@_overflow }
+ \flag_if_raised:NT \l_@@_overflow_flag
{
\\\\
Unicode~limits~code~points~to~the~range~[0,1114111].
@@ -1970,18 +1970,18 @@
% \begin{macrocode}
\cs_new_protected:cpn { @@_convert_decode_utf8: }
{
- \flag_clear:n { @@_error }
- \flag_clear:n { @@_missing }
- \flag_clear:n { @@_extra }
- \flag_clear:n { @@_overlong }
- \flag_clear:n { @@_overflow }
- \__kernel_tl_gset:Ne \g_@@_result_tl
+ \flag_clear:N \l_@@_error_flag
+ \flag_clear:N \l_@@_missing_flag
+ \flag_clear:N \l_@@_extra_flag
+ \flag_clear:N \l_@@_overlong_flag
+ \flag_clear:N \l_@@_overflow_flag
+ \__kernel_tl_gset:Nx \g_@@_result_tl
{
\exp_after:wN \@@_decode_utf_viii_start:N \g_@@_result_tl
{ \prg_break: \@@_decode_utf_viii_end: }
\prg_break_point:
}
- \@@_if_flag_error:nne { @@_error } { utf8-decode } { }
+ \@@_if_flag_error:Nne \l_@@_error_flag { utf8-decode } { }
}
\cs_new:Npn \@@_decode_utf_viii_start:N #1
{
@@ -1991,8 +1991,8 @@
\if_int_compare:w `#1 < "80 \exp_stop_f:
\int_value:w `#1
\else:
- \flag_raise:n { @@_extra }
- \flag_raise:n { @@_error }
+ \flag_raise:N \l_@@_extra_flag
+ \flag_raise:N \l_@@_error_flag
\int_use:N \c_@@_replacement_char_int
\fi:
\else:
@@ -2015,8 +2015,8 @@
\int_value:w \int_eval:n { #1 * "40 + `#3 - "80 } \exp_after:wN
\else:
\s_@@
- \flag_raise:n { @@_missing }
- \flag_raise:n { @@_error }
+ \flag_raise:N \l_@@_missing_flag
+ \flag_raise:N \l_@@_error_flag
\int_use:N \c_@@_replacement_char_int
\fi:
\s_@@
@@ -2029,8 +2029,8 @@
\if_int_compare:w #1 < #4 \exp_stop_f:
\s_@@
\if_int_compare:w #1 < #3 \exp_stop_f:
- \flag_raise:n { @@_overlong }
- \flag_raise:n { @@_error }
+ \flag_raise:N \l_@@_overlong_flag
+ \flag_raise:N \l_@@_error_flag
\int_use:N \c_@@_replacement_char_int
\else:
#1
@@ -2049,15 +2049,15 @@
\cs_new:Npn \@@_decode_utf_viii_overflow:w #1 \fi: #2 \fi:
{
\fi: \fi:
- \flag_raise:n { @@_overflow }
- \flag_raise:n { @@_error }
+ \flag_raise:N \l_@@_overflow_flag
+ \flag_raise:N \l_@@_error_flag
\int_use:N \c_@@_replacement_char_int
}
\cs_new:Npn \@@_decode_utf_viii_end:
{
\s_@@
- \flag_raise:n { @@_missing }
- \flag_raise:n { @@_error }
+ \flag_raise:N \l_@@_missing_flag
+ \flag_raise:N \l_@@_error_flag
\int_use:N \c_@@_replacement_char_int \s_@@
\prg_break:
}
@@ -2119,10 +2119,10 @@
{ \@@_encode_utf_xvi_aux:N \@@_output_byte_pair_le:n }
\cs_new_protected:Npn \@@_encode_utf_xvi_aux:N #1
{
- \flag_clear:n { @@_error }
+ \flag_clear:N \l_@@_error_flag
\cs_set_eq:NN \@@_tmp:w #1
\@@_convert_gmap_internal:N \@@_encode_utf_xvi_char:n
- \@@_if_flag_error:nne { @@_error } { utf16-encode } { }
+ \@@_if_flag_error:Nne \l_@@_error_flag { utf16-encode } { }
}
\cs_new:Npn \@@_encode_utf_xvi_char:n #1
{
@@ -2131,7 +2131,7 @@
\else:
\if_int_compare:w #1 < "10000 \exp_stop_f:
\if_int_compare:w #1 < "E000 \exp_stop_f:
- \flag_raise:n { @@_error }
+ \flag_raise:N \l_@@_error_flag
\@@_tmp:w { \c_@@_replacement_char_int }
\else:
\@@_tmp:w {#1}
@@ -2162,9 +2162,9 @@
% an unexpected trail surrogate, and a string containing an odd number
% of bytes.
% \begin{macrocode}
- \flag_clear_new:n { @@_missing }
- \flag_clear_new:n { @@_extra }
- \flag_clear_new:n { @@_end }
+ \flag_clear_new:N \l_@@_missing_flag
+ \flag_clear_new:N \l_@@_extra_flag
+ \flag_clear_new:N \l_@@_end_flag
\msg_new:nnnn { str } { utf16-encode }
{ Unicode~string~cannot~be~expressed~in~UTF-16:~surrogate. }
{
@@ -2177,9 +2177,9 @@
Invalid~UTF-16~string:
\exp_last_unbraced:Nf \use_none:n
{
- \@@_if_flag_times:nT { @@_missing } { ,~missing~trail~surrogate }
- \@@_if_flag_times:nT { @@_extra } { ,~extra~trail~surrogate }
- \@@_if_flag_times:nT { @@_end } { ,~odd~number~of~bytes }
+ \@@_if_flag_times:NT \l_@@_missing_flag { ,~missing~trail~surrogate }
+ \@@_if_flag_times:NT \l_@@_extra_flag { ,~extra~trail~surrogate }
+ \@@_if_flag_times:NT \l_@@_end_flag { ,~odd~number~of~bytes }
}
.
}
@@ -2196,17 +2196,17 @@
}
Lead~surrogates~are~pairs~of~bytes~in~the~range~[0xD800,~0xDBFF],~
and~trail~surrogates~are~in~the~range~[0xDC00,~0xDFFF].
- \flag_if_raised:nT { @@_missing }
+ \flag_if_raised:NT \l_@@_missing_flag
{
\\\\
A~lead~surrogate~was~not~followed~by~a~trail~surrogate.
}
- \flag_if_raised:nT { @@_extra }
+ \flag_if_raised:NT \l_@@_extra_flag
{
\\\\
LaTeX~came~across~a~trail~surrogate~when~it~was~not~expected.
}
- \flag_if_raised:nT { @@_end }
+ \flag_if_raised:NT \l_@@_end_flag
{
\\\\
The~string~contained~an~odd~number~of~bytes.~This~is~invalid:~
@@ -2260,18 +2260,18 @@
}
\cs_new_protected:Npn \@@_decode_utf_xvi:Nw #1#2 \s_@@_stop
{
- \flag_clear:n { @@_error }
- \flag_clear:n { @@_missing }
- \flag_clear:n { @@_extra }
- \flag_clear:n { @@_end }
+ \flag_clear:N \l_@@_error_flag
+ \flag_clear:N \l_@@_missing_flag
+ \flag_clear:N \l_@@_extra_flag
+ \flag_clear:N \l_@@_end_flag
\cs_set:Npn \@@_tmp:w ##1 ##2 { ` ## #1 }
- \__kernel_tl_gset:Ne \g_@@_result_tl
+ \__kernel_tl_gset:Nx \g_@@_result_tl
{
\exp_after:wN \@@_decode_utf_xvi_pair:NN
#2 \q_@@_nil \q_@@_nil
\prg_break_point:
}
- \@@_if_flag_error:nne { @@_error } { utf16-decode } { }
+ \@@_if_flag_error:Nne \l_@@_error_flag { utf16-decode } { }
}
% \end{macrocode}
% \end{macro}
@@ -2377,8 +2377,8 @@
{ \@@_decode_utf_xvi_error:nNN { extra } #1#2 }
\cs_new:Npn \@@_decode_utf_xvi_error:nNN #1#2#3
{
- \flag_raise:n { @@_error }
- \flag_raise:n { str_#1 }
+ \flag_raise:N \l_@@_error_flag
+ \flag_raise:c { l_@@_#1_flag }
#2 #3 \s_@@
\int_use:N \c_@@_replacement_char_int \s_@@
}
@@ -2463,15 +2463,15 @@
% happens if the encoding was in fact not \textsc{utf-32}, because
% most arbitrary strings are not valid in \textsc{utf-32}.
% \begin{macrocode}
- \flag_clear_new:n { @@_overflow }
- \flag_clear_new:n { @@_end }
+ \flag_clear_new:N \l_@@_overflow_flag
+ \flag_clear_new:N \l_@@_end_flag
\msg_new:nnnn { str } { utf32-decode }
{
Invalid~UTF-32~string:
\exp_last_unbraced:Nf \use_none:n
{
- \@@_if_flag_times:nT { @@_overflow } { ,~code~point~too~large }
- \@@_if_flag_times:nT { @@_end } { ,~truncated~string }
+ \@@_if_flag_times:NT \l_@@_overflow_flag { ,~code~point~too~large }
+ \@@_if_flag_times:NT \l_@@_end_flag { ,~truncated~string }
}
.
}
@@ -2478,7 +2478,7 @@
{
In~the~UTF-32~encoding,~every~Unicode~character~
(in~the~range~[U+0000,~U+10FFFF])~is~encoded~as~4~bytes.
- \flag_if_raised:nT { @@_overflow }
+ \flag_if_raised:NT \l_@@_overflow_flag
{
\\\\
LaTeX~came~across~a~code~point~larger~than~1114111,~
@@ -2485,7 +2485,7 @@
the~maximum~code~point~defined~by~Unicode.~
Perhaps~the~string~was~not~encoded~in~the~UTF-32~encoding?
}
- \flag_if_raised:nT { @@_end }
+ \flag_if_raised:NT \l_@@_end_flag
{
\\\\
The~length~of~the~string~is~not~a~multiple~of~4.~
@@ -2549,17 +2549,17 @@
}
\cs_new_protected:Npn \@@_decode_utf_xxxii:Nw #1#2 \s_@@_stop
{
- \flag_clear:n { @@_overflow }
- \flag_clear:n { @@_end }
- \flag_clear:n { @@_error }
+ \flag_clear:N \l_@@_overflow_flag
+ \flag_clear:N \l_@@_end_flag
+ \flag_clear:N \l_@@_error_flag
\cs_set:Npn \@@_tmp:w ##1 ##2 { ` ## #1 }
- \__kernel_tl_gset:Ne \g_@@_result_tl
+ \__kernel_tl_gset:Nx \g_@@_result_tl
{
\exp_after:wN \@@_decode_utf_xxxii_loop:NNNN
#2 \s_@@_stop \s_@@_stop \s_@@_stop \s_@@_stop
\prg_break_point:
}
- \@@_if_flag_error:nne { @@_error } { utf32-decode } { }
+ \@@_if_flag_error:Nne \l_@@_error_flag { utf32-decode } { }
}
\cs_new:Npn \@@_decode_utf_xxxii_loop:NNNN #1#2#3#4
{
@@ -2568,13 +2568,13 @@
\fi:
#1#2#3#4 \s_@@
\if_int_compare:w \@@_tmp:w #1#4 > \c_zero_int
- \flag_raise:n { @@_overflow }
- \flag_raise:n { @@_error }
+ \flag_raise:N \l_@@_overflow_flag
+ \flag_raise:N \l_@@_error_flag
\int_use:N \c_@@_replacement_char_int
\else:
\if_int_compare:w \@@_tmp:w #2#3 > 16 \exp_stop_f:
- \flag_raise:n { @@_overflow }
- \flag_raise:n { @@_error }
+ \flag_raise:N \l_@@_overflow_flag
+ \flag_raise:N \l_@@_error_flag
\int_use:N \c_@@_replacement_char_int
\else:
\int_eval:n
@@ -2588,8 +2588,8 @@
{
\tl_if_empty:nF {#1}
{
- \flag_raise:n { @@_end }
- \flag_raise:n { @@_error }
+ \flag_raise:N \l_@@_end_flag
+ \flag_raise:N \l_@@_error_flag
#1 \s_@@
\int_use:N \c_@@_replacement_char_int \s_@@
}
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3str.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3str.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3str.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
@@ -990,7 +990,7 @@
% Similar to corresponding \pkg{l3tl} base functions, except that
% \cs{__kernel_exp_not:w} is replaced with \cs{__kernel_tl_to_str:w}.
% Just like token list, string constants use \cs{cs_gset_nopar:Npe}
-% instead of \cs{__kernel_tl_gset:Ne} so that the scope checking for
+% instead of \cs{__kernel_tl_gset:Nx} so that the scope checking for
% |c| is applied when \pkg{l3debug} is used.
% To maintain backward compatibility, in
% \cs[index=str_put_left:Nn]{str_(g)put_left:Nn} and
@@ -999,9 +999,9 @@
% to prevent further expansion.
% \begin{macrocode}
\cs_new_protected:Npn \str_set:Nn #1#2
- { \__kernel_tl_set:Ne #1 { \__kernel_tl_to_str:w {#2} } }
+ { \__kernel_tl_set:Nx #1 { \__kernel_tl_to_str:w {#2} } }
\cs_gset_protected:Npn \str_gset:Nn #1#2
- { \__kernel_tl_gset:Ne #1 { \__kernel_tl_to_str:w {#2} } }
+ { \__kernel_tl_gset:Nx #1 { \__kernel_tl_to_str:w {#2} } }
\cs_new_protected:Npn \str_const:Nn #1#2
{
\__kernel_chk_if_free_cs:N #1
@@ -1009,22 +1009,22 @@
}
\cs_new_protected:Npn \str_put_left:Nn #1#2
{
- \__kernel_tl_set:Ne #1
+ \__kernel_tl_set:Nx #1
{ \__kernel_tl_to_str:w {#2} \__kernel_exp_not:w \exp_after:wN {#1} }
}
\cs_new_protected:Npn \str_gput_left:Nn #1#2
{
- \__kernel_tl_gset:Ne #1
+ \__kernel_tl_gset:Nx #1
{ \__kernel_tl_to_str:w {#2} \__kernel_exp_not:w \exp_after:wN {#1} }
}
\cs_new_protected:Npn \str_put_right:Nn #1#2
{
- \__kernel_tl_set:Ne #1
+ \__kernel_tl_set:Nx #1
{ \__kernel_exp_not:w \exp_after:wN {#1} \__kernel_tl_to_str:w {#2} }
}
\cs_new_protected:Npn \str_gput_right:Nn #1#2
{
- \__kernel_tl_gset:Ne #1
+ \__kernel_tl_gset:Nx #1
{ \__kernel_exp_not:w \exp_after:wN {#1} \__kernel_tl_to_str:w {#2} }
}
\cs_generate_variant:Nn \str_set:Nn { NV , Ne , Nx , c , cV , ce , cx }
@@ -1061,13 +1061,13 @@
% hide in braces.
% \begin{macrocode}
\cs_new_protected:Npn \str_replace_once:Nnn
- { \@@_replace:NNNnn \prg_do_nothing: \__kernel_tl_set:Ne }
+ { \@@_replace:NNNnn \prg_do_nothing: \__kernel_tl_set:Nx }
\cs_new_protected:Npn \str_greplace_once:Nnn
- { \@@_replace:NNNnn \prg_do_nothing: \__kernel_tl_gset:Ne }
+ { \@@_replace:NNNnn \prg_do_nothing: \__kernel_tl_gset:Nx }
\cs_new_protected:Npn \str_replace_all:Nnn
- { \@@_replace:NNNnn \@@_replace_next:w \__kernel_tl_set:Ne }
+ { \@@_replace:NNNnn \@@_replace_next:w \__kernel_tl_set:Nx }
\cs_new_protected:Npn \str_greplace_all:Nnn
- { \@@_replace:NNNnn \@@_replace_next:w \__kernel_tl_gset:Ne }
+ { \@@_replace:NNNnn \@@_replace_next:w \__kernel_tl_gset:Nx }
\cs_generate_variant:Nn \str_replace_once:Nnn { c }
\cs_generate_variant:Nn \str_greplace_once:Nnn { c }
\cs_generate_variant:Nn \str_replace_all:Nnn { c }
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
@@ -1142,7 +1142,7 @@
\tl_new:N \g_@@_backend_tl
\@@_finalise:n
{
- \__kernel_tl_gset:Ne \g_@@_backend_tl
+ \__kernel_tl_gset:Nx \g_@@_backend_tl
{
\sys_if_engine_xetex:TF
{ xetex }
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3text-map.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3text-map.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3text-map.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3text-purify.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3text-purify.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3text-purify.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3text.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3text.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3text.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
@@ -806,7 +806,7 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_analysis_b:n #1
{
- \__kernel_tl_gset:Ne \g_@@_analysis_result_tl
+ \__kernel_tl_gset:Nx \g_@@_analysis_result_tl
{
\@@_analysis_b_loop:w 0; #1
\prg_break_point:
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3tl-build.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3tl-build.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3tl-build.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
@@ -59,6 +59,14 @@
% constructed token list cannot be accessed during construction other than
% by methods provided in this section.
%
+% Whilst the exact performance difference is dependent on the size of each
+% added block of tokens and the total number of blocks, in general, the
+% \cs[no-index]{tl_build_(g)put...} functions will out-perform the basic
+% \cs[no-index]{tl_(g)put...} equivalent if more than 100 non-empty addition
+% operations occur. See
+% \url{https://github.com/latex3/latex3/issues/1393#issuecomment-1880164756}
+% for a more detailed analysis.
+%
% \begin{function}[added = 2018-04-01]{\tl_build_begin:N, \tl_build_gbegin:N}
% \begin{syntax}
% \cs{tl_build_begin:N} \meta{tl~var}
@@ -285,12 +293,12 @@
% \begin{macrocode}
\cs_new_protected:Npn \tl_build_end:N #1
{
- \@@_build_get:NNN \__kernel_tl_set:Ne #1 #1
+ \@@_build_get:NNN \__kernel_tl_set:Nx #1 #1
\exp_args:Nc \@@_build_end_loop:NN { \cs_to_str:N #1 ' } \tl_clear:N
}
\cs_new_protected:Npn \tl_build_gend:N #1
{
- \@@_build_get:NNN \__kernel_tl_gset:Ne #1 #1
+ \@@_build_get:NNN \__kernel_tl_gset:Nx #1 #1
\exp_args:Nc \@@_build_end_loop:NN { \cs_to_str:N #1 ' } \tl_gclear:N
}
\cs_new_protected:Npn \@@_build_end_loop:NN #1#2
@@ -308,7 +316,7 @@
% \begin{macro}{\tl_build_get_intermediate:NN}
% \begin{macrocode}
\cs_new_protected:Npn \tl_build_get_intermediate:NN
- { \@@_build_get:NNN \__kernel_tl_set:Ne }
+ { \@@_build_get:NNN \__kernel_tl_set:Nx }
% \end{macrocode}
% \end{macro}
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
@@ -103,11 +103,11 @@
% \tl_const:cn, \tl_const:ce
% }
% \begin{syntax}
-% \cs{tl_const:Nn} \meta{tl~var} \Arg{token list}
+% \cs{tl_const:Nn} \meta{tl~var} \Arg{tokens}
% \end{syntax}
% Creates a new constant \meta{tl~var} or raises an error
% if the name is already taken. The value of the
-% \meta{tl~var} is set globally to the \meta{token list}.
+% \meta{tl~var} is set globally to the \meta{tokens}.
% \end{function}
%
% \begin{function}{\tl_clear:N, \tl_clear:c, \tl_gclear:N, \tl_gclear:c}
@@ -235,7 +235,7 @@
% \cs{tl_if_empty_p:N} \meta{tl~var}
% \cs{tl_if_empty:NTF} \meta{tl~var} \Arg{true code} \Arg{false code}
% \end{syntax}
-% Tests if the \meta{token list variable} is entirely empty
+% Tests if the \meta{tl~var} is entirely empty
% (\emph{i.e.}~contains no tokens at all).
% \end{function}
%
@@ -255,7 +255,7 @@
% \cs{tl_if_eq_p:NN} \meta{tl~var_1} \meta{tl~var_2}
% \cs{tl_if_eq:NNTF} \meta{tl~var_1} \meta{tl~var_2} \Arg{true code} \Arg{false code}
% \end{syntax}
-% Compares the content of two \meta{token list variables} and
+% Compares the content of \meta{tl~var_1} and \meta{tl~var_2} and
% is logically \texttt{true} if the two contain the same list of
% tokens (\emph{i.e.}~identical in both the list of characters they
% contain and the category codes of those characters). Thus for example
@@ -272,7 +272,7 @@
% \begin{syntax}
% \cs{tl_if_eq:NnTF} \meta{tl~var_1} \Arg{token list_2} \Arg{true code} \Arg{false code}
% \end{syntax}
-% Tests if the \meta{token list variable_1} and the \meta{token
+% Tests if the \meta{tl~var_1} and the \meta{token
% list_2} contain the same list of tokens, both in respect of
% character codes and category codes. This conditional is not
% expandable: see \cs{tl_if_eq:NNTF} for an expandable version when
@@ -540,12 +540,12 @@
% \begin{function}[added = 2012-05-13, EXP]
% {\tl_count:n, \tl_count:V, \tl_count:v, \tl_count:e, \tl_count:o}
% \begin{syntax}
-% \cs{tl_count:n} \Arg{tokens}
+% \cs{tl_count:n} \Arg{token list}
% \end{syntax}
-% Counts the number of \meta{items} in \meta{tokens} and leaves this
+% Counts the number of \meta{items} in the \meta{token list} and leaves this
% information in the input stream. Unbraced tokens count as one
% element as do each token group (|{|\ldots|}|). This process
-% ignores any unprotected spaces within \meta{tokens}. See also
+% ignores any unprotected spaces within the \meta{token list}. See also
% \cs{tl_count:N}. This function requires three expansions,
% giving an \meta{integer denotation}.
% \end{function}
@@ -564,9 +564,9 @@
%
% \begin{function}[EXP, added = 2019-02-25]{\tl_count_tokens:n}
% \begin{syntax}
-% \cs{tl_count_tokens:n} \Arg{tokens}
+% \cs{tl_count_tokens:n} \Arg{token list}
% \end{syntax}
-% Counts the number of \TeX{} tokens in the \meta{tokens} and leaves
+% Counts the number of \TeX{} tokens in the \meta{token list} and leaves
% this information in the input stream. Every token, including spaces and
% braces, contributes one to the total; thus for instance, the token count of
% |a~{bc}| is $6$.
@@ -603,7 +603,7 @@
% that \meta{item_1}\meta{item_2}\meta{item_3} \ldots \meta{item_n}
% becomes \meta{item_n}\ldots \meta{item_3}\meta{item_2}\meta{item_1}.
% This process preserves unprotected spaces within the
-% \meta{token list variable}. Braced token groups are copied without
+% \meta{tl~var}. Braced token groups are copied without
% reversing the order of tokens, but keep the outer set of braces.
% This is equivalent to a combination of an assignment and
% \cs{tl_reverse:V}. See also \cs{tl_reverse_items:n} for improved
@@ -769,11 +769,11 @@
% {\tl_map_tokens:Nn, \tl_map_tokens:cn, \tl_map_tokens:nn}
% \begin{syntax}
% \cs{tl_map_tokens:Nn} \meta{tl~var} \Arg{code}
-% \cs{tl_map_tokens:nn} \Arg{tokens} \Arg{code}
+% \cs{tl_map_tokens:nn} \Arg{token list} \Arg{code}
% \end{syntax}
% Analogue of \cs{tl_map_function:NN} which maps several tokens
% instead of a single function. The \meta{code} receives each \meta{item} in
-% the \meta{tl~var} or in \meta{tokens} as a trailing brace group. For
+% the \meta{tl~var} or in the \meta{token list} as a trailing brace group. For
% instance,
% \begin{verbatim}
% \tl_map_tokens:Nn \l_my_tl { \prg_replicate:nn { 2 } }
@@ -816,7 +816,7 @@
% \cs{tl_map_break:}
% \end{syntax}
% Used to terminate a \cs[no-index]{tl_map_\ldots} function before all
-% entries in the \meta{token list variable} have been processed. This
+% entries in the \meta{token list} have been processed. This
% normally takes place within a conditional statement, for example
% \begin{verbatim}
% \tl_map_inline:Nn \l_my_tl
@@ -830,9 +830,9 @@
% level \TeX{} errors.
% \begin{texnote}
% When the mapping is broken, additional tokens may be inserted
-% before the \meta{tokens} are
-% inserted into the input stream.
-% This depends on the design of the mapping function.
+% before further items are taken
+% from the input stream. This depends on the design of the mapping
+% function.
% \end{texnote}
% \end{function}
%
@@ -841,7 +841,7 @@
% \cs{tl_map_break:n} \Arg{code}
% \end{syntax}
% Used to terminate a \cs[no-index]{tl_map_\ldots} function before all
-% entries in the \meta{token list variable} have been processed, inserting
+% entries in the \meta{token list} have been processed, inserting
% the \meta{code} after the mapping has ended. This
% normally takes place within a conditional statement, for example
% \begin{verbatim}
@@ -1170,7 +1170,7 @@
% \cs{tl_remove_once:Nn} \meta{tl~var} \Arg{tokens}
% \end{syntax}
% Removes the first (leftmost) occurrence of \meta{tokens} from the
-% \meta{tl~var}. \meta{Tokens} cannot contain |{|, |}| or |#|
+% \meta{tl~var}. The \meta{tokens} cannot contain |{|, |}| or |#|
% (more precisely, explicit character tokens with category code $1$
% (begin-group) or $2$ (end-group), and tokens with category code $6$).
% \end{function}
@@ -1186,7 +1186,7 @@
% \cs{tl_remove_all:Nn} \meta{tl~var} \Arg{tokens}
% \end{syntax}
% Removes all occurrences of \meta{tokens} from the
-% \meta{tl~var}. \meta{Tokens} cannot contain |{|, |}| or |#|
+% \meta{tl~var}. The \meta{tokens} cannot contain |{|, |}| or |#|
% (more precisely, explicit character tokens with category code $1$
% (begin-group) or $2$ (end-group), and tokens with category code $6$).
% As this function
@@ -1346,12 +1346,12 @@
%
% \subsection{Functions}
%
-% \begin{macro}{\__kernel_tl_set:Ne,\__kernel_tl_gset:Ne}
+% \begin{macro}{\__kernel_tl_set:Nx,\__kernel_tl_gset:Nx}
% These two are supplied to get better performance for macros which would
% otherwise use \cs{tl_set:Ne} or \cs{tl_gset:Ne} internally.
% \begin{macrocode}
-\cs_new_eq:NN \__kernel_tl_set:Ne \cs_set_nopar:Npe
-\cs_new_eq:NN \__kernel_tl_gset:Ne \cs_gset_nopar:Npe
+\cs_new_eq:NN \__kernel_tl_set:Nx \cs_set_nopar:Npe
+\cs_new_eq:NN \__kernel_tl_gset:Nx \cs_gset_nopar:Npe
% \end{macrocode}
% \end{macro}
%
@@ -1374,7 +1374,7 @@
% \tl_const:cn, \tl_const:ce, \tl_const:cx
% }
% Constants are also easy to generate. They use \cs{cs_gset_nopar:Npe} instead
-% of \cs{__kernel_tl_gset:Ne} so that the correct scope checking for |c|,
+% of \cs{__kernel_tl_gset:Nx} so that the correct scope checking for |c|,
% instead of for |g|, is applied when
% \cs{debug_on:n} |{ check-declarations }| is used.
% Constant assignment functions are patched specially in \pkg{l3debug} to
@@ -1444,7 +1444,7 @@
% \begin{macrocode}
\cs_new_protected:Npn \tl_concat:NNN #1#2#3
{
- \__kernel_tl_set:Ne #1
+ \__kernel_tl_set:Nx #1
{
\__kernel_exp_not:w \exp_after:wN {#2}
\__kernel_exp_not:w \exp_after:wN {#3}
@@ -1452,7 +1452,7 @@
}
\cs_new_protected:Npn \tl_gconcat:NNN #1#2#3
{
- \__kernel_tl_gset:Ne #1
+ \__kernel_tl_gset:Nx #1
{
\__kernel_exp_not:w \exp_after:wN {#2}
\__kernel_exp_not:w \exp_after:wN {#3}
@@ -1519,13 +1519,13 @@
% by hand as it is used quite a lot.
% \begin{macrocode}
\cs_new_protected:Npn \tl_set:Nn #1#2
- { \__kernel_tl_set:Ne #1 { \__kernel_exp_not:w {#2} } }
+ { \__kernel_tl_set:Nx #1 { \__kernel_exp_not:w {#2} } }
\cs_new_protected:Npn \tl_set:No #1#2
- { \__kernel_tl_set:Ne #1 { \__kernel_exp_not:w \exp_after:wN {#2} } }
+ { \__kernel_tl_set:Nx #1 { \__kernel_exp_not:w \exp_after:wN {#2} } }
\cs_new_protected:Npn \tl_gset:Nn #1#2
- { \__kernel_tl_gset:Ne #1 { \__kernel_exp_not:w {#2} } }
+ { \__kernel_tl_gset:Nx #1 { \__kernel_exp_not:w {#2} } }
\cs_new_protected:Npn \tl_gset:No #1#2
- { \__kernel_tl_gset:Ne #1 { \__kernel_exp_not:w \exp_after:wN {#2} } }
+ { \__kernel_tl_gset:Nx #1 { \__kernel_exp_not:w \exp_after:wN {#2} } }
\cs_generate_variant:Nn \tl_set:Nn { NV , Nv , Ne , Nf }
\cs_generate_variant:Nn \tl_set:Nn { c, cV , cv , ce , cf }
\cs_generate_variant:Nn \tl_set:No { c }
@@ -1556,22 +1556,22 @@
% \begin{macrocode}
\cs_new_protected:Npn \tl_put_left:Nn #1#2
{
- \__kernel_tl_set:Ne #1
+ \__kernel_tl_set:Nx #1
{ \__kernel_exp_not:w {#2} \__kernel_exp_not:w \exp_after:wN {#1} }
}
\cs_new_protected:Npn \tl_put_left:NV #1#2
{
- \__kernel_tl_set:Ne #1
+ \__kernel_tl_set:Nx #1
{ \exp_not:V #2 \__kernel_exp_not:w \exp_after:wN {#1} }
}
\cs_new_protected:Npn \tl_put_left:Nv #1#2
{
- \__kernel_tl_set:Ne #1
+ \__kernel_tl_set:Nx #1
{ \exp_not:v {#2} \__kernel_exp_not:w \exp_after:wN {#1} }
}
\cs_new_protected:Npn \tl_put_left:Ne #1#2
{
- \__kernel_tl_set:Ne #1
+ \__kernel_tl_set:Nx #1
{
\__kernel_exp_not:w \tex_expanded:D { {#2} }
\__kernel_exp_not:w \exp_after:wN {#1}
@@ -1579,7 +1579,7 @@
}
\cs_new_protected:Npn \tl_put_left:No #1#2
{
- \__kernel_tl_set:Ne #1
+ \__kernel_tl_set:Nx #1
{
\__kernel_exp_not:w \exp_after:wN {#2}
\__kernel_exp_not:w \exp_after:wN {#1}
@@ -1587,22 +1587,22 @@
}
\cs_new_protected:Npn \tl_gput_left:Nn #1#2
{
- \__kernel_tl_gset:Ne #1
+ \__kernel_tl_gset:Nx #1
{ \__kernel_exp_not:w {#2} \__kernel_exp_not:w \exp_after:wN {#1} }
}
\cs_new_protected:Npn \tl_gput_left:NV #1#2
{
- \__kernel_tl_gset:Ne #1
+ \__kernel_tl_gset:Nx #1
{ \exp_not:V #2 \__kernel_exp_not:w \exp_after:wN {#1} }
}
\cs_new_protected:Npn \tl_gput_left:Nv #1#2
{
- \__kernel_tl_gset:Ne #1
+ \__kernel_tl_gset:Nx #1
{ \exp_not:v {#2} \__kernel_exp_not:w \exp_after:wN {#1} }
}
\cs_new_protected:Npn \tl_gput_left:Ne #1#2
{
- \__kernel_tl_gset:Ne #1
+ \__kernel_tl_gset:Nx #1
{
\__kernel_exp_not:w \tex_expanded:D { {#2} }
\__kernel_exp_not:w \exp_after:wN {#1}
@@ -1610,7 +1610,7 @@
}
\cs_new_protected:Npn \tl_gput_left:No #1#2
{
- \__kernel_tl_gset:Ne #1
+ \__kernel_tl_gset:Nx #1
{
\__kernel_exp_not:w \exp_after:wN {#2}
\__kernel_exp_not:w \exp_after:wN {#1}
@@ -1649,20 +1649,20 @@
% The same on the right.
% \begin{macrocode}
\cs_new_protected:Npn \tl_put_right:Nn #1#2
- { \__kernel_tl_set:Ne #1 { \__kernel_exp_not:w \exp_after:wN { #1 #2 } } }
+ { \__kernel_tl_set:Nx #1 { \__kernel_exp_not:w \exp_after:wN { #1 #2 } } }
\cs_new_protected:Npn \tl_put_right:NV #1#2
{
- \__kernel_tl_set:Ne #1
+ \__kernel_tl_set:Nx #1
{ \__kernel_exp_not:w \exp_after:wN {#1} \exp_not:V #2 }
}
\cs_new_protected:Npn \tl_put_right:Nv #1#2
{
- \__kernel_tl_set:Ne #1
+ \__kernel_tl_set:Nx #1
{ \__kernel_exp_not:w \exp_after:wN {#1} \exp_not:v {#2} }
}
\cs_new_protected:Npn \tl_put_right:Ne #1#2
{
- \__kernel_tl_set:Ne #1
+ \__kernel_tl_set:Nx #1
{
\__kernel_exp_not:w \exp_after:wN {#1}
\__kernel_exp_not:w \tex_expanded:D { {#2} }
@@ -1670,7 +1670,7 @@
}
\cs_new_protected:Npn \tl_put_right:No #1#2
{
- \__kernel_tl_set:Ne #1
+ \__kernel_tl_set:Nx #1
{
\__kernel_exp_not:w \exp_after:wN {#1}
\__kernel_exp_not:w \exp_after:wN {#2}
@@ -1677,20 +1677,20 @@
}
}
\cs_new_protected:Npn \tl_gput_right:Nn #1#2
- { \__kernel_tl_gset:Ne #1 { \__kernel_exp_not:w \exp_after:wN { #1 #2 } } }
+ { \__kernel_tl_gset:Nx #1 { \__kernel_exp_not:w \exp_after:wN { #1 #2 } } }
\cs_new_protected:Npn \tl_gput_right:NV #1#2
{
- \__kernel_tl_gset:Ne #1
+ \__kernel_tl_gset:Nx #1
{ \__kernel_exp_not:w \exp_after:wN {#1} \exp_not:V #2 }
}
\cs_new_protected:Npn \tl_gput_right:Nv #1#2
{
- \__kernel_tl_gset:Ne #1
+ \__kernel_tl_gset:Nx #1
{ \__kernel_exp_not:w \exp_after:wN {#1} \exp_not:v {#2} }
}
\cs_new_protected:Npn \tl_gput_right:Ne #1#2
{
- \__kernel_tl_gset:Ne #1
+ \__kernel_tl_gset:Nx #1
{
\__kernel_exp_not:w \exp_after:wN {#1}
\__kernel_exp_not:w \tex_expanded:D { {#2} }
@@ -1698,7 +1698,7 @@
}
\cs_new_protected:Npn \tl_gput_right:No #1#2
{
- \__kernel_tl_gset:Ne #1
+ \__kernel_tl_gset:Nx #1
{
\__kernel_exp_not:w \exp_after:wN {#1}
\__kernel_exp_not:w \exp_after:wN {#2}
@@ -2041,13 +2041,13 @@
% the \meta{tl~var} by \meta{token list}.
% \begin{macrocode}
\cs_new_protected:Npn \tl_replace_once:Nnn
- { \@@_replace:NnNNNnn \q_@@_mark ? \@@_replace_wrap:w \__kernel_tl_set:Ne }
+ { \@@_replace:NnNNNnn \q_@@_mark ? \@@_replace_wrap:w \__kernel_tl_set:Nx }
\cs_new_protected:Npn \tl_greplace_once:Nnn
- { \@@_replace:NnNNNnn \q_@@_mark ? \@@_replace_wrap:w \__kernel_tl_gset:Ne }
+ { \@@_replace:NnNNNnn \q_@@_mark ? \@@_replace_wrap:w \__kernel_tl_gset:Nx }
\cs_new_protected:Npn \tl_replace_all:Nnn
- { \@@_replace:NnNNNnn \q_@@_mark ? \@@_replace_next:w \__kernel_tl_set:Ne }
+ { \@@_replace:NnNNNnn \q_@@_mark ? \@@_replace_next:w \__kernel_tl_set:Nx }
\cs_new_protected:Npn \tl_greplace_all:Nnn
- { \@@_replace:NnNNNnn \q_@@_mark ? \@@_replace_next:w \__kernel_tl_gset:Ne }
+ { \@@_replace:NnNNNnn \q_@@_mark ? \@@_replace_next:w \__kernel_tl_gset:Nx }
\cs_generate_variant:Nn \tl_replace_once:Nnn
{ NnV , Nne , NV , Ne , Nee , c , cnV , cne , cV , ce , cee }
\cs_generate_variant:Nn \tl_replace_once:Nnn
@@ -2904,9 +2904,9 @@
{ \@@_trim_spaces:nn { \@@_trim_mark: #1 } { \exp_args:No #2 } }
\cs_generate_variant:Nn \tl_trim_spaces_apply:nN { o }
\cs_new_protected:Npn \tl_trim_spaces:N #1
- { \__kernel_tl_set:Ne #1 { \exp_args:No \tl_trim_spaces:n {#1} } }
+ { \__kernel_tl_set:Nx #1 { \exp_args:No \tl_trim_spaces:n {#1} } }
\cs_new_protected:Npn \tl_gtrim_spaces:N #1
- { \__kernel_tl_gset:Ne #1 { \exp_args:No \tl_trim_spaces:n {#1} } }
+ { \__kernel_tl_gset:Nx #1 { \exp_args:No \tl_trim_spaces:n {#1} } }
\cs_generate_variant:Nn \tl_trim_spaces:N { c }
\cs_generate_variant:Nn \tl_gtrim_spaces:N { c }
% \end{macrocode}
@@ -3208,17 +3208,22 @@
% \begin{macro}[EXP]
% {
% \@@_if_head_is_N_type_auxi:w ,
-% \@@_if_head_is_N_type_auxii:nn ,
-% \@@_if_head_is_N_type_auxiii:n
+% \@@_if_head_is_N_type_auxii:n ,
% }
% A token list can be empty, can start with an explicit space
% character (catcode 10 and charcode 32), can start with a begin-group
% token (catcode 1), or start with an \texttt{N}-type argument. In
-% the first two cases, the line involving \cs{@@_if_head_is_N_type_auxi:w}
-% produces~|f| (and otherwise nothing). In the third case
-% (begin-group token), the lines involving \cs{token_to_str:N} produce a
-% single closing brace. The category code test is thus true exactly
-% in the fourth case, which is what we want. One cannot optimize by
+% the first two cases, and when |#1~| starts with |{}~|,
+% \cs{@@_if_head_is_N_type_auxi:w} receives an empty argument hence
+% produces |f| and removes everything before the first
+% \cs{scan_stop:}. In the third case (except when |#1~| starts with
+% |{}~|), the second auxiliary removes the first copy of~|#1| that was
+% used for the space test, then expands \cs{token_to_str:N} which hits
+% the leading begin-group token, leaving a single closing brace to be
+% compared with \cs{scan_stop:}. In the last case,
+% \cs{token_to_str:N} does not change the brace balance so that only
+% \cs{scan_stop:} \cs{scan_stop:} remain, making the character code
+% test true. One cannot optimize by
% moving one of the \cs{scan_stop:} to the beginning: if |#1| contains
% primitive conditionals, all of its occurrences must be dealt with before
% the \cs{if:w} tries to skip the \texttt{true} branch of the
@@ -3227,7 +3232,7 @@
\prg_new_conditional:Npnn \tl_if_head_is_N_type:n #1 { p , T , F , TF }
{
\if:w
- \if_false: { \fi: \@@_if_head_is_N_type_auxi:w \prg_do_nothing: #1 ~ }
+ \if_false: { \fi: \@@_if_head_is_N_type_auxi:w #1 ~ }
{ \exp_after:wN { \token_to_str:N #1 } }
\scan_stop: \scan_stop:
\prg_return_true:
@@ -3237,7 +3242,7 @@
}
\exp_args:Nno \use:n { \cs_new:Npn \@@_if_head_is_N_type_auxi:w #1 ~ }
{
- \tl_if_empty:oTF { #1 }
+ \tl_if_empty:nTF {#1}
{ f \exp_after:wN \use_none:nn }
{ \exp_after:wN \@@_if_head_is_N_type_auxii:n }
\exp_after:wN { \if_false: } \fi:
@@ -3481,9 +3486,9 @@
% which stops the \texttt{f}-expansion.
% \begin{macrocode}
\cs_new_protected:Npn \tl_reverse:N #1
- { \__kernel_tl_set:Ne #1 { \exp_args:No \tl_reverse:n { #1 } } }
+ { \__kernel_tl_set:Nx #1 { \exp_args:No \tl_reverse:n { #1 } } }
\cs_new_protected:Npn \tl_greverse:N #1
- { \__kernel_tl_gset:Ne #1 { \exp_args:No \tl_reverse:n { #1 } } }
+ { \__kernel_tl_gset:Nx #1 { \exp_args:No \tl_reverse:n { #1 } } }
\cs_generate_variant:Nn \tl_reverse:N { c }
\cs_generate_variant:Nn \tl_greverse:N { c }
% \end{macrocode}
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3token.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3token.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3token.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
@@ -1522,7 +1522,7 @@
% Before doing any actual conversion, first some special case filtering.
% Spaces are out here as \LuaTeX{} emulation only makes normal (charcode
% $32$ spaces). However, |^^@| is filtered out separately as that can't be
-% done with macro emulation either, so is flagged up separately. That
+% done with macro emulation either, so is treated separately. That
% done, hand off to the engine-dependent part.
% \begin{macrocode}
\cs_new:Npn \@@_generate_aux:w #1 ; #2 ;
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2024-01-04}
+% \date{Released 2024-01-22}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex 2024-01-22 20:35:48 UTC (rev 69537)
@@ -59,7 +59,6 @@
%% l3text-case.dtx (with options: `package')
%% l3text-map.dtx (with options: `package')
%% l3text-purify.dtx (with options: `package')
-%% l3candidates.dtx (with options: `package')
%% l3legacy.dtx (with options: `package')
%% l3deprecation.dtx (with options: `package')
%%
@@ -76,7 +75,7 @@
%% and all files in that bundle must be distributed together.
%%
%% File: expl3.dtx
-\def\ExplFileDate{2024-01-04}%
+\def\ExplFileDate{2024-01-22}%
\begingroup
\def\next{\endgroup}%
\expandafter\ifx\csname PackageError\endcsname\relax
@@ -2060,11 +2059,10 @@
\cs_new_protected:Npn \cs_undefine:c #1
{
\if_cs_exist:w #1 \cs_end:
- \exp_after:wN \use:n
\else:
- \exp_after:wN \use_none:n
+ \use_i:nnnn
\fi:
- { \cs_gset_eq:cN {#1} \tex_undefined:D }
+ \exp_args:Nc \cs_undefine:N {#1}
}
\cs_set_protected:Npn \__kernel_cs_parm_from_arg_count:nnF #1#2
{
@@ -3390,8 +3388,8 @@
}
\cs_new:Npn \use_none_delimit_by_s_stop:w #1 \s_stop { }
%% File: l3tl.dtx
-\cs_new_eq:NN \__kernel_tl_set:Ne \cs_set_nopar:Npe
-\cs_new_eq:NN \__kernel_tl_gset:Ne \cs_gset_nopar:Npe
+\cs_new_eq:NN \__kernel_tl_set:Nx \cs_set_nopar:Npe
+\cs_new_eq:NN \__kernel_tl_gset:Nx \cs_gset_nopar:Npe
\cs_new_protected:Npn \tl_new:N #1
{
\__kernel_chk_if_free_cs:N #1
@@ -3425,7 +3423,7 @@
\cs_generate_variant:Nn \tl_gset_eq:NN { cN, Nc, cc }
\cs_new_protected:Npn \tl_concat:NNN #1#2#3
{
- \__kernel_tl_set:Ne #1
+ \__kernel_tl_set:Nx #1
{
\__kernel_exp_not:w \exp_after:wN {#2}
\__kernel_exp_not:w \exp_after:wN {#3}
@@ -3433,7 +3431,7 @@
}
\cs_new_protected:Npn \tl_gconcat:NNN #1#2#3
{
- \__kernel_tl_gset:Ne #1
+ \__kernel_tl_gset:Nx #1
{
\__kernel_exp_not:w \exp_after:wN {#2}
\__kernel_exp_not:w \exp_after:wN {#3}
@@ -3450,13 +3448,13 @@
\group_end:
\tl_const:Nn \c_space_tl { ~ }
\cs_new_protected:Npn \tl_set:Nn #1#2
- { \__kernel_tl_set:Ne #1 { \__kernel_exp_not:w {#2} } }
+ { \__kernel_tl_set:Nx #1 { \__kernel_exp_not:w {#2} } }
\cs_new_protected:Npn \tl_set:No #1#2
- { \__kernel_tl_set:Ne #1 { \__kernel_exp_not:w \exp_after:wN {#2} } }
+ { \__kernel_tl_set:Nx #1 { \__kernel_exp_not:w \exp_after:wN {#2} } }
\cs_new_protected:Npn \tl_gset:Nn #1#2
- { \__kernel_tl_gset:Ne #1 { \__kernel_exp_not:w {#2} } }
+ { \__kernel_tl_gset:Nx #1 { \__kernel_exp_not:w {#2} } }
\cs_new_protected:Npn \tl_gset:No #1#2
- { \__kernel_tl_gset:Ne #1 { \__kernel_exp_not:w \exp_after:wN {#2} } }
+ { \__kernel_tl_gset:Nx #1 { \__kernel_exp_not:w \exp_after:wN {#2} } }
\cs_generate_variant:Nn \tl_set:Nn { NV , Nv , Ne , Nf }
\cs_generate_variant:Nn \tl_set:Nn { c, cV , cv , ce , cf }
\cs_generate_variant:Nn \tl_set:No { c }
@@ -3467,22 +3465,22 @@
\cs_generate_variant:Nn \tl_gset:Nn { Nx , cx }
\cs_new_protected:Npn \tl_put_left:Nn #1#2
{
- \__kernel_tl_set:Ne #1
+ \__kernel_tl_set:Nx #1
{ \__kernel_exp_not:w {#2} \__kernel_exp_not:w \exp_after:wN {#1} }
}
\cs_new_protected:Npn \tl_put_left:NV #1#2
{
- \__kernel_tl_set:Ne #1
+ \__kernel_tl_set:Nx #1
{ \exp_not:V #2 \__kernel_exp_not:w \exp_after:wN {#1} }
}
\cs_new_protected:Npn \tl_put_left:Nv #1#2
{
- \__kernel_tl_set:Ne #1
+ \__kernel_tl_set:Nx #1
{ \exp_not:v {#2} \__kernel_exp_not:w \exp_after:wN {#1} }
}
\cs_new_protected:Npn \tl_put_left:Ne #1#2
{
- \__kernel_tl_set:Ne #1
+ \__kernel_tl_set:Nx #1
{
\__kernel_exp_not:w \tex_expanded:D { {#2} }
\__kernel_exp_not:w \exp_after:wN {#1}
@@ -3490,7 +3488,7 @@
}
\cs_new_protected:Npn \tl_put_left:No #1#2
{
- \__kernel_tl_set:Ne #1
+ \__kernel_tl_set:Nx #1
{
\__kernel_exp_not:w \exp_after:wN {#2}
\__kernel_exp_not:w \exp_after:wN {#1}
@@ -3498,22 +3496,22 @@
}
\cs_new_protected:Npn \tl_gput_left:Nn #1#2
{
- \__kernel_tl_gset:Ne #1
+ \__kernel_tl_gset:Nx #1
{ \__kernel_exp_not:w {#2} \__kernel_exp_not:w \exp_after:wN {#1} }
}
\cs_new_protected:Npn \tl_gput_left:NV #1#2
{
- \__kernel_tl_gset:Ne #1
+ \__kernel_tl_gset:Nx #1
{ \exp_not:V #2 \__kernel_exp_not:w \exp_after:wN {#1} }
}
\cs_new_protected:Npn \tl_gput_left:Nv #1#2
{
- \__kernel_tl_gset:Ne #1
+ \__kernel_tl_gset:Nx #1
{ \exp_not:v {#2} \__kernel_exp_not:w \exp_after:wN {#1} }
}
\cs_new_protected:Npn \tl_gput_left:Ne #1#2
{
- \__kernel_tl_gset:Ne #1
+ \__kernel_tl_gset:Nx #1
{
\__kernel_exp_not:w \tex_expanded:D { {#2} }
\__kernel_exp_not:w \exp_after:wN {#1}
@@ -3521,7 +3519,7 @@
}
\cs_new_protected:Npn \tl_gput_left:No #1#2
{
- \__kernel_tl_gset:Ne #1
+ \__kernel_tl_gset:Nx #1
{
\__kernel_exp_not:w \exp_after:wN {#2}
\__kernel_exp_not:w \exp_after:wN {#1}
@@ -3540,20 +3538,20 @@
\cs_generate_variant:Nn \tl_gput_left:No { c }
\cs_generate_variant:Nn \tl_gput_left:Nn { Nx , cx }
\cs_new_protected:Npn \tl_put_right:Nn #1#2
- { \__kernel_tl_set:Ne #1 { \__kernel_exp_not:w \exp_after:wN { #1 #2 } } }
+ { \__kernel_tl_set:Nx #1 { \__kernel_exp_not:w \exp_after:wN { #1 #2 } } }
\cs_new_protected:Npn \tl_put_right:NV #1#2
{
- \__kernel_tl_set:Ne #1
+ \__kernel_tl_set:Nx #1
{ \__kernel_exp_not:w \exp_after:wN {#1} \exp_not:V #2 }
}
\cs_new_protected:Npn \tl_put_right:Nv #1#2
{
- \__kernel_tl_set:Ne #1
+ \__kernel_tl_set:Nx #1
{ \__kernel_exp_not:w \exp_after:wN {#1} \exp_not:v {#2} }
}
\cs_new_protected:Npn \tl_put_right:Ne #1#2
{
- \__kernel_tl_set:Ne #1
+ \__kernel_tl_set:Nx #1
{
\__kernel_exp_not:w \exp_after:wN {#1}
\__kernel_exp_not:w \tex_expanded:D { {#2} }
@@ -3561,7 +3559,7 @@
}
\cs_new_protected:Npn \tl_put_right:No #1#2
{
- \__kernel_tl_set:Ne #1
+ \__kernel_tl_set:Nx #1
{
\__kernel_exp_not:w \exp_after:wN {#1}
\__kernel_exp_not:w \exp_after:wN {#2}
@@ -3568,20 +3566,20 @@
}
}
\cs_new_protected:Npn \tl_gput_right:Nn #1#2
- { \__kernel_tl_gset:Ne #1 { \__kernel_exp_not:w \exp_after:wN { #1 #2 } } }
+ { \__kernel_tl_gset:Nx #1 { \__kernel_exp_not:w \exp_after:wN { #1 #2 } } }
\cs_new_protected:Npn \tl_gput_right:NV #1#2
{
- \__kernel_tl_gset:Ne #1
+ \__kernel_tl_gset:Nx #1
{ \__kernel_exp_not:w \exp_after:wN {#1} \exp_not:V #2 }
}
\cs_new_protected:Npn \tl_gput_right:Nv #1#2
{
- \__kernel_tl_gset:Ne #1
+ \__kernel_tl_gset:Nx #1
{ \__kernel_exp_not:w \exp_after:wN {#1} \exp_not:v {#2} }
}
\cs_new_protected:Npn \tl_gput_right:Ne #1#2
{
- \__kernel_tl_gset:Ne #1
+ \__kernel_tl_gset:Nx #1
{
\__kernel_exp_not:w \exp_after:wN {#1}
\__kernel_exp_not:w \tex_expanded:D { {#2} }
@@ -3589,7 +3587,7 @@
}
\cs_new_protected:Npn \tl_gput_right:No #1#2
{
- \__kernel_tl_gset:Ne #1
+ \__kernel_tl_gset:Nx #1
{
\__kernel_exp_not:w \exp_after:wN {#1}
\__kernel_exp_not:w \exp_after:wN {#2}
@@ -3715,13 +3713,13 @@
\c__tl_rescan_marker_tl #2
{ \use_i:nn \exp_end: #1 }
\cs_new_protected:Npn \tl_replace_once:Nnn
- { \__tl_replace:NnNNNnn \q__tl_mark ? \__tl_replace_wrap:w \__kernel_tl_set:Ne }
+ { \__tl_replace:NnNNNnn \q__tl_mark ? \__tl_replace_wrap:w \__kernel_tl_set:Nx }
\cs_new_protected:Npn \tl_greplace_once:Nnn
- { \__tl_replace:NnNNNnn \q__tl_mark ? \__tl_replace_wrap:w \__kernel_tl_gset:Ne }
+ { \__tl_replace:NnNNNnn \q__tl_mark ? \__tl_replace_wrap:w \__kernel_tl_gset:Nx }
\cs_new_protected:Npn \tl_replace_all:Nnn
- { \__tl_replace:NnNNNnn \q__tl_mark ? \__tl_replace_next:w \__kernel_tl_set:Ne }
+ { \__tl_replace:NnNNNnn \q__tl_mark ? \__tl_replace_next:w \__kernel_tl_set:Nx }
\cs_new_protected:Npn \tl_greplace_all:Nnn
- { \__tl_replace:NnNNNnn \q__tl_mark ? \__tl_replace_next:w \__kernel_tl_gset:Ne }
+ { \__tl_replace:NnNNNnn \q__tl_mark ? \__tl_replace_next:w \__kernel_tl_gset:Nx }
\cs_generate_variant:Nn \tl_replace_once:Nnn
{ NnV , Nne , NV , Ne , Nee , c , cnV , cne , cV , ce , cee }
\cs_generate_variant:Nn \tl_replace_once:Nnn
@@ -4087,9 +4085,9 @@
{ \__tl_trim_spaces:nn { \__tl_trim_mark: #1 } { \exp_args:No #2 } }
\cs_generate_variant:Nn \tl_trim_spaces_apply:nN { o }
\cs_new_protected:Npn \tl_trim_spaces:N #1
- { \__kernel_tl_set:Ne #1 { \exp_args:No \tl_trim_spaces:n {#1} } }
+ { \__kernel_tl_set:Nx #1 { \exp_args:No \tl_trim_spaces:n {#1} } }
\cs_new_protected:Npn \tl_gtrim_spaces:N #1
- { \__kernel_tl_gset:Ne #1 { \exp_args:No \tl_trim_spaces:n {#1} } }
+ { \__kernel_tl_gset:Nx #1 { \exp_args:No \tl_trim_spaces:n {#1} } }
\cs_generate_variant:Nn \tl_trim_spaces:N { c }
\cs_generate_variant:Nn \tl_gtrim_spaces:N { c }
\cs_set_protected:Npn \__tl_tmp:w #1
@@ -4231,7 +4229,7 @@
\prg_new_conditional:Npnn \tl_if_head_is_N_type:n #1 { p , T , F , TF }
{
\if:w
- \if_false: { \fi: \__tl_if_head_is_N_type_auxi:w \prg_do_nothing: #1 ~ }
+ \if_false: { \fi: \__tl_if_head_is_N_type_auxi:w #1 ~ }
{ \exp_after:wN { \token_to_str:N #1 } }
\scan_stop: \scan_stop:
\prg_return_true:
@@ -4241,7 +4239,7 @@
}
\exp_args:Nno \use:n { \cs_new:Npn \__tl_if_head_is_N_type_auxi:w #1 ~ }
{
- \tl_if_empty:oTF { #1 }
+ \tl_if_empty:nTF {#1}
{ f \exp_after:wN \use_none:nn }
{ \exp_after:wN \__tl_if_head_is_N_type_auxii:n }
\exp_after:wN { \if_false: } \fi:
@@ -4361,9 +4359,9 @@
\cs_new:Npn \__tl_reverse_space:
{ \__tl_act_reverse_output:n { ~ } }
\cs_new_protected:Npn \tl_reverse:N #1
- { \__kernel_tl_set:Ne #1 { \exp_args:No \tl_reverse:n { #1 } } }
+ { \__kernel_tl_set:Nx #1 { \exp_args:No \tl_reverse:n { #1 } } }
\cs_new_protected:Npn \tl_greverse:N #1
- { \__kernel_tl_gset:Ne #1 { \exp_args:No \tl_reverse:n { #1 } } }
+ { \__kernel_tl_gset:Nx #1 { \exp_args:No \tl_reverse:n { #1 } } }
\cs_generate_variant:Nn \tl_reverse:N { c }
\cs_generate_variant:Nn \tl_greverse:N { c }
\cs_new:Npn \tl_item:nn #1#2
@@ -4630,12 +4628,12 @@
}
\cs_new_protected:Npn \tl_build_end:N #1
{
- \__tl_build_get:NNN \__kernel_tl_set:Ne #1 #1
+ \__tl_build_get:NNN \__kernel_tl_set:Nx #1 #1
\exp_args:Nc \__tl_build_end_loop:NN { \cs_to_str:N #1 ' } \tl_clear:N
}
\cs_new_protected:Npn \tl_build_gend:N #1
{
- \__tl_build_get:NNN \__kernel_tl_gset:Ne #1 #1
+ \__tl_build_get:NNN \__kernel_tl_gset:Nx #1 #1
\exp_args:Nc \__tl_build_end_loop:NN { \cs_to_str:N #1 ' } \tl_gclear:N
}
\cs_new_protected:Npn \__tl_build_end_loop:NN #1#2
@@ -4647,7 +4645,7 @@
\exp_args:Nc \__tl_build_end_loop:NN { \cs_to_str:N #1 ' } #2
}
\cs_new_protected:Npn \tl_build_get_intermediate:NN
- { \__tl_build_get:NNN \__kernel_tl_set:Ne }
+ { \__tl_build_get:NNN \__kernel_tl_set:Nx }
\cs_new_protected:Npn \__tl_build_get:NNN #1#2#3
{ #1 #3 { \if_false: { \fi: \exp_after:wN \__tl_build_get:w #2 } } }
\cs_new:Npn \__tl_build_get:w #1 \__tl_build_last:NNn #2#3#4
@@ -4697,9 +4695,9 @@
\cs_generate_variant:Nn \str_concat:NNN { ccc }
\cs_generate_variant:Nn \str_gconcat:NNN { ccc }
\cs_new_protected:Npn \str_set:Nn #1#2
- { \__kernel_tl_set:Ne #1 { \__kernel_tl_to_str:w {#2} } }
+ { \__kernel_tl_set:Nx #1 { \__kernel_tl_to_str:w {#2} } }
\cs_gset_protected:Npn \str_gset:Nn #1#2
- { \__kernel_tl_gset:Ne #1 { \__kernel_tl_to_str:w {#2} } }
+ { \__kernel_tl_gset:Nx #1 { \__kernel_tl_to_str:w {#2} } }
\cs_new_protected:Npn \str_const:Nn #1#2
{
\__kernel_chk_if_free_cs:N #1
@@ -4707,22 +4705,22 @@
}
\cs_new_protected:Npn \str_put_left:Nn #1#2
{
- \__kernel_tl_set:Ne #1
+ \__kernel_tl_set:Nx #1
{ \__kernel_tl_to_str:w {#2} \__kernel_exp_not:w \exp_after:wN {#1} }
}
\cs_new_protected:Npn \str_gput_left:Nn #1#2
{
- \__kernel_tl_gset:Ne #1
+ \__kernel_tl_gset:Nx #1
{ \__kernel_tl_to_str:w {#2} \__kernel_exp_not:w \exp_after:wN {#1} }
}
\cs_new_protected:Npn \str_put_right:Nn #1#2
{
- \__kernel_tl_set:Ne #1
+ \__kernel_tl_set:Nx #1
{ \__kernel_exp_not:w \exp_after:wN {#1} \__kernel_tl_to_str:w {#2} }
}
\cs_new_protected:Npn \str_gput_right:Nn #1#2
{
- \__kernel_tl_gset:Ne #1
+ \__kernel_tl_gset:Nx #1
{ \__kernel_exp_not:w \exp_after:wN {#1} \__kernel_tl_to_str:w {#2} }
}
\cs_generate_variant:Nn \str_set:Nn { NV , Ne , Nx , c , cV , ce , cx }
@@ -4733,13 +4731,13 @@
\cs_generate_variant:Nn \str_put_right:Nn { NV , Ne , Nx , c , cV , ce , cx }
\cs_generate_variant:Nn \str_gput_right:Nn { NV , Ne , Nx , c , cV , ce , cx }
\cs_new_protected:Npn \str_replace_once:Nnn
- { \__str_replace:NNNnn \prg_do_nothing: \__kernel_tl_set:Ne }
+ { \__str_replace:NNNnn \prg_do_nothing: \__kernel_tl_set:Nx }
\cs_new_protected:Npn \str_greplace_once:Nnn
- { \__str_replace:NNNnn \prg_do_nothing: \__kernel_tl_gset:Ne }
+ { \__str_replace:NNNnn \prg_do_nothing: \__kernel_tl_gset:Nx }
\cs_new_protected:Npn \str_replace_all:Nnn
- { \__str_replace:NNNnn \__str_replace_next:w \__kernel_tl_set:Ne }
+ { \__str_replace:NNNnn \__str_replace_next:w \__kernel_tl_set:Nx }
\cs_new_protected:Npn \str_greplace_all:Nnn
- { \__str_replace:NNNnn \__str_replace_next:w \__kernel_tl_gset:Ne }
+ { \__str_replace:NNNnn \__str_replace_next:w \__kernel_tl_gset:Nx }
\cs_generate_variant:Nn \str_replace_once:Nnn { c }
\cs_generate_variant:Nn \str_greplace_once:Nnn { c }
\cs_generate_variant:Nn \str_replace_all:Nnn { c }
@@ -5464,22 +5462,22 @@
\cs_new_eq:NN \seq_gset_eq:cc \tl_gset_eq:cc
\cs_new_protected:Npn \seq_set_from_clist:NN #1#2
{
- \__kernel_tl_set:Ne #1
+ \__kernel_tl_set:Nx #1
{ \s__seq \clist_map_function:NN #2 \__seq_wrap_item:n }
}
\cs_new_protected:Npn \seq_set_from_clist:Nn #1#2
{
- \__kernel_tl_set:Ne #1
+ \__kernel_tl_set:Nx #1
{ \s__seq \clist_map_function:nN {#2} \__seq_wrap_item:n }
}
\cs_new_protected:Npn \seq_gset_from_clist:NN #1#2
{
- \__kernel_tl_gset:Ne #1
+ \__kernel_tl_gset:Nx #1
{ \s__seq \clist_map_function:NN #2 \__seq_wrap_item:n }
}
\cs_new_protected:Npn \seq_gset_from_clist:Nn #1#2
{
- \__kernel_tl_gset:Ne #1
+ \__kernel_tl_gset:Nx #1
{ \s__seq \clist_map_function:nN {#2} \__seq_wrap_item:n }
}
\cs_generate_variant:Nn \seq_set_from_clist:NN { Nc }
@@ -5495,13 +5493,13 @@
}
\cs_generate_variant:Nn \seq_const_from_clist:Nn { c }
\cs_new_protected:Npn \seq_set_split:Nnn
- { \__seq_set_split:NNNnn \__kernel_tl_set:Ne \tl_trim_spaces:n }
+ { \__seq_set_split:NNNnn \__kernel_tl_set:Nx \tl_trim_spaces:n }
\cs_new_protected:Npn \seq_gset_split:Nnn
- { \__seq_set_split:NNNnn \__kernel_tl_gset:Ne \tl_trim_spaces:n }
+ { \__seq_set_split:NNNnn \__kernel_tl_gset:Nx \tl_trim_spaces:n }
\cs_new_protected:Npn \seq_set_split_keep_spaces:Nnn
- { \__seq_set_split:NNNnn \__kernel_tl_set:Ne \exp_not:n }
+ { \__seq_set_split:NNNnn \__kernel_tl_set:Nx \exp_not:n }
\cs_new_protected:Npn \seq_gset_split_keep_spaces:Nnn
- { \__seq_set_split:NNNnn \__kernel_tl_gset:Ne \exp_not:n }
+ { \__seq_set_split:NNNnn \__kernel_tl_gset:Nx \exp_not:n }
\cs_new_protected:Npn \__seq_set_split:NNNnn #1#2#3#4#5
{
\tl_if_empty:nTF {#4}
@@ -5521,7 +5519,7 @@
\__seq_set_split_end:
\__seq_set_split:Nw #2 \prg_do_nothing:
}
- \__kernel_tl_set:Ne \l__seq_internal_a_tl { \l__seq_internal_a_tl }
+ \__kernel_tl_set:Nx \l__seq_internal_a_tl { \l__seq_internal_a_tl }
}
#1 #3 { \s__seq \l__seq_internal_a_tl }
}
@@ -5539,6 +5537,16 @@
\cs_generate_variant:Nn \seq_gset_split:Nnn { Nnx , Nxx }
\cs_generate_variant:Nn \seq_set_split_keep_spaces:Nnn { NnV }
\cs_generate_variant:Nn \seq_gset_split_keep_spaces:Nnn { NnV }
+\cs_new_protected:Npn \seq_set_filter:NNn
+ { \__seq_set_filter:NNNn \__kernel_tl_set:Nx }
+\cs_new_protected:Npn \seq_gset_filter:NNn
+ { \__seq_set_filter:NNNn \__kernel_tl_gset:Nx }
+\cs_new_protected:Npn \__seq_set_filter:NNNn #1#2#3#4
+ {
+ \__seq_push_item_def:n { \bool_if:nT {#4} { \__seq_wrap_item:n {##1} } }
+ #1 #2 { #3 }
+ \__seq_pop_item_def:
+ }
\cs_new_protected:Npn \seq_concat:NNN #1#2#3
{ \tl_set:Nf #1 { \exp_after:wN \use_i:nn \exp_after:wN #2 #3 } }
\cs_new_protected:Npn \seq_gconcat:NNN #1#2#3
@@ -5551,7 +5559,7 @@
{ TF , T , F , p }
\cs_new_protected:Npn \seq_put_left:Nn #1#2
{
- \__kernel_tl_set:Ne #1
+ \__kernel_tl_set:Nx #1
{
\exp_not:n { \s__seq \__seq_item:n {#2} }
\exp_not:f { \exp_after:wN \__seq_put_left_aux:w #1 }
@@ -5559,7 +5567,7 @@
}
\cs_new_protected:Npn \seq_gput_left:Nn #1#2
{
- \__kernel_tl_gset:Ne #1
+ \__kernel_tl_gset:Nx #1
{
\exp_not:n { \s__seq \__seq_item:n {#2} }
\exp_not:f { \exp_after:wN \__seq_put_left_aux:w #1 }
@@ -5597,9 +5605,9 @@
\cs_generate_variant:Nn \seq_remove_duplicates:N { c }
\cs_generate_variant:Nn \seq_gremove_duplicates:N { c }
\cs_new_protected:Npn \seq_remove_all:Nn
- { \__seq_remove_all_aux:NNn \__kernel_tl_set:Ne }
+ { \__seq_remove_all_aux:NNn \__kernel_tl_set:Nx }
\cs_new_protected:Npn \seq_gremove_all:Nn
- { \__seq_remove_all_aux:NNn \__kernel_tl_gset:Ne }
+ { \__seq_remove_all_aux:NNn \__kernel_tl_gset:Nx }
\cs_new_protected:Npn \__seq_remove_all_aux:NNn #1#2#3
{
\__seq_push_item_def:n
@@ -5626,15 +5634,15 @@
\cs_generate_variant:Nn \seq_gremove_all:Nn { Nx , cx }
\cs_new_eq:NN \__seq_int_eval:w \tex_numexpr:D
\cs_new_protected:Npn \seq_set_item:Nnn #1#2#3
- { \__seq_set_item:NnnNN #1 {#2} {#3} \__kernel_tl_set:Ne \use_i:nn }
+ { \__seq_set_item:NnnNN #1 {#2} {#3} \__kernel_tl_set:Nx \use_i:nn }
\cs_new_protected:Npn \seq_gset_item:Nnn #1#2#3
- { \__seq_set_item:NnnNN #1 {#2} {#3} \__kernel_tl_gset:Ne \use_i:nn }
+ { \__seq_set_item:NnnNN #1 {#2} {#3} \__kernel_tl_gset:Nx \use_i:nn }
\cs_generate_variant:Nn \seq_set_item:Nnn { c }
\cs_generate_variant:Nn \seq_gset_item:Nnn { c }
\prg_new_protected_conditional:Npnn \seq_set_item:Nnn #1#2#3 { TF , T , F }
- { \__seq_set_item:NnnNN #1 {#2} {#3} \__kernel_tl_set:Ne \use_ii:nn }
+ { \__seq_set_item:NnnNN #1 {#2} {#3} \__kernel_tl_set:Nx \use_ii:nn }
\prg_new_protected_conditional:Npnn \seq_gset_item:Nnn #1#2#3 { TF , T , F }
- { \__seq_set_item:NnnNN #1 {#2} {#3} \__kernel_tl_gset:Ne \use_ii:nn }
+ { \__seq_set_item:NnnNN #1 {#2} {#3} \__kernel_tl_gset:Nx \use_ii:nn }
\prg_generate_conditional_variant:Nnn \seq_set_item:Nnn { c } { TF , T , F }
\prg_generate_conditional_variant:Nnn \seq_gset_item:Nnn { c } { TF , T , F }
\cs_new_protected:Npn \__seq_set_item:NnnNN #1#2#3
@@ -5691,9 +5699,9 @@
#5 #2
}
\cs_new_protected:Npn \seq_reverse:N
- { \__seq_reverse:NN \__kernel_tl_set:Ne }
+ { \__seq_reverse:NN \__kernel_tl_set:Nx }
\cs_new_protected:Npn \seq_greverse:N
- { \__seq_reverse:NN \__kernel_tl_gset:Ne }
+ { \__seq_reverse:NN \__kernel_tl_gset:Nx }
\cs_new_protected:Npn \__seq_reverse:NN #1 #2
{
\cs_set_eq:NN \__seq_tmp:w \__seq_item:n
@@ -5798,7 +5806,7 @@
}
\cs_new_protected:Npn \seq_get_left:NN #1#2
{
- \__kernel_tl_set:Ne #2
+ \__kernel_tl_set:Nx #2
{
\exp_after:wN \__seq_get_left:wnw
#1 \__seq_item:n { \q_no_value } \s__seq_stop
@@ -5823,7 +5831,7 @@
\cs_generate_variant:Nn \seq_gpop_left:NN { c }
\cs_new_protected:Npn \seq_get_right:NN #1#2
{
- \__kernel_tl_set:Ne #2
+ \__kernel_tl_set:Nx #2
{
\exp_after:wN \use_i_ii:nnn
\exp_after:wN \__seq_get_right_loop:nw
@@ -5840,9 +5848,9 @@
\cs_new:Npn \__seq_get_right_end:NnN #1#2#3 { \exp_not:n {#2} }
\cs_generate_variant:Nn \seq_get_right:NN { c }
\cs_new_protected:Npn \seq_pop_right:NN
- { \__seq_pop:NNNN \__seq_pop_right:NNN \__kernel_tl_set:Ne }
+ { \__seq_pop:NNNN \__seq_pop_right:NNN \__kernel_tl_set:Nx }
\cs_new_protected:Npn \seq_gpop_right:NN
- { \__seq_pop:NNNN \__seq_pop_right:NNN \__kernel_tl_gset:Ne }
+ { \__seq_pop:NNNN \__seq_pop_right:NNN \__kernel_tl_gset:Nx }
\cs_new_protected:Npn \__seq_pop_right:NNN #1#2#3
{
\cs_set_eq:NN \__seq_tmp:w \__seq_item:n
@@ -5854,7 +5862,7 @@
#2
{
\if_false: { \fi: }
- \__kernel_tl_set:Ne #3
+ \__kernel_tl_set:Nx #3
}
{ } \use_none:nn
\cs_set_eq:NN \__seq_item:n \__seq_tmp:w
@@ -5882,10 +5890,10 @@
{ \__seq_pop_TF:NNNN \__seq_pop_left:NNN \tl_gset:Nn #1 #2 }
\prg_new_protected_conditional:Npnn \seq_pop_right:NN #1#2
{ T , F , TF }
- { \__seq_pop_TF:NNNN \__seq_pop_right:NNN \__kernel_tl_set:Ne #1 #2 }
+ { \__seq_pop_TF:NNNN \__seq_pop_right:NNN \__kernel_tl_set:Nx #1 #2 }
\prg_new_protected_conditional:Npnn \seq_gpop_right:NN #1#2
{ T , F , TF }
- { \__seq_pop_TF:NNNN \__seq_pop_right:NNN \__kernel_tl_gset:Ne #1 #2 }
+ { \__seq_pop_TF:NNNN \__seq_pop_right:NNN \__kernel_tl_gset:Nx #1 #2 }
\prg_generate_conditional_variant:Nnn \seq_pop_left:NN { c }
{ T , F , TF }
\prg_generate_conditional_variant:Nnn \seq_gpop_left:NN { c }
@@ -6071,9 +6079,9 @@
}
\cs_generate_variant:Nn \seq_map_pairwise_function:NNN { Nc , c , cc }
\cs_new_protected:Npn \seq_set_map_e:NNn
- { \__seq_set_map_e:NNNn \__kernel_tl_set:Ne }
+ { \__seq_set_map_e:NNNn \__kernel_tl_set:Nx }
\cs_new_protected:Npn \seq_gset_map_e:NNn
- { \__seq_set_map_e:NNNn \__kernel_tl_gset:Ne }
+ { \__seq_set_map_e:NNNn \__kernel_tl_gset:Nx }
\cs_new_protected:Npn \__seq_set_map_e:NNNn #1#2#3#4
{
\__seq_push_item_def:n { \exp_not:N \__seq_item:n {#4} }
@@ -6081,9 +6089,9 @@
\__seq_pop_item_def:
}
\cs_new_protected:Npn \seq_set_map:NNn
- { \__seq_set_map:NNNn \__kernel_tl_set:Ne }
+ { \__seq_set_map:NNNn \__kernel_tl_set:Nx }
\cs_new_protected:Npn \seq_gset_map:NNn
- { \__seq_set_map:NNNn \__kernel_tl_gset:Ne }
+ { \__seq_set_map:NNNn \__kernel_tl_gset:Nx }
\cs_new_protected:Npn \__seq_set_map:NNNn #1#2#3#4
{
\__seq_push_item_def:n { \exp_not:n { \__seq_item:n {#4} } }
@@ -7032,71 +7040,93 @@
\int_new:N \l__seq_internal_a_int
\int_new:N \l__seq_internal_b_int
%% File: l3flag.dtx
-\cs_new_protected:Npn \flag_new:n #1
+\cs_new_protected:Npn \flag_new:N #1
+ { \cs_new_protected:Npe #1 { \cs_to_str:N #1 } }
+\cs_generate_variant:Nn \flag_new:N { c }
+\flag_new:N \l_tmpa_flag
+\flag_new:N \l_tmpb_flag
+\cs_new_protected:Npn \flag_clear:N #1
{
- \cs_new:cpn { flag~#1 } ##1 ;
- { \exp_after:wN \use_none:n \cs:w flag~#1~##1 \cs_end: }
+ \__flag_clear:wN 0 ; #1
+ \prg_break_point:
}
-\cs_new_protected:Npn \flag_clear:n #1 { \__flag_clear:wn 0 ; {#1} }
-\cs_new_protected:Npn \__flag_clear:wn #1 ; #2
+\cs_generate_variant:Nn \flag_clear:N { c }
+\cs_new_protected:Npn \__flag_clear:wN #1 ; #2
{
- \if_cs_exist:w flag~#2~#1 \cs_end:
- \cs_set_eq:cN { flag~#2~#1 } \tex_undefined:D
- \exp_after:wN \__flag_clear:wn
- \int_value:w \int_eval:w 1 + #1
- \else:
- \use_i:nnn
+ \if_cs_exist:w #2 #1 \cs_end: \else:
+ \prg_break:n
\fi:
- ; {#2}
+ \cs_set_eq:cN { #2 #1 } \tex_undefined:D
+ \exp_after:wN \__flag_clear:wN
+ \int_value:w \int_eval:w \c_one_int + #1 ; #2
}
-\cs_new_protected:Npn \flag_clear_new:n #1
- { \flag_if_exist:nTF {#1} { \flag_clear:n } { \flag_new:n } {#1} }
-\cs_new_protected:Npn \flag_show:n { \__flag_show:Nn \tl_show:n }
-\cs_new_protected:Npn \flag_log:n { \__flag_show:Nn \tl_log:n }
-\cs_new_protected:Npn \__flag_show:Nn #1#2
+\cs_new_protected:Npn \flag_clear_new:N #1
+ { \flag_if_exist:NTF #1 { \flag_clear:N } { \flag_new:N } #1 }
+\cs_generate_variant:Nn \flag_clear_new:N { c }
+\cs_new_protected:Npn \flag_show:N { \__flag_show:NN \tl_show:n }
+\cs_generate_variant:Nn \flag_show:N { c }
+\cs_new_protected:Npn \flag_log:N { \__flag_show:NN \tl_log:n }
+\cs_generate_variant:Nn \flag_log:N { c }
+\cs_new_protected:Npn \__flag_show:NN #1#2
{
- \exp_args:Nc \__kernel_chk_defined:NT { flag~#2 }
- {
- \exp_args:Ne #1
- { \tl_to_str:n { flag~#2~height } = \flag_height:n {#2} }
- }
+ \__kernel_chk_defined:NT #2
+ { \exp_args:Ne #1 { \tl_to_str:n { #2 height } = \flag_height:N #2 } }
}
-\prg_new_conditional:Npnn \flag_if_exist:n #1 { p , T , F , TF }
+\prg_new_eq_conditional:NNn \flag_if_exist:N \cs_if_exist:N
+ { TF , T , F , p }
+\prg_new_eq_conditional:NNn \flag_if_exist:c \cs_if_exist:c
+ { TF , T , F , p }
+\prg_new_conditional:Npnn \flag_if_raised:N #1 { p , T , F , TF }
{
- \cs_if_exist:cTF { flag~#1 }
- { \prg_return_true: } { \prg_return_false: }
- }
-\prg_new_conditional:Npnn \flag_if_raised:n #1 { p , T , F , TF }
- {
- \if_cs_exist:w flag~#1~0 \cs_end:
+ \if_cs_exist:w #1 0 \cs_end:
\prg_return_true:
\else:
\prg_return_false:
\fi:
}
-\cs_new:Npn \flag_height:n #1 { \__flag_height_loop:wn 0; {#1} }
-\cs_new:Npn \__flag_height_loop:wn #1 ; #2
+\prg_generate_conditional_variant:Nnn \flag_if_raised:N
+ { c } { p , T , F , TF }
+\cs_new:Npn \flag_height:N #1 { \__flag_height_loop:wN 0; #1 }
+\cs_new:Npn \__flag_height_loop:wN #1 ; #2
{
- \if_cs_exist:w flag~#2~#1 \cs_end:
- \exp_after:wN \__flag_height_loop:wn \int_value:w \int_eval:w 1 +
- \else:
- \exp_after:wN \__flag_height_end:wn
+ \if_cs_exist:w #2 #1 \cs_end: \else:
+ \exp_after:wN \__flag_height_end:wN
\fi:
- #1 ; {#2}
+ \exp_after:wN \__flag_height_loop:wN
+ \int_value:w \int_eval:w \c_one_int + #1 ; #2
}
-\cs_new:Npn \__flag_height_end:wn #1 ; #2 {#1}
-\cs_new:Npn \flag_raise:n #1
+\cs_new:Npn \__flag_height_end:wN #1 + #2 ; #3 {#2}
+\cs_generate_variant:Nn \flag_height:N { c }
+\cs_new:Npn \flag_raise:N #1
+ { \exp_after:wN \use_none:n \cs:w #1 \flag_height:N #1 \cs_end: }
+\cs_generate_variant:Nn \flag_raise:N { c }
+\cs_new:Npn \flag_ensure_raised:N #1
+ { \exp_after:wN \use_none:n \cs:w #1 0 \cs_end: }
+\cs_generate_variant:Nn \flag_ensure_raised:N { c }
+\cs_new_protected:Npn \flag_new:n #1 { \flag_new:c { l_#1_flag } }
+\cs_new_protected:Npn \flag_clear:n #1 { \flag_clear:c { l_#1_flag } }
+\cs_new_protected:Npn \flag_clear_new:n #1 { \flag_clear_new:c { l_#1_flag } }
+\cs_new:Npn \flag_if_exist_p:n #1 { \flag_if_exist_p:c { l_#1_flag } }
+\cs_new:Npn \flag_if_exist:nT #1 { \flag_if_exist:cT { l_#1_flag } }
+\cs_new:Npn \flag_if_exist:nF #1 { \flag_if_exist:cF { l_#1_flag } }
+\cs_new:Npn \flag_if_exist:nTF #1 { \flag_if_exist:cTF { l_#1_flag } }
+\cs_new:Npn \flag_if_raised_p:n #1 { \flag_if_raised_p:c { l_#1_flag } }
+\cs_new:Npn \flag_if_raised:nT #1 { \flag_if_raised:cT { l_#1_flag } }
+\cs_new:Npn \flag_if_raised:nF #1 { \flag_if_raised:cF { l_#1_flag } }
+\cs_new:Npn \flag_if_raised:nTF #1 { \flag_if_raised:cTF { l_#1_flag } }
+\cs_new:Npn \flag_height:n #1 { \flag_height:c { l_#1_flag } }
+\cs_new:Npn \flag_raise:n #1 { \flag_raise:c { l_#1_flag } }
+\cs_new:Npn \flag_ensure_raised:n #1 { \flag_ensure_raised:c { l_#1_flag } }
+\cs_new_protected:Npn \flag_show:n { \__flag_show:Nn \tl_show:n }
+\cs_new_protected:Npn \flag_log:n { \__flag_show:Nn \tl_log:n }
+\cs_new_protected:Npn \__flag_show:Nn #1#2
{
- \cs:w flag~#1 \exp_after:wN \cs_end:
- \int_value:w \flag_height:n {#1} ;
+ \exp_args:Nc \__kernel_chk_defined:NT { l_#2_flag }
+ {
+ \exp_args:Ne #1
+ { \tl_to_str:n { flag~#2~height } = \flag_height:n {#2} }
+ }
}
-\cs_new:Npn \flag_ensure_raised:n #1
- {
- \if_cs_exist:w flag~#1~0 \cs_end:
- \else:
- \cs:w flag~#1 \cs_end: 0 ;
- \fi:
- }
%% File: l3prg.dtx
\cs_new_eq:NN \if_predicate:w \tex_ifodd:D
\cs_new_protected:Npn \bool_new:N #1 { \cs_new_eq:NN #1 \c_false_bool }
@@ -7439,9 +7469,10 @@
\tex_catcode:D `\^^@ = 2 \exp_stop_f:
\cs_new:Npn \group_align_safe_begin:
{ \exp:w \if_false: { \fi: `^^@ \exp_stop_f: }
+\tex_catcode:D `\^^@ = 1 \exp_stop_f:
+\cs_new:Npn \group_align_safe_end:
+ { \exp:w `^^@ \if_false: } \fi: \exp_stop_f: }
\group_end:
-\cs_new:Npn \group_align_safe_end:
- { \if_int_compare:w `{ = \c_zero_int } \fi: }
\int_new:N \g__kernel_prg_map_int
%% File: l3sys.dtx
\cs_new_protected:Npn \__sys_const:nn #1#2
@@ -7864,7 +7895,7 @@
\tl_new:N \g__sys_backend_tl
\__sys_finalise:n
{
- \__kernel_tl_gset:Ne \g__sys_backend_tl
+ \__kernel_tl_gset:Nx \g__sys_backend_tl
{
\sys_if_engine_xetex:TF
{ xetex }
@@ -7982,9 +8013,9 @@
\cs_new_eq:NN \clist_gset_eq:cN \tl_gset_eq:cN
\cs_new_eq:NN \clist_gset_eq:cc \tl_gset_eq:cc
\cs_new_protected:Npn \clist_set_from_seq:NN
- { \__clist_set_from_seq:NNNN \clist_clear:N \__kernel_tl_set:Ne }
+ { \__clist_set_from_seq:NNNN \clist_clear:N \__kernel_tl_set:Nx }
\cs_new_protected:Npn \clist_gset_from_seq:NN
- { \__clist_set_from_seq:NNNN \clist_gclear:N \__kernel_tl_gset:Ne }
+ { \__clist_set_from_seq:NNNN \clist_gclear:N \__kernel_tl_gset:Nx }
\cs_new_protected:Npn \__clist_set_from_seq:NNNN #1#2#3#4
{
\seq_if_empty:NTF #4
@@ -8009,9 +8040,9 @@
\cs_generate_variant:Nn \clist_gset_from_seq:NN { Nc }
\cs_generate_variant:Nn \clist_gset_from_seq:NN { c , cc }
\cs_new_protected:Npn \clist_concat:NNN
- { \__clist_concat:NNNN \__kernel_tl_set:Ne }
+ { \__clist_concat:NNNN \__kernel_tl_set:Nx }
\cs_new_protected:Npn \clist_gconcat:NNN
- { \__clist_concat:NNNN \__kernel_tl_gset:Ne }
+ { \__clist_concat:NNNN \__kernel_tl_gset:Nx }
\cs_new_protected:Npn \__clist_concat:NNNN #1#2#3#4
{
#1 #2
@@ -8028,9 +8059,9 @@
\prg_new_eq_conditional:NNn \clist_if_exist:c \cs_if_exist:c
{ TF , T , F , p }
\cs_new_protected:Npn \clist_set:Nn #1#2
- { \__kernel_tl_set:Ne #1 { \__clist_sanitize:n {#2} } }
+ { \__kernel_tl_set:Nx #1 { \__clist_sanitize:n {#2} } }
\cs_new_protected:Npn \clist_gset:Nn #1#2
- { \__kernel_tl_gset:Ne #1 { \__clist_sanitize:n {#2} } }
+ { \__kernel_tl_gset:Nx #1 { \__clist_sanitize:n {#2} } }
\cs_generate_variant:Nn \clist_set:Nn { NV , Ne , c , cV , ce }
\cs_generate_variant:Nn \clist_set:Nn { No , Nx , co , cx }
\cs_generate_variant:Nn \clist_gset:Nn { NV , Ne , c , cV , ce }
@@ -8077,9 +8108,9 @@
{ \tl_set:Nn #3 {#1} }
\cs_generate_variant:Nn \clist_get:NN { c }
\cs_new_protected:Npn \clist_pop:NN
- { \__clist_pop:NNN \__kernel_tl_set:Ne }
+ { \__clist_pop:NNN \__kernel_tl_set:Nx }
\cs_new_protected:Npn \clist_gpop:NN
- { \__clist_pop:NNN \__kernel_tl_gset:Ne }
+ { \__clist_pop:NNN \__kernel_tl_gset:Nx }
\cs_new_protected:Npn \__clist_pop:NNN #1#2#3
{
\if_meaning:w #2 \c_empty_clist
@@ -8113,9 +8144,9 @@
}
\prg_generate_conditional_variant:Nnn \clist_get:NN { c } { T , F , TF }
\prg_new_protected_conditional:Npnn \clist_pop:NN #1#2 { T , F , TF }
- { \__clist_pop_TF:NNN \__kernel_tl_set:Ne #1 #2 }
+ { \__clist_pop_TF:NNN \__kernel_tl_set:Nx #1 #2 }
\prg_new_protected_conditional:Npnn \clist_gpop:NN #1#2 { T , F , TF }
- { \__clist_pop_TF:NNN \__kernel_tl_gset:Ne #1 #2 }
+ { \__clist_pop_TF:NNN \__kernel_tl_gset:Nx #1 #2 }
\cs_new_protected:Npn \__clist_pop_TF:NNN #1#2#3
{
\if_meaning:w #2 \c_empty_clist
@@ -8156,9 +8187,9 @@
\cs_generate_variant:Nn \clist_remove_duplicates:N { c }
\cs_generate_variant:Nn \clist_gremove_duplicates:N { c }
\cs_new_protected:Npn \clist_remove_all:Nn
- { \__clist_remove_all:NNNn \clist_set_from_seq:NN \__kernel_tl_set:Ne }
+ { \__clist_remove_all:NNNn \clist_set_from_seq:NN \__kernel_tl_set:Nx }
\cs_new_protected:Npn \clist_gremove_all:Nn
- { \__clist_remove_all:NNNn \clist_gset_from_seq:NN \__kernel_tl_gset:Ne }
+ { \__clist_remove_all:NNNn \clist_gset_from_seq:NN \__kernel_tl_gset:Nx }
\cs_new_protected:Npn \__clist_remove_all:NNNn #1#2#3#4
{
\__clist_if_wrap:nTF {#4}
@@ -8195,9 +8226,9 @@
\cs_generate_variant:Nn \clist_remove_all:Nn { c , NV , cV }
\cs_generate_variant:Nn \clist_gremove_all:Nn { c , NV , cV }
\cs_new_protected:Npn \clist_reverse:N #1
- { \__kernel_tl_set:Ne #1 { \exp_args:No \clist_reverse:n {#1} } }
+ { \__kernel_tl_set:Nx #1 { \exp_args:No \clist_reverse:n {#1} } }
\cs_new_protected:Npn \clist_greverse:N #1
- { \__kernel_tl_gset:Ne #1 { \exp_args:No \clist_reverse:n {#1} } }
+ { \__kernel_tl_gset:Nx #1 { \exp_args:No \clist_reverse:n {#1} } }
\cs_generate_variant:Nn \clist_reverse:N { c }
\cs_generate_variant:Nn \clist_greverse:N { c }
\cs_new:Npn \clist_reverse:n #1
@@ -9580,8 +9611,8 @@
}
\prg_generate_conditional_variant:Nnn \prop_pop:NnN { NV , c , cV } { T , F , TF }
\prg_generate_conditional_variant:Nnn \prop_gpop:NnN { NV , c , cV } { T , F , TF }
-\cs_new_protected:Npn \prop_put:Nnn { \__prop_put:NNnn \__kernel_tl_set:Ne }
-\cs_new_protected:Npn \prop_gput:Nnn { \__prop_put:NNnn \__kernel_tl_gset:Ne }
+\cs_new_protected:Npn \prop_put:Nnn { \__prop_put:NNnn \__kernel_tl_set:Nx }
+\cs_new_protected:Npn \prop_gput:Nnn { \__prop_put:NNnn \__kernel_tl_gset:Nx }
\cs_new_protected:Npn \__prop_put:NNnn #1#2#3#4
{
\tl_set:Nn \l__prop_internal_tl
@@ -9622,9 +9653,9 @@
\cs_generate_variant:Nn \prop_gput:Nnn
{ cno , co , coo , cnx , cVx , cxV , cxx }
\cs_new_protected:Npn \prop_put_if_new:Nnn
- { \__prop_put_if_new:NNnn \__kernel_tl_set:Ne }
+ { \__prop_put_if_new:NNnn \__kernel_tl_set:Nx }
\cs_new_protected:Npn \prop_gput_if_new:Nnn
- { \__prop_put_if_new:NNnn \__kernel_tl_gset:Ne }
+ { \__prop_put_if_new:NNnn \__kernel_tl_gset:Nx }
\cs_new_protected:Npn \__prop_put_if_new:NNnn #1#2#3#4
{
\tl_set:Nn \l__prop_internal_tl
@@ -10755,7 +10786,7 @@
{ \__ior_open_stream:Nn #1 {#2} }
{
\__ior_new:N #1
- \__kernel_tl_set:Ne \l__ior_stream_tl { \int_eval:n {#1} }
+ \__kernel_tl_set:Nx \l__ior_stream_tl { \int_eval:n {#1} }
\__ior_open_stream:Nn #1 {#2}
}
}
@@ -10993,7 +11024,7 @@
\tl_new:N \l__iow_file_name_tl
\cs_new_protected:Npn \iow_open:Nn #1#2
{
- \__kernel_tl_set:Ne \l__iow_file_name_tl
+ \__kernel_tl_set:Nx \l__iow_file_name_tl
{ \__kernel_file_name_sanitize:n {#2} }
\iow_close:N #1
\seq_gpop:NNTF \g__iow_streams_seq \l__iow_stream_tl
@@ -11000,7 +11031,7 @@
{ \__iow_open_stream:NV #1 \l__iow_file_name_tl }
{
\__iow_new:N #1
- \__kernel_tl_set:Ne \l__iow_stream_tl { \int_eval:n {#1} }
+ \__kernel_tl_set:Nx \l__iow_stream_tl { \int_eval:n {#1} }
\__iow_open_stream:NV #1 \l__iow_file_name_tl
}
}
@@ -11113,7 +11144,7 @@
\cs_new:Npn \__iow_unindent:w { }
\cs_new_protected:Npn \__iow_set_indent:n #1
{
- \__kernel_tl_set:Ne \l__iow_one_indent_tl
+ \__kernel_tl_set:Nx \l__iow_one_indent_tl
{ \exp_args:No \__kernel_str_to_other_fast:n { \tl_to_str:n {#1} } }
\int_set:Nn \l__iow_one_indent_int
{ \str_count:N \l__iow_one_indent_tl }
@@ -11188,11 +11219,11 @@
\cs_set_eq:NN \iow_indent:n \__iow_indent:n
#3
\cs_set_eq:NN \protect \token_to_str:N
- \__kernel_tl_set:Ne \l__iow_wrap_tl {#1}
+ \__kernel_tl_set:Nx \l__iow_wrap_tl {#1}
\cs_set_eq:NN \iow_wrap_allow_break: \__iow_wrap_allow_break_error:
\cs_set_eq:NN \iow_indent:n \__iow_indent_error:n
- \__kernel_tl_set:Ne \l__iow_newline_tl { \iow_newline: #2 }
- \__kernel_tl_set:Ne \l__iow_newline_tl { \tl_to_str:N \l__iow_newline_tl }
+ \__kernel_tl_set:Nx \l__iow_newline_tl { \iow_newline: #2 }
+ \__kernel_tl_set:Nx \l__iow_newline_tl { \tl_to_str:N \l__iow_newline_tl }
\int_set:Nn \l__iow_line_target_int
{ \l_iow_line_count_int - \str_count:N \l__iow_newline_tl + 1 }
\int_compare:nNnT { \l__iow_line_target_int } < 0
@@ -11208,12 +11239,12 @@
\cs_generate_variant:Nn \iow_wrap:nnnN { ne }
\cs_new_protected:Npn \__iow_wrap_do:
{
- \__kernel_tl_set:Ne \l__iow_wrap_tl
+ \__kernel_tl_set:Nx \l__iow_wrap_tl
{
\exp_args:No \__kernel_str_to_other_fast:n \l__iow_wrap_tl
\c__iow_wrap_end_marker_tl
}
- \__kernel_tl_set:Ne \l__iow_wrap_tl
+ \__kernel_tl_set:Nx \l__iow_wrap_tl
{
\exp_after:wN \__iow_wrap_fix_newline:w \l__iow_wrap_tl
^^J \q__iow_nil ^^J \s__iow_stop
@@ -11371,7 +11402,7 @@
}
\cs_new_protected:Npn \__iow_wrap_allow_break:n #1
{
- \__kernel_tl_set:Ne \l__iow_line_tl
+ \__kernel_tl_set:Nx \l__iow_line_tl
{ \l__iow_line_tl \__iow_wrap_trim:N \l__iow_line_part_tl }
\bool_set_false:N \l__iow_line_break_bool
\tl_if_empty:NTF \l__iow_line_part_tl
@@ -11391,7 +11422,7 @@
\tl_put_right:Ne \l__iow_line_tl { \l__iow_line_part_tl }
\bool_set_false:N \l__iow_line_break_bool
\int_sub:Nn \l__iow_indent_int { \l__iow_one_indent_int }
- \__kernel_tl_set:Ne \l__iow_indent_tl
+ \__kernel_tl_set:Nx \l__iow_indent_tl
{ \exp_after:wN \__iow_unindent:w \l__iow_indent_tl }
\__iow_wrap_chunk:nw {#1}
}
@@ -11410,9 +11441,9 @@
}
\cs_new_protected:Npn \__iow_wrap_store_do:n #1
{
- \__kernel_tl_set:Ne \l__iow_line_tl
+ \__kernel_tl_set:Nx \l__iow_line_tl
{ \l__iow_line_tl \l__iow_line_part_tl }
- \__kernel_tl_set:Ne \l__iow_wrap_tl
+ \__kernel_tl_set:Nx \l__iow_wrap_tl
{
\l__iow_wrap_tl
\l__iow_newline_tl
@@ -11715,7 +11746,7 @@
\cs_generate_variant:Nn \file_get_full_name:nN { V }
\prg_new_protected_conditional:Npnn \file_get_full_name:nN #1#2 { T , F , TF }
{
- \__kernel_tl_set:Ne #2
+ \__kernel_tl_set:Nx #2
{ \file_full_name:n {#1} }
\tl_if_empty:NTF #2
{ \prg_return_false: }
@@ -11842,7 +11873,7 @@
{ V } { T , F , TF }
\cs_new_protected:Npn \__file_get_details:nnN #1#2#3
{
- \__kernel_tl_set:Ne #3
+ \__kernel_tl_set:Nx #3
{ \use:c { file_ #2 :n } {#1} }
\tl_if_empty:NTF #3
{ \prg_return_false: }
@@ -11857,7 +11888,7 @@
\prg_new_protected_conditional:Npnn \file_get_hex_dump:nnnN #1#2#3#4
{ T , F , TF }
{
- \__kernel_tl_set:Ne #4
+ \__kernel_tl_set:Nx #4
{ \file_hex_dump:nnn {#1} {#2} {#3} }
\tl_if_empty:NTF #4
{ \prg_return_false: }
@@ -13116,6 +13147,14 @@
{ \use:n }
{#1}
}
+\cs_new_protected:Npn \__keys_cs_undefine:c #1
+ {
+ \if_cs_exist:w #1 \cs_end:
+ \else:
+ \use_i:nnnn
+ \fi:
+ \cs_set_eq:cN {#1} \tex_undefined:D
+ }
\cs_new_protected:Npn \keys_define:nn
{ \__keys_define:onn \l__keys_module_str }
\cs_generate_variant:Nn \keys_define:nn { ne , nx }
@@ -13300,9 +13339,8 @@
{
\tl_if_empty:nTF {#1}
{
- \cs_set_eq:cN
+ \__keys_cs_undefine:c
{ \c__keys_default_root_str \l_keys_path_str }
- \tex_undefined:D
}
{
\cs_set_nopar:cpe
@@ -13313,11 +13351,11 @@
}
\cs_new_protected:Npn \__keys_groups_set:n #1
{
- \clist_set:Nn \l__keys_groups_clist {#1}
+ \clist_set:Ne \l__keys_groups_clist { \tl_to_str:n {#1} }
\clist_if_empty:NTF \l__keys_groups_clist
{
- \cs_set_eq:cN { \c__keys_groups_root_str \l_keys_path_str }
- \tex_undefined:D
+ \__keys_cs_undefine:c
+ { \c__keys_groups_root_str \l_keys_path_str }
}
{
\cs_set_eq:cN { \c__keys_groups_root_str \l_keys_path_str }
@@ -13404,9 +13442,8 @@
\clist_map_inline:nn
{ code , default , groups , inherit , type , check }
{
- \cs_set_eq:cN
+ \__keys_cs_undefine:c
{ \tl_use:c { c__keys_ ##1 _root_str } \l_keys_path_str }
- \tex_undefined:D
}
}
\cs_new_protected:Npn \__keys_value_requirement:nn #1#2
@@ -13425,9 +13462,8 @@
{ \c__keys_check_root_str \l_keys_path_str }
{ __keys_check_ #1 : }
{
- \cs_set_eq:cN
+ \__keys_cs_undefine:c
{ \c__keys_check_root_str \l_keys_path_str }
- \tex_undefined:D
}
}
}
@@ -13753,8 +13789,8 @@
{
\clist_clear:N \l__keys_unused_clist
\__keys_set_known:nnn {#2} {#3} {#4}
- \__kernel_tl_set:Ne #5 { \exp_not:o \l__keys_unused_clist }
- \__kernel_tl_set:Ne \l__keys_unused_clist { \exp_not:n {#1} }
+ \__kernel_tl_set:Nx #5 { \exp_not:o \l__keys_unused_clist }
+ \__kernel_tl_set:Nx \l__keys_unused_clist { \exp_not:n {#1} }
}
\cs_new_protected:Npn \keys_set_known:nn #1#2
{ \__keys_set_known:nnn \q__keys_no_value {#1} {#2} }
@@ -13778,30 +13814,30 @@
{ \exp_not:o \l__keys_relative_tl }
}
}
-\cs_new_protected:Npn \keys_set_filter:nnnN #1#2#3#4
+\cs_new_protected:Npn \keys_set_exclude_groups:nnnN #1#2#3#4
{
- \exp_args:No \__keys_set_filter:nnnnnN
+ \exp_args:No \__keys_set_exclude_groups:nnnnnN
\l__keys_unused_clist
\q__keys_no_value {#1} {#2} {#3} #4
}
-\cs_generate_variant:Nn \keys_set_filter:nnnN { nnV , nnv , nno }
-\cs_new_protected:Npn \keys_set_filter:nnnnN #1#2#3#4#5
+\cs_generate_variant:Nn \keys_set_exclude_groups:nnnN { nnV , nnv , nno }
+\cs_new_protected:Npn \keys_set_exclude_groups:nnnnN #1#2#3#4#5
{
- \exp_args:No \__keys_set_filter:nnnnnN
+ \exp_args:No \__keys_set_exclude_groups:nnnnnN
\l__keys_unused_clist {#4} {#1} {#2} {#3} #5
}
-\cs_generate_variant:Nn \keys_set_filter:nnnnN { nnV , nnv , nno }
-\cs_new_protected:Npn \__keys_set_filter:nnnnnN #1#2#3#4#5#6
+\cs_generate_variant:Nn \keys_set_exclude_groups:nnnnN { nnV , nnv , nno }
+\cs_new_protected:Npn \__keys_set_exclude_groups:nnnnnN #1#2#3#4#5#6
{
\clist_clear:N \l__keys_unused_clist
- \__keys_set_filter:nnnn {#2} {#3} {#4} {#5}
- \__kernel_tl_set:Ne #6 { \exp_not:o \l__keys_unused_clist }
- \__kernel_tl_set:Ne \l__keys_unused_clist { \exp_not:n {#1} }
+ \__keys_set_exclude_groups:nnnn {#2} {#3} {#4} {#5}
+ \__kernel_tl_set:Nx #6 { \exp_not:o \l__keys_unused_clist }
+ \__kernel_tl_set:Nx \l__keys_unused_clist { \exp_not:n {#1} }
}
-\cs_new_protected:Npn \keys_set_filter:nnn #1#2#3
- {\__keys_set_filter:nnnn \q__keys_no_value {#1} {#2} {#3} }
-\cs_generate_variant:Nn \keys_set_filter:nnn { nnV , nnv , nno }
-\cs_new_protected:Npn \__keys_set_filter:nnnn #1#2#3#4
+\cs_new_protected:Npn \keys_set_exclude_groups:nnn #1#2#3
+ {\__keys_set_exclude_groups:nnnn \q__keys_no_value {#1} {#2} {#3} }
+\cs_generate_variant:Nn \keys_set_exclude_groups:nnn { nnV , nnv , nno }
+\cs_new_protected:Npn \__keys_set_exclude_groups:nnnn #1#2#3#4
{
\use:e
{
@@ -13845,7 +13881,8 @@
{ \exp_args:No \__keys_set_selective:nnnn \l__keys_selective_seq }
\cs_new_protected:Npn \__keys_set_selective:nnnn #1#2#3#4
{
- \seq_set_from_clist:Nn \l__keys_selective_seq {#3}
+ \exp_args:NNe \seq_set_from_clist:Nn
+ \l__keys_selective_seq { \tl_to_str:n {#3} }
\__keys_set:nn {#2} {#4}
\tl_set:Nn \l__keys_selective_seq {#1}
}
@@ -13869,7 +13906,7 @@
}
\cs_new_protected:Npn \__keys_set_keyval:nnn #1#2#3
{
- \__kernel_tl_set:Ne \l_keys_path_str
+ \__kernel_tl_set:Nx \l_keys_path_str
{
\tl_if_blank:nF {#1}
{ #1 / }
@@ -13932,13 +13969,10 @@
\bool_set_false:N \l__keys_tmp_bool
\seq_map_inline:Nn \l__keys_selective_seq
{
- \clist_map_inline:Nn \l__keys_groups_clist
+ \clist_if_in:NnT \l__keys_groups_clist {##1}
{
- \str_if_eq:nnT {##1} {####1}
- {
- \bool_set_true:N \l__keys_tmp_bool
- \clist_map_break:n \seq_map_break:
- }
+ \bool_set_true:N \l__keys_tmp_bool
+ \seq_map_break:
}
}
\bool_if:NTF \l__keys_tmp_bool
@@ -14079,7 +14113,7 @@
}
\cs_new_protected:Npn \__keys_store_unused_aux:
{
- \__kernel_tl_set:Ne \l__keys_relative_tl
+ \__kernel_tl_set:Nx \l__keys_relative_tl
{ \exp_args:No \__keys_trim_spaces:n \l__keys_relative_tl }
\use:e
{
@@ -14966,10 +15000,10 @@
\prop_gput:Nnn \g_msg_module_name_prop { fp } { LaTeX }
\prop_gput:Nnn \g_msg_module_type_prop { fp } { }
%% File: l3fp-traps.dtx
-\flag_new:n { fp_invalid_operation }
-\flag_new:n { fp_division_by_zero }
-\flag_new:n { fp_overflow }
-\flag_new:n { fp_underflow }
+\flag_new:N \l_fp_invalid_operation_flag
+\flag_new:N \l_fp_division_by_zero_flag
+\flag_new:N \l_fp_overflow_flag
+\flag_new:N \l_fp_underflow_flag
\cs_new_protected:Npn \fp_trap:nn #1#2
{
\cs_if_exist_use:cF { __fp_trap_#1_set_#2: }
@@ -15000,7 +15034,7 @@
{
#1
\__fp_error:nnfn { invalid } {##2} { \fp_to_tl:n { ##3; } } { }
- \flag_ensure_raised:n { fp_invalid_operation }
+ \flag_ensure_raised:N \l_fp_invalid_operation_flag
##1
}
\exp_args:Nno \use:n
@@ -15009,7 +15043,7 @@
#1
\__fp_error:nffn { invalid-ii }
{ \fp_to_tl:n { ##2; } } { \fp_to_tl:n { ##3; } } {##1}
- \flag_ensure_raised:n { fp_invalid_operation }
+ \flag_ensure_raised:N \l_fp_invalid_operation_flag
\exp_after:wN \c_nan_fp
}
\exp_args:Nno \use:n
@@ -15017,7 +15051,7 @@
{
#1
\__fp_error:nffn { invalid } {##1} {##2} { }
- \flag_ensure_raised:n { fp_invalid_operation }
+ \flag_ensure_raised:N \l_fp_invalid_operation_flag
\exp_after:wN \c_nan_fp
}
}
@@ -15034,7 +15068,7 @@
{
#1
\__fp_error:nnfn { zero-div } {##2} { \fp_to_tl:n { ##3; } } { }
- \flag_ensure_raised:n { fp_division_by_zero }
+ \flag_ensure_raised:N \l_fp_division_by_zero_flag
\exp_after:wN ##1
}
\exp_args:Nno \use:n
@@ -15043,7 +15077,7 @@
#1
\__fp_error:nffn { zero-div-ii }
{ \fp_to_tl:n { ##3; } } { \fp_to_tl:n { ##4; } } {##2}
- \flag_ensure_raised:n { fp_division_by_zero }
+ \flag_ensure_raised:N \l_fp_division_by_zero_flag
\exp_after:wN ##1
}
}
@@ -15074,7 +15108,7 @@
{ \fp_to_tl:n { \s__fp \__fp_chk:w ##1##2##3; } }
{ \token_if_eq_meaning:NNF 0 ##2 { - } #4 }
{#2}
- \flag_ensure_raised:n { fp_#2 }
+ \flag_ensure_raised:c { l_fp_#2_flag }
#3 ##2
}
}
@@ -16782,9 +16816,9 @@
{ \cs_new_eq:NN #1 \c_zero_fp }
\cs_generate_variant:Nn \fp_new:N {c}
\cs_new_protected:Npn \fp_set:Nn #1#2
- { \__kernel_tl_set:Ne #1 { \exp_not:f { \__fp_parse:n {#2} } } }
+ { \__kernel_tl_set:Nx #1 { \exp_not:f { \__fp_parse:n {#2} } } }
\cs_new_protected:Npn \fp_gset:Nn #1#2
- { \__kernel_tl_gset:Ne #1 { \exp_not:f { \__fp_parse:n {#2} } } }
+ { \__kernel_tl_gset:Nx #1 { \exp_not:f { \__fp_parse:n {#2} } } }
\cs_new_protected:Npn \fp_const:Nn #1#2
{ \tl_const:Ne #1 { \exp_not:f { \__fp_parse:n {#2} } } }
\cs_generate_variant:Nn \fp_set:Nn {c}
@@ -21110,7 +21144,7 @@
\__fp_variable_set_parsing:Nn \cs_gset_eq:NN {#1}
}
}
-\flag_new:n { __fp_symbolic }
+\flag_new:N \l__fp_symbolic_flag
\cs_new_protected:Npn \fp_set_variable:nn #1
{
\exp_args:No \__fp_set_variable:nn { \tl_to_str:n {#1} }
@@ -21123,10 +21157,10 @@
\__fp_variable_set_parsing:Nn \cs_set_eq:NN {#1}
\fp_set:Nn \l__fp_symbolic_fp {#2}
\cs_set_nopar:cpn { l__fp_variable_#1_fp }
- { \flag_ensure_raised:n { __fp_symbolic } \c_nan_fp }
- \flag_clear:n { __fp_symbolic }
+ { \flag_ensure_raised:N \l__fp_symbolic_flag \c_nan_fp }
+ \flag_clear:N \l__fp_symbolic_flag
\fp_set:cn { l__fp_variable_#1_fp } { \l__fp_symbolic_fp }
- \flag_if_raised:nT { __fp_symbolic }
+ \flag_if_raised:NT \l__fp_symbolic_flag
{
\msg_error:nneee { fp } { id-loop }
{ #1 }
@@ -22207,7 +22241,7 @@
{
\group_begin:
\__sort_main:NNNn \tl_map_inline:Nn \tl_map_break:n #2 {#3}
- \__kernel_tl_gset:Ne \g__sort_internal_tl
+ \__kernel_tl_gset:Nx \g__sort_internal_tl
{ \__sort_tl_toks:w \l__sort_min_int ; }
\group_end:
#1 #2 \g__sort_internal_tl
@@ -22550,8 +22584,8 @@
\prop_gput:Nnn \g__str_alias_prop { default } { utf8 }
}
\bool_new:N \g__str_error_bool
-\flag_new:n { __str_byte }
-\flag_new:n { __str_error }
+\flag_new:N \l__str_byte_flag
+\flag_new:N \l__str_error_flag
\prg_new_conditional:Npnn \__str_if_contains_char:Nn #1#2 { T , TF }
{
\exp_after:wN \__str_if_contains_char_aux:nn \exp_after:wN {#1} {#2}
@@ -22604,7 +22638,7 @@
\fi:
}
\group_begin:
- \__kernel_tl_set:Ne \l__str_internal_tl { \tl_to_str:n { 0123456789ABCDEF } }
+ \__kernel_tl_set:Nx \l__str_internal_tl { \tl_to_str:n { 0123456789ABCDEF } }
\tl_map_inline:Nn \l__str_internal_tl
{
\tl_map_inline:Nn \l__str_internal_tl
@@ -22649,7 +22683,7 @@
}
\cs_new_protected:Npn \__str_convert_gmap:N #1
{
- \__kernel_tl_gset:Ne \g__str_result_tl
+ \__kernel_tl_gset:Nx \g__str_result_tl
{
\exp_after:wN \__str_convert_gmap_loop:NN
\exp_after:wN #1
@@ -22665,7 +22699,7 @@
}
\cs_new_protected:Npn \__str_convert_gmap_internal:N #1
{
- \__kernel_tl_gset:Ne \g__str_result_tl
+ \__kernel_tl_gset:Nx \g__str_result_tl
{
\exp_after:wN \__str_convert_gmap_internal_loop:Nww
\exp_after:wN #1
@@ -22679,16 +22713,16 @@
#1 {#3}
\__str_convert_gmap_internal_loop:Nww #1
}
-\cs_new_protected:Npn \__str_if_flag_error:nne #1
+\cs_new_protected:Npn \__str_if_flag_error:Nne #1
{
- \flag_if_raised:nTF {#1}
+ \flag_if_raised:NTF #1
{ \msg_error:nne { str } }
{ \use_none:nn }
}
-\cs_new_protected:Npn \__str_if_flag_no_error:nne #1#2#3
- { \flag_if_raised:nT {#1} { \bool_gset_true:N \g__str_error_bool } }
-\cs_new:Npn \__str_if_flag_times:nT #1#2
- { \flag_if_raised:nT {#1} { #2~(x \flag_height:n {#1} ) } }
+\cs_new_protected:Npn \__str_if_flag_no_error:Nne #1#2#3
+ { \flag_if_raised:NT #1 { \bool_gset_true:N \g__str_error_bool } }
+\cs_new:Npn \__str_if_flag_times:NT #1#2
+ { \flag_if_raised:NT #1 { #2~(x \flag_height:N #1 ) } }
\cs_new_protected:Npn \str_set_convert:Nnnn
{ \__str_convert:nNNnnn { } \tl_set_eq:NN }
\cs_new_protected:Npn \str_gset_convert:Nnnn
@@ -22698,7 +22732,7 @@
{
\bool_gset_false:N \g__str_error_bool
\__str_convert:nNNnnn
- { \cs_set_eq:NN \__str_if_flag_error:nne \__str_if_flag_no_error:nne }
+ { \cs_set_eq:NN \__str_if_flag_error:Nne \__str_if_flag_no_error:Nne }
\tl_set_eq:NN #1 {#2} {#3} {#4}
\bool_if:NTF \g__str_error_bool \prg_return_false: \prg_return_true:
}
@@ -22707,7 +22741,7 @@
{
\bool_gset_false:N \g__str_error_bool
\__str_convert:nNNnnn
- { \cs_set_eq:NN \__str_if_flag_error:nne \__str_if_flag_no_error:nne }
+ { \cs_set_eq:NN \__str_if_flag_error:Nne \__str_if_flag_no_error:Nne }
\tl_gset_eq:NN #1 {#2} {#3} {#4}
\bool_if:NTF \g__str_error_bool \prg_return_false: \prg_return_true:
}
@@ -22715,7 +22749,7 @@
{
\group_begin:
#1
- \__kernel_tl_gset:Ne \g__str_result_tl { \__kernel_str_to_other_fast:n {#4} }
+ \__kernel_tl_gset:Nx \g__str_result_tl { \__kernel_str_to_other_fast:n {#4} }
\exp_after:wN \__str_convert:wwwnn
\tl_to_str:n {#5} /// \s__str_stop
{ decode } { unescape }
@@ -22726,7 +22760,7 @@
{ encode } { escape }
\use_ii_i:nn
\__str_convert_encode_:
- \__kernel_tl_gset:Ne \g__str_result_tl
+ \__kernel_tl_gset:Nx \g__str_result_tl
{ \tl_to_str:V \g__str_result_tl }
\group_end:
#2 #3 \g__str_result_tl
@@ -22830,7 +22864,7 @@
\if_int_compare:w `#1 < 256 \exp_stop_f:
#1
\else:
- \flag_raise:n { __str_byte }
+ \flag_raise:N \l__str_byte_flag
\fi:
\__str_filter_bytes_aux:N
}
@@ -22844,10 +22878,10 @@
{
\cs_new_protected:Npn \__str_convert_unescape_:
{
- \flag_clear:n { __str_byte }
- \__kernel_tl_gset:Ne \g__str_result_tl
+ \flag_clear:N \l__str_byte_flag
+ \__kernel_tl_gset:Nx \g__str_result_tl
{ \exp_args:No \__str_filter_bytes:n \g__str_result_tl }
- \__str_if_flag_error:nne { __str_byte } { non-byte } { bytes }
+ \__str_if_flag_error:Nne \l__str_byte_flag { non-byte } { bytes }
}
}
{ \cs_new_protected:Npn \__str_convert_unescape_: { } }
@@ -22872,15 +22906,15 @@
{
\cs_new_protected:Npn \__str_convert_encode_:
{
- \flag_clear:n { __str_error }
+ \flag_clear:N \l__str_error_flag
\__str_convert_gmap_internal:N \__str_encode_native_char:n
- \__str_if_flag_error:nne { __str_error }
+ \__str_if_flag_error:Nne \l__str_error_flag
{ native-overflow } { }
}
\cs_new:Npn \__str_encode_native_char:n #1
{
\if_int_compare:w #1 > \c__str_max_byte_int
- \flag_raise:n { __str_error }
+ \flag_raise:N \l__str_error_flag
?
\else:
\char_generate:nn {#1} {12}
@@ -22897,7 +22931,7 @@
\cs_new_protected:Npn \__str_convert_decode_clist:
{
\clist_gset:No \g__str_result_tl \g__str_result_tl
- \__kernel_tl_gset:Ne \g__str_result_tl
+ \__kernel_tl_gset:Nx \g__str_result_tl
{
\exp_args:No \clist_map_function:nN
\g__str_result_tl \__str_decode_clist_char:n
@@ -22908,7 +22942,7 @@
\cs_new_protected:Npn \__str_convert_encode_clist:
{
\__str_convert_gmap_internal:N \__str_encode_clist_char:n
- \__kernel_tl_gset:Ne \g__str_result_tl { \tl_tail:N \g__str_result_tl }
+ \__kernel_tl_gset:Nx \g__str_result_tl { \tl_tail:N \g__str_result_tl }
}
\cs_new:Npn \__str_encode_clist_char:n #1 { , #1 }
\cs_new_protected:Npn \__str_declare_eight_bit_encoding:nnnn #1
@@ -22966,9 +23000,9 @@
\exp_not:N \__str_decode_eight_bit_aux:Nn
\exp_not:c { g__str_decode_#1_intarray }
}
- \flag_clear:n { __str_error }
+ \flag_clear:N \l__str_error_flag
\__str_convert_gmap:N \__str_tmp:w
- \__str_if_flag_error:nne { __str_error } { decode-8-bit } {#1}
+ \__str_if_flag_error:Nne \l__str_error_flag { decode-8-bit } {#1}
}
\cs_new:Npn \__str_decode_eight_bit_aux:Nn #1#2
{
@@ -22980,7 +23014,7 @@
\cs_new:Npn \__str_decode_eight_bit_aux:n #1
{
\if_int_compare:w #1 < \c_zero_int
- \flag_raise:n { __str_error }
+ \flag_raise:N \l__str_error_flag
\int_value:w \c__str_replacement_char_int
\else:
#1
@@ -22995,9 +23029,9 @@
\exp_not:c { g__str_encode_#1_intarray }
\exp_not:c { g__str_decode_#1_intarray }
}
- \flag_clear:n { __str_error }
+ \flag_clear:N \l__str_error_flag
\__str_convert_gmap_internal:N \__str_tmp:w
- \__str_if_flag_error:nne { __str_error } { encode-8-bit } {#1}
+ \__str_if_flag_error:Nne \l__str_error_flag { encode-8-bit } {#1}
}
\cs_new:Npn \__str_encode_eight_bit_aux:NNn #1#2#3
{
@@ -23013,7 +23047,7 @@
{
\int_compare:nNnTF { \intarray_item:Nn #3 { 1 + #1 } } = {#2}
{ \__str_output_byte:n {#1} }
- { \flag_raise:n { __str_error } }
+ { \flag_raise:N \l__str_error_flag }
}
\msg_new:nnn { str } { unknown-esc }
{ Escaping~scheme~'#1'~(filtered:~'#2')~unknown. }
@@ -23064,9 +23098,9 @@
\cs_new_protected:Npn \__str_convert_unescape_hex:
{
\group_begin:
- \flag_clear:n { __str_error }
+ \flag_clear:N \l__str_error_flag
\int_set:Nn \tex_escapechar:D { 92 }
- \__kernel_tl_gset:Ne \g__str_result_tl
+ \__kernel_tl_gset:Nx \g__str_result_tl
{
\__str_output_byte:w "
\exp_last_unbraced:Nf \__str_unescape_hex_auxi:N
@@ -23075,7 +23109,7 @@
\prg_break_point:
\__str_output_end:
}
- \__str_if_flag_error:nne { __str_error } { unescape-hex } { }
+ \__str_if_flag_error:Nne \l__str_error_flag { unescape-hex } { }
\group_end:
}
\cs_new:Npn \__str_unescape_hex_auxi:N #1
@@ -23084,7 +23118,7 @@
\__str_hexadecimal_use:NTF #1
{ \__str_unescape_hex_auxii:N }
{
- \flag_raise:n { __str_error }
+ \flag_raise:N \l__str_error_flag
\__str_unescape_hex_auxi:N
}
}
@@ -23097,7 +23131,7 @@
\__str_output_byte:w " \__str_unescape_hex_auxi:N
}
{
- \flag_raise:n { __str_error }
+ \flag_raise:N \l__str_error_flag
\__str_unescape_hex_auxii:N
}
}
@@ -23112,17 +23146,17 @@
\cs_new_protected:cpn { __str_convert_unescape_#2: }
{
\group_begin:
- \flag_clear:n { __str_byte }
- \flag_clear:n { __str_error }
+ \flag_clear:N \l__str_byte_flag
+ \flag_clear:N \l__str_error_flag
\int_set:Nn \tex_escapechar:D { 92 }
- \__kernel_tl_gset:Ne \g__str_result_tl
+ \__kernel_tl_gset:Nx \g__str_result_tl
{
\exp_after:wN #3 \g__str_result_tl
#1 ? { ? \prg_break: }
\prg_break_point:
}
- \__str_if_flag_error:nne { __str_byte } { non-byte } { #2 }
- \__str_if_flag_error:nne { __str_error } { unescape-#2 } { }
+ \__str_if_flag_error:Nne \l__str_byte_flag { non-byte } { #2 }
+ \__str_if_flag_error:Nne \l__str_error_flag { unescape-#2 } { }
\group_end:
}
\cs_new:Npn #3 ##1#1##2##3
@@ -23135,12 +23169,12 @@
\__str_hexadecimal_use:NTF ##3
{ }
{
- \flag_raise:n { __str_error }
+ \flag_raise:N \l__str_error_flag
* 0 + `#1 \use_i:nn
}
}
{
- \flag_raise:n { __str_error }
+ \flag_raise:N \l__str_error_flag
0 + `#1 \use_i:nn
}
\__str_output_end:
@@ -23165,23 +23199,23 @@
\cs_new_protected:Npn \__str_convert_unescape_string:
{
\group_begin:
- \flag_clear:n { __str_byte }
- \flag_clear:n { __str_error }
+ \flag_clear:N \l__str_byte_flag
+ \flag_clear:N \l__str_error_flag
\int_set:Nn \tex_escapechar:D { 92 }
- \__kernel_tl_gset:Ne \g__str_result_tl
+ \__kernel_tl_gset:Nx \g__str_result_tl
{
\exp_after:wN \__str_unescape_string_newlines:wN
\g__str_result_tl \prg_break: ^^M ?
\prg_break_point:
}
- \__kernel_tl_gset:Ne \g__str_result_tl
+ \__kernel_tl_gset:Nx \g__str_result_tl
{
\exp_after:wN \__str_unescape_string_loop:wNNN
\g__str_result_tl #1 ?? { ? \prg_break: }
\prg_break_point:
}
- \__str_if_flag_error:nne { __str_byte } { non-byte } { string }
- \__str_if_flag_error:nne { __str_error } { unescape-string } { }
+ \__str_if_flag_error:Nne \l__str_byte_flag { non-byte } { string }
+ \__str_if_flag_error:Nne \l__str_error_flag { unescape-string } { }
\group_end:
}
}
@@ -23221,7 +23255,7 @@
{ ^^J } { 0 - 1 }
}
{
- \flag_raise:n { __str_error }
+ \flag_raise:N \l__str_error_flag
0 - 1 \use_i:nn
}
}
@@ -23347,19 +23381,19 @@
#5 \s__str_stop
\__str_output_byte:n { #2 - 64 * ( #1 - 2 ) }
}
-\flag_clear_new:n { __str_missing }
-\flag_clear_new:n { __str_extra }
-\flag_clear_new:n { __str_overlong }
-\flag_clear_new:n { __str_overflow }
+\flag_clear_new:N \l__str_missing_flag
+\flag_clear_new:N \l__str_extra_flag
+\flag_clear_new:N \l__str_overlong_flag
+\flag_clear_new:N \l__str_overflow_flag
\msg_new:nnnn { str } { utf8-decode }
{
Invalid~UTF-8~string:
\exp_last_unbraced:Nf \use_none:n
{
- \__str_if_flag_times:nT { __str_missing } { ,~missing~continuation~byte }
- \__str_if_flag_times:nT { __str_extra } { ,~extra~continuation~byte }
- \__str_if_flag_times:nT { __str_overlong } { ,~overlong~form }
- \__str_if_flag_times:nT { __str_overflow } { ,~code~point~too~large }
+ \__str_if_flag_times:NT \l__str_missing_flag { ,~missing~continuation~byte }
+ \__str_if_flag_times:NT \l__str_extra_flag { ,~extra~continuation~byte }
+ \__str_if_flag_times:NT \l__str_overlong_flag { ,~overlong~form }
+ \__str_if_flag_times:NT \l__str_overflow_flag { ,~code~point~too~large }
}
.
}
@@ -23374,18 +23408,18 @@
Code~point~ <~1114112:~11110xxx~10xxxxxx~10xxxxxx~10xxxxxx \\
}
Bytes~of~the~form~10xxxxxx~are~called~continuation~bytes.
- \flag_if_raised:nT { __str_missing }
+ \flag_if_raised:NT \l__str_missing_flag
{
\\\\
A~leading~byte~(in~the~range~[192,255])~was~not~followed~by~
the~appropriate~number~of~continuation~bytes.
}
- \flag_if_raised:nT { __str_extra }
+ \flag_if_raised:NT \l__str_extra_flag
{
\\\\
LaTeX~came~across~a~continuation~byte~when~it~was~not~expected.
}
- \flag_if_raised:nT { __str_overlong }
+ \flag_if_raised:NT \l__str_overlong_flag
{
\\\\
Every~Unicode~code~point~must~be~expressed~in~the~shortest~
@@ -23392,7 +23426,7 @@
possible~form.~For~instance,~'0xC0'~'0x83'~is~not~a~valid~
representation~for~the~code~point~3.
}
- \flag_if_raised:nT { __str_overflow }
+ \flag_if_raised:NT \l__str_overflow_flag
{
\\\\
Unicode~limits~code~points~to~the~range~[0,1114111].
@@ -23402,18 +23436,18 @@
\prop_gput:Nnn \g_msg_module_type_prop { str } { }
\cs_new_protected:cpn { __str_convert_decode_utf8: }
{
- \flag_clear:n { __str_error }
- \flag_clear:n { __str_missing }
- \flag_clear:n { __str_extra }
- \flag_clear:n { __str_overlong }
- \flag_clear:n { __str_overflow }
- \__kernel_tl_gset:Ne \g__str_result_tl
+ \flag_clear:N \l__str_error_flag
+ \flag_clear:N \l__str_missing_flag
+ \flag_clear:N \l__str_extra_flag
+ \flag_clear:N \l__str_overlong_flag
+ \flag_clear:N \l__str_overflow_flag
+ \__kernel_tl_gset:Nx \g__str_result_tl
{
\exp_after:wN \__str_decode_utf_viii_start:N \g__str_result_tl
{ \prg_break: \__str_decode_utf_viii_end: }
\prg_break_point:
}
- \__str_if_flag_error:nne { __str_error } { utf8-decode } { }
+ \__str_if_flag_error:Nne \l__str_error_flag { utf8-decode } { }
}
\cs_new:Npn \__str_decode_utf_viii_start:N #1
{
@@ -23423,8 +23457,8 @@
\if_int_compare:w `#1 < "80 \exp_stop_f:
\int_value:w `#1
\else:
- \flag_raise:n { __str_extra }
- \flag_raise:n { __str_error }
+ \flag_raise:N \l__str_extra_flag
+ \flag_raise:N \l__str_error_flag
\int_use:N \c__str_replacement_char_int
\fi:
\else:
@@ -23447,8 +23481,8 @@
\int_value:w \int_eval:n { #1 * "40 + `#3 - "80 } \exp_after:wN
\else:
\s__str
- \flag_raise:n { __str_missing }
- \flag_raise:n { __str_error }
+ \flag_raise:N \l__str_missing_flag
+ \flag_raise:N \l__str_error_flag
\int_use:N \c__str_replacement_char_int
\fi:
\s__str
@@ -23461,8 +23495,8 @@
\if_int_compare:w #1 < #4 \exp_stop_f:
\s__str
\if_int_compare:w #1 < #3 \exp_stop_f:
- \flag_raise:n { __str_overlong }
- \flag_raise:n { __str_error }
+ \flag_raise:N \l__str_overlong_flag
+ \flag_raise:N \l__str_error_flag
\int_use:N \c__str_replacement_char_int
\else:
#1
@@ -23481,15 +23515,15 @@
\cs_new:Npn \__str_decode_utf_viii_overflow:w #1 \fi: #2 \fi:
{
\fi: \fi:
- \flag_raise:n { __str_overflow }
- \flag_raise:n { __str_error }
+ \flag_raise:N \l__str_overflow_flag
+ \flag_raise:N \l__str_error_flag
\int_use:N \c__str_replacement_char_int
}
\cs_new:Npn \__str_decode_utf_viii_end:
{
\s__str
- \flag_raise:n { __str_missing }
- \flag_raise:n { __str_error }
+ \flag_raise:N \l__str_missing_flag
+ \flag_raise:N \l__str_error_flag
\int_use:N \c__str_replacement_char_int \s__str
\prg_break:
}
@@ -23507,10 +23541,10 @@
{ \__str_encode_utf_xvi_aux:N \__str_output_byte_pair_le:n }
\cs_new_protected:Npn \__str_encode_utf_xvi_aux:N #1
{
- \flag_clear:n { __str_error }
+ \flag_clear:N \l__str_error_flag
\cs_set_eq:NN \__str_tmp:w #1
\__str_convert_gmap_internal:N \__str_encode_utf_xvi_char:n
- \__str_if_flag_error:nne { __str_error } { utf16-encode } { }
+ \__str_if_flag_error:Nne \l__str_error_flag { utf16-encode } { }
}
\cs_new:Npn \__str_encode_utf_xvi_char:n #1
{
@@ -23519,7 +23553,7 @@
\else:
\if_int_compare:w #1 < "10000 \exp_stop_f:
\if_int_compare:w #1 < "E000 \exp_stop_f:
- \flag_raise:n { __str_error }
+ \flag_raise:N \l__str_error_flag
\__str_tmp:w { \c__str_replacement_char_int }
\else:
\__str_tmp:w {#1}
@@ -23530,9 +23564,9 @@
\fi:
\fi:
}
- \flag_clear_new:n { __str_missing }
- \flag_clear_new:n { __str_extra }
- \flag_clear_new:n { __str_end }
+ \flag_clear_new:N \l__str_missing_flag
+ \flag_clear_new:N \l__str_extra_flag
+ \flag_clear_new:N \l__str_end_flag
\msg_new:nnnn { str } { utf16-encode }
{ Unicode~string~cannot~be~expressed~in~UTF-16:~surrogate. }
{
@@ -23545,9 +23579,9 @@
Invalid~UTF-16~string:
\exp_last_unbraced:Nf \use_none:n
{
- \__str_if_flag_times:nT { __str_missing } { ,~missing~trail~surrogate }
- \__str_if_flag_times:nT { __str_extra } { ,~extra~trail~surrogate }
- \__str_if_flag_times:nT { __str_end } { ,~odd~number~of~bytes }
+ \__str_if_flag_times:NT \l__str_missing_flag { ,~missing~trail~surrogate }
+ \__str_if_flag_times:NT \l__str_extra_flag { ,~extra~trail~surrogate }
+ \__str_if_flag_times:NT \l__str_end_flag { ,~odd~number~of~bytes }
}
.
}
@@ -23564,17 +23598,17 @@
}
Lead~surrogates~are~pairs~of~bytes~in~the~range~[0xD800,~0xDBFF],~
and~trail~surrogates~are~in~the~range~[0xDC00,~0xDFFF].
- \flag_if_raised:nT { __str_missing }
+ \flag_if_raised:NT \l__str_missing_flag
{
\\\\
A~lead~surrogate~was~not~followed~by~a~trail~surrogate.
}
- \flag_if_raised:nT { __str_extra }
+ \flag_if_raised:NT \l__str_extra_flag
{
\\\\
LaTeX~came~across~a~trail~surrogate~when~it~was~not~expected.
}
- \flag_if_raised:nT { __str_end }
+ \flag_if_raised:NT \l__str_end_flag
{
\\\\
The~string~contained~an~odd~number~of~bytes.~This~is~invalid:~
@@ -23602,18 +23636,18 @@
}
\cs_new_protected:Npn \__str_decode_utf_xvi:Nw #1#2 \s__str_stop
{
- \flag_clear:n { __str_error }
- \flag_clear:n { __str_missing }
- \flag_clear:n { __str_extra }
- \flag_clear:n { __str_end }
+ \flag_clear:N \l__str_error_flag
+ \flag_clear:N \l__str_missing_flag
+ \flag_clear:N \l__str_extra_flag
+ \flag_clear:N \l__str_end_flag
\cs_set:Npn \__str_tmp:w ##1 ##2 { ` ## #1 }
- \__kernel_tl_gset:Ne \g__str_result_tl
+ \__kernel_tl_gset:Nx \g__str_result_tl
{
\exp_after:wN \__str_decode_utf_xvi_pair:NN
#2 \q__str_nil \q__str_nil
\prg_break_point:
}
- \__str_if_flag_error:nne { __str_error } { utf16-decode } { }
+ \__str_if_flag_error:Nne \l__str_error_flag { utf16-decode } { }
}
\cs_new:Npn \__str_decode_utf_xvi_pair:NN #1#2
{
@@ -23669,8 +23703,8 @@
{ \__str_decode_utf_xvi_error:nNN { extra } #1#2 }
\cs_new:Npn \__str_decode_utf_xvi_error:nNN #1#2#3
{
- \flag_raise:n { __str_error }
- \flag_raise:n { str_#1 }
+ \flag_raise:N \l__str_error_flag
+ \flag_raise:c { l__str_#1_flag }
#2 #3 \s__str
\int_use:N \c__str_replacement_char_int \s__str
}
@@ -23710,15 +23744,15 @@
\__str_output_byte_pair_le:n {#1}
^^00
}
- \flag_clear_new:n { __str_overflow }
- \flag_clear_new:n { __str_end }
+ \flag_clear_new:N \l__str_overflow_flag
+ \flag_clear_new:N \l__str_end_flag
\msg_new:nnnn { str } { utf32-decode }
{
Invalid~UTF-32~string:
\exp_last_unbraced:Nf \use_none:n
{
- \__str_if_flag_times:nT { __str_overflow } { ,~code~point~too~large }
- \__str_if_flag_times:nT { __str_end } { ,~truncated~string }
+ \__str_if_flag_times:NT \l__str_overflow_flag { ,~code~point~too~large }
+ \__str_if_flag_times:NT \l__str_end_flag { ,~truncated~string }
}
.
}
@@ -23725,7 +23759,7 @@
{
In~the~UTF-32~encoding,~every~Unicode~character~
(in~the~range~[U+0000,~U+10FFFF])~is~encoded~as~4~bytes.
- \flag_if_raised:nT { __str_overflow }
+ \flag_if_raised:NT \l__str_overflow_flag
{
\\\\
LaTeX~came~across~a~code~point~larger~than~1114111,~
@@ -23732,7 +23766,7 @@
the~maximum~code~point~defined~by~Unicode.~
Perhaps~the~string~was~not~encoded~in~the~UTF-32~encoding?
}
- \flag_if_raised:nT { __str_end }
+ \flag_if_raised:NT \l__str_end_flag
{
\\\\
The~length~of~the~string~is~not~a~multiple~of~4.~
@@ -23760,17 +23794,17 @@
}
\cs_new_protected:Npn \__str_decode_utf_xxxii:Nw #1#2 \s__str_stop
{
- \flag_clear:n { __str_overflow }
- \flag_clear:n { __str_end }
- \flag_clear:n { __str_error }
+ \flag_clear:N \l__str_overflow_flag
+ \flag_clear:N \l__str_end_flag
+ \flag_clear:N \l__str_error_flag
\cs_set:Npn \__str_tmp:w ##1 ##2 { ` ## #1 }
- \__kernel_tl_gset:Ne \g__str_result_tl
+ \__kernel_tl_gset:Nx \g__str_result_tl
{
\exp_after:wN \__str_decode_utf_xxxii_loop:NNNN
#2 \s__str_stop \s__str_stop \s__str_stop \s__str_stop
\prg_break_point:
}
- \__str_if_flag_error:nne { __str_error } { utf32-decode } { }
+ \__str_if_flag_error:Nne \l__str_error_flag { utf32-decode } { }
}
\cs_new:Npn \__str_decode_utf_xxxii_loop:NNNN #1#2#3#4
{
@@ -23779,13 +23813,13 @@
\fi:
#1#2#3#4 \s__str
\if_int_compare:w \__str_tmp:w #1#4 > \c_zero_int
- \flag_raise:n { __str_overflow }
- \flag_raise:n { __str_error }
+ \flag_raise:N \l__str_overflow_flag
+ \flag_raise:N \l__str_error_flag
\int_use:N \c__str_replacement_char_int
\else:
\if_int_compare:w \__str_tmp:w #2#3 > 16 \exp_stop_f:
- \flag_raise:n { __str_overflow }
- \flag_raise:n { __str_error }
+ \flag_raise:N \l__str_overflow_flag
+ \flag_raise:N \l__str_error_flag
\int_use:N \c__str_replacement_char_int
\else:
\int_eval:n
@@ -23799,8 +23833,8 @@
{
\tl_if_empty:nF {#1}
{
- \flag_raise:n { __str_end }
- \flag_raise:n { __str_error }
+ \flag_raise:N \l__str_end_flag
+ \flag_raise:N \l__str_error_flag
#1 \s__str
\int_use:N \c__str_replacement_char_int \s__str
}
@@ -24084,7 +24118,7 @@
}
\cs_new_protected:Npn \__tl_analysis_b:n #1
{
- \__kernel_tl_gset:Ne \g__tl_analysis_result_tl
+ \__kernel_tl_gset:Nx \g__tl_analysis_result_tl
{
\__tl_analysis_b_loop:w 0; #1
\prg_break_point:
@@ -24594,10 +24628,10 @@
{ \int_set:Nn \tex_escapechar:D { `\\ } }
\cs_new:Npn \__regex_toks_use:w { \tex_the:D \tex_toks:D }
\cs_new_protected:Npn \__regex_toks_clear:N #1
- { \__regex_toks_set:Nn #1 { } }
+ { \tex_toks:D #1 = { } }
\cs_new_eq:NN \__regex_toks_set:Nn \tex_toks:D
\cs_new_protected:Npn \__regex_toks_set:No #1
- { \tex_toks:D #1 \exp_after:wN }
+ { \tex_toks:D #1 = \exp_after:wN }
\cs_new_protected:Npn \__regex_toks_memcpy:NNn #1#2#3
{
\prg_replicate:nn {#3}
@@ -24607,20 +24641,24 @@
\int_incr:N #2
}
}
-\cs_new_protected:Npn \__regex_toks_put_left:Ne #1#2
+\cs_if_exist:NTF \tex_etokspre:D
+ { \cs_new_eq:NN \__regex_toks_put_left:Ne \tex_etokspre:D }
{
- \cs_set_nopar:Npe \__regex_tmp:w { #2 }
- \tex_toks:D #1 \exp_after:wN \exp_after:wN \exp_after:wN
- { \exp_after:wN \__regex_tmp:w \tex_the:D \tex_toks:D #1 }
+ \cs_new_protected:Npn \__regex_toks_put_left:Ne #1#2
+ { \tex_toks:D #1 = \tex_expanded:D {{ #2 \tex_the:D \tex_toks:D #1 }} }
}
-\cs_new_protected:Npn \__regex_toks_put_right:Ne #1#2
+\cs_if_exist:NTF \tex_etoksapp:D
+ { \cs_new_eq:NN \__regex_toks_put_right:Ne \tex_etoksapp:D }
{
- \cs_set_nopar:Npe \__regex_tmp:w {#2}
- \tex_toks:D #1 \exp_after:wN
- { \tex_the:D \tex_toks:D \exp_after:wN #1 \__regex_tmp:w }
+ \cs_new_protected:Npn \__regex_toks_put_right:Ne #1#2
+ { \tex_toks:D #1 = \tex_expanded:D {{ \tex_the:D \tex_toks:D #1 #2 }} }
}
-\cs_new_protected:Npn \__regex_toks_put_right:Nn #1#2
- { \tex_toks:D #1 \exp_after:wN { \tex_the:D \tex_toks:D #1 #2 } }
+\cs_if_exist:NTF \tex_toksapp:D
+ { \cs_new_eq:NN \__regex_toks_put_right:Nn \tex_toksapp:D }
+ {
+ \cs_new_protected:Npn \__regex_toks_put_right:Nn #1#2
+ { \tex_toks:D #1 = \exp_after:wN { \tex_the:D \tex_toks:D #1 #2 } }
+ }
\cs_new:Npn \__regex_curr_cs_to_str:
{
\exp_after:wN \exp_after:wN \exp_after:wN \cs_to_str:N
@@ -24627,15 +24665,13 @@
\l__regex_curr_token_tl
}
\cs_new:Npn \__regex_intarray_item:NnF #1#2
- { \exp_args:Nf \__regex_intarray_item_aux:nNF { \int_eval:n {#2} } #1 }
+ { \exp_args:No \__regex_intarray_item_aux:nNF { \tex_the:D \__regex_int_eval:w #2 } #1 }
\cs_new:Npn \__regex_intarray_item_aux:nNF #1#2
{
\if_int_compare:w #1 > \c_zero_int
- \exp_after:wN \use_i:nn
- \else:
- \exp_after:wN \use_ii:nn
+ \exp_after:wN \use_ii:nnn
\fi:
- { \__kernel_intarray_item:Nn #2 {#1} }
+ \use_ii:nn { \__kernel_intarray_item:Nn #2 {#1} }
}
\cs_new:Npn \__regex_maplike_break:
{ \prg_map_break:Nn \__regex_maplike_break: { } }
@@ -24731,14 +24767,12 @@
\if_int_compare:w \l__regex_curr_char_int > `Z \exp_stop_f:
\if_int_compare:w \l__regex_curr_char_int > `z \exp_stop_f: \else:
\if_int_compare:w \l__regex_curr_char_int < `a \exp_stop_f: \else:
- \int_sub:Nn \l__regex_case_changed_char_int
- { \c__regex_ascii_lower_int }
+ \int_sub:Nn \l__regex_case_changed_char_int \c__regex_ascii_lower_int
\fi:
\fi:
\else:
\if_int_compare:w \l__regex_curr_char_int < `A \exp_stop_f: \else:
- \int_add:Nn \l__regex_case_changed_char_int
- { \c__regex_ascii_lower_int }
+ \int_add:Nn \l__regex_case_changed_char_int \c__regex_ascii_lower_int
\fi:
\fi:
\cs_set_eq:NN \__regex_maybe_compute_ccc: \prg_do_nothing:
@@ -24756,12 +24790,12 @@
\or: 1000000 \or: 4000000 \else: 1*0
\fi:
}
-\cs_new_protected:Npn \__regex_item_catcode:nT #1
+\prg_new_protected_conditional:Npnn \__regex_item_catcode:n #1 { T }
{
- \if_int_odd:w \int_eval:n { #1 / \__regex_item_catcode: } \exp_stop_f:
- \exp_after:wN \use:n
+ \if_int_odd:w \__regex_int_eval:w #1 / \__regex_item_catcode: \scan_stop:
+ \prg_return_true:
\else:
- \exp_after:wN \use_none:n
+ \prg_return_false:
\fi:
}
\cs_new_protected:Npn \__regex_item_catcode_reverse:nT #1#2
@@ -24776,9 +24810,9 @@
}
\cs_new_protected:Npn \__regex_item_exact_cs:n #1
{
- \int_compare:nNnTF \l__regex_curr_catcode_int = 0
+ \int_compare:nNnTF \l__regex_curr_catcode_int = \c_zero_int
{
- \__kernel_tl_set:Ne \l__regex_internal_a_tl
+ \__kernel_tl_set:Nx \l__regex_internal_a_tl
{ \scan_stop: \__regex_curr_cs_to_str: \scan_stop: }
\tl_if_in:noTF { \scan_stop: #1 \scan_stop: }
\l__regex_internal_a_tl
@@ -24788,7 +24822,7 @@
}
\cs_new_protected:Npn \__regex_item_cs:n #1
{
- \int_compare:nNnT \l__regex_curr_catcode_int = 0
+ \int_compare:nNnT \l__regex_curr_catcode_int = \c_zero_int
{
\group_begin:
\__regex_single_match:
@@ -24888,7 +24922,7 @@
\cs_set:Npn \__regex_escape_escaped:N ##1 { #2 }
\cs_set:Npn \__regex_escape_raw:N ##1 { #3 }
\__regex_standard_escapechar:
- \__kernel_tl_gset:Ne \g__regex_internal_tl
+ \__kernel_tl_gset:Nx \g__regex_internal_tl
{ \__kernel_str_to_other_fast:n {#4} }
\tl_put_right:Ne \l__regex_internal_a_tl
{
@@ -25016,13 +25050,13 @@
\msg_expandable_error:nnn { regex } { x-missing-rbrace } {#1}
\__regex_escape_loop:N #1
}
-\prg_new_conditional:Npnn \__regex_hexadecimal_use:N #1 { TF }
+\cs_new:Npn \__regex_hexadecimal_use:NTF #1
{
- \if_int_compare:w 1 < "1 \token_to_str:N #1 \exp_stop_f:
- #1 \prg_return_true:
+ \if_int_compare:w \c_one_int < "1 \token_to_str:N #1 \exp_stop_f:
+ #1
\else:
\if_case:w
- \int_eval:n { \exp_after:wN ` \token_to_str:N #1 - `a }
+ \__regex_int_eval:w \exp_after:wN ` \token_to_str:N #1 - `a \scan_stop:
A
\or: B
\or: C
@@ -25030,51 +25064,64 @@
\or: E
\or: F
\else:
- \prg_return_false:
- \exp_after:wN \use_none:n
+ \exp_after:wN \exp_after:wN \exp_after:wN \use_iii:nnn
\fi:
- \prg_return_true:
\fi:
+ \use_i:nn
}
\prg_new_conditional:Npnn \__regex_char_if_special:N #1 { TF }
{
- \if_int_compare:w `#1 > `Z \exp_stop_f:
- \if_int_compare:w `#1 > `z \exp_stop_f:
- \if_int_compare:w `#1 < \c__regex_ascii_max_int
- \prg_return_true: \else: \prg_return_false: \fi:
- \else:
- \if_int_compare:w `#1 < `a \exp_stop_f:
- \prg_return_true: \else: \prg_return_false: \fi:
- \fi:
+ \if:w
+ T
+ \if_int_compare:w `#1 > `Z \exp_stop_f:
+ \if_int_compare:w `#1 > `z \exp_stop_f:
+ \if_int_compare:w `#1 < \c__regex_ascii_max_int
+ \else: F \fi:
+ \else:
+ \if_int_compare:w `#1 < `a \exp_stop_f:
+ \else: F \fi:
+ \fi:
+ \else:
+ \if_int_compare:w `#1 > `9 \exp_stop_f:
+ \if_int_compare:w `#1 < `A \exp_stop_f:
+ \else: F \fi:
+ \else:
+ \if_int_compare:w `#1 < `0 \exp_stop_f:
+ \if_int_compare:w `#1 < `\ \exp_stop_f:
+ F \fi:
+ \else: F \fi:
+ \fi:
+ \fi:
+ T
+ \prg_return_true:
\else:
- \if_int_compare:w `#1 > `9 \exp_stop_f:
- \if_int_compare:w `#1 < `A \exp_stop_f:
- \prg_return_true: \else: \prg_return_false: \fi:
- \else:
- \if_int_compare:w `#1 < `0 \exp_stop_f:
- \if_int_compare:w `#1 < `\ \exp_stop_f:
- \prg_return_false: \else: \prg_return_true: \fi:
- \else: \prg_return_false: \fi:
- \fi:
+ \prg_return_false:
\fi:
}
\prg_new_conditional:Npnn \__regex_char_if_alphanumeric:N #1 { TF }
{
- \if_int_compare:w `#1 > `Z \exp_stop_f:
- \if_int_compare:w `#1 > `z \exp_stop_f:
- \prg_return_false:
- \else:
- \if_int_compare:w `#1 < `a \exp_stop_f:
- \prg_return_false: \else: \prg_return_true: \fi:
- \fi:
+ \if:w
+ T
+ \if_int_compare:w `#1 > `Z \exp_stop_f:
+ \if_int_compare:w `#1 > `z \exp_stop_f:
+ F
+ \else:
+ \if_int_compare:w `#1 < `a \exp_stop_f:
+ F \fi:
+ \fi:
+ \else:
+ \if_int_compare:w `#1 > `9 \exp_stop_f:
+ \if_int_compare:w `#1 < `A \exp_stop_f:
+ F \fi:
+ \else:
+ \if_int_compare:w `#1 < `0 \exp_stop_f:
+ F \fi:
+ \fi:
+ \fi:
+ T
+ \prg_return_true:
\else:
- \if_int_compare:w `#1 > `9 \exp_stop_f:
- \if_int_compare:w `#1 < `A \exp_stop_f:
- \prg_return_false: \else: \prg_return_true: \fi:
- \else:
- \if_int_compare:w `#1 < `0 \exp_stop_f:
- \prg_return_false: \else: \prg_return_true: \fi:
- \fi:
+ \prg_return_false:
\fi:
}
\int_new:N \l__regex_group_level_int
@@ -25104,17 +25151,14 @@
\cs_new_eq:NN \l__regex_internal_regex \c__regex_no_match_regex
\seq_new:N \l__regex_show_prefix_seq
\int_new:N \l__regex_show_lines_int
-\prg_new_conditional:Npnn \__regex_two_if_eq:NNNN #1#2#3#4 { TF }
+\cs_new:Npn \__regex_two_if_eq:NNNNTF #1#2#3#4
{
\if_meaning:w #1 #3
\if:w #2 #4
- \prg_return_true:
- \else:
- \prg_return_false:
+ \exp_after:wN \exp_after:wN \exp_after:wN \use_ii:nnn
\fi:
- \else:
- \prg_return_false:
\fi:
+ \use_ii:nn
}
\cs_new_protected:Npn \__regex_get_digits:NTFw #1#2#3#4#5
{
@@ -25128,70 +25172,63 @@
{ #3 \__regex_get_digits_loop:nw {#1} }
{ \scan_stop: #1 #2 #3 }
}
-\prg_new_conditional:Npnn \__regex_if_raw_digit:NN #1#2 { TF }
+\cs_new:Npn \__regex_if_raw_digit:NNTF #1#2
{
\if_meaning:w \__regex_compile_raw:N #1
- \if_int_compare:w 1 < 1 #2 \exp_stop_f:
- \prg_return_true:
- \else:
- \prg_return_false:
+ \if_int_compare:w \c_one_int < 1 #2 \exp_stop_f:
+ \exp_after:wN \exp_after:wN \exp_after:wN \use_ii:nnn
\fi:
- \else:
- \prg_return_false:
\fi:
+ \use_ii:nn
}
-\cs_new:Npn \__regex_if_in_class:TF
+\prg_new_conditional:Npnn \__regex_if_in_class: { TF }
{
\if_int_odd:w \l__regex_mode_int
- \exp_after:wN \use_i:nn
+ \prg_return_true:
\else:
- \exp_after:wN \use_ii:nn
+ \prg_return_false:
\fi:
}
\cs_new:Npn \__regex_if_in_cs:TF
{
\if_int_odd:w \l__regex_mode_int
- \exp_after:wN \use_ii:nn
\else:
\if_int_compare:w \l__regex_mode_int < \c__regex_outer_mode_int
- \exp_after:wN \exp_after:wN \exp_after:wN \use_i:nn
- \else:
- \exp_after:wN \exp_after:wN \exp_after:wN \use_ii:nn
+ \exp_after:wN \exp_after:wN \exp_after:wN \use_ii:nnn
\fi:
\fi:
+ \use_ii:nn
}
\cs_new:Npn \__regex_if_in_class_or_catcode:TF
{
\if_int_odd:w \l__regex_mode_int
- \exp_after:wN \use_i:nn
\else:
\if_int_compare:w \l__regex_mode_int > \c__regex_outer_mode_int
- \exp_after:wN \exp_after:wN \exp_after:wN \use_i:nn
\else:
- \exp_after:wN \exp_after:wN \exp_after:wN \use_ii:nn
+ \exp_after:wN \exp_after:wN \exp_after:wN \use_iii:nnn
\fi:
\fi:
+ \use_i:nn
}
-\cs_new:Npn \__regex_if_within_catcode:TF
+\prg_new_conditional:Npnn \__regex_if_within_catcode: { TF }
{
\if_int_compare:w \l__regex_mode_int > \c__regex_outer_mode_int
- \exp_after:wN \use_i:nn
+ \prg_return_true:
\else:
- \exp_after:wN \use_ii:nn
+ \prg_return_false:
\fi:
}
\cs_new_protected:Npn \__regex_chk_c_allowed:T
{
\if_int_compare:w \l__regex_mode_int = \c__regex_outer_mode_int
- \exp_after:wN \use:n
\else:
\if_int_compare:w \l__regex_mode_int = \c__regex_class_mode_int
- \exp_after:wN \exp_after:wN \exp_after:wN \use:n
\else:
\msg_error:nn { regex } { c-bad-mode }
- \exp_after:wN \exp_after:wN \exp_after:wN \use_none:n
+ \exp_after:wN \use_i:nnn
\fi:
\fi:
+ \use:n
}
\cs_new_protected:Npn \__regex_mode_quit_c:
{
@@ -25230,7 +25267,7 @@
\msg_error:nne { regex } { missing-rparen }
{ \int_use:N \l__regex_group_level_int }
\prg_replicate:nn
- { \l__regex_group_level_int }
+ \l__regex_group_level_int
{
\tl_build_put_right:Nn \l__regex_build_tl
{
@@ -25393,7 +25430,7 @@
{ \__regex_compile_special:N \c_right_brace_str }
{
\exp_args:No \__regex_compile_quantifier_lazyness:nnNN
- { \int_use:N \l__regex_internal_a_int } { 0 }
+ { \int_use:N \l__regex_internal_a_int } 0
}
{ \__regex_compile_special:N , }
{
@@ -25471,21 +25508,19 @@
#2 #3
}
}
-\prg_new_protected_conditional:Npnn \__regex_if_end_range:NN #1#2 { TF }
+\cs_new_protected:Npn \__regex_if_end_range:NNTF #1#2
{
\if_meaning:w \__regex_compile_raw:N #1
- \prg_return_true:
\else:
\if_meaning:w \__regex_compile_special:N #1
\if_charcode:w ] #2
- \prg_return_false:
- \else:
- \prg_return_true:
+ \use_i:nn
\fi:
\else:
- \prg_return_false:
+ \exp_after:wN \exp_after:wN \exp_after:wN \use_iii:nnn
\fi:
\fi:
+ \use_i:nn
}
\cs_new_protected:Npn \__regex_compile_range:Nw #1#2#3
{
@@ -25667,12 +25702,12 @@
\__regex_two_if_eq:NNNNTF #5 #6 \__regex_compile_special:N ^
{
\bool_set_false:N \l__regex_internal_bool
- \__kernel_tl_set:Ne \l__regex_internal_a_tl { \if_false: } \fi:
+ \__kernel_tl_set:Nx \l__regex_internal_a_tl { \if_false: } \fi:
\__regex_compile_class_posix_loop:w
}
{
\bool_set_true:N \l__regex_internal_bool
- \__kernel_tl_set:Ne \l__regex_internal_a_tl { \if_false: } \fi:
+ \__kernel_tl_set:Nx \l__regex_internal_a_tl { \if_false: } \fi:
\__regex_compile_class_posix_loop:w #5 #6
}
}
@@ -25903,7 +25938,7 @@
}
\cs_new_protected:Npn \__regex_compile_c_lbrack_add:N #1
{
- \if_int_odd:w \int_eval:n { \l__regex_catcodes_int / #1 } \exp_stop_f:
+ \if_int_odd:w \__regex_int_eval:w \l__regex_catcodes_int / #1 \scan_stop:
\else:
\int_add:Nn \l__regex_catcodes_int {#1}
\fi:
@@ -25932,7 +25967,7 @@
{ \msg_error:nnn { regex } { cu-lbrace } { c } }
{ \exp_after:wN \__regex_compile_raw:N \c_left_brace_str }
}
-\flag_new:n { __regex_cs }
+\flag_new:N \l__regex_cs_flag
\cs_new_protected:cpn { __regex_compile_ \c_right_brace_str : }
{
\__regex_if_in_cs:TF
@@ -25942,8 +25977,8 @@
\cs_new_protected:Npn \__regex_compile_end_cs:
{
\__regex_compile_end:
- \flag_clear:n { __regex_cs }
- \__kernel_tl_set:Ne \l__regex_internal_a_tl
+ \flag_clear:N \l__regex_cs_flag
+ \__kernel_tl_set:Nx \l__regex_internal_a_tl
{
\exp_after:wN \__regex_compile_cs_aux:Nn \l__regex_internal_regex
\q__regex_nil \q__regex_nil \q__regex_recursion_stop
@@ -25950,7 +25985,7 @@
}
\exp_args:Ne \__regex_compile_one:n
{
- \flag_if_raised:nTF { __regex_cs }
+ \flag_if_raised:NTF \l__regex_cs_flag
{ \__regex_item_cs:n { \exp_not:o \l__regex_internal_regex } }
{
\__regex_item_exact_cs:n
@@ -25969,7 +26004,7 @@
\__regex_compile_cs_aux:Nn
}
{
- \__regex_quark_if_nil:NF #1 { \flag_ensure_raised:n { __regex_cs } }
+ \__regex_quark_if_nil:NF #1 { \flag_ensure_raised:N \l__regex_cs_flag }
\__regex_use_none_delimit_by_q_recursion_stop:w
}
}
@@ -25981,7 +26016,7 @@
{#2}
{ \tl_if_head_eq_meaning_p:nN {#3} \__regex_item_caseful_equal:n }
{ \int_compare_p:nNn { \tl_count:n {#3} } = { 2 } }
- { \int_compare_p:nNn {#5} = { 0 } }
+ { \int_compare_p:nNn {#5} = \c_zero_int }
}
{
\prg_replicate:nn {#4}
@@ -25991,7 +26026,7 @@
{
\__regex_quark_if_nil:NF #1
{
- \flag_ensure_raised:n { __regex_cs }
+ \flag_ensure_raised:N \l__regex_cs_flag
\__regex_use_i_delimit_by_q_recursion_stop:nw
}
\__regex_use_none_delimit_by_q_recursion_stop:w
@@ -26012,7 +26047,7 @@
\__regex_two_if_eq:NNNNTF #2 #3 \__regex_compile_special:N \c_left_brace_str
{
\tl_set:Nn \l__regex_internal_b_tl {#1}
- \__kernel_tl_set:Ne \l__regex_internal_a_tl { \if_false: } \fi:
+ \__kernel_tl_set:Nx \l__regex_internal_a_tl { \if_false: } \fi:
\__regex_compile_u_loop:NN
}
{
@@ -26097,7 +26132,7 @@
}
\cs_new_protected:Npn \__regex_compile_u_in_cs:
{
- \__kernel_tl_gset:Ne \g__regex_internal_tl
+ \__kernel_tl_gset:Nx \g__regex_internal_tl
{
\exp_args:No \__kernel_str_to_other_fast:n
{ \l__regex_internal_a_tl }
@@ -26153,10 +26188,10 @@
}
\cs_new:Npn \__regex_clean_int_aux:N #1
{
- \if_int_compare:w 1 < 1 #1 ~
+ \if_int_compare:w \c_one_int < 1 #1 ~
#1
\else:
- \exp_after:wN \str_map_break:
+ \str_map_break:n
\fi:
}
\cs_new:Npn \__regex_clean_regex:n #1
@@ -26177,7 +26212,7 @@
}
\cs_new:Npn \__regex_clean_branch_loop:n #1
{
- \tl_if_single:nF {#1} { \prg_break: }
+ \tl_if_single:nF {#1} \prg_break:
\token_case_meaning:NnF #1
{
\__regex_command_K: { #1 \__regex_clean_branch_loop:n }
@@ -26187,7 +26222,7 @@
\__regex_group_no_capture:nnnN { #1 \__regex_clean_group:nnnN }
\__regex_group_resetting:nnnN { #1 \__regex_clean_group:nnnN }
}
- { \prg_break: }
+ \prg_break:
}
\cs_new:Npn \__regex_clean_assertion:Nn #1#2
{
@@ -26208,8 +26243,8 @@
{
\__regex_clean_bool:n {#1}
{ \__regex_clean_class:n {#2} }
- { \int_max:nn { 0 } { \__regex_clean_int:n {#3} } }
- { \int_max:nn { -1 } { \__regex_clean_int:n {#4} } }
+ { \int_max:nn \c_zero_int { \__regex_clean_int:n {#3} } }
+ { \int_max:nn { -\c_one_int } { \__regex_clean_int:n {#4} } }
\__regex_clean_bool:n {#5}
\__regex_clean_branch_loop:n
}
@@ -26216,8 +26251,8 @@
\cs_new:Npn \__regex_clean_group:nnnN #1#2#3#4
{
{ \__regex_clean_regex:n {#1} }
- { \int_max:nn { 0 } { \__regex_clean_int:n {#2} } }
- { \int_max:nn { -1 } { \__regex_clean_int:n {#3} } }
+ { \int_max:nn \c_zero_int { \__regex_clean_int:n {#2} } }
+ { \int_max:nn { -\c_one_int } { \__regex_clean_int:n {#3} } }
\__regex_clean_bool:n {#4}
\__regex_clean_branch_loop:n
}
@@ -26225,7 +26260,7 @@
{ \__regex_clean_class_loop:nnn #1 ????? \prg_break_point: }
\cs_new:Npn \__regex_clean_class_loop:nnn #1#2#3
{
- \tl_if_single:nF {#1} { \prg_break: }
+ \tl_if_single:nF {#1} \prg_break:
\token_case_meaning:NnTF #1
{
\__regex_item_cs:n { #1 { \__regex_clean_regex:n {#2} } }
@@ -26257,10 +26292,10 @@
\__regex_clean_class_loop:nnn
}
{
- \exp_args:Nf \str_case:nnTF
+ \exp_args:Ne \str_case:nnTF
{
- \exp_args:Nf \str_range:nnn
- { \cs_to_str:N #1 } { 1 } { 13 }
+ \exp_args:Ne \str_range:nnn
+ { \cs_to_str:N #1 } \c_one_int { 13 }
}
{
{ __regex_prop_ } { }
@@ -26270,7 +26305,7 @@
#1
\__regex_clean_class_loop:nnn {#2} {#3}
}
- { \prg_break: }
+ \prg_break:
}
}
}
@@ -26398,7 +26433,7 @@
\int_zero:N \l__regex_show_lines_int
\__regex_show_push:n {~}
#2
- \int_compare:nTF { \l__regex_show_lines_int = 0 }
+ \int_compare:nTF { \l__regex_show_lines_int = \c_zero_int }
{
\group_end:
\__regex_show_one:n { \bool_if:NTF #1 { Fail } { Pass } }
@@ -26405,7 +26440,7 @@
}
{
\bool_if:nTF
- { #1 && \int_compare_p:n { \l__regex_show_lines_int = 1 } }
+ { #1 && \int_compare_p:n { \l__regex_show_lines_int = \c_one_int } }
{
\group_end:
#2
@@ -26497,7 +26532,7 @@
%
\__regex_build_new_state:
\__regex_toks_put_left:Ne \l__regex_left_state_int
- { \__regex_action_submatch:nN { 0 } < }
+ { \__regex_action_submatch:nN \c_zero_int < }
\__regex_push_lr_states:
\int_zero:N \l__regex_case_max_group_int
\int_gzero:N \g__regex_case_int
@@ -26511,18 +26546,15 @@
}
\cs_new_protected:Npn \__regex_case_build_loop:n #1
{
- \int_set:Nn \l__regex_capturing_group_int { 1 }
+ \int_set_eq:NN \l__regex_capturing_group_int \c_one_int
\__regex_compile_use:n {#1}
\int_set:Nn \l__regex_case_max_group_int
- {
- \int_max:nn { \l__regex_case_max_group_int }
- { \l__regex_capturing_group_int }
- }
+ { \int_max:nn \l__regex_case_max_group_int \l__regex_capturing_group_int }
\seq_pop:NN \l__regex_right_state_seq \l__regex_internal_a_tl
\int_set:Nn \l__regex_right_state_int \l__regex_internal_a_tl
\__regex_toks_put_left:Ne \l__regex_right_state_int
{
- \__regex_action_submatch:nN { 0 } >
+ \__regex_action_submatch:nN \c_zero_int >
\int_gset:Nn \g__regex_case_int
{ \int_use:N \g__regex_case_int }
\__regex_action_success:
@@ -26562,9 +26594,9 @@
\int_set:Nn \l__regex_right_state_int \l__regex_internal_a_tl
}
\cs_new_protected:Npn \__regex_build_transition_left:NNN #1#2#3
- { \__regex_toks_put_left:Ne #2 { #1 { \int_eval:n { #3 - #2 } } } }
+ { \__regex_toks_put_left:Ne #2 { #1 { \tex_the:D \__regex_int_eval:w #3 - #2 } } }
\cs_new_protected:Npn \__regex_build_transition_right:nNn #1#2#3
- { \__regex_toks_put_right:Ne #2 { #1 { \int_eval:n { #3 - #2 } } } }
+ { \__regex_toks_put_right:Ne #2 { #1 { \tex_the:D \__regex_int_eval:w #3 - #2 } } }
\cs_new_protected:Npn \__regex_build_new_state:
{
\__regex_toks_clear:N \l__regex_max_state_int
@@ -26578,11 +26610,11 @@
\__regex_toks_put_right:Ne \l__regex_left_state_int
{
\if_meaning:w \c_true_bool #1
- #2 { \int_eval:n { #3 - \l__regex_left_state_int } }
- #4 { \int_eval:n { #5 - \l__regex_left_state_int } }
+ #2 { \tex_the:D \__regex_int_eval:w #3 - \l__regex_left_state_int }
+ #4 { \tex_the:D \__regex_int_eval:w #5 - \l__regex_left_state_int }
\else:
- #4 { \int_eval:n { #5 - \l__regex_left_state_int } }
- #2 { \int_eval:n { #3 - \l__regex_left_state_int } }
+ #4 { \tex_the:D \__regex_int_eval:w #5 - \l__regex_left_state_int }
+ #2 { \tex_the:D \__regex_int_eval:w #3 - \l__regex_left_state_int }
\fi:
}
}
@@ -26629,7 +26661,7 @@
{
\__regex_class_repeat:n {#1}
\int_set:Nn \l__regex_internal_a_int
- { \l__regex_max_state_int + #2 - 1 }
+ { \l__regex_max_state_int + #2 - \c_one_int }
\prg_replicate:nn { #2 }
{
\__regex_build_transitions_lazyness:NNNNN #3
@@ -26682,8 +26714,8 @@
\use_none:nn #3 { \int_set:Nn \l__regex_capturing_group_int {#1} }
\int_set:Nn \l__regex_capturing_group_int {#2}
#3 {#4}
- \exp_args:Nf \__regex_group_resetting_loop:nnNn
- { \int_max:nn {#1} { \l__regex_capturing_group_int } }
+ \exp_args:Ne \__regex_group_resetting_loop:nnNn
+ { \int_max:nn {#1} \l__regex_capturing_group_int }
{#2}
}
\cs_new_protected:Npn \__regex_branch:n #1
@@ -26702,7 +26734,7 @@
{
\if_int_compare:w #2 = \c_zero_int
\int_set:Nn \l__regex_max_state_int
- { \l__regex_left_state_int - 1 }
+ { \l__regex_left_state_int - \c_one_int }
\__regex_build_new_state:
\else:
\__regex_group_repeat_aux:n {#2}
@@ -26724,14 +26756,14 @@
\l__regex_right_state_int \l__regex_max_state_int
\int_set_eq:NN \l__regex_internal_a_int \l__regex_left_state_int
\int_set_eq:NN \l__regex_internal_b_int \l__regex_max_state_int
- \if_int_compare:w \int_eval:n {#1} > \c_one_int
+ \if_int_compare:w \__regex_int_eval:w #1 > \c_one_int
\int_set:Nn \l__regex_internal_c_int
{
- ( #1 - 1 )
+ ( #1 - \c_one_int )
* ( \l__regex_internal_b_int - \l__regex_internal_a_int )
}
- \int_add:Nn \l__regex_right_state_int { \l__regex_internal_c_int }
- \int_add:Nn \l__regex_max_state_int { \l__regex_internal_c_int }
+ \int_add:Nn \l__regex_right_state_int \l__regex_internal_c_int
+ \int_add:Nn \l__regex_max_state_int \l__regex_internal_c_int
\__regex_toks_memcpy:NNn
\l__regex_internal_b_int
\l__regex_internal_a_int
@@ -26744,7 +26776,7 @@
\__regex_group_submatches:nNN {#1}
\l__regex_left_state_int \l__regex_right_state_int
\int_set:Nn \l__regex_internal_a_int
- { \l__regex_left_state_int - 1 }
+ { \l__regex_left_state_int - \c_one_int }
\__regex_build_transition_right:nNn \__regex_action_free:n
\l__regex_right_state_int \l__regex_internal_a_int
\__regex_build_new_state:
@@ -26784,7 +26816,7 @@
\l__regex_left_state_int \l__regex_max_state_int
}
\else:
- \prg_replicate:nn { #3 - 1 }
+ \prg_replicate:nn { #3 - \c_one_int }
{
\int_sub:Nn \l__regex_right_state_int
{ \l__regex_internal_b_int - \l__regex_internal_a_int }
@@ -26793,7 +26825,7 @@
}
\if_int_compare:w #2 = \c_zero_int
\int_set:Nn \l__regex_right_state_int
- { \l__regex_left_state_int - 1 }
+ { \l__regex_left_state_int - \c_one_int }
\else:
\int_sub:Nn \l__regex_right_state_int
{ \l__regex_internal_b_int - \l__regex_internal_a_int }
@@ -26814,8 +26846,8 @@
{
\__regex_action_free:n
{
- \int_eval:n
- { \l__regex_right_state_int - \l__regex_left_state_int }
+ \tex_the:D \__regex_int_eval:w
+ \l__regex_right_state_int - \l__regex_left_state_int
}
}
\bool_if:NT #1 { { } }
@@ -26853,12 +26885,12 @@
\__regex_build_new_state:
\__regex_toks_put_right:Ne \l__regex_left_state_int
{
- \__regex_action_submatch:nN { 0 } <
+ \__regex_action_submatch:nN \c_zero_int <
\bool_set_true:N \l__regex_fresh_thread_bool
\__regex_action_free:n
{
- \int_eval:n
- { \l__regex_right_state_int - \l__regex_left_state_int }
+ \tex_the:D \__regex_int_eval:w
+ \l__regex_right_state_int - \l__regex_left_state_int
}
\bool_set_false:N \l__regex_fresh_thread_bool
}
@@ -26918,10 +26950,10 @@
{
\bool_gset_false:N \g__regex_success_bool
\int_step_inline:nnn
- \l__regex_min_state_int { \l__regex_max_state_int - 1 }
+ \l__regex_min_state_int { \l__regex_max_state_int - \c_one_int }
{
\__kernel_intarray_gset:Nnn
- \g__regex_state_active_intarray {##1} { 1 }
+ \g__regex_state_active_intarray {##1} \c_one_int
}
\int_zero:N \l__regex_step_int
\int_set:Nn \l__regex_min_pos_int { 2 }
@@ -26929,7 +26961,7 @@
\int_set:Nn \l__regex_last_char_success_int { -2 }
\tl_build_begin:N \l__regex_matched_analysis_tl
\tl_clear:N \l__regex_curr_analysis_tl
- \int_set:Nn \l__regex_min_submatch_int { 1 }
+ \int_set_eq:NN \l__regex_min_submatch_int \c_one_int
\int_set_eq:NN \l__regex_submatch_int \l__regex_min_submatch_int
\bool_set_false:N \l__regex_empty_success_bool
}
@@ -26950,8 +26982,7 @@
{ \prg_replicate:nn { 2 * \l__regex_capturing_group_int } { 0 , } }
\int_set_eq:NN \l__regex_max_thread_int \l__regex_min_thread_int
\__regex_store_state:n { \l__regex_min_state_int }
- \int_set:Nn \l__regex_curr_pos_int
- { \l__regex_start_pos_int - 1 }
+ \int_set:Nn \l__regex_curr_pos_int { \l__regex_start_pos_int - \c_one_int }
\int_set_eq:NN \l__regex_curr_char_int \l__regex_last_char_success_int
\tl_build_get_intermediate:NN \l__regex_matched_analysis_tl \l__regex_internal_a_tl
\exp_args:NNf \__regex_match_once_init_aux:
@@ -27003,8 +27034,8 @@
{
\int_set_eq:NN \l__regex_max_thread_int \l__regex_min_thread_int
\int_step_function:nnN
- { \l__regex_min_thread_int }
- { \l__regex_max_thread_int - 1 }
+ \l__regex_min_thread_int
+ { \l__regex_max_thread_int - \c_one_int }
\__regex_match_one_active:n
}
\prg_break_point:
@@ -27011,7 +27042,7 @@
\bool_set_false:N \l__regex_fresh_thread_bool
\if_int_compare:w \l__regex_max_thread_int > \l__regex_min_thread_int
\if_int_compare:w -2 < \l__regex_curr_char_int
- \exp_after:wN \exp_after:wN \exp_after:wN \use_none:n
+ \exp_after:wN \use_i:nn
\fi:
\fi:
\l__regex_every_match_tl
@@ -27021,18 +27052,18 @@
\__regex_use_state_and_submatches:w
\__kernel_intarray_range_to_clist:Nnn
\g__regex_thread_info_intarray
- { 1 + #1 * (\l__regex_capturing_group_int * 2 + 1) }
- { (1 + #1) * (\l__regex_capturing_group_int * 2 + 1) }
+ { \c_one_int + #1 * (\l__regex_capturing_group_int * 2 + \c_one_int) }
+ { (\c_one_int + #1) * (\l__regex_capturing_group_int * 2 + \c_one_int) }
;
}
\cs_new_protected:Npn \__regex_use_state:
{
\__kernel_intarray_gset:Nnn \g__regex_state_active_intarray
- { \l__regex_curr_state_int } { \l__regex_step_int }
+ \l__regex_curr_state_int \l__regex_step_int
\__regex_toks_use:w \l__regex_curr_state_int
\__kernel_intarray_gset:Nnn \g__regex_state_active_intarray
- { \l__regex_curr_state_int }
- { \int_eval:n { \l__regex_step_int + 1 } }
+ \l__regex_curr_state_int
+ { \__regex_int_eval:w \l__regex_step_int + \c_one_int \scan_stop: }
}
\cs_new_protected:Npn \__regex_use_state_and_submatches:w #1 , #2 ;
{
@@ -27039,7 +27070,7 @@
\int_set:Nn \l__regex_curr_state_int {#1}
\if_int_compare:w
\__kernel_intarray_item:Nn \g__regex_state_active_intarray
- { \l__regex_curr_state_int }
+ \l__regex_curr_state_int
< \l__regex_step_int
\tl_set:Nn \l__regex_curr_submatches_tl { #2 , }
\exp_after:wN \__regex_use_state:
@@ -27066,7 +27097,7 @@
{
\if_int_compare:w
\__kernel_intarray_item:Nn \g__regex_state_active_intarray
- { \l__regex_curr_state_int }
+ \l__regex_curr_state_int
#1
\exp_after:wN \__regex_use_state:
\fi:
@@ -27079,8 +27110,8 @@
}
\cs_new_protected:Npn \__regex_action_cost:n #1
{
- \exp_args:Ne \__regex_store_state:n
- { \int_eval:n { \l__regex_curr_state_int + #1 } }
+ \exp_args:No \__regex_store_state:n
+ { \tex_the:D \__regex_int_eval:w \l__regex_curr_state_int + #1 }
}
\cs_new_protected:Npn \__regex_store_state:n #1
{
@@ -27094,8 +27125,8 @@
\g__regex_thread_info_intarray
{
\__regex_int_eval:w
- 1 + \l__regex_max_thread_int *
- (\l__regex_capturing_group_int * 2 + 1)
+ \c_one_int + \l__regex_max_thread_int *
+ (\l__regex_capturing_group_int * 2 + \c_one_int)
}
{ #2 , #1 }
}
@@ -27165,11 +27196,11 @@
{
\if_int_compare:w #1 < #2 \exp_stop_f:
\else:
- \exp_after:wN \prg_break:
+ \prg_break:n
\fi:
\__regex_toks_use:w #1 \exp_stop_f:
\exp_after:wN \__regex_query_range_loop:ww
- \int_value:w \__regex_int_eval:w #1 + 1 ; #2 ;
+ \int_value:w \__regex_int_eval:w #1 + \c_one_int ; #2 ;
}
\cs_new:Npn \__regex_query_submatch:n #1
{
@@ -27179,22 +27210,21 @@
}
\cs_new_protected:Npn \__regex_submatch_balance:n #1
{
- \int_eval:n
- {
- \__regex_intarray_item:NnF \g__regex_balance_intarray
- {
- \__kernel_intarray_item:Nn
- \g__regex_submatch_end_intarray {#1}
- }
- { 0 }
- -
- \__regex_intarray_item:NnF \g__regex_balance_intarray
- {
- \__kernel_intarray_item:Nn
- \g__regex_submatch_begin_intarray {#1}
- }
- { 0 }
- }
+ \tex_the:D \__regex_int_eval:w
+ \__regex_intarray_item:NnF \g__regex_balance_intarray
+ {
+ \__kernel_intarray_item:Nn
+ \g__regex_submatch_end_intarray {#1}
+ }
+ \c_zero_int
+ -
+ \__regex_intarray_item:NnF \g__regex_balance_intarray
+ {
+ \__kernel_intarray_item:Nn
+ \g__regex_submatch_begin_intarray {#1}
+ }
+ \c_zero_int
+ \scan_stop:
}
\cs_new_protected:Npn \__regex_replacement:n
{ \__regex_replacement_apply:Nn \__regex_replacement_set:n }
@@ -27292,7 +27322,7 @@
{ \tl_build_put_right:Nn \l__regex_build_tl }
\cs_new_protected:Npn \__regex_replacement_normal:n #1
{
- \int_compare:nNnTF { \l__regex_replacement_csnames_int } > 0
+ \int_compare:nNnTF \l__regex_replacement_csnames_int > \c_zero_int
{ \exp_args:No \__regex_replacement_put:n { \token_to_str:N #1 } }
{
\tl_if_empty:NTF \l__regex_replacement_category_tl
@@ -27340,7 +27370,7 @@
{
\cs_if_exist_use:cF { __regex_replacement_#1:w }
{
- \if_int_compare:w 1 < 1#1 \exp_stop_f:
+ \if_int_compare:w \c_one_int < 1#1 \exp_stop_f:
\__regex_replacement_put_submatch:n {#1}
\else:
\__regex_replacement_normal:n {#1}
@@ -27353,16 +27383,16 @@
\__regex_replacement_put_submatch_aux:n {#1}
\else:
\msg_expandable_error:nnff { regex } { submatch-too-big }
- {#1} { \int_eval:n { \l__regex_capturing_group_int - 1 } }
+ {#1} { \int_eval:n { \l__regex_capturing_group_int - \c_one_int } }
\fi:
}
\cs_new_protected:Npn \__regex_replacement_put_submatch_aux:n #1
{
\tl_build_put_right:Nn \l__regex_build_tl
- { \__regex_query_submatch:n { \int_eval:n { #1 + ##1 } } }
+ { \__regex_query_submatch:n { \__regex_int_eval:w #1 + ##1 \scan_stop: } }
\if_int_compare:w \l__regex_replacement_csnames_int = \c_zero_int
\tl_gput_right:Nn \g__regex_balance_tl
- { + \__regex_submatch_balance:n { \int_eval:n { #1 + ##1 } } }
+ { + \__regex_submatch_balance:n { \__regex_int_eval:w #1 + ##1 \scan_stop: } }
\fi:
}
\cs_new_protected:Npn \__regex_replacement_g:w #1#2
@@ -27375,7 +27405,7 @@
{
\token_if_eq_meaning:NNTF #1 \__regex_replacement_normal:n
{
- \if_int_compare:w 1 < 1#2 \exp_stop_f:
+ \if_int_compare:w \c_one_int < 1#2 \exp_stop_f:
#2
\exp_after:wN \use_i:nnn
\exp_after:wN \__regex_replacement_g_digits:NN
@@ -27451,7 +27481,7 @@
\token_if_eq_meaning:NNTF \prg_do_nothing: #3
{ \msg_error:nn { regex } { replacement-catcode-end } }
{
- \int_compare:nNnTF { \l__regex_replacement_csnames_int } > 0
+ \int_compare:nNnTF \l__regex_replacement_csnames_int > \c_zero_int
{
\msg_error:nnnn
{ regex } { replacement-catcode-in-cs } {#1} {#3}
@@ -27483,7 +27513,7 @@
\group_begin:
\cs_new_protected:Npn \__regex_replacement_char:nNN #1#2#3
{
- \tex_lccode:D 0 = `#3 \scan_stop:
+ \tex_lccode:D \c_zero_int = `#3 \scan_stop:
\tex_lowercase:D { \__regex_replacement_put:n {#1} }
}
\char_set_catcode_active:N \^^@
@@ -27638,7 +27668,6 @@
\prg_generate_conditional_variant:Nnn #2 { nV } { T , F , TF }
\cs_generate_variant:Nn #3 { NV }
\prg_generate_conditional_variant:Nnn #3 { NV } { T , F , TF }
-
}
\__regex_tmp:w \__regex_extract_once:nnN
\regex_extract_once:nnN \regex_extract_once:NnN
@@ -27696,8 +27725,8 @@
\cs_new_protected:Npn \regex_replace_case_all:nNF #1#2
{ \regex_replace_case_all:nNTF {#1} {#2} { } }
\int_new:N \l__regex_match_count_int
-\flag_new:n { __regex_begin }
-\flag_new:n { __regex_end }
+\flag_new:N \l__regex_begin_flag
+\flag_new:N \l__regex_end_flag
\int_new:N \l__regex_min_submatch_int
\int_new:N \l__regex_submatch_int
\int_new:N \l__regex_zeroth_submatch_int
@@ -27731,7 +27760,7 @@
\int_incr:N \l__regex_curr_pos_int
\__regex_toks_set:Nn \l__regex_curr_pos_int {#1}
\__kernel_intarray_gset:Nnn \g__regex_balance_intarray
- { \l__regex_curr_pos_int } { \l__regex_balance_int }
+ \l__regex_curr_pos_int \l__regex_balance_int
\if_case:w "#2 \exp_stop_f:
\or: \int_incr:N \l__regex_balance_int
\or: \int_decr:N \l__regex_balance_int
@@ -27803,16 +27832,16 @@
\l__regex_start_pos_int < \l__regex_success_pos_int
\__regex_extract:
\__kernel_intarray_gset:Nnn \g__regex_submatch_prev_intarray
- { \l__regex_zeroth_submatch_int } { 0 }
+ \l__regex_zeroth_submatch_int \c_zero_int
\__kernel_intarray_gset:Nnn \g__regex_submatch_end_intarray
- { \l__regex_zeroth_submatch_int }
+ \l__regex_zeroth_submatch_int
{
\__kernel_intarray_item:Nn \g__regex_submatch_begin_intarray
- { \l__regex_zeroth_submatch_int }
+ \l__regex_zeroth_submatch_int
}
\__kernel_intarray_gset:Nnn \g__regex_submatch_begin_intarray
- { \l__regex_zeroth_submatch_int }
- { \l__regex_start_pos_int }
+ \l__regex_zeroth_submatch_int
+ \l__regex_start_pos_int
\fi:
}
#1
@@ -27819,13 +27848,13 @@
\__regex_match:n {#2}
\__regex_query_set:n {#2}
\__kernel_intarray_gset:Nnn \g__regex_submatch_prev_intarray
- { \l__regex_submatch_int } { 0 }
+ \l__regex_submatch_int \c_zero_int
\__kernel_intarray_gset:Nnn \g__regex_submatch_end_intarray
- { \l__regex_submatch_int }
- { \l__regex_max_pos_int }
+ \l__regex_submatch_int
+ \l__regex_max_pos_int
\__kernel_intarray_gset:Nnn \g__regex_submatch_begin_intarray
- { \l__regex_submatch_int }
- { \l__regex_start_pos_int }
+ \l__regex_submatch_int
+ \l__regex_start_pos_int
\int_incr:N \l__regex_submatch_int
\if_meaning:w \c_true_bool \l__regex_empty_success_bool
\if_int_compare:w \l__regex_start_pos_int = \l__regex_max_pos_int
@@ -27836,24 +27865,24 @@
}
\cs_new_protected:Npn \__regex_group_end_extract_seq:N #1
{
- \flag_clear:n { __regex_begin }
- \flag_clear:n { __regex_end }
+ \flag_clear:N \l__regex_begin_flag
+ \flag_clear:N \l__regex_end_flag
\cs_set_eq:NN \__regex_tmp:w \scan_stop:
- \__kernel_tl_gset:Ne \g__regex_internal_tl
+ \__kernel_tl_gset:Nx \g__regex_internal_tl
{
- \int_step_function:nnN { \l__regex_min_submatch_int }
- { \l__regex_submatch_int - 1 } \__regex_extract_seq_aux:n
+ \int_step_function:nnN \l__regex_min_submatch_int
+ { \l__regex_submatch_int - \c_one_int } \__regex_extract_seq_aux:n
\__regex_tmp:w
}
\int_set:Nn \l__regex_added_begin_int
- { \flag_height:n { __regex_begin } }
+ { \flag_height:N \l__regex_begin_flag }
\int_set:Nn \l__regex_added_end_int
- { \flag_height:n { __regex_end } }
+ { \flag_height:N \l__regex_end_flag }
\tex_afterassignment:D \__regex_extract_check:w
- \__kernel_tl_gset:Ne \g__regex_internal_tl
+ \__kernel_tl_gset:Nx \g__regex_internal_tl
{ \g__regex_internal_tl \if_false: { \fi: } }
\int_compare:nNnT
- { \l__regex_added_begin_int + \l__regex_added_end_int } > 0
+ { \l__regex_added_begin_int + \l__regex_added_end_int } > \c_zero_int
{
\msg_error:nneee { regex } { result-unbalanced }
{ splitting~or~extracting~submatches }
@@ -27889,7 +27918,7 @@
\if_int_compare:w #1 < \c_zero_int
\prg_replicate:nn {-#1}
{
- \flag_raise:n { __regex_begin }
+ \flag_raise:N \l__regex_begin_flag
\exp_not:n { { \if_false: } \fi: }
}
\fi:
@@ -27897,7 +27926,7 @@
\if_int_compare:w #1 > \c_zero_int
\prg_replicate:nn {#1}
{
- \flag_raise:n { __regex_end }
+ \flag_raise:N \l__regex_end_flag
\exp_not:n { \if_false: { \fi: } }
}
\fi:
@@ -27914,7 +27943,7 @@
\int_incr:N \l__regex_added_begin_int
\int_incr:N \l__regex_added_end_int
\tex_afterassignment:D \__regex_extract_check:w
- \__kernel_tl_gset:Ne \g__regex_internal_tl
+ \__kernel_tl_gset:Nx \g__regex_internal_tl
{
\exp_after:wN \__regex_extract_check_loop:w
\g__regex_internal_tl
@@ -27945,15 +27974,15 @@
\prg_replicate:nn \l__regex_capturing_group_int
{
\__kernel_intarray_gset:Nnn \g__regex_submatch_prev_intarray
- { \l__regex_submatch_int } { 0 }
+ \l__regex_submatch_int \c_zero_int
\__kernel_intarray_gset:Nnn \g__regex_submatch_case_intarray
- { \l__regex_submatch_int } { 0 }
+ \l__regex_submatch_int \c_zero_int
\int_incr:N \l__regex_submatch_int
}
\__kernel_intarray_gset:Nnn \g__regex_submatch_prev_intarray
- { \l__regex_zeroth_submatch_int } { \l__regex_start_pos_int }
+ \l__regex_zeroth_submatch_int \l__regex_start_pos_int
\__kernel_intarray_gset:Nnn \g__regex_submatch_case_intarray
- { \l__regex_zeroth_submatch_int } { \g__regex_case_int }
+ \l__regex_zeroth_submatch_int \g__regex_case_int
\int_zero:N \l__regex_internal_a_int
\exp_after:wN \__regex_extract_aux:w \l__regex_success_submatches_tl
\prg_break_point: \__regex_use_none_delimit_by_q_recursion_stop:w ,
@@ -27968,7 +27997,12 @@
{ \__regex_int_eval:w \l__regex_zeroth_submatch_int + \l__regex_internal_a_int } {#1}
\else:
\__kernel_intarray_gset:Nnn \g__regex_submatch_end_intarray
- { \__regex_int_eval:w \l__regex_zeroth_submatch_int + \l__regex_internal_a_int - \l__regex_capturing_group_int } {#1}
+ {
+ \__regex_int_eval:w
+ \l__regex_zeroth_submatch_int + \l__regex_internal_a_int
+ - \l__regex_capturing_group_int
+ }
+ {#1}
\fi:
\int_incr:N \l__regex_internal_a_int
\__regex_extract_aux:w
@@ -27987,20 +28021,16 @@
\exp_args:No \__regex_query_set:n {#3}
#2
\int_set:Nn \l__regex_balance_int
+ { \__regex_replacement_balance_one_match:n \l__regex_zeroth_submatch_int }
+ \__kernel_tl_set:Nx \l__regex_internal_a_tl
{
- \__regex_replacement_balance_one_match:n
- { \l__regex_zeroth_submatch_int }
- }
- \__kernel_tl_set:Ne \l__regex_internal_a_tl
- {
- \__regex_replacement_do_one_match:n
- { \l__regex_zeroth_submatch_int }
+ \__regex_replacement_do_one_match:n \l__regex_zeroth_submatch_int
\__regex_query_range:nn
{
\__kernel_intarray_item:Nn \g__regex_submatch_end_intarray
- { \l__regex_zeroth_submatch_int }
+ \l__regex_zeroth_submatch_int
}
- { \l__regex_max_pos_int }
+ \l__regex_max_pos_int
}
\__regex_group_end_replace:N #3
}
@@ -28018,19 +28048,19 @@
#2
\int_set:Nn \l__regex_balance_int
{
- 0
+ \c_zero_int
\int_step_function:nnnN
- { \l__regex_min_submatch_int }
+ \l__regex_min_submatch_int
\l__regex_capturing_group_int
- { \l__regex_submatch_int - 1 }
+ { \l__regex_submatch_int - \c_one_int }
\__regex_replacement_balance_one_match:n
}
- \__kernel_tl_set:Ne \l__regex_internal_a_tl
+ \__kernel_tl_set:Nx \l__regex_internal_a_tl
{
\int_step_function:nnnN
- { \l__regex_min_submatch_int }
+ \l__regex_min_submatch_int
\l__regex_capturing_group_int
- { \l__regex_submatch_int - 1 }
+ { \l__regex_submatch_int - \c_one_int }
\__regex_replacement_do_one_match:n
\__regex_query_range:nn
\l__regex_start_pos_int \l__regex_max_pos_int
@@ -28040,11 +28070,12 @@
\cs_new_protected:Npn \__regex_group_end_replace:N #1
{
\int_set:Nn \l__regex_added_begin_int
- { \int_max:nn { - \l__regex_balance_int } { 0 } }
+ { \int_max:nn { - \l__regex_balance_int } \c_zero_int }
\int_set:Nn \l__regex_added_end_int
- { \int_max:nn { \l__regex_balance_int } { 0 } }
+ { \int_max:nn \l__regex_balance_int \c_zero_int }
\__regex_group_end_replace_try:
- \int_compare:nNnT { \l__regex_added_begin_int + \l__regex_added_end_int } > 0
+ \int_compare:nNnT { \l__regex_added_begin_int + \l__regex_added_end_int }
+ > \c_zero_int
{
\msg_error:nneee { regex } { result-unbalanced }
{ replacing } { \int_use:N \l__regex_added_begin_int }
@@ -28056,11 +28087,11 @@
\cs_new_protected:Npn \__regex_group_end_replace_try:
{
\tex_afterassignment:D \__regex_group_end_replace_check:w
- \__kernel_tl_gset:Ne \g__regex_internal_tl
+ \__kernel_tl_gset:Nx \g__regex_internal_tl
{
- \prg_replicate:nn { \l__regex_added_begin_int } { { \if_false: } \fi: }
+ \prg_replicate:nn \l__regex_added_begin_int { { \if_false: } \fi: }
\l__regex_internal_a_tl
- \prg_replicate:nn { \l__regex_added_end_int } { \if_false: { \fi: } }
+ \prg_replicate:nn \l__regex_added_end_int { \if_false: { \fi: } }
\if_false: { \fi: }
}
}
@@ -28212,14 +28243,13 @@
\use:e
{
\exp_not:n { \exp_after:wN \l__regex_peek_true_tl \exp:w }
- \__regex_replacement_do_one_match:n
- { \l__regex_zeroth_submatch_int }
+ \__regex_replacement_do_one_match:n \l__regex_zeroth_submatch_int
\__regex_query_range:nn
{
\__kernel_intarray_item:Nn \g__regex_submatch_end_intarray
- { \l__regex_zeroth_submatch_int }
+ \l__regex_zeroth_submatch_int
}
- { \l__regex_max_pos_int }
+ \l__regex_max_pos_int
\exp_end:
}
}
@@ -28255,10 +28285,14 @@
{
\if_case:w \l__regex_replacement_csnames_int
\tl_build_put_right:Nn \l__regex_build_tl
- { \__regex_query_submatch:n { \int_eval:n { #1 + ##1 } } }
+ { \__regex_query_submatch:n { \__regex_int_eval:w #1 + ##1 \scan_stop: } }
\else:
\tl_build_put_right:Nn \l__regex_build_tl
- { \exp:w \__regex_query_submatch:n { \int_eval:n { #1 + ##1 } } \exp_end: }
+ {
+ \exp:w
+ \__regex_query_submatch:n { \__regex_int_eval:w #1 + ##1 \scan_stop: }
+ \exp_end:
+ }
\fi:
}
\cs_new_protected:Npn \__regex_peek_replacement_var:N #1
@@ -28589,7 +28623,7 @@
{
\int_step_inline:nnn
\l__regex_min_state_int
- { \l__regex_max_state_int - 1 }
+ { \l__regex_max_state_int - \c_one_int }
{
\__regex_trace:nne { regex } {#1}
{ \iow_char:N \\toks ##1 = { \__regex_toks_use:w ##1 } }
@@ -36451,17 +36485,6 @@
\q_recursion_tail ? { }
\q_recursion_stop
\group_end:
-%% File: l3candidates.dtx
-\cs_new_protected:Npn \seq_set_filter:NNn
- { \__seq_set_filter:NNNn \__kernel_tl_set:Ne }
-\cs_new_protected:Npn \seq_gset_filter:NNn
- { \__seq_set_filter:NNNn \__kernel_tl_gset:Ne }
-\cs_new_protected:Npn \__seq_set_filter:NNNn #1#2#3#4
- {
- \__seq_push_item_def:n { \bool_if:nT {#4} { \__seq_wrap_item:n {##1} } }
- #1 #2 { #3 }
- \__seq_pop_item_def:
- }
%% File: l3legacy.dtx
\prg_new_conditional:Npnn \legacy_if:n #1 { p , T , F , TF }
{
@@ -36548,220 +36571,6 @@
\tl_if_blank:nF {#3} { Use~ \tl_trim_spaces:n {#3} ~not~ }
#2~deprecated~on~#1.
}
-\cs_new_protected:Npn \__deprecation_old_protected:Nnn #1#2#3
- {
- \__kernel_patch_deprecation:nnNNpn {#3} {#2}
- \cs_gset_protected:Npn #1 { }
- }
-\cs_new_protected:Npn \__deprecation_old:Nnn #1#2#3
- {
- \__kernel_patch_deprecation:nnNNpn {#3} {#2}
- \cs_gset:Npn #1 { }
- }
-\__deprecation_old_protected:Nnn \box_gset_eq_clear:NN
- { \box_gset_eq_drop:NN } { 2021-07-01 }
-\__deprecation_old_protected:Nnn \box_set_eq_clear:NN
- { \box_set_eq_drop:NN } { 2021-07-01 }
-\__deprecation_old_protected:Nnn \box_resize:Nnn
- { \box_resize_to_wd_and_ht_plus_dp:Nnn } { 2019-01-01 }
-\__deprecation_old_protected:Nnn \box_use_clear:N
- { \box_use_drop:N } { 2019-01-01 }
-\__deprecation_old:Nnn \c_job_name_tl
- { \c_sys_jobname_str } { 2017-01-01 }
-\__deprecation_old:Nnn \c_minus_one
- { -1 } { 2019-01-01 }
-\__deprecation_old:Nnn \c_zero
- { 0 } { 2020-01-01 }
-\__deprecation_old:Nnn \c_one
- { 1 } { 2020-01-01 }
-\__deprecation_old:Nnn \c_two
- { 2 } { 2020-01-01 }
-\__deprecation_old:Nnn \c_three
- { 3 } { 2020-01-01 }
-\__deprecation_old:Nnn \c_four
- { 4 } { 2020-01-01 }
-\__deprecation_old:Nnn \c_five
- { 5 } { 2020-01-01 }
-\__deprecation_old:Nnn \c_six
- { 6 } { 2020-01-01 }
-\__deprecation_old:Nnn \c_seven
- { 7 } { 2020-01-01 }
-\__deprecation_old:Nnn \c_eight
- { 8 } { 2020-01-01 }
-\__deprecation_old:Nnn \c_nine
- { 9 } { 2020-01-01 }
-\__deprecation_old:Nnn \c_ten
- { 10 } { 2020-01-01 }
-\__deprecation_old:Nnn \c_eleven
- { 11 } { 2020-01-01 }
-\__deprecation_old:Nnn \c_twelve
- { 12 } { 2020-01-01 }
-\__deprecation_old:Nnn \c_thirteen
- { 13 } { 2020-01-01 }
-\__deprecation_old:Nnn \c_fourteen
- { 14 } { 2020-01-01 }
-\__deprecation_old:Nnn \c_fifteen
- { 15 } { 2020-01-01 }
-\__deprecation_old:Nnn \c_sixteen
- { 16 } { 2020-01-01 }
-\__deprecation_old:Nnn \c_thirty_two
- { 32 } { 2020-01-01 }
-\__deprecation_old:Nnn \c_one_hundred
- { 100 } { 2020-01-01 }
-\__deprecation_old:Nnn \c_two_hundred_fifty_five
- { 255 } { 2020-01-01 }
-\__deprecation_old:Nnn \c_two_hundred_fifty_six
- { 256 } { 2020-01-01 }
-\__deprecation_old:Nnn \c_one_thousand
- { 1000 } { 2020-01-01 }
-\__deprecation_old:Nnn \c_ten_thousand
- { 10000 } { 2020-01-01 }
-\__deprecation_old:Nnn \c_term_ior
- { -1 } { 2021-07-01 }
-\__deprecation_old:Nnn \dim_case:nnn
- { \dim_case:nnF } { 2015-07-14 }
-\__deprecation_old_protected:Nnn \file_add_path:nN
- { \file_get_full_name:nN } { 2019-01-01 }
-\__deprecation_old_protected:Nnn \file_if_exist_input:nT
- { \file_if_exist:nT and~ \file_input:n } { 2018-03-05 }
-\__deprecation_old_protected:Nnn \file_if_exist_input:nTF
- { \file_if_exist:nT and~ \file_input:n } { 2018-03-05 }
-\__deprecation_old_protected:Nnn \file_list:
- { \file_log_list: } { 2019-01-01 }
-\__deprecation_old:Nnn \file_path_include:n
- { \seq_put_right:Nn \l_file_search_path_seq } { 2019-01-01 }
-\__deprecation_old_protected:Nnn \file_path_remove:n
- { \seq_remove_all:Nn \l_file_search_path_seq } { 2019-01-01 }
-\__deprecation_old:Nnn \g_file_current_name_tl
- { \g_file_curr_name_str } { 2019-01-01 }
-\__deprecation_old_protected:Nnn \hbox_unpack_clear:N
- { \hbox_unpack_drop:N } { 2021-07-01 }
-\__deprecation_old:Nnn \int_case:nnn
- { \int_case:nnF } { 2015-07-14 }
-\__deprecation_old:Nnn \int_from_binary:n
- { \int_from_bin:n } { 2016-01-05 }
-\__deprecation_old:Nnn \int_from_hexadecimal:n
- { \int_from_hex:n } { 2016-01-05 }
-\__deprecation_old:Nnn \int_from_octal:n
- { \int_from_oct:n } { 2016-01-05 }
-\__deprecation_old:Nnn \int_to_binary:n
- { \int_to_bin:n } { 2016-01-05 }
-\__deprecation_old:Nnn \int_to_hexadecimal:n
- { \int_to_hex:n } { 2016-01-05 }
-\__deprecation_old:Nnn \int_to_octal:n
- { \int_to_oct:n } { 2016-01-05 }
-\__deprecation_old_protected:Nnn \ior_get_str:NN
- { \ior_str_get:NN } { 2018-03-05 }
-\__deprecation_old_protected:Nnn \ior_list_streams:
- { \ior_show_list: } { 2019-01-01 }
-\__deprecation_old_protected:Nnn \ior_log_streams:
- { \ior_log_list: } { 2019-01-01 }
-\__deprecation_old_protected:Nnn \iow_list_streams:
- { \iow_show_list: } { 2019-01-01 }
-\__deprecation_old_protected:Nnn \iow_log_streams:
- { \iow_log_list: } { 2019-01-01 }
-\__deprecation_old:Nnn \lua_escape_x:n
- { \lua_escape:e } { 2020-01-01 }
-\__deprecation_old:Nnn \lua_now_x:n
- { \lua_now:e } { 2020-01-01 }
-\__deprecation_old_protected:Nnn \lua_shipout_x:n
- { \lua_shipout_e:n } { 2020-01-01 }
-\__deprecation_old:Nnn \luatex_if_engine_p:
- { \sys_if_engine_luatex_p: } { 2017-01-01 }
-\__deprecation_old:Nnn \luatex_if_engine:F
- { \sys_if_engine_luatex:F } { 2017-01-01 }
-\__deprecation_old:Nnn \luatex_if_engine:T
- { \sys_if_engine_luatex:T } { 2017-01-01 }
-\__deprecation_old:Nnn \luatex_if_engine:TF
- { \sys_if_engine_luatex:TF } { 2017-01-01 }
-\__deprecation_old_protected:Nnn \msg_interrupt:nnn
- { [Defined~error~message] } { 2020-01-01 }
-\__deprecation_old_protected:Nnn \msg_log:n
- { \iow_log:n } { 2020-01-01 }
-\__deprecation_old_protected:Nnn \msg_term:n
- { \iow_term:n } { 2020-01-01 }
-\__deprecation_old:Nnn \pdftex_if_engine_p:
- { \sys_if_engine_pdftex_p: } { 2017-01-01 }
-\__deprecation_old:Nnn \pdftex_if_engine:F
- { \sys_if_engine_pdftex:F } { 2017-01-01 }
-\__deprecation_old:Nnn \pdftex_if_engine:T
- { \sys_if_engine_pdftex:T } { 2017-01-01 }
-\__deprecation_old:Nnn \pdftex_if_engine:TF
- { \sys_if_engine_pdftex:TF } { 2017-01-01 }
-\__deprecation_old:Nnn \prop_get:cn
- { \prop_item:cn } { 2016-01-05 }
-\__deprecation_old:Nnn \prop_get:Nn
- { \prop_item:Nn } { 2016-01-05 }
-\__deprecation_old:Nnn \quark_if_recursion_tail_break:N
- { } { 2015-07-14 }
-\__deprecation_old:Nnn \quark_if_recursion_tail_break:n
- { } { 2015-07-14 }
-\__deprecation_old:Nnn \scan_align_safe_stop:
- { protected~commands } { 2017-01-01 }
-\__deprecation_old:Nnn \sort_ordered:
- { \sort_return_same: } { 2019-01-01 }
-\__deprecation_old:Nnn \sort_reversed:
- { \sort_return_swapped: } { 2019-01-01 }
-\__deprecation_old:Nnn \str_case:nnn
- { \str_case:nnF } { 2015-07-14 }
-\__deprecation_old:Nnn \str_case:onn
- { \str_case:onF } { 2015-07-14 }
-\__deprecation_old:Nnn \str_case_x:nn
- { \str_case_e:nn } { 2020-01-01 }
-\__deprecation_old:Nnn \str_case_x:nnn
- { \str_case_e:nnF } { 2015-07-14 }
-\__deprecation_old:Nnn \str_case_x:nnT
- { \str_case_e:nnT } { 2020-01-01 }
-\__deprecation_old:Nnn \str_case_x:nnTF
- { \str_case_e:nnTF } { 2020-01-01 }
-\__deprecation_old:Nnn \str_case_x:nnF
- { \str_case_e:nnF } { 2020-01-01 }
-\__deprecation_old:Nnn \str_if_eq_x_p:nn
- { \str_if_eq_p:ee } { 2020-01-01 }
-\__deprecation_old:Nnn \str_if_eq_x:nnT
- { \str_if_eq:eeT } { 2020-01-01 }
-\__deprecation_old:Nnn \str_if_eq_x:nnF
- { \str_if_eq:eeF } { 2020-01-01 }
-\__deprecation_old:Nnn \str_if_eq_x:nnTF
- { \str_if_eq:eeTF } { 2020-01-01 }
-\__deprecation_old_protected:Nnn \tl_show_analysis:N
- { \tl_analysis_show:N } { 2020-01-01 }
-\__deprecation_old_protected:Nnn \tl_show_analysis:n
- { \tl_analysis_show:n } { 2020-01-01 }
-\__deprecation_old:Nnn \tl_case:cnn
- { \exp_args:Nc \token_case_meaning:NnF } { 2015-07-14 }
-\__deprecation_old:Nnn \tl_case:Nnn
- { \token_case_meaning:NnF } { 2015-07-14 }
-\__deprecation_old_protected:Nnn \tl_gset_from_file:Nnn
- { \file_get:nnN } { 2021-07-01 }
-\__deprecation_old_protected:Nnn \tl_gset_from_file_x:Nnn
- { \file_get:nnN } { 2021-07-01 }
-\__deprecation_old_protected:Nnn \tl_set_from_file:Nnn
- { \file_get:nnN } { 2021-07-01 }
-\__deprecation_old_protected:Nnn \tl_set_from_file_x:Nnn
- { \file_get:nnN } { 2021-07-01 }
-\__deprecation_old_protected:Nnn \tl_to_lowercase:n
- { \tex_lowercase:D } { 2018-03-05 }
-\__deprecation_old_protected:Nnn \tl_to_uppercase:n
- { \tex_uppercase:D } { 2018-03-05 }
-\__deprecation_old:Nnn \token_get_arg_spec:N
- { \cs_argument_spec:N } { 2021-07-01 }
-\__deprecation_old:Nnn \token_get_prefix_spec:N
- { \cs_prefix_spec:N } { 2021-07-01 }
-\__deprecation_old:Nnn \token_get_replacement_spec:N
- { \cs_replacement_spec:N } { 2021-07-01 }
-\__deprecation_old_protected:Nnn \token_new:Nn
- { \cs_new_eq:NN } { 2019-01-01 }
-\__deprecation_old_protected:Nnn \vbox_unpack_clear:N
- { \vbox_unpack_drop:N } { 2021-07-01 }
-\__deprecation_old:Nnn \xetex_if_engine_p:
- { \sys_if_engine_xetex_p: } { 2017-01-01 }
-\__deprecation_old:Nnn \xetex_if_engine:F
- { \sys_if_engine_xetex:F } { 2017-01-01 }
-\__deprecation_old:Nnn \xetex_if_engine:T
- { \sys_if_engine_xetex:T } { 2017-01-01 }
-\__deprecation_old:Nnn \xetex_if_engine:TF
- { \sys_if_engine_xetex:TF } { 2017-01-01 }
\cs_gset:Npn \cs_argument_spec:N { \cs_parameter_spec:N }
\cs_new_protected:Npn \iow_shipout_x:Nn { \iow_shipout_e:Nn }
\cs_generate_variant:Nn \iow_shipout_x:Nn { Nx , c, cx }
@@ -36781,6 +36590,12 @@
{ \__keys_variable_set:NnnN #1 { tl } { g } x }
\cs_new_protected:cpn { \c__keys_props_root_str .tl_gset_x:c } #1
{ \__keys_variable_set:cnnN {#1} { tl } { g } x }
+\cs_set_protected:Npn \keys_set_filter:nnn { \keys_set_exclude_groups:nnn }
+\cs_generate_variant:Nn \keys_set_filter:nnn { nnV , nnv , nno }
+\cs_set_protected:Npn \keys_set_filter:nnnN { \keys_set_exclude_groups:nnnN }
+\cs_generate_variant:Nn \keys_set_filter:nnnN { nnV , nnv , nno }
+\cs_set_protected:Npn \keys_set_filter:nnnnN { \keys_set_exclude_groups:nnnnN }
+\cs_generate_variant:Nn \keys_set_filter:nnnnN { nnV , nnv , nno }
\prop_new:N \g__pdf_object_prop
\__kernel_patch_deprecation:nnNNpn { 2022-08-30 } { [\pdf_object_new:n] }
\cs_new_protected:Npn \pdf_object_new:nn #1#2
Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex 2024-01-22 20:35:48 UTC (rev 69537)
@@ -19,7 +19,7 @@
%% and all files in that bundle must be distributed together.
%%
%% File: expl3.dtx
-\def\ExplFileDate{2024-01-04}%
+\def\ExplFileDate{2024-01-22}%
\let\ExplLoaderFileDate\ExplFileDate
\begingroup
\catcode`\_=11
Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.ltx
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.ltx 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.ltx 2024-01-22 20:35:48 UTC (rev 69537)
@@ -19,7 +19,7 @@
%% and all files in that bundle must be distributed together.
%%
%% File: expl3.dtx
-\def\ExplFileDate{2024-01-04}%
+\def\ExplFileDate{2024-01-22}%
\let\ExplLoaderFileDate\ExplFileDate
\begingroup
\catcode`\_=11
Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.sty 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.sty 2024-01-22 20:35:48 UTC (rev 69537)
@@ -19,7 +19,7 @@
%% and all files in that bundle must be distributed together.
%%
%% File: expl3.dtx
-\def\ExplFileDate{2024-01-04}%
+\def\ExplFileDate{2024-01-22}%
\let\ExplLoaderFileDate\ExplFileDate
\ProvidesPackage{expl3}
[%
Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/l3debug.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/l3debug.def 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3debug.def 2024-01-22 20:35:48 UTC (rev 69537)
@@ -19,7 +19,7 @@
%% and all files in that bundle must be distributed together.
%%
%% File: l3debug.dtx
-\ProvidesExplFile{l3debug.def}{2024-01-04}{}{L3 Debugging support}
+\ProvidesExplFile{l3debug.def}{2024-01-22}{}{L3 Debugging support}
\scan_new:N \s__debug_stop
\cs_new:Npn \__debug_use_i_delimit_by_s_stop:nw #1 #2 \s__debug_stop {#1}
\quark_new:N \q__debug_recursion_tail
@@ -71,7 +71,7 @@
}
\cs_set_protected:Npn \debug_resume:
{
- \__kernel_tl_set:Ne \l__debug_suspended_tl
+ \__kernel_tl_set:Nx \l__debug_suspended_tl
{ \tl_tail:N \l__debug_suspended_tl }
\tl_if_empty:NT \l__debug_suspended_tl
{
@@ -82,7 +82,7 @@
\cs_new_protected:Npn \__kernel_chk_var_exist:N #1 { }
\cs_new_protected:Npn \__kernel_chk_cs_exist:N #1 { }
\cs_generate_variant:Nn \__kernel_chk_cs_exist:N { c }
-\cs_new:Npn \__kernel_chk_flag_exist:n #1 { }
+\cs_new:Npn \__kernel_chk_flag_exist:NN { }
\cs_new_protected:Npn \__kernel_chk_var_local:N #1 { }
\cs_new_protected:Npn \__kernel_chk_var_global:N #1 { }
\cs_new_protected:Npn \__kernel_chk_var_scope:NN #1#2 { }
@@ -106,13 +106,14 @@
{ \token_to_str:N ##1 }
}
}
- \cs_set:Npn \__kernel_chk_flag_exist:n ##1
+ \cs_set:Npn \__kernel_chk_flag_exist:NN ##1##2
{
- \__debug_suspended:T \use_none:nnn
- \flag_if_exist:nF {##1}
+ \__debug_suspended:T \use_iii:nnnn
+ \flag_if_exist:NTF ##2
+ { ##1 ##2 }
{
- \msg_expandable_error:nnn
- { kernel } { bad-variable } { flag~##1~ }
+ \msg_expandable_error:nnn { kernel } { bad-variable } {##2}
+ ##1 \l_tmpa_flag
}
}
\cs_set_protected:Npn \__kernel_chk_var_scope:NN
@@ -137,7 +138,7 @@
{
\cs_set_protected:Npn \__kernel_chk_var_exist:N ##1 { }
\cs_set_protected:Npn \__kernel_chk_cs_exist:N ##1 { }
- \cs_set:Npn \__kernel_chk_flag_exist:N ##1 { }
+ \cs_set:Npn \__kernel_chk_flag_exist:NN { }
\cs_set_protected:Npn \__kernel_chk_var_local:N ##1 { }
\cs_set_protected:Npn \__kernel_chk_var_global:N ##1 { }
\cs_set_protected:Npn \__kernel_chk_var_scope:NN ##1##2 { }
@@ -213,11 +214,11 @@
\tl_new:N \l__debug_tmpb_tl
\cs_new_protected:Npn \__debug_generate_parameter_list:NNN #1#2#3
{
- \__kernel_tl_set:Ne \l__debug_internal_tl
+ \__kernel_tl_set:Nx \l__debug_internal_tl
{ \exp_last_unbraced:Nf \use_ii:nnn \cs_split_function:N #1 }
- \__kernel_tl_set:Ne #2
+ \__kernel_tl_set:Nx #2
{ \exp_args:NV \__debug_build_parm_text:n \l__debug_internal_tl }
- \__kernel_tl_set:Ne #3
+ \__kernel_tl_set:Nx #3
{ \exp_args:NV \__debug_build_arg_list:n \l__debug_internal_tl }
}
\cs_new:Npn \__debug_build_parm_text:n #1
@@ -423,8 +424,8 @@
\tl_concat:NNN
\tl_gconcat:NNN
}
-\cs_gset_protected:Npn \__kernel_tl_set:Ne { \cs_set_nopar:Npe }
-\cs_gset_protected:Npn \__kernel_tl_gset:Ne { \cs_gset_nopar:Npe }
+\cs_gset_protected:Npn \__kernel_tl_set:Nx { \cs_set_nopar:Npe }
+\cs_gset_protected:Npn \__kernel_tl_gset:Nx { \cs_gset_nopar:Npe }
\__kernel_patch:nnn
{ \__kernel_chk_var_local:N #1 }
{ }
@@ -470,7 +471,7 @@
\str_set_eq:NN
\str_put_left:Nn
\str_put_right:Nn
- \__kernel_tl_set:Ne
+ \__kernel_tl_set:Nx
\tl_clear:N
\tl_set_eq:NN
\tl_put_left:Nn
@@ -539,7 +540,7 @@
\str_gset_eq:NN
\str_gput_left:Nn
\str_gput_right:Nn
- \__kernel_tl_gset:Ne
+ \__kernel_tl_gset:Nx
\tl_gclear:N
\tl_gset_eq:NN
\tl_gput_left:Nn
@@ -577,16 +578,16 @@
\tl_const:Nn
}
\__kernel_patch:nnn
- { \__kernel_chk_flag_exist:n {#1} }
+ { \__kernel_chk_flag_exist:NN }
{ }
{
- \flag_if_raised:nT
- \flag_if_raised:nF
- \flag_if_raised:nTF
- \flag_if_raised_p:n
- \flag_height:n
- \flag_ensure_raised:n
- \flag_clear:n
+ \flag_ensure_raised:N
+ \flag_height:N
+ \flag_if_raised:NT
+ \flag_if_raised:NF
+ \flag_if_raised:NTF
+ \flag_if_raised_p:N
+ \flag_raise:N
}
\__kernel_patch:nnn
{ \__kernel_chk_cs_exist:N #1 }
@@ -597,6 +598,17 @@
{ }
{ \cctab_new:N }
\__kernel_patch:nnn
+ { \__kernel_chk_var_scope:NN l #1 }
+ { }
+ { \flag_new:N }
+ \__kernel_patch:nnn
+ {
+ \__kernel_chk_var_scope:NN l #1
+ \__kernel_chk_flag_exist:NN
+ }
+ { }
+ { \flag_clear:N }
+ \__kernel_patch:nnn
{ \__kernel_chk_var_scope:NN g #1 }
{ }
{ \intarray_new:Nn }
@@ -662,7 +674,7 @@
{
\__regex_trace_push:nnN { regex } { 1 } \__regex_escape_use:nnnn
\group_begin:
- \__kernel_tl_set:Ne \l__regex_internal_a_tl
+ \__kernel_tl_set:Nx \l__regex_internal_a_tl
{ \__regex_trace_pop:nnN { regex } { 1 } \__regex_escape_use:nnnn }
\use_none:nnn
}
Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls 2024-01-22 20:35:21 UTC (rev 69536)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls 2024-01-22 20:35:48 UTC (rev 69537)
@@ -20,7 +20,7 @@
%%
%% File: l3doc.dtx
\RequirePackage{calc}
-\ProvidesExplClass{l3doc}{2024-01-04}{}
+\ProvidesExplClass{l3doc}{2024-01-22}{}
{L3 Experimental documentation class}
\clist_new:N \g_docinput_clist
\seq_new:N \g_doc_functions_seq
@@ -116,7 +116,7 @@
\cs_new_protected:Npn \__codedoc_trim_right:Nn #1#2
{
\cs_set:Npn \__codedoc_tmp:w ##1 #2 ##2 \q_stop { \exp_not:n {##1} }
- \__kernel_tl_set:Ne #1 { \exp_after:wN \__codedoc_tmp:w #1 #2 \q_stop }
+ \__kernel_tl_set:Nx #1 { \exp_after:wN \__codedoc_tmp:w #1 #2 \q_stop }
}
\cs_generate_variant:Nn \__codedoc_trim_right:Nn { No }
\prg_new_protected_conditional:Npnn \__codedoc_str_if_begin:nn #1#2 { TF , T , F }
@@ -251,7 +251,7 @@
\__codedoc_if_almost_str:nTF {#1}
{
\__codedoc_key_get_base_TF:nN {#1} \l__codedoc_tmpa_tl
- \__kernel_tl_set:Ne #2
+ \__kernel_tl_set:Nx #2
{ \__codedoc_split_function_do:on \l__codedoc_tmpa_tl { \__codedoc_base_form_aux:nnN } }
}
{ \tl_set:Nn #2 {#1} }
@@ -258,7 +258,7 @@
}
\cs_new:Npe \__codedoc_key_get_base_TF:nN #1#2
{
- \__kernel_tl_set:Ne #2 { \exp_not:N \tl_to_str:n {#1} }
+ \__kernel_tl_set:Nx #2 { \exp_not:N \tl_to_str:n {#1} }
\tl_if_in:NoF #2 { \tl_to_str:n {:} }
{ \exp_not:N \prg_break: }
\tl_if_in:onT { #2 z } { \tl_to_str:n {TF} z }
@@ -404,7 +404,7 @@
\DeclareUnknownKeyHandler [ l3doc / options ]
{ \PassOptionsToClass { \CurrentOption } { article } }
\SetKeys [ l3doc / options ]
- { full , kernel , check = false , checktest = false , lm-default }
+ { full , check = false , checktest = false , lm-default }
\PassOptionsToClass { a4paper } { article }
\msg_new:nnn { l3doc } { input-cfg }
{ Local~config~file~l3doc.cfg~loaded. }
@@ -679,7 +679,7 @@
\verbatim at font
\__codedoc_if_almost_str:VT \l__codedoc_cmd_tl
{
- \__kernel_tl_set:Ne \l__codedoc_cmd_tl { \tl_to_str:N \l__codedoc_cmd_tl }
+ \__kernel_tl_set:Nx \l__codedoc_cmd_tl { \tl_to_str:N \l__codedoc_cmd_tl }
\bool_if:NT \g__codedoc_cs_break_bool
{
\regex_replace_all:nnN
@@ -698,13 +698,13 @@
{
\quark_if_no_value:NF \l__codedoc_cmd_index_tl
{
- \__kernel_tl_set:Ne \l__codedoc_cmd_tl
+ \__kernel_tl_set:Nx \l__codedoc_cmd_tl
{ \c_backslash_str \exp_not:o { \l__codedoc_cmd_index_tl } }
}
\exp_args:No \__codedoc_key_get:n { \l__codedoc_cmd_tl }
\quark_if_no_value:NF \l__codedoc_cmd_module_tl
{
- \__kernel_tl_set:Ne \l__codedoc_index_module_tl
+ \__kernel_tl_set:Nx \l__codedoc_index_module_tl
{ \tl_to_str:N \l__codedoc_cmd_module_tl }
}
\__codedoc_special_index_module:ooonN
@@ -782,7 +782,7 @@
}
\cs_new_protected:Npn \__codedoc_get_hyper_target:nN #1#2
{
- \__kernel_tl_set:Ne #2 { \tl_to_str:n {#1} }
+ \__kernel_tl_set:Nx #2 { \tl_to_str:n {#1} }
\tl_replace_all:NVn #2 \c_underscore_str { / }
\tl_remove_all:NV #2 \c_backslash_str
\tl_put_left:Nn #2 { doc/function// }
@@ -790,7 +790,7 @@
\cs_generate_variant:Nn \__codedoc_get_hyper_target:nN { o , e }
\cs_new_protected:Npn \__codedoc_names_get_seq:nN #1#2
{
- \__kernel_tl_set:Ne \l__codedoc_tmpa_tl { \tl_to_str:n {#1} }
+ \__kernel_tl_set:Nx \l__codedoc_tmpa_tl { \tl_to_str:n {#1} }
\bool_if:NTF \l__codedoc_names_verb_bool
{
\seq_clear:N #2
@@ -1389,7 +1389,7 @@
\l__codedoc_macro_do_not_index_tl
\exp_args:NNV \seq_set_from_clist:Nn
\l__codedoc_tmpa_seq \l__codedoc_macro_do_not_index_tl
- \__kernel_tl_set:Ne \l__codedoc_macro_do_not_index_tl
+ \__kernel_tl_set:Nx \l__codedoc_macro_do_not_index_tl
{ \seq_use:Nn \l__codedoc_tmpa_seq { , } }
\exp_args:NV \DoNotIndex \l__codedoc_macro_do_not_index_tl
}
@@ -2257,7 +2257,7 @@
\cs_new_protected:Npn \__codedoc_hdindex_aux:w #1 M { }
\cs_new_protected:Npn \__codedoc_special_index_set:Nn #1#2
{
- \__kernel_tl_set:Ne #1 { \tl_to_str:n {#2} }
+ \__kernel_tl_set:Nx #1 { \tl_to_str:n {#2} }
\__codedoc_if_almost_str:nTF {#2}
{
\tl_replace_all:Nen #1 { \tl_to_str:n { __ } }
@@ -2275,7 +2275,7 @@
\token_to_str:N \verb * \verbatimchar
}
}
- \__kernel_tl_set:Ne #1
+ \__kernel_tl_set:Nx #1
{
\token_to_str:N \verb * \verbatimchar
#1 \verbatimchar
@@ -2300,7 +2300,7 @@
\cs_new_protected:Npe \__codedoc_key_get:n #1
{
\exp_not:N \__codedoc_key_get_base:nN {#1} \exp_not:N \l__codedoc_index_macro_tl
- \__kernel_tl_set:Ne \exp_not:N \l__codedoc_index_key_tl
+ \__kernel_tl_set:Nx \exp_not:N \l__codedoc_index_key_tl
{ \exp_not:N \tl_to_str:N \exp_not:N \l__codedoc_index_macro_tl }
\tl_clear:N \exp_not:N \l__codedoc_index_module_tl
\tl_if_in:NnTF \exp_not:N \l__codedoc_index_key_tl { \tl_to_str:n { __ } }
@@ -2322,7 +2322,7 @@
}
\cs_new_protected:Npn \__codedoc_key_pop:
{
- \__kernel_tl_set:Ne \l__codedoc_index_key_tl
+ \__kernel_tl_set:Nx \l__codedoc_index_key_tl
{ \tl_tail:N \l__codedoc_index_key_tl }
}
\cs_new_protected:Npn \__codedoc_key_trim_module:n #1
@@ -2329,7 +2329,7 @@
{
\cs_set:Npn \__codedoc_tmpa:w ##1 #1 ##2 \q_stop
{ \exp_not:n {##1} }
- \__kernel_tl_set:Ne \l__codedoc_index_module_tl
+ \__kernel_tl_set:Nx \l__codedoc_index_module_tl
{ \exp_after:wN \__codedoc_tmpa:w \l__codedoc_index_module_tl #1 \q_stop }
}
\cs_new_protected:Npn \__codedoc_key_drop_underscores:
More information about the tex-live-commits
mailing list.