diff options
author | Norbert Preining <norbert@preining.info> | 2023-10-11 03:02:59 +0000 |
---|---|---|
committer | Norbert Preining <norbert@preining.info> | 2023-10-11 03:02:59 +0000 |
commit | 366cf31a771ded1f10860be3212058d48020398d (patch) | |
tree | 99ee483a9fd05dfd4ec908582abb44028bdffbd1 /macros/latex/contrib | |
parent | 48eedda2cb4d2644886b862409b24a1d8e9a136f (diff) |
CTAN sync 202310110302
Diffstat (limited to 'macros/latex/contrib')
196 files changed, 4496 insertions, 3505 deletions
diff --git a/macros/latex/contrib/indextools/indextools.dtx b/macros/latex/contrib/indextools/indextools.dtx index b88e96682e..3cc0260b0c 100644 --- a/macros/latex/contrib/indextools/indextools.dtx +++ b/macros/latex/contrib/indextools/indextools.dtx @@ -45,7 +45,7 @@ and the derived files indextools.sty and indextools.pdf. %<package>\NeedsTeXFormat{LaTeX2e}[2005/12/01] %<package>\ProvidesPackage{indextools}% %<*package> - [2015/11/22 v1.5.1 Package for typesetting indices in a synchronous mode] + [2023/10/10 v1.6.0 Package for typesetting indices in a synchronous mode] %</package> %<*driver> \documentclass{ltxdoc} @@ -80,7 +80,7 @@ and the derived files indextools.sty and indextools.pdf. \end{document} %</driver> % \fi -% \CheckSum{891} +% \CheckSum{897} % % \changes{v1.0}{2010/07/10}{First public version} % \changes{v1.0a}{2010/07/12}{Small bug correction} @@ -100,6 +100,7 @@ and the derived files indextools.sty and indextools.pdf. % \changes{v1.5}{2015/11/15}{New option `innote'} % \changes{v1.5}{2015/11/15}{New option `notenumber'} % \changes{v1.5.1}{2015/11/22}{Fix bug with options `notenumber' and `innote' when using \cs{index} without optional argument} +% \changes{v1.6.0}{2023/10/10}{Add compatibility with upmendex sorting engine} % % \begin{abstract} % This package is a fork of the \pack{imakeidx} package. The original authors @@ -121,7 +122,7 @@ and the derived files indextools.sty and indextools.pdf. % \item this documentation. % \end{itemize} % This package replaces and extends the functionalities of \pack{imakeidx}, -% therefore it MUST not be loaded at the same time as \pack{imakeidx}. Some +% therefore it MUST not be loaded at the same time as \pack{imakeidx}. Some % controls are implemented to avoid these situations; if loading of % \pack{indextools} is required after \pack{imakeidx} is already loaded, % it does not get loaded; at the same time, if it gets loaded, it sets a @@ -137,7 +138,7 @@ and the derived files indextools.sty and indextools.pdf. % impossible to start an index before all other pages have been % ejected. % -% For support, please open issues on:\\[1ex] +% For support, please open issues on:\\[1ex] % \makebox[\linewidth]{\url{https://github.com/maieul/indextools}} % \end{abstract} % @@ -146,7 +147,7 @@ and the derived files indextools.sty and indextools.pdf. % system is just \prog{pdftex}; the original Knuthian \prog{tex} is % still corrected by D.\,E.~Knuth himself, but is frozen, according to % his will; it is still distributed by every \TeX\ distribution, but -% in practice \prog{pdftex}, \prog{xetex} or \prog{luatex} are the most used +% in practice \prog{pdftex}, \prog{xetex} or \prog{luatex} are the most used % interpreters and typesetting engines of most macro packages. % % This program \prog{pdftex} was originally born with the facility of @@ -156,7 +157,7 @@ and the derived files indextools.sty and indextools.pdf. % incorporates the extensions of \eTeX\ and has the ability to open a % shell so as to run system commands with their arguments. The same % is true for \prog{xetex} and \prog{luatex}. -% +% % This facility, since the \TeX~Live 2010 distribution, is official, % but is sort of restricted, in the sense that the \TeX\ system % configuration file contains a list of ``safe'' system commands that @@ -207,7 +208,7 @@ and the derived files indextools.sty and indextools.pdf. % \begin{description}\def\Item[#1]{\item[\normalfont\ttfamily#1]} % \Item[makeindex] in order to use the \prog{makeindex} sorting and % formatting engine; this option is the default and is mutually -% exclusive with the next option. +% exclusive with the two next options. % \Item[xindy] in order to use the \prog{xindy} sorting and formatting % engine; \texttt{texindy} is an alias for \texttt{xindy} and actually % it's the script \prog{texindy} which is called by this package. @@ -216,6 +217,7 @@ and the derived files indextools.sty and indextools.pdf. % the command line specific settings, it is possible to specify the % option \texttt{truexindy}; the user is then responsible to set up % the \prog{xindy} engine with the suitable command line options. +% \Item[upmendex] in order tu use the \prog{upmendex} sorting and formatting engine. % \Item[noautomatic] disables the automatic splitting of the raw % index files and running of the system programs; this option might % be used to save time when one knows for sure that the index files @@ -234,13 +236,13 @@ and the derived files indextools.sty and indextools.pdf. % document class option \texttt{twocolumn} has been specified. % \Item[afterindex] allows to use \cs{index} command after \cs{printindex}. % If this case, the index will be printed only on the secund run. -% \Item[innote] adds a mark for content indexed in note. The standard mark is an italic `n' added after the page number. You can redefine the \cs{innnote} command to modify the standard mark. +% \Item[innote] adds a mark for content indexed in note. The standard mark is an italic `n' added after the page number. You can redefine the \cs{innote} command to modify the standard mark. % The default value is:\\ % \begin{verbatim} % \providecommand{\innote}[1]{#1\textit{n}} % \end{verbatim} % \Item[notenumber] adds the note number for content indexed in note. The standard marks is a `n.' followed by the note number. -% You can redefine \cs{innnotenumber} to modify the standard mark. +% You can redefine \cs{innotenumber} to modify the standard mark. % The default value is:\\ % \begin{verbatim} % \providecommand{\innotenumber}[2]{#2n.~#1} @@ -302,8 +304,8 @@ and the derived files indextools.sty and indextools.pdf. % specific index; if not specified, the \cs{indexname} value is % used.\\* Example: \texttt{title=Index of names}. % \Item[program] is the name of the system program that is used to -% sort and format an index; valid choices are \prog{makeindex}, -% \prog{xindy}, or \prog{texindy}, plus \prog{truexindy}. If not +% sort and format an index; valid choices are \prog{makeindex} ; +% \prog{xindy}, or \prog{texindy}, plus \prog{truexindy} ; \prog{upmendex}. If not % specified the program specified among the package options is used. % If no option is specified, \prog{makeindex} is used. In order to % use \prog{xindy}, it's necessary to call \prog{pdflatex} with @@ -370,7 +372,7 @@ and the derived files indextools.sty and indextools.pdf. % \texttt{plain}. You might want to set it to \texttt{empty} or some % other page style defined by the class or by yourself. This keyword % is disabled when the package \pack{fancyhdr} is loaded; any definition -% or choice of page styles must be done before typesetting the indices. +% or choice of page styles must be done before typesetting the indices. % ^^A % \Item[headers] which takes two values: the left and right marks. You % might want to use this for disabling automatic uppercasing, by @@ -477,7 +479,7 @@ and the derived files indextools.sty and indextools.pdf. % \texttt{-\/-shell-escape} (which is \texttt{-\/-enable-write18} for % MiK\TeX) typesetting program option or the \texttt{noautomatic} % option should be specified when loading \pack{indextools}. -% +% % Let's look at a couple of examples. In both we suppose that the % document \texttt{mybook.tex} defines two indices through %\begin{verbatim} @@ -616,7 +618,7 @@ and the derived files indextools.sty and indextools.pdf. % |\indexprologue| to write some text before the index proper gets typeset; % an optional space may be used in place of the default one-line spacing % between the index title, the prologue and the index body. -% +% % This facility relies on a particular feature of the |multicols| % environment, that \pack{indextools} uses to instruct the typesetting % program to typeset the index with a specified number of balanced columns. @@ -721,7 +723,7 @@ and the derived files indextools.sty and indextools.pdf. % an interaction between \pack{memoir} and \pack{showidx} that required % special attention. See below about using \pack{showidx}. % -% \subsubsection{Package \pack{showidx}} +% \subsubsection{Package \pack{showidx}} % % Up to version 1.1 this package did not allow to use it together with % the \pack{showidx} package; now it is, provided that \pack{showidx} @@ -729,7 +731,7 @@ and the derived files indextools.sty and indextools.pdf. % on using \pack{showidx}. % % \subsubsection{Package \pack{fancyhdr}} -% +% % When using package \pack{fancyhdr} some inconveniences did show up; % now we believe we have detected the causes and we implemented the % necessary corrections\footnote{Thanks to Maïeul Rouquette who, before @@ -850,7 +852,7 @@ and the derived files indextools.sty and indextools.pdf. % % Therefore if by chance you get double entries into the table of contents, % eliminate the \Kvalue{intoc} option from your calls; your class, -% packages, and settings are already taking care of it. +% packages, and settings are already taking care of it. % The package \pack{tocbibind} should be loaded with the \Kvalue{noindex} % option, otherwise it would interfere with our redefinition of @@ -1007,6 +1009,7 @@ and the derived files indextools.sty and indextools.pdf. \DeclareOption{texindy}{\def\indtl@progdefault{texindy}} \DeclareOption{truexindy}{\def\indtl@progdefault{truexindy}} \DeclareOption{makeindex}{\def\indtl@progdefault{makeindex}} +\DeclareOption{upmendex}{\def\indtl@progdefault{upmendex}} \newif\ifindtl@disableautomatic \DeclareOption{noautomatic}{\indtl@disableautomatictrue} \newif\ifindtl@nonewpage @@ -1021,13 +1024,13 @@ and the derived files indextools.sty and indextools.pdf. \let\indtl@finalmessage\@gobble \let\indtl@splitindexmessage\relax}} \newif\ifindtl@afterindex -\DeclareOption{afterindex}{\indtl@afterindextrue} - +\DeclareOption{afterindex}{\indtl@afterindextrue} + \newif\ifindtl@innote -\DeclareOption{innote}{\indtl@innotetrue} +\DeclareOption{innote}{\indtl@innotetrue} \newif\ifindtl@notenumber -\DeclareOption{notenumber}{\indtl@notenumbertrue} +\DeclareOption{notenumber}{\indtl@notenumbertrue} \ExecuteOptions{makeindex} \ProcessOptions\relax @@ -1102,14 +1105,14 @@ and the derived files indextools.sty and indextools.pdf. \providecommand*\see[2]{\emph{\seename} #1} \providecommand*\seealso[2]{\emph{\alsoname} #1} \providecommand*\seename{see} -\providecommand*\alsoname{see also} +\providecommand*\alsoname{seeupmendex also} % \end{macrocode} % % \subsection{\cs{makeindex}} % % From here on, some commands are duplicated; this depends on the % fact that the behavior must be different when using \prog{splitindex} or -% not. The memory occupied by the useless commands will be cleared at the +% not. The memory occupied by the useless commands will be cleared at the % end of package. % \begin{macrocode} \providecommand*\makeindex{} % to use \renewcommand safely @@ -1143,7 +1146,7 @@ and the derived files indextools.sty and indextools.pdf. \define@key{indtl}{name}{\def\indtl@name{#1}} \define@key{indtl}{title}{\def\indtl@title{#1}} \define@choicekey{indtl}{program}[\indtl@val\indtl@nr] - {makeindex,xindy,texindy,truexindy}{% + {makeindex,xindy,texindy,truexindy,upmendex}{% \ifcase\indtl@nr\relax \def\indtl@program{makeindex}% \or @@ -1152,6 +1155,8 @@ and the derived files indextools.sty and indextools.pdf. \def\indtl@program{texindy}% \or \def\indtl@program{xindy}% + \or + \def\indtl@program{upmendex}% \fi} \define@key{indtl}{options}{\def\indtl@options{ #1 }} \define@boolkey{indtl}{noautomatic}[true]{} @@ -1240,7 +1245,7 @@ and the derived files indextools.sty and indextools.pdf. \fi} % \end{macrocode} % -% \subsection{\cs{index}} +% \subsection{\cs{index}} % % Provide a default definition for \cs{index}; when a \cs{makeindex} % command is given and \LaTeX\ is writing on auxiliary files, @@ -1289,7 +1294,7 @@ and the derived files indextools.sty and indextools.pdf. % so as not redefining it; then we use it to let the \pack{showidx} true or % simulated macros do their job, but we also take care of resetting the switch % default value to false at begin document time if the \pack{memoir} class is -% being used. +% being used. % % % \begin{macrocode} @@ -1529,7 +1534,7 @@ and the derived files indextools.sty and indextools.pdf. \@tempswafalse \fi} % \end{macrocode} -% We define a macro that close a specified index file and run in. +% We define a macro that close a specified index file and run in. % \begin{macrocode} \newcommand{\indtl@closeandrundidxsplit}[1]{% \immediate\closeout\csname #1@idxfile\endcsname @@ -1542,7 +1547,7 @@ and the derived files indextools.sty and indextools.pdf. \fi } % \end{macrocode} -% We define a macro that close the general index file and run in. +% We define a macro that close the general index file and run in. % \begin{macrocode} \newcommand{\indtl@closeandrundidxunique}{% \immediate\closeout\@indexfile @@ -1637,8 +1642,8 @@ and the derived files indextools.sty and indextools.pdf. }% } % \end{macrocode} -% \subsection{`innnote' and `notenumber' options} -% +% \subsection{`innote' and `notenumber' options} +% % If the `innote' option is enabled, we modify the standard index command when we are in a note, in order to insert the \verb+|innote+ in the \verb+.idx+ file. % \begin{macrocode} @@ -1648,7 +1653,7 @@ and the derived files indextools.sty and indextools.pdf. \LetLtxMacro\orig@@index\index \pretocmd{\@footnotetext}{\let\index\nindex}{}{} \apptocmd{\@footnotetext}{\let\index\orig@@index}{}{} - + \fi% % \end{macrocode} % The same is true if the `notnumber' option is enabled. diff --git a/macros/latex/contrib/indextools/indextools.pdf b/macros/latex/contrib/indextools/indextools.pdf Binary files differindex e156d192de..4aed55b511 100644 --- a/macros/latex/contrib/indextools/indextools.pdf +++ b/macros/latex/contrib/indextools/indextools.pdf diff --git a/macros/latex/contrib/indextools/issue5.pdf b/macros/latex/contrib/indextools/issue5.pdf Binary files differdeleted file mode 100644 index e37ec106a5..0000000000 --- a/macros/latex/contrib/indextools/issue5.pdf +++ /dev/null diff --git a/macros/latex/contrib/l3backend/CHANGELOG.md b/macros/latex/contrib/l3backend/CHANGELOG.md index 5877ce53d3..94da9cacbe 100644 --- a/macros/latex/contrib/l3backend/CHANGELOG.md +++ b/macros/latex/contrib/l3backend/CHANGELOG.md @@ -6,6 +6,11 @@ this project uses date-based 'snapshot' version identifiers. ## [Unreleased] +## [2023-10-10] + +### Changed +- Track `expl3` changes + ## [2023-04-19] ### Changed @@ -296,7 +301,8 @@ this project uses date-based 'snapshot' version identifiers. - Include `l3backend` in file names - Moved backend code to internal for each 'parent' module -[Unreleased]: https://github.com/latex3/latex3/compare/2023-04-19...HEAD +[Unreleased]: https://github.com/latex3/latex3/compare/2023-10-10...HEAD +[2023-10-10]: https://github.com/latex3/latex3/compare/2023-04-19...2023-10-10 [2023-04-19]: https://github.com/latex3/latex3/compare/2023-03-30...2023-04-19 [2023-03-30]: https://github.com/latex3/latex3/compare/2023-01-16...2023-03-30 [2023-01-16]: https://github.com/latex3/latex3/compare/2022-10-26...2023-01-16 diff --git a/macros/latex/contrib/l3backend/README.md b/macros/latex/contrib/l3backend/README.md index 0aa2b14b5f..883bd5d1c6 100644 --- a/macros/latex/contrib/l3backend/README.md +++ b/macros/latex/contrib/l3backend/README.md @@ -1,7 +1,7 @@ LaTeX3 Backend Drivers ====================== -Release 2023-04-19 +Release 2023-10-10 This package forms parts of `expl3`, and contains the code used to interface with backends (drivers) across the `expl3` codebase. The functions here are diff --git a/macros/latex/contrib/l3backend/l3backend-basics.dtx b/macros/latex/contrib/l3backend/l3backend-basics.dtx index cf4ad444ba..a6f7ea6d1c 100644 --- a/macros/latex/contrib/l3backend/l3backend-basics.dtx +++ b/macros/latex/contrib/l3backend/l3backend-basics.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-04-19} +% \date{Released 2023-10-10} % % \maketitle % @@ -70,27 +70,27 @@ % \begin{macrocode} \ProvidesExplFile %<*dvipdfmx> - {l3backend-dvipdfmx.def}{2023-04-19}{} + {l3backend-dvipdfmx.def}{2023-10-10}{} {L3 backend support: dvipdfmx} %</dvipdfmx> %<*dvips> - {l3backend-dvips.def}{2023-04-19}{} + {l3backend-dvips.def}{2023-10-10}{} {L3 backend support: dvips} %</dvips> %<*dvisvgm> - {l3backend-dvisvgm.def}{2023-04-19}{} + {l3backend-dvisvgm.def}{2023-10-10}{} {L3 backend support: dvisvgm} %</dvisvgm> %<*luatex> - {l3backend-luatex.def}{2023-04-19}{} + {l3backend-luatex.def}{2023-10-10}{} {L3 backend support: PDF output (LuaTeX)} %</luatex> %<*pdftex> - {l3backend-pdftex.def}{2023-04-19}{} + {l3backend-pdftex.def}{2023-10-10}{} {L3 backend support: PDF output (pdfTeX)} %</pdftex> %<*xetex> - {l3backend-xetex.def}{2023-04-19}{} + {l3backend-xetex.def}{2023-10-10}{} {L3 backend support: XeTeX} %</xetex> % \end{macrocode} @@ -137,8 +137,7 @@ % \begin{macro} % { % \__kernel_backend_literal:e, -% \__kernel_backend_literal:n, -% \__kernel_backend_literal:x +% \__kernel_backend_literal:n % } % The one shared function for all backends is access to the basic % \tn{special} primitive: it has slightly odd expansion behaviour @@ -147,7 +146,6 @@ \cs_new_eq:NN \__kernel_backend_literal:e \tex_special:D \cs_new_protected:Npn \__kernel_backend_literal:n #1 { \__kernel_backend_literal:e { \exp_not:n {#1} } } -\cs_generate_variant:Nn \__kernel_backend_literal:n { x } % \end{macrocode} % \end{macro} % @@ -175,7 +173,7 @@ % \end{macrocode} % % \begin{macro} -% {\__kernel_backend_literal_postscript:n, \__kernel_backend_literal_postscript:x} +% {\__kernel_backend_literal_postscript:n, \__kernel_backend_literal_postscript:e} % Literal PostScript can be included using a few low-level formats. Here, % we use the form with no positioning: this is overall more convenient as % a wrapper. Note that this does require that where position is important, @@ -183,18 +181,18 @@ % \begin{macrocode} \cs_new_protected:Npn \__kernel_backend_literal_postscript:n #1 { \__kernel_backend_literal:n { ps:: #1 } } -\cs_generate_variant:Nn \__kernel_backend_literal_postscript:n { x } +\cs_generate_variant:Nn \__kernel_backend_literal_postscript:n { e } % \end{macrocode} % \end{macro} % -% \begin{macro}{\__kernel_backend_postscript:n, \__kernel_backend_postscript:x} +% \begin{macro}{\__kernel_backend_postscript:n, \__kernel_backend_postscript:e} % PostScript data that does have positioning, and also applying % a shift to |SDict| (which is not done automatically by % |ps:| or |ps::|, in contrast to |!| or |"|). % \begin{macrocode} \cs_new_protected:Npn \__kernel_backend_postscript:n #1 { \__kernel_backend_literal:n { ps: SDict ~ begin ~ #1 ~ end } } -\cs_generate_variant:Nn \__kernel_backend_postscript:n { x } +\cs_generate_variant:Nn \__kernel_backend_postscript:n { e } % \end{macrocode} % \end{macro} % @@ -265,7 +263,7 @@ % to have more code in Lua means we create two independent files using % shared DocStrip code. % -% \begin{macro}{\__kernel_backend_literal_pdf:n, \__kernel_backend_literal_pdf:x} +% \begin{macro}{\__kernel_backend_literal_pdf:n, \__kernel_backend_literal_pdf:e} % This is equivalent to \verb|\special{pdf:}| but the engine can % track it. Without the \texttt{direct} keyword everything is kept in % sync: the transformation matrix is set to the current point automatically. @@ -282,11 +280,11 @@ %</pdftex> { \exp_not:n {#1} } } -\cs_generate_variant:Nn \__kernel_backend_literal_pdf:n { x } +\cs_generate_variant:Nn \__kernel_backend_literal_pdf:n { e } % \end{macrocode} % \end{macro} % -% \begin{macro}{\__kernel_backend_literal_page:n} +% \begin{macro}{\__kernel_backend_literal_page:n, \__kernel_backend_literal_page:e} % Page literals are pretty simple. To avoid an expansion, we write out % by hand. % \begin{macrocode} @@ -300,6 +298,16 @@ %</pdftex> page { \exp_not:n {#1} } } +\cs_new_protected:Npn \__kernel_backend_literal_page:e #1 + { +%<*luatex> + \tex_pdfextension:D literal ~ +%</luatex> +%<*pdftex> + \tex_pdfliteral:D +%</pdftex> + page {#1} + } % \end{macrocode} % \end{macro} % @@ -327,7 +335,7 @@ % \end{macrocode} % \end{macro} % -% \begin{macro}{\__kernel_backend_matrix:n, \__kernel_backend_matrix:x} +% \begin{macro}{\__kernel_backend_matrix:n, \__kernel_backend_matrix:e} % Here the appropriate function is set up to insert an affine matrix % into the PDF. With \pdfTeX{} and \LuaTeX{} in direct PDF output mode there % is a primitive for this, which only needs the rotation/scaling/skew part. @@ -342,7 +350,7 @@ %</pdftex> { \exp_not:n {#1} } } -\cs_generate_variant:Nn \__kernel_backend_matrix:n { x } +\cs_generate_variant:Nn \__kernel_backend_matrix:n { e } % \end{macrocode} % \end{macro} % @@ -362,14 +370,14 @@ % for both backends, with some \texttt{clean up} for \XeTeX{} as % required. % -% \begin{macro}{\__kernel_backend_literal_pdf:n, \__kernel_backend_literal_pdf:x} +% \begin{macro}{\__kernel_backend_literal_pdf:n, \__kernel_backend_literal_pdf:e} % Undocumented but equivalent to \pdfTeX{}'s |literal| keyword. It's similar to % be not the same as the documented |contents| keyword as that adds a |q|/|Q| % pair. % \begin{macrocode} \cs_new_protected:Npn \__kernel_backend_literal_pdf:n #1 { \__kernel_backend_literal:n { pdf:literal~ #1 } } -\cs_generate_variant:Nn \__kernel_backend_literal_pdf:n { x } +\cs_generate_variant:Nn \__kernel_backend_literal_pdf:n { e } % \end{macrocode} % \end{macro} % @@ -404,7 +412,7 @@ %<*dvisvgm> % \end{macrocode} % -% \begin{macro}{\__kernel_backend_literal_svg:n, \__kernel_backend_literal_svg:x} +% \begin{macro}{\__kernel_backend_literal_svg:n, \__kernel_backend_literal_svg:e} % Unlike the other backends, the requirements for making SVG files mean % that we can't conveniently transform all operations to the current point. % That makes life a bit more tricky later as that needs to be accounted for. @@ -413,7 +421,7 @@ % \begin{macrocode} \cs_new_protected:Npn \__kernel_backend_literal_svg:n #1 { \__kernel_backend_literal:n { dvisvgm:raw~ #1 { ?nl } } } -\cs_generate_variant:Nn \__kernel_backend_literal_svg:n { x } +\cs_generate_variant:Nn \__kernel_backend_literal_svg:n { e } % \end{macrocode} % \end{macro} % @@ -427,8 +435,8 @@ % \end{variable} % % \begin{macro}{\__kernel_backend_scope_begin:, \__kernel_backend_scope_end:} -% \begin{macro}{\__kernel_backend_scope_begin:n, \__kernel_backend_scope_begin:x} -% \begin{macro}{\__kernel_backend_scope:n, \__kernel_backend_scope:x} +% \begin{macro}{\__kernel_backend_scope_begin:n, \__kernel_backend_scope_begin:e} +% \begin{macro}{\__kernel_backend_scope:n, \__kernel_backend_scope:e} % In SVG, the need to attach concepts to a scope means we need to be sure we % will close all of the open scopes. That is easiest done if we only need % an outer \enquote{wrapper} \texttt{begin}/\texttt{end} pair, and within @@ -464,13 +472,13 @@ \group_begin: \int_gset:Nn \g__kernel_backend_scope_int { 1 } } -\cs_generate_variant:Nn \__kernel_backend_scope_begin:n { x } +\cs_generate_variant:Nn \__kernel_backend_scope_begin:n { e } \cs_new_protected:Npn \__kernel_backend_scope:n #1 { \__kernel_backend_literal_svg:n { <g ~ #1 > } \int_gincr:N \g__kernel_backend_scope_int } -\cs_generate_variant:Nn \__kernel_backend_scope:n { x } +\cs_generate_variant:Nn \__kernel_backend_scope:n { e } % \end{macrocode} % \end{macro} % \end{macro} diff --git a/macros/latex/contrib/l3backend/l3backend-box.dtx b/macros/latex/contrib/l3backend/l3backend-box.dtx index 6d8d4ede02..9bc74a1611 100644 --- a/macros/latex/contrib/l3backend/l3backend-box.dtx +++ b/macros/latex/contrib/l3backend/l3backend-box.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-04-19} +% \date{Released 2023-10-10} % % \maketitle % @@ -82,7 +82,7 @@ \__kernel_backend_literal_postscript:n { Resolution~72~div~VResolution~72~div~scale } \__kernel_backend_literal_postscript:n { DVImag~dup~scale } - \__kernel_backend_literal_postscript:x + \__kernel_backend_literal_postscript:e { 0 ~ \dim_to_decimal_in_bp:n { \box_dp:N #1 } ~ @@ -111,7 +111,7 @@ { \__kernel_backend_scope_begin: \__kernel_backend_align_begin: - \__kernel_backend_literal_postscript:x + \__kernel_backend_literal_postscript:e { \fp_compare:nNnTF {#2} = \c_zero_fp { 0 } @@ -134,7 +134,7 @@ { \__kernel_backend_scope_begin: \__kernel_backend_align_begin: - \__kernel_backend_literal_postscript:x + \__kernel_backend_literal_postscript:e { \fp_eval:n { round ( #2 , 5 ) } ~ \fp_eval:n { round ( #3 , 5 ) } ~ @@ -169,7 +169,7 @@ \cs_new_protected:Npn \@@_backend_clip:N #1 { \__kernel_backend_scope_begin: - \__kernel_backend_literal_pdf:x + \__kernel_backend_literal_pdf:e { 0~ \dim_to_decimal_in_bp:n { -\box_dp:N #1 } ~ @@ -204,7 +204,7 @@ \fp_compare:nNnT \l_@@_backend_cos_fp = \c_zero_fp { \fp_zero:N \l_@@_backend_cos_fp } \fp_set:Nn \l_@@_backend_sin_fp { round ( sind ( #2 ) , 5 ) } - \__kernel_backend_matrix:x + \__kernel_backend_matrix:e { \fp_use:N \l_@@_backend_cos_fp \c_space_tl \fp_compare:nNnTF \l_@@_backend_sin_fp = \c_zero_fp @@ -234,7 +234,7 @@ \cs_new_protected:Npn \@@_backend_scale:Nnn #1#2#3 { \__kernel_backend_scope_begin: - \__kernel_backend_matrix:x + \__kernel_backend_matrix:e { \fp_eval:n { round ( #2 , 5 ) } ~ 0~0~ @@ -263,7 +263,7 @@ \cs_new_protected:Npn \@@_backend_clip:N #1 { \__kernel_backend_scope_begin: - \__kernel_backend_literal_pdf:x + \__kernel_backend_literal_pdf:e { 0~ \dim_to_decimal_in_bp:n { -\box_dp:N #1 } ~ @@ -293,7 +293,7 @@ \cs_new_protected:Npn \@@_backend_rotate_aux:Nn #1#2 { \__kernel_backend_scope_begin: - \__kernel_backend_literal:x + \__kernel_backend_literal:e { x:rotate~ \fp_compare:nNnTF {#2} = \c_zero_fp @@ -314,7 +314,7 @@ \cs_new_protected:Npn \@@_backend_scale:Nnn #1#2#3 { \__kernel_backend_scope_begin: - \__kernel_backend_literal:x + \__kernel_backend_literal:e { x:scale~ \fp_eval:n { round ( #2 , 5 ) } ~ @@ -350,9 +350,9 @@ \cs_new_protected:Npn \@@_backend_clip:N #1 { \int_gincr:N \g__kernel_clip_path_int - \__kernel_backend_literal_svg:x + \__kernel_backend_literal_svg:e { < clipPath~id = " l3cp \int_use:N \g__kernel_clip_path_int " > } - \__kernel_backend_literal_svg:x + \__kernel_backend_literal_svg:e { < path ~ d = @@ -387,7 +387,7 @@ scale ( 1 , -1 ) " } - \__kernel_backend_scope:x + \__kernel_backend_scope:e { clip-path = "url ( \c_hash_str l3cp \int_use:N \g__kernel_clip_path_int ) " @@ -416,7 +416,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_backend_rotate:Nn #1#2 { - \__kernel_backend_scope_begin:x + \__kernel_backend_scope_begin:e { transform = " @@ -437,7 +437,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_backend_scale:Nnn #1#2#3 { - \__kernel_backend_scope_begin:x + \__kernel_backend_scope_begin:e { transform = " diff --git a/macros/latex/contrib/l3backend/l3backend-code.pdf b/macros/latex/contrib/l3backend/l3backend-code.pdf Binary files differindex 6f9ea9a52e..0131abee16 100644 --- a/macros/latex/contrib/l3backend/l3backend-code.pdf +++ b/macros/latex/contrib/l3backend/l3backend-code.pdf diff --git a/macros/latex/contrib/l3backend/l3backend-color.dtx b/macros/latex/contrib/l3backend/l3backend-color.dtx index 5049aae5f9..73eee0ca2c 100644 --- a/macros/latex/contrib/l3backend/l3backend-color.dtx +++ b/macros/latex/contrib/l3backend/l3backend-color.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-04-19} +% \date{Released 2023-10-10} % % \maketitle % @@ -322,7 +322,7 @@ % \begin{macro}[EXP]{\@@_backend_devicen_colorants:n} % \begin{macro}[EXP]{\@@_backend_devicen_colorants:w} % \begin{macrocode} -\cs_new:Npx \@@_backend_devicen_colorants:n #1 +\cs_new:Npe \@@_backend_devicen_colorants:n #1 { \exp_not:N \tl_if_blank:nF {#1} { @@ -377,7 +377,7 @@ % \begin{macro} % { % \@@_backend_separation_init:nnnnn, -% \@@_backend_separation_init:nxxnn +% \@@_backend_separation_init:neenn % } % \begin{macro} % {\@@_backend_separation_init_aux:nnnnnn} @@ -402,17 +402,17 @@ % ideas from \url{https://tex.stackexchange.com/q/560093} plus using % the PostScript manual for other aspects. % \begin{macrocode} -\cs_new_protected:Npx \@@_backend_separation_init:nnnnn #1#2#3#4#5 +\cs_new_protected:Npe \@@_backend_separation_init:nnnnn #1#2#3#4#5 { \bool_if:NT \g__kernel_backend_header_bool { - \exp_args:Nx \__kernel_backend_first_shipout:n + \exp_not:N \exp_args:Ne \__kernel_backend_first_shipout:n { \exp_not:N \@@_backend_separation_init_aux:nnnnnn { \exp_not:N \int_use:N \g_@@_model_int } {#1} {#2} {#3} {#4} {#5} } - \prop_gput:Nxx \exp_not:N \g_@@_backend_colorant_prop + \prop_gput:Nee \exp_not:N \g_@@_backend_colorant_prop { / \exp_not:N \str_convert_pdfname:n {#1} } { << ~ @@ -423,7 +423,7 @@ } } } -\cs_generate_variant:Nn \@@_backend_separation_init:nnnnn { nxx } +\cs_generate_variant:Nn \@@_backend_separation_init:nnnnn { nee } \cs_new_protected:Npn \@@_backend_separation_init_aux:nnnnnn #1#2#3#4#5#6 { \__kernel_backend_literal:e @@ -552,7 +552,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_backend_separation_init_CIELAB:nnn #1#2#3 { - \@@_backend_separation_init:nxxnn + \@@_backend_separation_init:neenn {#2} { /CIEBasedABC ~ @@ -678,7 +678,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_backend_select_iccbased:nn #1#2 { - \__kernel_backend_literal_svg:x + \__kernel_backend_literal_svg:e { <style> @color-profile ~ @@ -712,7 +712,7 @@ % \begin{macrocode} %<*dvipdfmx|xetex> \cs_new_protected:Npn \@@_backend_select_separation:nn #1#2 - { \__kernel_backend_literal:x { pdf : bc ~ \pdf_object_ref:n {#1} ~ [ #2 ] } } + { \__kernel_backend_literal:e { pdf : bc ~ \pdf_object_ref:n {#1} ~ [ #2 ] } } %</dvipdfmx|xetex> %<*luatex|pdftex> \cs_new_protected:Npn \@@_backend_select_separation:nn #1#2 @@ -734,7 +734,7 @@ { \cs_if_exist_p:N \pdfmanagement_if_active_p: } { \pdfmanagement_if_active_p: } { - \use:x + \use:e { \pdfmanagement_add:nnn { Page / Resources / ColorSpace } @@ -759,7 +759,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_backend_separation_init:nnnnn #1#2#3#4#5 { - \pdf_object_unnamed_write:nx { dict } + \pdf_object_unnamed_write:ne { dict } { /FunctionType ~ 2 /Domain ~ [0 ~ 1] @@ -767,19 +767,19 @@ /C0 ~ [#4] ~ /C1 ~ [#5] /N ~ 1 } - \exp_args:Nx \@@_backend_separation_init:nn + \exp_args:Ne \@@_backend_separation_init:nn { \str_convert_pdfname:n {#1} } {#2} \@@_backend_init_resource:n { color \int_use:N \g_@@_model_int } } \cs_new_protected:Npn \@@_backend_separation_init:nn #1#2 { - \use:x + \use:e { \pdf_object_new:n { color \int_use:N \g_@@_model_int } \pdf_object_write:nnn { color \int_use:N \g_@@_model_int } { array } { /Separation /#1 ~ #2 ~ \pdf_object_ref_last: } } - \prop_gput:Nnx \g_@@_backend_colorant_prop { /#1 } + \prop_gput:Nne \g_@@_backend_colorant_prop { /#1 } { \pdf_object_ref_last: } } % \end{macrocode} @@ -791,7 +791,7 @@ \pdf_object_if_exist:nF { @@_illuminant_CIELAB_ #1 } { \pdf_object_new:n { @@_illuminant_CIELAB_ #1 } - \pdf_object_write:nnx { @@_illuminant_CIELAB_ #1 } { array } + \pdf_object_write:nne { @@_illuminant_CIELAB_ #1 } { array } { /Lab ~ << @@ -820,7 +820,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_backend_devicen_init:nnn #1#2#3 { - \pdf_object_unnamed_write:nx { stream } + \pdf_object_unnamed_write:ne { stream } { { /FunctionType ~ 4 ~ @@ -842,7 +842,7 @@ } { {#3} } } - \use:x + \use:e { \pdf_object_new:n { color \int_use:N \g_@@_model_int } \pdf_object_write:nnn { color \int_use:N \g_@@_model_int } { array } @@ -875,7 +875,7 @@ \pdf_object_if_exist:nF { @@_icc_ #1 } { \pdf_object_new:n { @@_icc_ #1 } - \pdf_object_write:nnx { @@_icc_ #1 } { fstream } + \pdf_object_write:nne { @@_icc_ #1 } { fstream } { { /N ~ \exp_not:n { #2 } ~ @@ -884,7 +884,7 @@ {#1} } } - \pdf_object_unnamed_write:nx { array } + \pdf_object_unnamed_write:ne { array } { /ICCBased ~ \pdf_object_ref:n { @@_icc_ #1 } } \@@_backend_init_resource:n { color \int_use:N \g_@@_model_int } } @@ -906,7 +906,7 @@ {#1} } } - \pdf_object_unnamed_write:nx { array } + \pdf_object_unnamed_write:ne { array } { /ICCBased ~ \pdf_object_ref:n { @@_icc_ #1 } } \@@_backend_init_resource:n { Default #2 } } @@ -965,12 +965,12 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_backend_fill_separation:nn #1#2 { - \__kernel_backend_literal:x + \__kernel_backend_literal:e { pdf : bc ~ fill ~ \pdf_object_ref:n {#1} ~ [ #2 ] } } \cs_new_protected:Npn \@@_backend_stroke_separation:nn #1#2 { - \__kernel_backend_literal:x + \__kernel_backend_literal:e { pdf : bc ~ stroke ~ \pdf_object_ref:n {#1} ~ [ #2 ] } } \cs_new_eq:NN \@@_backend_fill_devicen:nn \@@_backend_fill_separation:nn @@ -1171,7 +1171,7 @@ \cs_new_protected:Npn \@@_backend_stroke_cmyk:w #1 ~ #2 ~ #3 ~ #4 \s_@@_stop { - \use:x + \use:e { \@@_backend:nnn { \fp_eval:n { -100 * ( 1 - min ( 1 , #1 + #4 ) ) } } @@ -1181,7 +1181,7 @@ } \cs_new_protected:Npn \@@_backend_stroke_gray:n #1 { - \use:x + \use:e { \@@_backend_stroke_gray_aux:n { \fp_eval:n { 100 * (#1) } } @@ -1194,7 +1194,7 @@ \cs_new_protected:Npn \@@_backend_stroke_rgb:w #1 ~ #2 ~ #3 \s_@@_stop { - \use:x + \use:e { \@@_backend:nnn { \fp_eval:n { 100 * (#1) } } @@ -1202,7 +1202,7 @@ { \fp_eval:n { 100 * (#3) } } } } -\cs_new_protected:Npx \@@_backend:nnn #1#2#3 +\cs_new_protected:Npe \@@_backend:nnn #1#2#3 { \__kernel_backend_scope:n { diff --git a/macros/latex/contrib/l3backend/l3backend-draw.dtx b/macros/latex/contrib/l3backend/l3backend-draw.dtx index 170f4090cd..8fa2fda940 100644 --- a/macros/latex/contrib/l3backend/l3backend-draw.dtx +++ b/macros/latex/contrib/l3backend/l3backend-draw.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-04-19} +% \date{Released 2023-10-10} % % \maketitle % @@ -66,12 +66,12 @@ %<*dvips> % \end{macrocode} % -% \begin{macro}{\@@_backend_literal:n, \@@_backend_literal:x} +% \begin{macro}{\@@_backend_literal:n, \@@_backend_literal:e} % The same as literal PostScript: same arguments about positioning apply % her. % \begin{macrocode} \cs_new_eq:NN \@@_backend_literal:n \__kernel_backend_literal_postscript:n -\cs_generate_variant:Nn \@@_backend_literal:n { x } +\cs_generate_variant:Nn \@@_backend_literal:n { e } % \end{macrocode} % \end{macro} % @@ -125,7 +125,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_backend_moveto:nn #1#2 { - \@@_backend_literal:x + \@@_backend_literal:e { \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~ moveto @@ -133,7 +133,7 @@ } \cs_new_protected:Npn \@@_backend_lineto:nn #1#2 { - \@@_backend_literal:x + \@@_backend_literal:e { \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~ lineto @@ -141,7 +141,7 @@ } \cs_new_protected:Npn \@@_backend_rectangle:nnnn #1#2#3#4 { - \@@_backend_literal:x + \@@_backend_literal:e { \dim_to_decimal_in_bp:n {#4} ~ \dim_to_decimal_in_bp:n {#3} ~ \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~ @@ -150,7 +150,7 @@ } \cs_new_protected:Npn \@@_backend_curveto:nnnnnn #1#2#3#4#5#6 { - \@@_backend_literal:x + \@@_backend_literal:e { \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~ \dim_to_decimal_in_bp:n {#3} ~ \dim_to_decimal_in_bp:n {#4} ~ @@ -205,7 +205,7 @@ \@@_backend_literal:n { grestore } \bool_if:NT \g_@@_draw_clip_bool { - \@@_backend_literal:x + \@@_backend_literal:e { \bool_if:NT \g_@@_draw_eor_bool { eo } clip @@ -221,14 +221,14 @@ } \cs_new_protected:Npn \@@_backend_fill: { - \@@_backend_literal:x + \@@_backend_literal:e { \bool_if:NT \g_@@_draw_eor_bool { eo } fill } \bool_if:NT \g_@@_draw_clip_bool { - \@@_backend_literal:x + \@@_backend_literal:e { \bool_if:NT \g_@@_draw_eor_bool { eo } clip @@ -239,7 +239,7 @@ } \cs_new_protected:Npn \@@_backend_fillstroke: { - \@@_backend_literal:x + \@@_backend_literal:e { \bool_if:NT \g_@@_draw_eor_bool { eo } fill @@ -250,7 +250,7 @@ \@@_backend_literal:n { grestore } \bool_if:NT \g_@@_draw_clip_bool { - \@@_backend_literal:x + \@@_backend_literal:e { \bool_if:NT \g_@@_draw_eor_bool { eo } clip @@ -266,7 +266,7 @@ { \bool_if:NT \g_@@_draw_clip_bool { - \@@_backend_literal:x + \@@_backend_literal:e { \bool_if:NT \g_@@_draw_eor_bool { eo } clip @@ -293,7 +293,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_backend_dash_pattern:nn #1#2 { - \@@_backend_literal:x + \@@_backend_literal:e { [ \exp_args:Nf \use:n @@ -306,7 +306,7 @@ { ~ \dim_to_decimal_in_bp:n {#1} } \cs_new_protected:Npn \@@_backend_linewidth:n #1 { - \@@_backend_literal:x + \@@_backend_literal:e { \dim_to_decimal_in_bp:n {#1} ~ setlinewidth } } \cs_new_protected:Npn \@@_backend_miterlimit:n #1 @@ -400,11 +400,11 @@ % % \subsubsection{Drawing} % -% \begin{macro}{\@@_backend_literal:n, \@@_backend_literal:x} +% \begin{macro}{\@@_backend_literal:n, \@@_backend_literal:e} % Pass data through using a dedicated interface. % \begin{macrocode} \cs_new_eq:NN \@@_backend_literal:n \__kernel_backend_literal_pdf:n -\cs_generate_variant:Nn \@@_backend_literal:n { x } +\cs_generate_variant:Nn \@@_backend_literal:n { e } % \end{macrocode} % \end{macro} % @@ -434,17 +434,17 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_backend_moveto:nn #1#2 { - \@@_backend_literal:x + \@@_backend_literal:e { \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~ m } } \cs_new_protected:Npn \@@_backend_lineto:nn #1#2 { - \@@_backend_literal:x + \@@_backend_literal:e { \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~ l } } \cs_new_protected:Npn \@@_backend_curveto:nnnnnn #1#2#3#4#5#6 { - \@@_backend_literal:x + \@@_backend_literal:e { \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~ \dim_to_decimal_in_bp:n {#3} ~ \dim_to_decimal_in_bp:n {#4} ~ @@ -454,7 +454,7 @@ } \cs_new_protected:Npn \@@_backend_rectangle:nnnn #1#2#3#4 { - \@@_backend_literal:x + \@@_backend_literal:e { \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~ \dim_to_decimal_in_bp:n {#3} ~ \dim_to_decimal_in_bp:n {#4} ~ @@ -500,17 +500,17 @@ { \@@_backend_literal:n { s } } \cs_new_protected:Npn \@@_backend_fill: { - \@@_backend_literal:x + \@@_backend_literal:e { f \bool_if:NT \g_@@_draw_eor_bool * } } \cs_new_protected:Npn \@@_backend_fillstroke: { - \@@_backend_literal:x + \@@_backend_literal:e { B \bool_if:NT \g_@@_draw_eor_bool * } } \cs_new_protected:Npn \@@_backend_clip: { - \@@_backend_literal:x + \@@_backend_literal:e { W \bool_if:NT \g_@@_draw_eor_bool * } } \cs_new_protected:Npn \@@_backend_discardpath: @@ -532,7 +532,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_backend_dash_pattern:nn #1#2 { - \@@_backend_literal:x + \@@_backend_literal:e { [ \exp_args:Nf \use:n @@ -545,11 +545,11 @@ { ~ \dim_to_decimal_in_bp:n {#1} } \cs_new_protected:Npn \@@_backend_linewidth:n #1 { - \@@_backend_literal:x + \@@_backend_literal:e { \dim_to_decimal_in_bp:n {#1} ~ w } } \cs_new_protected:Npn \@@_backend_miterlimit:n #1 - { \@@_backend_literal:x { #1 ~ M } } + { \@@_backend_literal:e { #1 ~ M } } \cs_new_protected:Npn \@@_backend_cap_butt: { \@@_backend_literal:n { 0 ~ J } } \cs_new_protected:Npn \@@_backend_cap_round: @@ -594,20 +594,20 @@ %<*dvipdfmx|xetex> \cs_new_protected:Npn \@@_backend_cm_aux:nnnn #1#2#3#4 { - \__kernel_backend_literal:x + \__kernel_backend_literal:e { x:rotate~ \fp_compare:nNnTF {#1} = \c_zero_fp { 0 } { \fp_eval:n { round ( -#1 , 5 ) } } } - \__kernel_backend_literal:x + \__kernel_backend_literal:e { x:scale~ \fp_eval:n { round ( #2 , 5 ) } ~ \fp_eval:n { round ( #3 , 5 ) } } - \__kernel_backend_literal:x + \__kernel_backend_literal:e { x:rotate~ \fp_compare:nNnTF {#4} = \c_zero_fp @@ -678,7 +678,7 @@ %<*dvipdfmx|xetex> \cs_new_protected:Npn \@@_backend_cm_decompose:nnnnN #1#2#3#4#5 { - \use:x + \use:e { \@@_backend_cm_decompose_auxi:nnnnN { \fp_eval:n { (#1 + #4) / 2 } } @@ -690,7 +690,7 @@ } \cs_new_protected:Npn \@@_backend_cm_decompose_auxi:nnnnN #1#2#3#4#5 { - \use:x + \use:e { \@@_backend_cm_decompose_auxii:nnnnN { \fp_eval:n { 2 * sqrt ( #1 * #1 + #4 * #4 ) } } @@ -702,7 +702,7 @@ } \cs_new_protected:Npn \@@_backend_cm_decompose_auxii:nnnnN #1#2#3#4#5 { - \use:x + \use:e { \@@_backend_cm_decompose_auxiii:nnnnN { \fp_eval:n { ( #4 - #3 ) / 2 } } @@ -760,11 +760,11 @@ %<*dvisvgm> % \end{macrocode} % -% \begin{macro}{\@@_backend_literal:n, \@@_backend_literal:x} +% \begin{macro}{\@@_backend_literal:n, \@@_backend_literal:e} % The same as the more general literal call. % \begin{macrocode} \cs_new_eq:NN \@@_backend_literal:n \__kernel_backend_literal_svg:n -\cs_generate_variant:Nn \@@_backend_literal:n { x } +\cs_generate_variant:Nn \@@_backend_literal:n { e } % \end{macrocode} % \end{macro} % @@ -834,7 +834,7 @@ } \cs_new_protected:Npn \@@_backend_add_to_path:n #1 { - \tl_gset:Nx \g_@@_backend_path_tl + \tl_gset:Ne \g_@@_backend_path_tl { \g_@@_backend_path_tl \tl_if_empty:NF \g_@@_backend_path_tl { \c_space_tl } @@ -885,7 +885,7 @@ \bool_if:NTF \g_@@_draw_clip_bool { \int_gincr:N \g__kernel_clip_path_int - \@@_backend_literal:x + \@@_backend_literal:e { < clipPath~id = " l3cp \int_use:N \g__kernel_clip_path_int " > { ?nl } @@ -897,14 +897,14 @@ #1 /> } - \__kernel_backend_scope:x + \__kernel_backend_scope:e { clip-path = "url( \c_hash_str l3cp \int_use:N \g__kernel_clip_path_int)" } } { - \@@_backend_literal:x + \@@_backend_literal:e { <path ~ d=" \g_@@_backend_path_tl " ~ #1 /> } } \tl_gclear:N \g_@@_backend_path_tl @@ -930,14 +930,14 @@ \bool_if:NT \g_@@_draw_clip_bool { \int_gincr:N \g__kernel_clip_path_int - \@@_backend_literal:x + \@@_backend_literal:e { < clipPath~id = " l3cp \int_use:N \g__kernel_clip_path_int " > { ?nl } <path~d=" \g_@@_backend_path_tl "/> { ?nl } < /clipPath > } - \__kernel_backend_scope:x + \__kernel_backend_scope:e { clip-path = "url( \c_hash_str l3cp \int_use:N \g__kernel_clip_path_int)" @@ -968,7 +968,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_backend_dash_pattern:nn #1#2 { - \use:x + \use:e { \@@_backend_dash_aux:nn { \clist_map_function:nN {#1} \@@_backend_dash:n } @@ -979,7 +979,7 @@ { , \dim_to_decimal_in_bp:n {#1} } \cs_new_protected:Npn \@@_backend_dash_aux:nn #1#2 { - \__kernel_backend_scope:x + \__kernel_backend_scope:e { stroke-dasharray = " @@ -991,9 +991,9 @@ } } \cs_new_protected:Npn \@@_backend_linewidth:n #1 - { \__kernel_backend_scope:x { stroke-width=" \dim_to_decimal:n {#1} " } } + { \__kernel_backend_scope:e { stroke-width=" \dim_to_decimal:n {#1} " } } \cs_new_protected:Npn \@@_backend_miterlimit:n #1 - { \__kernel_backend_scope:x { stroke-miterlimit=" #1 " } } + { \__kernel_backend_scope:e { stroke-miterlimit=" #1 " } } \cs_new_protected:Npn \@@_backend_cap_butt: { \__kernel_backend_scope:n { stroke-linecap="butt" } } \cs_new_protected:Npn \@@_backend_cap_round: diff --git a/macros/latex/contrib/l3backend/l3backend-graphics.dtx b/macros/latex/contrib/l3backend/l3backend-graphics.dtx index da7dc7516e..610785e348 100644 --- a/macros/latex/contrib/l3backend/l3backend-graphics.dtx +++ b/macros/latex/contrib/l3backend/l3backend-graphics.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-04-19} +% \date{Released 2023-10-10} % % \maketitle % @@ -107,7 +107,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_backend_include_eps:n #1 { - \__kernel_backend_literal:x + \__kernel_backend_literal:e { PSfile = #1 \c_space_tl llx = \dim_to_decimal_in_bp:n \l_@@_llx_dim \c_space_tl @@ -185,7 +185,7 @@ { \int_zero:N \l_@@_page_int \tl_clear:N \l_@@_pagebox_tl - \tl_set:Nx \l_@@_attr_tl + \tl_set:Ne \l_@@_attr_tl { \tl_if_empty:NF \l_@@_decodearray_str { :D \l_@@_decodearray_str } @@ -202,7 +202,7 @@ { \tl_clear:N \l_@@_decodearray_str \bool_set_false:N \l_@@_interpolate_bool - \tl_set:Nx \l_@@_attr_tl + \tl_set:Ne \l_@@_attr_tl { : \l_@@_pagebox_tl \int_compare:nNnT \l_@@_page_int > 1 @@ -214,7 +214,7 @@ } \cs_new_protected:Npn \@@_backend_getbb_auxi:n #1 { - \@@_bb_restore:xF { #1 \l_@@_attr_tl } + \@@_bb_restore:eF { #1 \l_@@_attr_tl } { \@@_backend_getbb_auxii:n {#1} } } % \end{macrocode} @@ -230,7 +230,7 @@ { \@@_backend_dequote:w #1 " #1 " \s_@@_stop } \int_const:cn { c_@@_ #1 \l_@@_attr_tl _int } { \tex_the:D \tex_pdflastximage:D } - \@@_bb_save:x { #1 \l_@@_attr_tl } + \@@_bb_save:e { #1 \l_@@_attr_tl } } \cs_new_protected:Npn \@@_backend_getbb_auxiii:n #1 { @@ -310,7 +310,7 @@ \l_@@_backend_dir_str \l_@@_backend_name_str \l_@@_backend_ext_str - \exp_args:Nx \@@_backend_getbb_eps:nn + \exp_args:Ne \@@_backend_getbb_eps:nn { \exp_args:Ne \__kernel_file_name_quote:n { @@ -336,7 +336,7 @@ { \file_parse_full_name:nNNN {#1} \l_@@_backend_dir_str \l_@@_backend_name_str \l_@@_backend_ext_str - \exp_args:Nx \@@_backend_include_pdf:n + \exp_args:Ne \@@_backend_include_pdf:n { \exp_args:Ne \__kernel_file_name_quote:n { @@ -436,7 +436,7 @@ % \@@_backend_include_bmp:n , % } % \begin{macro}{\@@_backend_include_auxi:nn} -% \begin{macro}{\@@_backend_include_auxii:nnn, \@@_backend_include_auxii:xnn} +% \begin{macro}{\@@_backend_include_auxii:nnn, \@@_backend_include_auxii:enn} % \begin{macro}{\@@_backend_include_auxiii:nnn} % The special syntax depends on the file type. There is a difference in % how PDF graphics are best handled between |dvipdfmx| and \XeTeX{}: for @@ -445,7 +445,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_backend_include_eps:n #1 { - \__kernel_backend_literal:x + \__kernel_backend_literal:e { PSfile = #1 \c_space_tl llx = \dim_to_decimal_in_bp:n \l_@@_llx_dim \c_space_tl @@ -472,7 +472,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_backend_include_auxi:nn #1#2 { - \@@_backend_include_auxii:xnn + \@@_backend_include_auxii:enn { \tl_if_empty:NF \l_@@_pagebox_tl { : \l_@@_pagebox_tl } @@ -489,12 +489,12 @@ { \int_if_exist:cTF { c_@@_ #2#1 _int } { - \__kernel_backend_literal:x + \__kernel_backend_literal:e { pdf:usexobj~@graphic \int_use:c { c_@@_ #2#1 _int } } } { \@@_backend_include_auxiii:nnn {#2} {#1} {#3} } } -\cs_generate_variant:Nn \@@_backend_include_auxii:nnn { x } +\cs_generate_variant:Nn \@@_backend_include_auxii:nnn { e } % \end{macrocode} % Inclusion using the specials is relatively straight-forward, but there % is one wrinkle. To get the |pagebox| correct for PDF graphics in all cases, @@ -505,7 +505,7 @@ { \int_gincr:N \g_@@_track_int \int_const:cn { c_@@_ #1#2 _int } { \g_@@_track_int } - \__kernel_backend_literal:x + \__kernel_backend_literal:e { pdf:#3~ @graphic \int_use:c { c_@@_ #1#2 _int } ~ @@ -612,7 +612,7 @@ } \cs_new_protected:Npn \@@_backend_getbb_auxiv:nnNnn #1#2#3#4#5 { - \use:x + \use:e { \@@_backend_getbb_auxv:nNnn {#2} #3 { : #1 #4 } { @@ -750,10 +750,10 @@ } \cs_new_protected:Npn \@@_backend_getbb_svg_auxi:nNn #1#2#3 { - \use:x + \use:e { \cs_set_protected:Npn \@@_backend_getbb_svg_auxii:w - ####1 \tl_to_str:n {#1} = ####2 \tl_to_str:n {#1} = ####3 + ##1 \tl_to_str:n {#1} = ##2 \tl_to_str:n {#1} = ##3 \s_@@_stop } { @@ -772,7 +772,7 @@ ##2 \s_@@_stop } } - \use:x + \use:e { \@@_backend_getbb_svg_auxii:w #3 \tl_to_str:n {#1} = \tl_to_str:n {#1} = @@ -855,7 +855,7 @@ { \@@_backend_include:nn { pdffile } {#1} } \cs_new_protected:Npn \@@_backend_include:nn #1#2 { - \__kernel_backend_literal:x + \__kernel_backend_literal:e { #1 = #2 \c_space_tl llx = \dim_to_decimal_in_bp:n \l_@@_llx_dim \c_space_tl @@ -892,7 +892,7 @@ { \hbox:n { - \__kernel_backend_literal:x + \__kernel_backend_literal:e { dvisvgm:img~ \dim_to_decimal:n { \l_@@_urx_dim } ~ diff --git a/macros/latex/contrib/l3backend/l3backend-header.dtx b/macros/latex/contrib/l3backend/l3backend-header.dtx index 0cb6767908..5bd4bb4808 100644 --- a/macros/latex/contrib/l3backend/l3backend-header.dtx +++ b/macros/latex/contrib/l3backend/l3backend-header.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-04-19} +% \date{Released 2023-10-10} % % \maketitle % diff --git a/macros/latex/contrib/l3backend/l3backend-opacity.dtx b/macros/latex/contrib/l3backend/l3backend-opacity.dtx index 033ab150f0..9b994ac16e 100644 --- a/macros/latex/contrib/l3backend/l3backend-opacity.dtx +++ b/macros/latex/contrib/l3backend/l3backend-opacity.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-04-19} +% \date{Released 2023-10-10} % % \maketitle % @@ -73,7 +73,7 @@ % % \begin{macro}{\@@_backend_select:n,\@@_backend_select_aux:n} % \begin{macro}{\@@_backend_fill:n, \@@_backend_stroke:n} -% \begin{macro}{\@@_backend:nnn, \@@_backend:xnn} +% \begin{macro}{\@@_backend:nnn, \@@_backend:enn} % No stack so set values directly. The need to deal with Distiller and % Ghostscript separately means we use a common auxiliary: the two % systems require different PostScript for transparency. This is @@ -83,7 +83,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_backend_select:n #1 { - \exp_args:Nx \@@_backend_select_aux:n + \exp_args:Ne \@@_backend_select_aux:n { \fp_eval:n { min(max(0,#1),1) } } } \cs_new_protected:Npn \@@_backend_select_aux:n #1 @@ -93,14 +93,14 @@ } \cs_new_protected:Npn \@@_backend_fill:n #1 { - \@@_backend:xnn + \@@_backend:enn { \fp_eval:n { min(max(0,#1),1) } } { fill } { ca } } \cs_new_protected:Npn \@@_backend_stroke:n #1 { - \@@_backend:xnn + \@@_backend:enn { \fp_eval:n { min(max(0,#1),1) } } { stroke } { CA } @@ -124,7 +124,7 @@ ifelse } } -\cs_generate_variant:Nn \@@_backend:nnn { x } +\cs_generate_variant:Nn \@@_backend:nnn { e } % \end{macrocode} % \end{macro} % \end{macro} @@ -170,7 +170,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_backend_select:n #1 { - \exp_args:Nx \@@_backend_select_aux:n + \exp_args:Ne \@@_backend_select_aux:n { \fp_eval:n { min(max(0,#1),1) } } } \cs_new_protected:Npn \@@_backend_select_aux:n #1 @@ -210,19 +210,19 @@ % \end{macro} % % \begin{macro}{\@@_backend_fill:n, \@@_backend_stroke:n} -% \begin{macro}{\@@_backend_fillstroke:nn, \@@_backend_fillstroke:xx} +% \begin{macro}{\@@_backend_fillstroke:nn, \@@_backend_fillstroke:ee} % For separate fill and stroke, we need to work out if we need to do % more work or if we can stick to a single setting. % \begin{macrocode} \cs_new_protected:Npn \@@_backend_fill:n #1 { - \@@_backend_fill_stroke:xx + \@@_backend_fill_stroke:ee { \fp_eval:n { min(max(0,#1),1) } } \l_@@_backend_stroke_tl } \cs_new_protected:Npn \@@_backend_stroke:n #1 { - \@@_backend_fill_stroke:xx + \@@_backend_fill_stroke:ee \l_@@_backend_fill_tl { \fp_eval:n { min(max(0,#1),1) } } } @@ -249,7 +249,7 @@ \group_insert_after:N \@@_backend_reset: } } -\cs_generate_variant:Nn \@@_backend_fill_stroke:nn { xx } +\cs_generate_variant:Nn \@@_backend_fill_stroke:nn { ee } % \end{macrocode} % \end{macro} % \end{macro} @@ -274,7 +274,7 @@ \cs_new_protected:Npn \@@_backend_stroke:n #1 { \@@_backend:nn { {#1} } { stroke- } } \cs_new_protected:Npn \@@_backend:nn #1#2 - { \__kernel_backend_scope:x { #2 opacity = " \fp_eval:n { min(max(0,#1),1) } " } } + { \__kernel_backend_scope:e { #2 opacity = " \fp_eval:n { min(max(0,#1),1) } " } } % \end{macrocode} % \end{macro} % \end{macro} diff --git a/macros/latex/contrib/l3backend/l3backend-pdf.dtx b/macros/latex/contrib/l3backend/l3backend-pdf.dtx index a95aff4070..8d942551bb 100644 --- a/macros/latex/contrib/l3backend/l3backend-pdf.dtx +++ b/macros/latex/contrib/l3backend/l3backend-pdf.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-04-19} +% \date{Released 2023-10-10} % % \maketitle % @@ -91,12 +91,12 @@ %<*dvips> % \end{macrocode} % -% \begin{macro}{\@@_backend_pdfmark:n, \@@_backend_pdfmark:x} +% \begin{macro}{\@@_backend_pdfmark:n, \@@_backend_pdfmark:e} % Used often enough it should be a separate function. % \begin{macrocode} \cs_new_protected:Npn \@@_backend_pdfmark:n #1 { \__kernel_backend_postscript:n { mark #1 ~ pdfmark } } -\cs_generate_variant:Nn \@@_backend_pdfmark:n { x } +\cs_generate_variant:Nn \@@_backend_pdfmark:n { e } % \end{macrocode} % \end{macro} % @@ -138,7 +138,7 @@ % % \begin{macro} % { -% \@@_backend_object_write:nnn, \@@_backend_object_write:nnx, +% \@@_backend_object_write:nnn, \@@_backend_object_write:nne, % \@@_backend_object_write_aux:nnn % } % \begin{macro} @@ -159,10 +159,10 @@ { \@@_backend_object_ref:n {#1} } {#2} {#3} } -\cs_generate_variant:Nn \@@_backend_object_write:nnn { nnx } +\cs_generate_variant:Nn \@@_backend_object_write:nnn { nne } \cs_new_protected:Npn \@@_backend_object_write_aux:nnn #1#2#3 { - \@@_backend_pdfmark:x + \@@_backend_pdfmark:e { /_objdef ~ #1 /type @@ -179,17 +179,17 @@ } \cs_new_protected:Npn \@@_backend_object_write_array:nn #1#2 { - \@@_backend_pdfmark:x + \@@_backend_pdfmark:e { #1 ~0~ [ ~ \exp_not:n {#2} ~ ] ~ /PUTINTERVAL } } \cs_new_protected:Npn \@@_backend_object_write_dict:nn #1#2 { - \@@_backend_pdfmark:x + \@@_backend_pdfmark:e { #1 << \exp_not:n {#2} >> /PUT } } \cs_new_protected:Npn \@@_backend_object_write_fstream:nn #1#2 { - \exp_args:Nx + \exp_args:Ne \@@_backend_object_write_fstream:nnn {#1} #2 } \cs_new_protected:Npn \@@_backend_object_write_fstream:nnn #1#2#3 @@ -204,7 +204,7 @@ } \cs_new_protected:Npn \@@_backend_object_write_stream:nn #1#2 { - \exp_args:Nx + \exp_args:Ne \@@_backend_object_write_stream:nnn {#1} #2 } \cs_new_protected:Npn \@@_backend_object_write_stream:nnn #1#2#3 @@ -220,7 +220,7 @@ % \end{macro} % \end{macro} % -% \begin{macro}{\@@_backend_object_now:nn, \@@_backend_object_now:nx} +% \begin{macro}{\@@_backend_object_now:nn, \@@_backend_object_now:ne} % No anonymous objects, so things are done manually. % \begin{macrocode} \cs_new_protected:Npn \@@_backend_object_now:nn #1#2 @@ -230,7 +230,7 @@ { { pdf.obj \int_use:N \g_@@_backend_object_int } } {#1} {#2} } -\cs_generate_variant:Nn \@@_backend_object_now:nn { nx } +\cs_generate_variant:Nn \@@_backend_object_now:nn { ne } % \end{macrocode} % \end{macro} % @@ -304,7 +304,7 @@ } \int_gincr:N \g_@@_backend_object_int \int_gset_eq:NN \g_@@_backend_annotation_int \g_@@_backend_object_int - \@@_backend_pdfmark:x + \@@_backend_pdfmark:e { /_objdef { pdf.obj \int_use:N \g_@@_backend_object_int } pdf.rect @@ -468,7 +468,7 @@ \hbox_set_end: \@@_backend_link_minima: \hbox_set:Nn \l_@@_backend_model_box { Gg } - \exp_args:Nx \@@_backend_link_outerbox:n + \exp_args:Ne \@@_backend_link_outerbox:n { \int_if_odd:nTF { \value { page } } { \oddsidemargin } @@ -486,7 +486,7 @@ } \int_gincr:N \g_@@_backend_object_int \int_gset_eq:NN \g_@@_backend_link_int \g_@@_backend_object_int - \__kernel_backend_postscript:x + \__kernel_backend_postscript:e { mark /_objdef { pdf.obj \int_use:N \g_@@_backend_link_int } @@ -500,7 +500,7 @@ \cs_new_protected:Npn \@@_backend_link_minima: { \hbox_set:Nn \l_@@_backend_model_box { Gg } - \__kernel_backend_postscript:x + \__kernel_backend_postscript:e { /pdf.linkdp.pad ~ \dim_to_decimal:n @@ -528,7 +528,7 @@ } \cs_new_protected:Npn \@@_backend_link_outerbox:n #1 { - \__kernel_backend_postscript:x + \__kernel_backend_postscript:e { /pdf.outerbox [ @@ -583,9 +583,9 @@ { \tl_put_right:Nn \@makecol@hook { - \box_if_empty:NF \@cclv + \box_if_empty:NF \l_shipout_box { - \vbox_set:Nn \@cclv + \vbox_set:Nn \l_shipout_box { \__kernel_backend_postscript:n { @@ -593,7 +593,7 @@ { pdf.bordertracking.continue } if } - \vbox_unpack_drop:N \@cclv + \vbox_unpack_drop:N \l_shipout_box \__kernel_backend_postscript:n { pdf.bordertracking.endpage } } @@ -620,7 +620,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_backend_link_margin:n #1 { - \__kernel_backend_postscript:x + \__kernel_backend_postscript:e { /pdf.linkmargin { \dim_to_decimal:n {#1} ~ pdf.pt.dvi } def } @@ -638,7 +638,7 @@ \cs_new_protected:Npn \@@_backend_destination:nn #1#2 { \__kernel_backend_postscript:n { pdf.dest.anchor } - \@@_backend_pdfmark:x + \@@_backend_pdfmark:e { /View [ @@ -737,11 +737,11 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_backend_version_major_gset:n #1 { - \cs_gset:Npx \@@_backend_version_major: { \int_eval:n {#1} } + \cs_gset:Npe \@@_backend_version_major: { \int_eval:n {#1} } } \cs_new_protected:Npn \@@_backend_version_minor_gset:n #1 { - \cs_gset:Npx \@@_backend_version_minor: { \int_eval:n {#1} } + \cs_gset:Npe \@@_backend_version_minor: { \int_eval:n {#1} } } % \end{macrocode} % \end{macro} @@ -805,7 +805,7 @@ % space in the \LuaTeX{} version is \emph{required} as it is consumed in % finding the end of the keyword. % \begin{macrocode} -\cs_new:Npx \@@_backend_annotation_last: +\cs_new:Npe \@@_backend_annotation_last: { \exp_not:N \int_value:w %<*luatex> @@ -857,7 +857,7 @@ % \begin{macro}{\@@_backend_link_last:} % Formatted for direct use. % \begin{macrocode} -\cs_new:Npx \@@_backend_link_last: +\cs_new:Npe \@@_backend_link_last: { \exp_not:N \int_value:w %<*luatex> @@ -1000,7 +1000,7 @@ % \end{macro} % \end{macro} % -% \begin{macro}{\@@_backend_object_write:nnn, \@@_backend_object_write:nnx} +% \begin{macro}{\@@_backend_object_write:nnn, \@@_backend_object_write:nne} % \begin{macro}[EXP]{\@@_backend_object_write:nn} % \begin{macro}[EXP]{\@@_exp_not_i:nn, \@@_exp_not_ii:nn} % Writing the data needs a little information about the structure of the @@ -1037,7 +1037,7 @@ } } } -\cs_generate_variant:Nn \@@_backend_object_write:nnn { nnx } +\cs_generate_variant:Nn \@@_backend_object_write:nnn { nne } \cs_new:Npn \@@_exp_not_i:nn #1#2 { \exp_not:n {#1} } \cs_new:Npn \@@_exp_not_ii:nn #1#2 { \exp_not:n {#2} } % \end{macrocode} @@ -1045,7 +1045,7 @@ % \end{macro} % \end{macro} % -% \begin{macro}{\@@_backend_object_now:nn, \@@_backend_object_now:nx} +% \begin{macro}{\@@_backend_object_now:nn, \@@_backend_object_now:ne} % Much like writing, but direct creation. % \begin{macrocode} \cs_new_protected:Npn \@@_backend_object_now:nn #1#2 @@ -1058,14 +1058,14 @@ %</pdftex> \@@_backend_object_write:nn {#1} {#2} } -\cs_generate_variant:Nn \@@_backend_object_now:nn { nx } +\cs_generate_variant:Nn \@@_backend_object_now:nn { ne } % \end{macrocode} % \end{macro} % % \begin{macro}[EXP]{\@@_backend_object_last:} % Much like annotation. % \begin{macrocode} -\cs_new:Npx \@@_backend_object_last: +\cs_new:Npe \@@_backend_object_last: { \exp_not:N \int_value:w %<*luatex> @@ -1082,7 +1082,7 @@ % \begin{macro}[EXP]{\@@_backend_pageobject_ref:n} % The usual wrapper situation; the three spaces here are essential. % \begin{macrocode} -\cs_new:Npx \@@_backend_pageobject_ref:n #1 +\cs_new:Npe \@@_backend_pageobject_ref:n #1 { \exp_not:N \int_value:w %<*luatex> @@ -1141,7 +1141,7 @@ % The availability of the primitive is not universal, so we have to test % at load time. % \begin{macrocode} -\cs_new_protected:Npx \@@_backend_version_major_gset:n #1 +\cs_new_protected:Npe \@@_backend_version_major_gset:n #1 { %<*luatex> \int_compare:nNnT \tex_luatexversion:D > { 106 } @@ -1175,7 +1175,7 @@ % \begin{macro}[EXP]{\@@_backend_version_major:, \@@_backend_version_minor:} % As above. % \begin{macrocode} -\cs_new:Npx \@@_backend_version_major: +\cs_new:Npe \@@_backend_version_major: { %<*luatex> \int_compare:nNnTF \tex_luatexversion:D > { 106 } @@ -1226,12 +1226,12 @@ %<*dvipdfmx|xetex> % \end{macrocode} % -% \begin{macro}{\@@_backend:n, \@@_backend:x} +% \begin{macro}{\@@_backend:n, \@@_backend:e} % A generic function for the backend PDF specials: used where we can. % \begin{macrocode} -\cs_new_protected:Npx \@@_backend:n #1 +\cs_new_protected:Npe \@@_backend:n #1 { \__kernel_backend_literal:n { pdf: #1 } } -\cs_generate_variant:Nn \@@_backend:n { x } +\cs_generate_variant:Nn \@@_backend:n { e } % \end{macrocode} % \end{macro} % @@ -1274,7 +1274,7 @@ % \end{macro} % \end{macro} % -% \begin{macro}{\@@_backend_object_write:nnn, \@@_backend_object_write:nnx} +% \begin{macro}{\@@_backend_object_write:nnn, \@@_backend_object_write:nne} % \begin{macro} % { % \@@_backend_object_write_array:nn , @@ -1290,15 +1290,15 @@ \use:c { @@_backend_object_write_ #2 :nn } { \@@_backend_object_ref:n {#1} } {#3} } -\cs_generate_variant:Nn \@@_backend_object_write:nnn { nnx } +\cs_generate_variant:Nn \@@_backend_object_write:nnn { nne } \cs_new_protected:Npn \@@_backend_object_write_array:nn #1#2 { - \@@_backend:x + \@@_backend:e { obj ~ #1 ~ [ ~ \exp_not:n {#2} ~ ] } } \cs_new_protected:Npn \@@_backend_object_write_dict:nn #1#2 { - \@@_backend:x + \@@_backend:e { obj ~ #1 ~ << ~ \exp_not:n {#2} ~ >> } } \cs_new_protected:Npn \@@_backend_object_write_fstream:nn #1#2 @@ -1307,7 +1307,7 @@ { \@@_backend_object_write_stream:nnnn { } {#1} #2 } \cs_new_protected:Npn \@@_backend_object_write_stream:nnnn #1#2#3#4 { - \@@_backend:x + \@@_backend:e { #1 stream ~ #2 ~ ( \exp_not:n {#4} ) ~ << \exp_not:n {#3} >> @@ -1318,18 +1318,18 @@ % \end{macro} % \end{macro} % -% \begin{macro}{\@@_backend_object_now:nn, \@@_backend_object_now:nx} +% \begin{macro}{\@@_backend_object_now:nn, \@@_backend_object_now:ne} % No anonymous objects with \texttt{dvipdfmx} so we have to give an % object name. % \begin{macrocode} \cs_new_protected:Npn \@@_backend_object_now:nn #1#2 { \int_gincr:N \g_@@_backend_object_int - \exp_args:Nnx \use:c { @@_backend_object_write_ #1 :nn } + \exp_args:Nne \use:c { @@_backend_object_write_ #1 :nn } { @pdf.obj \int_use:N \g_@@_backend_object_int } {#2} } -\cs_generate_variant:Nn \@@_backend_object_now:nn { nx } +\cs_generate_variant:Nn \@@_backend_object_now:nn { ne } % \end{macrocode} % \end{macro} % @@ -1364,7 +1364,7 @@ { \int_gincr:N \g_@@_backend_object_int \int_gset_eq:NN \g_@@_backend_annotation_int \g_@@_backend_object_int - \@@_backend:x + \@@_backend:e { ann ~ @pdf.obj \int_use:N \g_@@_backend_object_int \c_space_tl width ~ \dim_eval:n {#1} ~ @@ -1400,10 +1400,10 @@ { \@@_backend_link_begin:n { #1 /Subtype /Link /A << /S /GoTo /D ( #2 ) >> } } \cs_new_protected:Npn \@@_backend_link_begin_user:nnw #1#2 { \@@_backend_link_begin:n {#1#2} } -\cs_new_protected:Npx \@@_backend_link_begin:n #1 +\cs_new_protected:Npe \@@_backend_link_begin:n #1 { \exp_not:N \int_gincr:N \exp_not:N \g_@@_backend_link_int - \@@_backend:x + \@@_backend:e { bann ~ @pdf.lnk @@ -1435,7 +1435,7 @@ % Pass to \texttt{dvipdfmx}. % \begin{macrocode} \cs_new_protected:Npn \@@_backend_link_margin:n #1 - { \__kernel_backend_literal:x { dvipdfmx:config~g~ \dim_eval:n {#1} } } + { \__kernel_backend_literal:e { dvipdfmx:config~g~ \dim_eval:n {#1} } } % \end{macrocode} % \end{macro} % @@ -1449,7 +1449,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_backend_destination:nn #1#2 { - \@@_backend:x + \@@_backend:e { dest ~ ( \exp_not:n {#1} ) [ @@ -1518,7 +1518,7 @@ % Pass data to the backend: these are a one-shot. % \begin{macrocode} \cs_new_protected:Npn \@@_backend_compresslevel:n #1 - { \__kernel_backend_literal:x { dvipdfmx:config~z~ \int_eval:n {#1} } } + { \__kernel_backend_literal:e { dvipdfmx:config~z~ \int_eval:n {#1} } } \cs_new_protected:Npn \@@_backend_compress_objects:n #1 { \bool_if:nF {#1} @@ -1534,13 +1534,13 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_backend_version_major_gset:n #1 { - \cs_gset:Npx \@@_backend_version_major: { \int_eval:n {#1} } - \__kernel_backend_literal:x { pdf:majorversion~ \@@_backend_version_major: } + \cs_gset:Npe \@@_backend_version_major: { \int_eval:n {#1} } + \__kernel_backend_literal:e { pdf:majorversion~ \@@_backend_version_major: } } \cs_new_protected:Npn \@@_backend_version_minor_gset:n #1 { - \cs_gset:Npx \@@_backend_version_minor: { \int_eval:n {#1} } - \__kernel_backend_literal:x { pdf:minorversion~ \@@_backend_version_minor: } + \cs_gset:Npe \@@_backend_version_minor: { \int_eval:n {#1} } + \__kernel_backend_literal:e { pdf:minorversion~ \@@_backend_version_minor: } } % \end{macrocode} % \end{macro} @@ -1608,7 +1608,7 @@ % % \begin{macro}{\@@_backend_link_last:} % \begin{macrocode} -\cs_new:Npx \@@_backend_link_last: { } +\cs_new:Npe \@@_backend_link_last: { } % \end{macrocode} % \end{macro} % @@ -1642,8 +1642,8 @@ % % \begin{macro}{\@@_backend_object_new:n} % \begin{macro}[EXP]{\@@_backend_object_ref:n} -% \begin{macro}{\@@_backend_object_write:nnn, \@@_backend_object_write:nx} -% \begin{macro}{\@@_backend_object_now:nn, , \@@_backend_object_now:nx} +% \begin{macro}{\@@_backend_object_write:nnn, \@@_backend_object_write:ne} +% \begin{macro}{\@@_backend_object_now:nn, , \@@_backend_object_now:ne} % \begin{macro}{\@@_backend_object_last:} % \begin{macro}[EXP]{\@@_backend_pageobject_ref:n} % All no-ops here. @@ -1651,9 +1651,9 @@ \cs_new_protected:Npn \@@_backend_object_new:nn #1 { } \cs_new:Npn \@@_backend_object_ref:n #1 { } \cs_new_protected:Npn \@@_backend_object_write:nnn #1#2#3 { } -\cs_new_protected:Npn \@@_backend_object_write:nnx #1#2#3 { } +\cs_new_protected:Npn \@@_backend_object_write:nne #1#2#3 { } \cs_new_protected:Npn \@@_backend_object_now:nn #1#2 { } -\cs_new_protected:Npn \@@_backend_object_now:nx #1#2 { } +\cs_new_protected:Npn \@@_backend_object_now:ne #1#2 { } \cs_new:Npn \@@_backend_object_last: { } \cs_new:Npn \@@_backend_pageobject_ref:n #1 { } % \end{macrocode} diff --git a/macros/latex/contrib/l3experimental/CHANGELOG.md b/macros/latex/contrib/l3experimental/CHANGELOG.md index e440354bfb..7befc1cdf8 100644 --- a/macros/latex/contrib/l3experimental/CHANGELOG.md +++ b/macros/latex/contrib/l3experimental/CHANGELOG.md @@ -7,6 +7,12 @@ this project uses date-based 'snapshot' version identifiers. ## [Unreleased] +## [2023-10-10] + +### Changed +- Slowdown a l3benchmark slow branch code slightly to gain test suite + robustness (issue \#1274) + ## [2023-05-11] ### Changed @@ -275,7 +281,8 @@ this project uses date-based 'snapshot' version identifiers. - New `l3color` module using `xcolor`-like expression syntax - New `l3draw` module, based on `pgf` layer of the TikZ system -[Unreleased]: https://github.com/latex3/latex3/compare/2023-05-11...HEAD +[Unreleased]: https://github.com/latex3/latex3/compare/2023-10-10...HEAD +[2023-10-10]: https://github.com/latex3/latex3/compare/2023-05-11...2023-10-10 [2023-05-11]: https://github.com/latex3/latex3/compare/2023-04-19...2023-05-11 [2023-04-19]: https://github.com/latex3/latex3/compare/2023-03-30...2023-04-19 [2023-03-30]: https://github.com/latex3/latex3/compare/2023-01-24...2023-03-30 diff --git a/macros/latex/contrib/l3experimental/README.md b/macros/latex/contrib/l3experimental/README.md index fad6c09a3b..f78ecff28a 100644 --- a/macros/latex/contrib/l3experimental/README.md +++ b/macros/latex/contrib/l3experimental/README.md @@ -1,7 +1,7 @@ Experimental LaTeX3 Concepts ============================ -Release 2023-05-11 +Release 2023-10-10 Overview -------- diff --git a/macros/latex/contrib/l3experimental/l3benchmark.dtx b/macros/latex/contrib/l3experimental/l3benchmark.dtx index c02099765d..cd41c2103e 100644 --- a/macros/latex/contrib/l3experimental/l3benchmark.dtx +++ b/macros/latex/contrib/l3experimental/l3benchmark.dtx @@ -46,7 +46,7 @@ % }^^A % } % -% \date{Released 2023-05-11} +% \date{Released 2023-10-10} % % \maketitle % @@ -122,7 +122,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3benchmark}{2023-05-11}{} +\ProvidesExplPackage{l3benchmark}{2023-10-10}{} {L3 Experimental benchmarking} % \end{macrocode} % @@ -225,13 +225,13 @@ } \cs_new_protected:Npn \@@_raw_replicate_large:nnN #1#2 { - \cs_set:Npx \@@_tmp:w ##1 { \prg_replicate:nn { 5000 } {##1} } + \cs_set:Npe \@@_tmp:w ##1 { \prg_replicate:nn { 5000 } {##1} } \exp_args:Nno \@@_raw_replicate:nnN { #1 / 5000 } { \@@_tmp:w {#2} } } \cs_new_protected:Npn \@@_raw_replicate_small:nnN #1#2 { - \cs_set:Npx \@@_tmp:w ##1##2 { \prg_replicate:nn {#1} {##1} } + \cs_set:Npe \@@_tmp:w ##1##2 { \prg_replicate:nn {#1} {##1} } \@@_raw:nN { \@@_tmp:w {#2} { } } \g_@@_time_int \exp_args:No \@@_raw_replicate_aux:nnN { \int_use:N \g_@@_time_int } {#2} @@ -439,7 +439,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_display: { - \iow_term:x + \iow_term:e { \@@_fp_to_tl:N \g_benchmark_time_fp \c_space_tl seconds \c_space_tl ( \@@_fp_to_tl:N \g_benchmark_ops_fp \c_space_tl ops) @@ -474,7 +474,7 @@ % \begin{macrocode} \cs_new_protected:Npn \benchmark_tic: { - \iow_term:x { \@@_tictoc_prefix: TIC } + \iow_term:e { \@@_tictoc_prefix: TIC } \exp_args:NNf \seq_gput_right:Nn \g_@@_tictoc_seq { \sys_timer: } \int_gincr:N \g_@@_tictoc_int } @@ -494,7 +494,7 @@ \int_gdecr:N \g_@@_tictoc_int \fp_gset:Nn \g_benchmark_time_fp { ( \sys_timer: - \l_@@_tictoc_pop_tl ) / 65536 } - \iow_term:x + \iow_term:e { \@@_tictoc_prefix: TOC: \c_space_tl diff --git a/macros/latex/contrib/l3experimental/l3benchmark.pdf b/macros/latex/contrib/l3experimental/l3benchmark.pdf Binary files differindex c8c57e9169..a4f0054473 100644 --- a/macros/latex/contrib/l3experimental/l3benchmark.pdf +++ b/macros/latex/contrib/l3experimental/l3benchmark.pdf diff --git a/macros/latex/contrib/l3experimental/l3bitset.dtx b/macros/latex/contrib/l3experimental/l3bitset.dtx index c15e0288e2..6d342b0955 100644 --- a/macros/latex/contrib/l3experimental/l3bitset.dtx +++ b/macros/latex/contrib/l3experimental/l3bitset.dtx @@ -42,7 +42,7 @@ % }^^A % } % -% \date{Released 2023-05-11} +% \date{Released 2023-10-10} % % \maketitle % \begin{documentation} @@ -264,7 +264,7 @@ %<@@=bitset> % \end{macrocode} % \begin{macrocode} -\ProvidesExplPackage{l3bitset}{2023-05-11}{} +\ProvidesExplPackage{l3bitset}{2023-10-10}{} {L3 Experimental bitset support} % \end{macrocode} % A bitset is a string variable. @@ -337,13 +337,13 @@ % then inserting an $1$. It is not checked if the value was already $1$. % \begin{macrocode} \cs_new_protected:Npn \@@_set_true:Nn #1#2 - { \@@_set:NNnN \str_set:Nx #1 {#2} 1 } + { \@@_set:NNnN \str_set:Ne #1 {#2} 1 } \cs_new_protected:Npn \@@_gset_true:Nn #1#2 - { \@@_set:NNnN \str_gset:Nx #1 {#2} 1 } + { \@@_set:NNnN \str_gset:Ne #1 {#2} 1 } \cs_new_protected:Npn \@@_set_false:Nn #1#2 - { \@@_set:NNnN \str_set:Nx #1 {#2} 0 } + { \@@_set:NNnN \str_set:Ne #1 {#2} 0 } \cs_new_protected:Npn \@@_gset_false:Nn #1#2 - { \@@_set:NNnN \str_gset:Nx #1 {#2} 0 } + { \@@_set:NNnN \str_gset:Ne #1 {#2} 0 } \cs_new_protected:Npn \@@_set:NNnN #1#2#3#4 { \int_compare:nNnT {#3} > { 0 } @@ -434,7 +434,7 @@ \prop_gput:cnn { g_@@_ \cs_to_str:N #2 _name_prop } {#3} {#3} } { - \msg_warning:nnxx { bitset } { unknown-name } + \msg_warning:nnee { bitset } { unknown-name } { \token_to_str:N #2 } { \tl_to_str:n {#3} } } @@ -531,11 +531,11 @@ % \bitset_log:N, \bitset_log:c % } % \begin{macrocode} -\cs_new_protected:Npn \bitset_show:N { \@@_show:NN \msg_show:nnxxxx } +\cs_new_protected:Npn \bitset_show:N { \@@_show:NN \msg_show:nneeee } \cs_generate_variant:Nn \bitset_show:N { c } -\cs_new_protected:Npn \bitset_log:N { \@@_show:NN \msg_log:nnxxxx } +\cs_new_protected:Npn \bitset_log:N { \@@_show:NN \msg_log:nneeee } \cs_generate_variant:Nn \bitset_log:N { c } -\cs_new_protected:Npn \bitset_show_named_index:N { \@@_show_named_index:NN \msg_show:nnxxxx } +\cs_new_protected:Npn \bitset_show_named_index:N { \@@_show_named_index:NN \msg_show:nneeee } \cs_generate_variant:Nn \bitset_show_named_index:N { c } \cs_new_protected:Npn \@@_show:NN #1#2 { diff --git a/macros/latex/contrib/l3experimental/l3bitset.pdf b/macros/latex/contrib/l3experimental/l3bitset.pdf Binary files differindex b7744fd2b6..095a3dd391 100644 --- a/macros/latex/contrib/l3experimental/l3bitset.pdf +++ b/macros/latex/contrib/l3experimental/l3bitset.pdf diff --git a/macros/latex/contrib/l3experimental/l3draw-boxes.dtx b/macros/latex/contrib/l3experimental/l3draw-boxes.dtx index d8704e4545..b48aa9d995 100644 --- a/macros/latex/contrib/l3experimental/l3draw-boxes.dtx +++ b/macros/latex/contrib/l3experimental/l3draw-boxes.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2023-05-11} +% \date{Released 2023-10-10} % % \maketitle % @@ -102,7 +102,7 @@ \group_begin: \hbox_set:Nn \l_@@_tmp_box { - \use:x + \use:e { \@@_backend_box_use:Nnnnn #1 { \fp_use:N \l_@@_matrix_a_fp } diff --git a/macros/latex/contrib/l3experimental/l3draw-code.pdf b/macros/latex/contrib/l3experimental/l3draw-code.pdf Binary files differindex 4926dccaa7..9e5404c221 100644 --- a/macros/latex/contrib/l3experimental/l3draw-code.pdf +++ b/macros/latex/contrib/l3experimental/l3draw-code.pdf diff --git a/macros/latex/contrib/l3experimental/l3draw-layers.dtx b/macros/latex/contrib/l3experimental/l3draw-layers.dtx index 0303081b15..e85f370c34 100644 --- a/macros/latex/contrib/l3experimental/l3draw-layers.dtx +++ b/macros/latex/contrib/l3experimental/l3draw-layers.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2023-05-11} +% \date{Released 2023-10-10} % % \maketitle % diff --git a/macros/latex/contrib/l3experimental/l3draw-paths.dtx b/macros/latex/contrib/l3experimental/l3draw-paths.dtx index 702ef922f9..41e866e563 100644 --- a/macros/latex/contrib/l3experimental/l3draw-paths.dtx +++ b/macros/latex/contrib/l3experimental/l3draw-paths.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2023-05-11} +% \date{Released 2023-10-10} % % \maketitle % @@ -346,7 +346,7 @@ { \fp_set:Nn \l_@@_path_tmpa_fp { \c_@@_path_curveto_b_fp * #1 } \fp_set:Nn \l_@@_path_tmpb_fp { \c_@@_path_curveto_b_fp * #2 } - \use:x + \use:e { \@@_path_mark_corner: \@@_path_curveto:nnnnnn @@ -409,7 +409,7 @@ { \draw_path_arc:nnnn {#1} {#2} {#3} {#3} } \cs_new_protected:Npn \draw_path_arc:nnnn #1#2#3#4 { - \use:x + \use:e { \@@_path_arc:nnnn { \fp_eval:n {#1} } @@ -464,7 +464,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_path_arc_auxi:nnnnNnn #1#2#3#4#5#6#7 { - \use:x + \use:e { \@@_path_arc_auxii:nnnNnnnn {#1} {#2} {#4} #5 {#6} {#7} @@ -564,7 +564,7 @@ } \cs_new_protected:Npn \@@_path_arc_aux_add:nn #1#2 { - \tl_put_right:Nx \l_@@_path_tmp_tl + \tl_put_right:Ne \l_@@_path_tmp_tl { { \fp_to_dim:n {#1} } { \fp_to_dim:n {#2} } } } \fp_new:N \l_@@_path_arc_delta_fp @@ -624,7 +624,7 @@ } \cs_new_protected:Npn \@@_path_ellipse:nnnnnn #1#2#3#4#5#6 { - \use:x + \use:e { \@@_path_moveto:nn { \fp_to_dim:n { #1 + #3 } } { \fp_to_dim:n { #2 + #4 } } diff --git a/macros/latex/contrib/l3experimental/l3draw-points.dtx b/macros/latex/contrib/l3experimental/l3draw-points.dtx index e858b98f10..044f01a374 100644 --- a/macros/latex/contrib/l3experimental/l3draw-points.dtx +++ b/macros/latex/contrib/l3experimental/l3draw-points.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2023-05-11} +% \date{Released 2023-10-10} % % \maketitle % diff --git a/macros/latex/contrib/l3experimental/l3draw-scopes.dtx b/macros/latex/contrib/l3experimental/l3draw-scopes.dtx index 75b5238b38..4017e46f17 100644 --- a/macros/latex/contrib/l3experimental/l3draw-scopes.dtx +++ b/macros/latex/contrib/l3experimental/l3draw-scopes.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2023-05-11} +% \date{Released 2023-10-10} % % \maketitle % @@ -247,7 +247,7 @@ { \bool_if:NTF \l_@@_baseline_bool { - \use:x + \use:e { \exp_not:n {#1} \@@_finalise_baseline:n { \dim_use:N \l_@@_baseline_dim } diff --git a/macros/latex/contrib/l3experimental/l3draw-softpath.dtx b/macros/latex/contrib/l3experimental/l3draw-softpath.dtx index 867164c026..44524fb17b 100644 --- a/macros/latex/contrib/l3experimental/l3draw-softpath.dtx +++ b/macros/latex/contrib/l3experimental/l3draw-softpath.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2023-05-11} +% \date{Released 2023-10-10} % % \maketitle % @@ -96,11 +96,11 @@ % \end{macrocode} % \end{variable} % -% \begin{macro}{\@@_softpath_add:n, \@@_softpath_add:o, \@@_softpath_add:x} +% \begin{macro}{\@@_softpath_add:n, \@@_softpath_add:o, \@@_softpath_add:e} % \begin{macrocode} \cs_new_protected:Npn \@@_softpath_add:n { \tl_build_gput_right:Nn \g_@@_softpath_main_tl } -\cs_generate_variant:Nn \@@_softpath_add:n { o, x } +\cs_generate_variant:Nn \@@_softpath_add:n { o, e } % \end{macrocode} % \end{macro} % @@ -150,7 +150,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_softpath_closepath: { - \@@_softpath_add:x + \@@_softpath_add:e { \@@_softpath_close_op:nn { \dim_use:N \g_@@_softpath_lastx_dim } @@ -466,19 +466,19 @@ % corner, in order to work out where the curve we are adding will start % and end. From those, plus the points we already have, we work out where % the control points will lie. All of this is done in an expansion to -% avoid multiple calls to |\tl_put_right:Nx|. The end point of the line +% avoid multiple calls to |\tl_put_right:Ne|. The end point of the line % is worked out up-front and saved: we need that if dealing with a % close-path operation. % \begin{macrocode} \cs_new_protected:Npn \@@_softpath_round_calc:NnnNnn #1#2#3#4#5#6 { - \tl_set:Nx \l_@@_softpath_curve_end_tl + \tl_set:Ne \l_@@_softpath_curve_end_tl { \draw_point_interpolate_distance:nnn \l_@@_softpath_cornerii_dim { #5 , #6 } { #2 , #3 } } - \tl_put_right:Nx \l_@@_softpath_part_tl + \tl_put_right:Ne \l_@@_softpath_part_tl { \exp_not:N #4 \@@_softpath_round_calc:fVnnnn @@ -546,11 +546,11 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_softpath_round_close:nn #1#2 { - \use:x + \use:e { \@@_softpath_round_calc:NnnNnn { - \tl_set:Nx \exp_not:N \l_@@_softpath_move_tl + \tl_set:Ne \exp_not:N \l_@@_softpath_move_tl { \@@_softpath_moveto_op:nn \exp_not:N \exp_after:wN @@ -558,7 +558,7 @@ \exp_not:N \l_@@_softpath_curve_end_tl \s_@@_stop } - \use:x + \use:e { \exp_not:N \exp_not:N \exp_not:N \use_i:nnnn { diff --git a/macros/latex/contrib/l3experimental/l3draw-state.dtx b/macros/latex/contrib/l3experimental/l3draw-state.dtx index fca6f78389..e1a67309e2 100644 --- a/macros/latex/contrib/l3experimental/l3draw-state.dtx +++ b/macros/latex/contrib/l3experimental/l3draw-state.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2023-05-11} +% \date{Released 2023-10-10} % % \maketitle % @@ -107,7 +107,7 @@ \seq_set_from_clist:Nn \l_@@_tmp_seq {#1} \seq_set_map:NNn \l_@@_tmp_seq \l_@@_tmp_seq { \fp_to_dim:n {##1} } - \use:x + \use:e { \@@_backend_dash_pattern:nn { \seq_use:Nn \l_@@_tmp_seq { , } } @@ -124,7 +124,7 @@ % Pass through to the driver layer. % \begin{macrocode} \cs_new_protected:Npn \draw_miterlimit:n #1 - { \exp_args:Nx \@@_backend_miterlimit:n { \fp_eval:n {#1} } } + { \exp_args:Ne \@@_backend_miterlimit:n { \fp_eval:n {#1} } } % \end{macrocode} % \end{macro} % diff --git a/macros/latex/contrib/l3experimental/l3draw-transforms.dtx b/macros/latex/contrib/l3experimental/l3draw-transforms.dtx index 901b0b6f84..35b31395db 100644 --- a/macros/latex/contrib/l3experimental/l3draw-transforms.dtx +++ b/macros/latex/contrib/l3experimental/l3draw-transforms.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2023-05-11} +% \date{Released 2023-10-10} % % \maketitle % @@ -172,7 +172,7 @@ % \begin{macrocode} \cs_new_protected:Npn \draw_transform_matrix:nnnn #1#2#3#4 { - \use:x + \use:e { \@@_transform:nnnn { \fp_eval:n {#1} } @@ -183,7 +183,7 @@ } \cs_new_protected:Npn \@@_transform:nnnn #1#2#3#4 { - \use:x + \use:e { \draw_transform_matrix_absolute:nnnn { #1 * \l_@@_matrix_a_fp + #2 * \l_@@_matrix_c_fp } @@ -269,7 +269,7 @@ } \cs_new_protected:Npn \@@_transform_triangle:nnnnnn #1#2#3#4#5#6 { - \use:x + \use:e { \draw_transform_matrix_absolute:nnnn { #3 - #1 } diff --git a/macros/latex/contrib/l3experimental/l3draw.dtx b/macros/latex/contrib/l3experimental/l3draw.dtx index 7d4afed84f..d1e604d42d 100644 --- a/macros/latex/contrib/l3experimental/l3draw.dtx +++ b/macros/latex/contrib/l3experimental/l3draw.dtx @@ -110,7 +110,7 @@ % }^^A % } % -% \date{Released 2023-05-11} +% \date{Released 2023-10-10} % % \maketitle % @@ -1173,7 +1173,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3draw}{2023-05-11}{} +\ProvidesExplPackage{l3draw}{2023-10-10}{} {L3 Experimental core drawing support} % \end{macrocode} % diff --git a/macros/latex/contrib/l3experimental/l3draw.pdf b/macros/latex/contrib/l3experimental/l3draw.pdf Binary files differindex 81f9aa126c..485b4ded36 100644 --- a/macros/latex/contrib/l3experimental/l3draw.pdf +++ b/macros/latex/contrib/l3experimental/l3draw.pdf diff --git a/macros/latex/contrib/l3experimental/l3galley.dtx b/macros/latex/contrib/l3experimental/l3galley.dtx index a40688f42a..7272d8625e 100644 --- a/macros/latex/contrib/l3experimental/l3galley.dtx +++ b/macros/latex/contrib/l3experimental/l3galley.dtx @@ -61,7 +61,7 @@ % }^^A % } % -% \date{Released 2023-05-11} +% \date{Released 2023-10-10} % % \maketitle % @@ -686,7 +686,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3galley}{2023-05-11}{} +\ProvidesExplPackage{l3galley}{2023-10-10}{} {L3 Experimental galley code} % \end{macrocode} % @@ -1325,7 +1325,7 @@ { \tl_if_empty:NF #1 { - \tl_gput_right:Nx \g_galley_restore_running_tl + \tl_gput_right:Ne \g_galley_restore_running_tl { \int_gset:Nn \exp_not:N \g_galley_penalty_int { \int_use:N \g_galley_penalty_int } @@ -1337,7 +1337,7 @@ { \tl_if_empty:NF #1 { - \tl_gput_right:Nx \g_galley_restore_running_tl + \tl_gput_right:Ne \g_galley_restore_running_tl { \skip_gset:Nn \exp_not:N \g_galley_vspace_skip { \skip_use:N \g_galley_vspace_skip } @@ -1755,7 +1755,7 @@ { \seq_gpop_left:NNF #2 \l_@@_tmp_tl { \tl_set:Nn \l_@@_tmp_tl { 0pt } } - \seq_put_right:Nx \l_@@_tmp_seq + \seq_put_right:Ne \l_@@_tmp_seq { \dim_eval:n { ##1 + \l_@@_tmp_tl } } } } @@ -1950,10 +1950,10 @@ % deals with this nicely. % \begin{macrocode} \cs_new_protected:Npn \galley_penalty_set_single:n #1 - { \tl_gset:Nx \g_@@_interpar_penalty_user_tl { \int_eval:n {#1} } } + { \tl_gset:Ne \g_@@_interpar_penalty_user_tl { \int_eval:n {#1} } } \cs_new_protected:Npn \galley_penalty_add_single:n #1 { - \tl_gset:Nx \g_@@_interpar_penalty_user_tl + \tl_gset:Ne \g_@@_interpar_penalty_user_tl { \int_eval:n { @@ -1964,10 +1964,10 @@ } } \cs_new_protected:Npn \galley_vspace_set_single:n #1 - { \tl_gset:Nx \g_@@_interpar_vspace_user_tl { \skip_eval:n {#1} } } + { \tl_gset:Ne \g_@@_interpar_vspace_user_tl { \skip_eval:n {#1} } } \cs_new_protected:Npn \galley_vspace_add_single:n #1 { - \tl_gset:Nx \g_@@_interpar_vspace_user_tl + \tl_gset:Ne \g_@@_interpar_vspace_user_tl { \skip_eval:n { @@ -2408,11 +2408,11 @@ { \clist_set_eq:NN #1 \l_galley_line_penalties_clist } % \end{macrocode} % These all require appropriate mappings, using the fact that -% \cs{clist_set:Nx} will tidy up the excess comma. +% \cs{clist_set:Ne} will tidy up the excess comma. % \begin{macrocode} \cs_new_protected:Npn \galley_save_display_club_penalties:N #1 { - \clist_set:Nx #1 + \clist_set:Ne #1 { \int_step_function:nN { \tex_clubpenalties:D 0 - 1 } \@@_save_display_club_penalties:n @@ -2422,7 +2422,7 @@ { \int_value:w \tex_clubpenalties:D \int_eval:n {#1} , } \cs_new_protected:Npn \galley_save_display_widow_penalties:N #1 { - \clist_set:Nx #1 + \clist_set:Ne #1 { \int_step_function:nN { \tex_displaywidowpenalties:D 0 - 1 } \@@_save_display_widow_penalties:n @@ -2435,7 +2435,7 @@ } \cs_new_protected:Npn \galley_save_widow_penalties:N #1 { - \clist_set:Nx #1 + \clist_set:Ne #1 { \int_step_function:nN { \tex_widowpenalties:D 0 - 1 } \@@_save_widow_penalties:n diff --git a/macros/latex/contrib/l3experimental/l3galley.pdf b/macros/latex/contrib/l3experimental/l3galley.pdf Binary files differindex e0ca0b85d4..3ba577c159 100644 --- a/macros/latex/contrib/l3experimental/l3galley.pdf +++ b/macros/latex/contrib/l3experimental/l3galley.pdf diff --git a/macros/latex/contrib/l3experimental/l3graphics.dtx b/macros/latex/contrib/l3experimental/l3graphics.dtx index 3209e4793c..0266b711fa 100644 --- a/macros/latex/contrib/l3experimental/l3graphics.dtx +++ b/macros/latex/contrib/l3experimental/l3graphics.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-05-11} +% \date{Released 2023-10-10} % % \maketitle % @@ -184,7 +184,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3graphics}{2023-05-11}{} +\ProvidesExplPackage{l3graphics}{2023-10-10}{} {L3 Experimental graphics inclusion support} % \end{macrocode} % @@ -236,8 +236,8 @@ pagebox .choices:nn = { art , bleed , crop , media , trim } { - \tl_set:Nx \l_@@_pagebox_tl - { \tl_use:N \l_keys_choice_tl box } + \tl_set:Ne \l_@@_pagebox_tl + { \l_keys_choice_tl box } } , pagebox .initial:n = crop , @@ -267,8 +267,8 @@ % \end{macrocode} % \end{variable} % -% \begin{macro}{\@@_bb_save:n, \@@_bb_save:x} -% \begin{macro}{\@@_bb_restore:nF, \@@_bb_restore:xF} +% \begin{macro}{\@@_bb_save:n, \@@_bb_save:e} +% \begin{macro}{\@@_bb_restore:nF, \@@_bb_restore:eF} % Caching graphic bounding boxes is sensible, and these functions are needed both % here and for drive-specific work. So they are made available as documented % functions. To save on registers, the \enquote{origin} is only saved if it is @@ -287,7 +287,7 @@ \dim_const:cn { c_@@_ #1 _ury_dim } { \l_@@_ury_dim } } } -\cs_generate_variant:Nn \@@_bb_save:n { x } +\cs_generate_variant:Nn \@@_bb_save:n { e } \cs_new_protected:Npn \@@_bb_restore:nF #1#2 { \dim_if_exist:cTF { c_@@_ #1 _urx_dim } @@ -303,7 +303,7 @@ } {#2} } -\cs_generate_variant:Nn \@@_bb_restore:nF { x } +\cs_generate_variant:Nn \@@_bb_restore:nF { e } % \end{macrocode} % \end{macro} % \end{macro} @@ -375,7 +375,7 @@ \@@_bb_restore:nF {#1#2} { \@@_read_bb_auxii:nnnn {#3} {#4} {#1} {#2} } } -\cs_new_protected:Npx \@@_read_bb_auxii:nnnn #1#2#3#4 +\cs_new_protected:Npe \@@_read_bb_auxii:nnnn #1#2#3#4 { #1 \exp_not:N \ior_if_eof:NTF \exp_not:N \l_@@_internal_ior @@ -390,15 +390,15 @@ } \ior_close:N \exp_not:N \l_@@_internal_ior } -\use:x +\use:e { \cs_new_protected:Npn \exp_not:N \@@_read_bb_auxiii:w - ##1 \c_colon_str ##2 \s_@@_stop + #1 \c_colon_str #2 \s_@@_stop { \exp_not:N \str_if_eq:nnT { \c_percent_str \c_percent_str BoundingBox } - {##1} - { \exp_not:N \@@_read_bb_auxiv:w ##2 ( ) \s_@@_stop } + {#1} + { \exp_not:N \@@_read_bb_auxiv:w #2 ( ) \s_@@_stop } } } % \end{macrocode} @@ -413,7 +413,7 @@ { \str_if_eq:nnF {#2} { atend } { - \tl_set_rescan:Nnx \l_@@_internal_tl + \tl_set_rescan:Nne \l_@@_internal_tl { \char_set_catcode_space:n { 9 } \char_set_catcode_space:n { 32 } @@ -552,7 +552,7 @@ \cs_if_exist:cTF { @@_backend_include_ #1 :n } { \tl_set_eq:NN \l_@@_final_name_str \l_@@_full_name_str - \str_set:Nx \l_@@_full_name_str + \str_set:Ne \l_@@_full_name_str { \exp_args:NV \__kernel_file_name_quote:n \l_@@_full_name_str } \exp_args:NnV \use:c { @@_backend_getbb_ #1 :n } \l_@@_full_name_str @@ -615,8 +615,8 @@ % \begin{macro}[EXP]{\@@_list_aux:n} % A function to list all graphic files used. % \begin{macrocode} -\cs_new_protected:Npn \graphics_show_list: { \@@_list:N \msg_show:nnxxxx } -\cs_new_protected:Npn \graphics_log_list: { \@@_list:N \msg_log:nnxxxx } +\cs_new_protected:Npn \graphics_show_list: { \@@_list:N \msg_show:nneeee } +\cs_new_protected:Npn \graphics_log_list: { \@@_list:N \msg_log:nneeee } \cs_new_protected:Npn \@@_list:N #1 { \seq_remove_duplicates:N \g_@@_record_seq @@ -714,7 +714,7 @@ \exp_args:NNNV \group_end: \tl_set:Nn #2 #2 } -\cs_new_protected:Npx \@@_get_pagecount:n #1 +\cs_new_protected:Npe \@@_get_pagecount:n #1 { \ior_shell_open:Nn \exp_not:N \l_@@_internal_ior { extractbb~-O~#1 } @@ -731,16 +731,16 @@ } \ior_close:N \exp_not:N \l_@@_internal_ior } -\use:x +\use:e { \cs_new_protected:Npn \exp_not:N \@@_get_pagecount:nw - ##1##2 \c_colon_str ##3 \c_colon_str ##4 \s_@@_stop + #1#2 \c_colon_str #3 \c_colon_str #4 \s_@@_stop { \exp_not:N \str_if_eq:nnT { \c_percent_str \c_percent_str Pages } - {##2} + {#2} { - \int_const:cn { c_@@_ ##1 _pages_int } {##3} + \int_const:cn { c_@@_ #1 _pages_int } {#3} \exp_not:N \ior_map_break: } } diff --git a/macros/latex/contrib/l3experimental/l3graphics.pdf b/macros/latex/contrib/l3experimental/l3graphics.pdf Binary files differindex e51c8b2650..dd86d0bd76 100644 --- a/macros/latex/contrib/l3experimental/l3graphics.pdf +++ b/macros/latex/contrib/l3experimental/l3graphics.pdf diff --git a/macros/latex/contrib/l3experimental/l3opacity.dtx b/macros/latex/contrib/l3experimental/l3opacity.dtx index 0412372235..3fce2c27d1 100644 --- a/macros/latex/contrib/l3experimental/l3opacity.dtx +++ b/macros/latex/contrib/l3experimental/l3opacity.dtx @@ -46,7 +46,7 @@ % }^^A % } % -% \date{Released 2023-05-11} +% \date{Released 2023-10-10} % % \maketitle % @@ -96,7 +96,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3opacity}{2023-05-11}{} +\ProvidesExplPackage{l3opacity}{2023-10-10}{} {L3 Experimental opacity support} % \end{macrocode} % diff --git a/macros/latex/contrib/l3experimental/l3opacity.pdf b/macros/latex/contrib/l3experimental/l3opacity.pdf Binary files differindex 8a1140d1cb..bd73f200d5 100644 --- a/macros/latex/contrib/l3experimental/l3opacity.pdf +++ b/macros/latex/contrib/l3experimental/l3opacity.pdf diff --git a/macros/latex/contrib/l3experimental/l3str-format.dtx b/macros/latex/contrib/l3experimental/l3str-format.dtx index af0ad23e9f..10ccfb2f79 100644 --- a/macros/latex/contrib/l3experimental/l3str-format.dtx +++ b/macros/latex/contrib/l3experimental/l3str-format.dtx @@ -48,7 +48,7 @@ % }^^A % } % -% \date{Released 2023-05-11} +% \date{Released 2023-10-10} % % \maketitle % @@ -166,7 +166,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3str-format}{2023-05-11}{} +\ProvidesExplPackage{l3str-format}{2023-10-10}{} {L3 Experimental string formatting} % \end{macrocode} % @@ -256,7 +256,7 @@ \exp_last_unbraced:Nf \@@_format_parse_auxi:NN { \__kernel_str_to_other:n {#1} } \s_@@_stop \s_@@_stop {#1} } -\cs_new:Npx \@@_format_parse_auxi:NN #1#2 +\cs_new:Npe \@@_format_parse_auxi:NN #1#2 { \exp_not:N \@@_format_if_in:nNTF { < > = ^ } #2 { \exp_not:N \@@_format_parse_auxiii:nN { #1 #2 } } @@ -271,7 +271,7 @@ { \@@_format_parse_auxiii:nN { #1 #2 } } { \@@_format_parse_auxiii:nN { #1 ? } #2 } } -\cs_new:Npx \@@_format_parse_auxiii:nN #1#2 +\cs_new:Npe \@@_format_parse_auxiii:nN #1#2 { \exp_not:N \@@_format_if_in:nNTF { + - \c_catcode_other_space_tl } diff --git a/macros/latex/contrib/l3experimental/l3str-format.pdf b/macros/latex/contrib/l3experimental/l3str-format.pdf Binary files differindex 5c7e16f870..dbc0058ace 100644 --- a/macros/latex/contrib/l3experimental/l3str-format.pdf +++ b/macros/latex/contrib/l3experimental/l3str-format.pdf diff --git a/macros/latex/contrib/l3experimental/l3sys-shell.dtx b/macros/latex/contrib/l3experimental/l3sys-shell.dtx index dfc2fb188a..0cc622dbbb 100644 --- a/macros/latex/contrib/l3experimental/l3sys-shell.dtx +++ b/macros/latex/contrib/l3experimental/l3sys-shell.dtx @@ -46,7 +46,7 @@ % }^^A % } % -% \date{Released 2023-05-11} +% \date{Released 2023-10-10} % % \maketitle % @@ -151,7 +151,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3sys-shell}{2023-05-11}{} +\ProvidesExplPackage{l3sys-shell}{2023-10-10}{} {L3 Experimental system shell functions} % \end{macrocode} % @@ -213,11 +213,11 @@ % Simple Unix-like file copying: at some stage we may need a directory-only % version as Windows and Unix have different requirements here. % \begin{macrocode} -\cs_new_protected:Npx \sys_shell_cp:nn #1#2 +\cs_new_protected:Npe \sys_shell_cp:nn #1#2 { \sys_if_shell_unrestricted:T { - \sys_shell_now:x + \sys_shell_now:e { \sys_if_platform_unix:T { @@ -240,11 +240,11 @@ % issues a warning if the directory already exists: avoid by including a % test. % \begin{macrocode} -\cs_new_protected:Npx \sys_shell_mkdir:n #1 +\cs_new_protected:Npe \sys_shell_mkdir:n #1 { \sys_if_shell_unrestricted:T { - \sys_shell_now:x + \sys_shell_now:e { \sys_if_platform_unix:T { mkdir~-p~ \exp_not:N \tl_to_str:n {#1} } @@ -264,11 +264,11 @@ % On Windows we do not have a single |mv| operation, so copy-and-delete % instead. % \begin{macrocode} -\cs_new_protected:Npx \sys_shell_mv:nn #1#2 +\cs_new_protected:Npe \sys_shell_mv:nn #1#2 { \sys_if_shell_unrestricted:T { - \sys_shell_now:x + \sys_shell_now:e { \sys_if_platform_unix:T { @@ -291,11 +291,11 @@ % \begin{macro}{\sys_shell_rm:n} % Deletion: obviously a big health warning here! % \begin{macrocode} -\cs_new_protected:Npx \sys_shell_rm:n #1 +\cs_new_protected:Npe \sys_shell_rm:n #1 { \sys_if_shell_unrestricted:T { - \sys_shell_now:x + \sys_shell_now:e { \sys_if_platform_unix:T { rm~-f~ \exp_not:N \tl_to_str:n {#1} } @@ -311,12 +311,12 @@ % When removing a directory, we create it first as that avoids errors in % the Windows case. % \begin{macrocode} -\cs_new_protected:Npx \sys_shell_rmdir:n #1 +\cs_new_protected:Npe \sys_shell_rmdir:n #1 { \sys_if_shell_unrestricted:T { \sys_shell_mkdir:n {#1} - \sys_shell_now:x + \sys_shell_now:e { \sys_if_platform_unix:T { rm~-rf~ \exp_not:N \tl_to_str:n {#1} } @@ -341,7 +341,7 @@ % that does not require shell escape. However, it's hard to see how it might % be useful without the other file functions.) % \begin{macrocode} -\cs_new_protected:Npx \sys_get_shell_pwd:N #1 +\cs_new_protected:Npe \sys_get_shell_pwd:N #1 { \sys_if_shell_unrestricted:T { @@ -371,7 +371,7 @@ % just a case of tidying up. The listing always ends in |^^M| so there is an % extra entry to trim. % \begin{macrocode} -\cs_new_protected:Npx \sys_shell_split_ls:nN #1#2 +\cs_new_protected:Npe \sys_shell_split_ls:nN #1#2 { \sys_if_shell_unrestricted:T { diff --git a/macros/latex/contrib/l3experimental/l3sys-shell.pdf b/macros/latex/contrib/l3experimental/l3sys-shell.pdf Binary files differindex fb739697fd..2416721b43 100644 --- a/macros/latex/contrib/l3experimental/l3sys-shell.pdf +++ b/macros/latex/contrib/l3experimental/l3sys-shell.pdf diff --git a/macros/latex/contrib/l3experimental/xcoffins.dtx b/macros/latex/contrib/l3experimental/xcoffins.dtx index 97f1432be0..8e8a9f0ca1 100644 --- a/macros/latex/contrib/l3experimental/xcoffins.dtx +++ b/macros/latex/contrib/l3experimental/xcoffins.dtx @@ -53,7 +53,7 @@ % }^^A % } % -% \date{Released 2023-05-11} +% \date{Released 2023-10-10} % % \maketitle % @@ -672,7 +672,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{xcoffins}{2023-05-11}{} +\ProvidesExplPackage{xcoffins}{2023-10-10}{} {L3 Experimental design level coffins} % \end{macrocode} % @@ -781,7 +781,7 @@ { \group_begin: \@@_design_names:N #1 - \use:x + \use:e { \group_end: \coffin_set_horizontal_pole:Nnn #1 @@ -792,7 +792,7 @@ { \group_begin: \@@_design_names:N #1 - \use:x + \use:e { \group_end: \coffin_set_vertical_pole:Nnn #1 @@ -831,7 +831,7 @@ { \group_begin: \keys_set:nn { coffin } {#1} - \tl_set:Nx \l_@@_tmp_tl + \tl_set:Ne \l_@@_tmp_tl { \group_end: \bool_if:NTF \l_@@_bound_box_grow_bool diff --git a/macros/latex/contrib/l3experimental/xcoffins.pdf b/macros/latex/contrib/l3experimental/xcoffins.pdf Binary files differindex f67094abd6..4e7d4f9a57 100644 --- a/macros/latex/contrib/l3experimental/xcoffins.pdf +++ b/macros/latex/contrib/l3experimental/xcoffins.pdf diff --git a/macros/latex/contrib/l3experimental/xgalley.dtx b/macros/latex/contrib/l3experimental/xgalley.dtx index c7731b0b66..abda67cc7e 100644 --- a/macros/latex/contrib/l3experimental/xgalley.dtx +++ b/macros/latex/contrib/l3experimental/xgalley.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2023-05-11} +% \date{Released 2023-10-10} % % \maketitle % @@ -731,7 +731,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{xgalley}{2023-05-11}{} +\ProvidesExplPackage{xgalley}{2023-10-10}{} {L3 Experimental galley} \RequirePackage{xtemplate,l3galley} % \end{macrocode} @@ -1057,7 +1057,7 @@ stretch-last-line = \l_galley_par_stretch_last_bool } { - \tl_put_left:Nx \l_@@_justification_other_tl + \tl_put_left:Ne \l_@@_justification_other_tl { \skip_set:Nn \exp_not:N \l_galley_par_end_skip { \skip_use:N \l_galley_par_end_skip } @@ -1355,7 +1355,7 @@ % \begin{macrocode} \tl_if_empty:NF \l_@@_interline_penalty_tl { - \tl_gput_right:Nx \g_galley_par_reset_hook_tl + \tl_gput_right:Ne \g_galley_par_reset_hook_tl { \int_set:Nn \exp_not:N \l_@@_interline_penalty_int { \galley_interline_penalty: } @@ -1365,7 +1365,7 @@ } \tl_if_empty:NF \l_@@_parbreak_fuzz_tl { - \tl_gput_right:Nx \g_galley_par_reset_hook_tl + \tl_gput_right:Ne \g_galley_par_reset_hook_tl { \dim_set:Nn \exp_not:N \l_galley_parbreak_fuzz_dim { \dim_use:N \l_galley_parbreak_fuzz_dim } @@ -1380,7 +1380,7 @@ { \tl_if_empty:cF { l_galley_ ##1 _tl } { - \tl_gput_right:Nx \g_galley_par_reset_hook_tl + \tl_gput_right:Ne \g_galley_par_reset_hook_tl { \int_set:Nn \exp_not:c { l_galley_ ##1 _int } { \int_use:c { l_galley_ ##1 _int } } @@ -1399,7 +1399,7 @@ \tl_if_empty:cF { l_galley_ ##1 _tl } { \use:c { galley_save_ ##1 :N } \l_@@_tmpa_clist - \tl_gput_right:Nx \g_galley_par_reset_hook_tl + \tl_gput_right:Ne \g_galley_par_reset_hook_tl { \exp_not:c { galley_set_ ##1 :n } { \exp_not:o \l_@@_tmpa_clist } @@ -1486,22 +1486,22 @@ { \tl_if_empty:NF \l_galley_display_begin_par_vpenalty_tl { - \tl_set:Nx \l_galley_display_begin_par_vpenalty_tl + \tl_set:Ne \l_galley_display_begin_par_vpenalty_tl { \int_eval:n { \l_galley_display_begin_par_vpenalty_tl } } } \tl_if_empty:NF \l_galley_display_begin_par_vspace_tl { - \tl_set:Nx \l_galley_display_begin_par_vspace_tl + \tl_set:Ne \l_galley_display_begin_par_vspace_tl { \skip_eval:n { \l_galley_display_begin_par_vspace_tl } } } \tl_if_empty:NF \l_galley_display_begin_vpenalty_tl { - \tl_set:Nx \l_galley_display_begin_vpenalty_tl + \tl_set:Ne \l_galley_display_begin_vpenalty_tl { \int_eval:n { \l_galley_display_begin_vpenalty_tl } } } \tl_if_empty:NF \l_galley_display_begin_vspace_tl { - \tl_set:Nx \l_galley_display_begin_vspace_tl + \tl_set:Ne \l_galley_display_begin_vspace_tl { \skip_eval:n { \l_galley_display_begin_vspace_tl } } } } @@ -1515,22 +1515,22 @@ { \tl_if_empty:NF \l_galley_display_end_par_vpenalty_tl { - \tl_set:Nx \l_galley_display_end_par_vpenalty_tl + \tl_set:Ne \l_galley_display_end_par_vpenalty_tl { \int_eval:n { \l_galley_display_end_par_vpenalty_tl } } } \tl_if_empty:NF \l_galley_display_end_par_vspace_tl { - \tl_set:Nx \l_galley_display_end_par_vspace_tl + \tl_set:Ne \l_galley_display_end_par_vspace_tl { \skip_eval:n { \l_galley_display_end_par_vspace_tl } } } \tl_if_empty:NF \l_galley_display_end_vpenalty_tl { - \tl_set:Nx \l_galley_display_end_vpenalty_tl + \tl_set:Ne \l_galley_display_end_vpenalty_tl { \int_eval:n { \l_galley_display_end_vpenalty_tl } } } \tl_if_empty:NF \l_galley_display_end_vspace_tl { - \tl_set:Nx \l_galley_display_end_vspace_tl + \tl_set:Ne \l_galley_display_end_vspace_tl { \skip_eval:n { \l_galley_display_end_vspace_tl } } } } diff --git a/macros/latex/contrib/l3experimental/xgalley.pdf b/macros/latex/contrib/l3experimental/xgalley.pdf Binary files differindex 8fbd8fb0a0..eacea34401 100644 --- a/macros/latex/contrib/l3experimental/xgalley.pdf +++ b/macros/latex/contrib/l3experimental/xgalley.pdf diff --git a/macros/latex/contrib/l3kernel/CHANGELOG.md b/macros/latex/contrib/l3kernel/CHANGELOG.md index 43e0dce339..590abad03a 100644 --- a/macros/latex/contrib/l3kernel/CHANGELOG.md +++ b/macros/latex/contrib/l3kernel/CHANGELOG.md @@ -7,6 +7,32 @@ this project uses date-based 'snapshot' version identifiers. ## [Unreleased] +## [2023-10-10] + +### Added +- `\iow_shipout_e:Nn` +- Documentation for `\sys_if_timer_exist_p:` and `\sys_if_timer_exist:(TF)`. + They were supported since l3kernel 2021-05-25, along with `\sys_timer:`. +- l3doc.dtx: Support for footnotes in the function and variable environment +- Variants `\tl_if_single:c(TF)` and `\tl_if_single_p:c` (issue \#1272) +- Key properties `.str_(g)set_e:N` and `.tl_(g)set_e:N` + +### Changed +- Switch generally from `x`- to `e`-type variants +- Convert `\file_if_exist:n(TF)` to expandable status, + adding predicate version +- Standardise variants for `\prop_(g)pop:NnN(TF)` +- Standardise variants for `\prop_(g)put:Nnn` +- Standardise variants for `\prop_(g)put_if_new:Nnn` +- Standardise variants for `\prop_(g)remove:Nn` + +### Deprecated +- `\iow_shipout_x:Nn` in favor of `e`-type naming +- Key properties `.str_(g)set_x:N` and `.tl_(g)set_x:N` + +### Fixed +- Rare rounding error in divisions (issue \#1264) + ## [2023-08-29] ### Added @@ -1512,7 +1538,8 @@ this project uses date-based 'snapshot' version identifiers. - Step functions have been added for dim variables, e.g. `\dim_step_inline:nnnn` -[Unreleased]: https://github.com/latex3/latex3/compare/2023-08-29...HEAD +[Unreleased]: https://github.com/latex3/latex3/compare/2023-10-10...HEAD +[2023-10-10]: https://github.com/latex3/latex3/compare/2023-08-29...2023-10-10 [2023-08-29]: https://github.com/latex3/latex3/compare/2023-08-11...2023-08-29 [2023-08-11]: https://github.com/latex3/latex3/compare/2023-08-03...2023-08-11 [2023-08-03]: https://github.com/latex3/latex3/compare/2023-06-30...2023-08-03 diff --git a/macros/latex/contrib/l3kernel/README.md b/macros/latex/contrib/l3kernel/README.md index 7afb055297..7b368819d5 100644 --- a/macros/latex/contrib/l3kernel/README.md +++ b/macros/latex/contrib/l3kernel/README.md @@ -1,7 +1,7 @@ LaTeX3 Programming Conventions ============================== -Release 2023-08-29 +Release 2023-10-10 Overview -------- diff --git a/macros/latex/contrib/l3kernel/expl3.dtx b/macros/latex/contrib/l3kernel/expl3.dtx index 9adee097c5..ea13fbeacf 100644 --- a/macros/latex/contrib/l3kernel/expl3.dtx +++ b/macros/latex/contrib/l3kernel/expl3.dtx @@ -24,7 +24,7 @@ % %<*driver|generic|package|2ekernel> %</driver|generic|package|2ekernel> -\def\ExplFileDate{2023-08-29}% +\def\ExplFileDate{2023-10-10}% %<*driver> \documentclass[full]{l3doc} \usepackage{graphicx} @@ -51,7 +51,7 @@ % }^^A % } % -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % @@ -311,8 +311,9 @@ % or private. % % To allow clear separation of these two cases, the following convention -% is used. Private functions should be defined with |__| added to the beginning -% of the module name. Thus +% is used. In private functions and variables, two |_| characters are +% added to the start of the module name. On the other hand, public +% interfaces to not have these two |_| character. Thus % \begin{verbatim} % \module_foo:nnn % \end{verbatim} @@ -323,8 +324,9 @@ % is private to the module, and should \emph{not} be used outside of that % module. % -% Similarly, private variables should use |__| to separate scope and -% module name, such that +% For variables, to avoid three |_| in a row, the separator for the variable +% scope and any leading |_| for a private interface in the module part are +% combined. Thus % \begin{verbatim} % \l_module_foo_tl % \end{verbatim} @@ -334,12 +336,12 @@ % \end{verbatim} % is private. % -% \subsubsection{Using \texttt{@@} and \pkg{l3docstrip} to mark private code} +% \subsubsection{Using \texttt{@@} and \pkg{DocStrip} to mark private code} % % The formal syntax for internal functions allows clear separation of public % and private code, but includes redundant information (every internal function % or variable includes \texttt{__\meta{module}}). To aid programmers, the -% \pkg{l3docstrip} program introduces the syntax +% \pkg{DocStrip} program introduces the syntax % \begin{quote} % \ttfamily % |%<@@=|\meta{module}|>| @@ -354,7 +356,7 @@ % \tl_new:N \l_@@_my_tl % % \end{macrocode} % \end{verbatim} -% is converted by \pkg{l3docstrip} to +% is converted by \pkg{DocStrip} to % \begin{verbatim} % \cs_new:Npn \__foo_function:n #1 % ... @@ -365,13 +367,6 @@ % distinguish variables from functions in the source when the |@@| % convention is used. % -% Please note that you have to use the \pkg{l3docstrip} and -% \textbf{not} the \pkg{docstrip} program in your \texttt{.ins} files -% to make this work---the original \LaTeXe{} \pkg{docstrip} doesn't -% understand the \texttt{@@} and will just copy it into your code -% unmodified! -% -% % \subsubsection{Variables: declaration} % % In well-formed \pkg{expl3} code, variables should always be declared before @@ -653,20 +648,10 @@ % variables which have a \cs{\meta{var}_use:N} function (other than % boxes), and which therefore deliver a single % \enquote{value}. -% \item[x] Fully-expanded token or braced token list.\\ -% This means that the argument is expanded as in the replacement -% text of an~\tn{edef}, and the expansion is passed to the function as -% a braced token list. Expansion takes place until only unexpandable -% tokens are left. |x|-type arguments cannot be nested. % \item[e] Fully-expanded token or braced token list.\\ -% This expansion is very similar to |x|-type but may be nested and does -% not require that |#| tokens are doubled. It uses \tn{expanded} primitive. -% \item[f] Expanding the first token recursively in a braced token -% list.\\ Almost the same as the |x| type except here the token list -% is expanded fully until the first unexpandable token is found and -% the rest is left unchanged. Note that if this function finds a -% space at the beginning of the argument it gobbles it and does not -% expand the next token. +% This means that the argument is expanded as in the replacement +% text of a~\tn{message}, and the expansion is passed to the function as +% a braced token list. % \item[o] One-level-expanded token or braced token list.\\ % This means that the argument is expanded one level, as by % \tn{expandafter}, and the expansion is passed to the function as a @@ -674,6 +659,19 @@ % token list then only the first token in that list is expanded. % In general, using \texttt{V} should be preferred to using % \texttt{o} for simple variable retrieval. +% \item[f] Expanding the first token recursively in a braced token +% list.\\ Almost the same as the |e| type except here the token list +% is expanded fully until the first unexpandable token is found and +% the rest is left unchanged. Note that if this function finds a +% space at the beginning of the argument it gobbles it and does not +% expand the next token. +% \item[x] Fully-expanded token or braced token list.\\ +% This expansion is very similar to |e|-type but is not nestable, +% can only be used to create non-expandable functions, and requires +% that |#| tokens are doubled in the argument. In almost all cases, +% |e|-type should be preferred: retained largely for historical +% reasons, and should where possible be replaced by the |e|-type +% equivalent. % \end{description} % % \subsection{Simpler means better} @@ -761,17 +759,17 @@ % % To illustrate this let us suppose you have a \enquote{base function} % |\demo_cmd:Nnn| that takes three normal arguments, and that you need -% to construct the variant |\demo_cmd:cnx|, for which the first argument +% to construct the variant |\demo_cmd:cne|, for which the first argument % is used to construct the \emph{name} of a command, whilst the third % argument must be fully expanded before being passed to % |\demo_cmd:Nnn|. % To produce the variant form from the base form, simply use this: % \begin{verbatim} -% \cs_generate_variant:Nn \demo_cmd:Nnn { cnx } +% \cs_generate_variant:Nn \demo_cmd:Nnn { cne } % \end{verbatim} % This defines the variant form so that you can then write, for example: % \begin{verbatim} -% \demo_cmd:cnx { abc } { pq } { \rst \xyz } +% \demo_cmd:cne { abc } { pq } { \rst \xyz } % \end{verbatim} % rather than \ldots\ well, something like this! % \begin{verbatim} @@ -793,13 +791,13 @@ % \end{verbatim} % % Another example: you may wish to declare a function -% |\demo_cmd_b:xcxcx|, a variant of an existing function +% |\demo_cmd_b:enene|, a variant of an existing function % |\demo_cmd_b:nnnnn|, that fully % expands arguments 1,~3 and~5, and produces commands to pass as % arguments 2 and~4 using~\tn{csname}. % The definition you need is simply % \begin{verbatim} -% \cs_generate_variant:Nn \demo_cmd_b:nnnnn { xcxcx } +% \cs_generate_variant:Nn \demo_cmd_b:nnnnn { enene } % \end{verbatim} % % This extension mechanism is written so that if the same new form of @@ -854,7 +852,7 @@ % \begin{itemize} % \item \pkg{expl3} is mainly focused on programming. This means that % some areas still require the use of \LaTeXe{} internal macros. -% For example, you may well need \tn{@ifpackageloaded}, as there +% 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 @@ -1541,12 +1539,12 @@ } \cs_gset_protected:Npn \@expl@push@filename@@@@ { - \exp_args:Nx \__kernel_file_input_push:n + \exp_args:Ne \__kernel_file_input_push:n { \tl_to_str:N \@currname . \tl_to_str:N \@currext } - \tl_put_left:Nx \l_@@_status_stack_tl + \tl_put_left:Ne \l_@@_status_stack_tl { \bool_if:NTF \l__kernel_expl_bool { 1 } @@ -1742,7 +1740,7 @@ \cs_set_protected:Npn \ProvidesExplFileAux ##1##2##3##4 { \group_end: - \iow_log:x { File:~##1~##2~v##3~##4 } + \iow_log:e { File:~##1~##2~v##3~##4 } } \tex_input:D #1 .def \scan_stop: } diff --git a/macros/latex/contrib/l3kernel/expl3.pdf b/macros/latex/contrib/l3kernel/expl3.pdf Binary files differindex 33262bd828..af52bd35c0 100644 --- a/macros/latex/contrib/l3kernel/expl3.pdf +++ b/macros/latex/contrib/l3kernel/expl3.pdf diff --git a/macros/latex/contrib/l3kernel/interface3.pdf b/macros/latex/contrib/l3kernel/interface3.pdf Binary files differindex 61d451cc9e..f8431c7347 100644 --- a/macros/latex/contrib/l3kernel/interface3.pdf +++ b/macros/latex/contrib/l3kernel/interface3.pdf diff --git a/macros/latex/contrib/l3kernel/interface3.tex b/macros/latex/contrib/l3kernel/interface3.tex index 0198240396..79d4cec3e9 100644 --- a/macros/latex/contrib/l3kernel/interface3.tex +++ b/macros/latex/contrib/l3kernel/interface3.tex @@ -48,6 +48,8 @@ for those people who are interested. { \texttt{ \__codedoc_meta:n {#1} } } \ExplSyntaxOff +\newif\ifinterface +\interfacetrue \listfiles @@ -62,7 +64,7 @@ for those people who are interested. {latex-team@latex-project.org}% }% } -\date{Released 2023-08-29} +\date{Released 2023-10-10} \pagenumbering{roman} \maketitle diff --git a/macros/latex/contrib/l3kernel/l3basics.dtx b/macros/latex/contrib/l3kernel/l3basics.dtx index 17cb2467bf..6b484105fe 100644 --- a/macros/latex/contrib/l3kernel/l3basics.dtx +++ b/macros/latex/contrib/l3kernel/l3basics.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % @@ -200,7 +200,12 @@ % \subsection{Defining new functions using parameter text} % \label{sec:l3basics:defining-new-function-1} % -% \begin{function}{\cs_new:Npn, \cs_new:cpn, \cs_new:Npx, \cs_new:cpx} +% \begin{function} +% { +% \cs_new:Npn, \cs_new:cpn, +% \cs_new:Npe, \cs_new:cpe, +% \cs_new:Npx, \cs_new:cpx +% } % \begin{syntax} % \cs{cs_new:Npn} \meta{function} \meta{parameters} \Arg{code} % \end{syntax} @@ -214,6 +219,7 @@ % \begin{function} % { % \cs_new_nopar:Npn, \cs_new_nopar:cpn, +% \cs_new_nopar:Npe, \cs_new_nopar:cpe, % \cs_new_nopar:Npx, \cs_new_nopar:cpx % } % \begin{syntax} @@ -230,6 +236,7 @@ % \begin{function} % { % \cs_new_protected:Npn, \cs_new_protected:cpn, +% \cs_new_protected:Npe, \cs_new_protected:cpe, % \cs_new_protected:Npx, \cs_new_protected:cpx % } % \begin{syntax} @@ -247,6 +254,7 @@ % \begin{function} % { % \cs_new_protected_nopar:Npn, \cs_new_protected_nopar:cpn , +% \cs_new_protected_nopar:Npe, \cs_new_protected_nopar:cpe , % \cs_new_protected_nopar:Npx, \cs_new_protected_nopar:cpx % } % \begin{syntax} @@ -261,7 +269,12 @@ % and an error results if the \meta{function} is already defined. % \end{function} % -% \begin{function}{\cs_set:Npn, \cs_set:cpn, \cs_set:Npx, \cs_set:cpx} +% \begin{function} +% { +% \cs_set:Npn, \cs_set:cpn, +% \cs_set:Npe, \cs_set:cpe, +% \cs_set:Npx, \cs_set:cpx +% } % \begin{syntax} % \cs{cs_set:Npn} \meta{function} \meta{parameters} \Arg{code} % \end{syntax} @@ -275,6 +288,7 @@ % \begin{function} % { % \cs_set_nopar:Npn, \cs_set_nopar:cpn, +% \cs_set_nopar:Npe, \cs_set_nopar:cpe, % \cs_set_nopar:Npx, \cs_set_nopar:cpx % } % \begin{syntax} @@ -292,6 +306,7 @@ % \begin{function} % { % \cs_set_protected:Npn, \cs_set_protected:cpn, +% \cs_set_protected:Npe, \cs_set_protected:cpe, % \cs_set_protected:Npx, \cs_set_protected:cpx % } % \begin{syntax} @@ -308,6 +323,7 @@ % \begin{function} % { % \cs_set_protected_nopar:Npn, \cs_set_protected_nopar:cpn , +% \cs_set_protected_nopar:Npe, \cs_set_protected_nopar:cpe , % \cs_set_protected_nopar:Npx, \cs_set_protected_nopar:cpx , % } % \begin{syntax} @@ -323,7 +339,12 @@ % \texttt{x}-type or \texttt{e}-type argument. % \end{function} % -% \begin{function}{\cs_gset:Npn, \cs_gset:cpn, \cs_gset:Npx, \cs_gset:cpx} +% \begin{function} +% { +% \cs_gset:Npn, \cs_gset:cpn, +% \cs_gset:Npe, \cs_gset:cpe, +% \cs_gset:Npx, \cs_gset:cpx +% } % \begin{syntax} % \cs{cs_gset:Npn} \meta{function} \meta{parameters} \Arg{code} % \end{syntax} @@ -338,6 +359,7 @@ % \begin{function} % { % \cs_gset_nopar:Npn, \cs_gset_nopar:cpn, +% \cs_gset_nopar:Npe, \cs_gset_nopar:cpe, % \cs_gset_nopar:Npx, \cs_gset_nopar:cpx % } % \begin{syntax} @@ -355,6 +377,7 @@ % \begin{function} % { % \cs_gset_protected:Npn, \cs_gset_protected:cpn, +% \cs_gset_protected:Npe, \cs_gset_protected:cpe, % \cs_gset_protected:Npx, \cs_gset_protected:cpx % } % \begin{syntax} @@ -372,6 +395,7 @@ % \begin{function} % { % \cs_gset_protected_nopar:Npn, \cs_gset_protected_nopar:cpn, +% \cs_gset_protected_nopar:Npe, \cs_gset_protected_nopar:cpe, % \cs_gset_protected_nopar:Npx, \cs_gset_protected_nopar:cpx % } % \begin{syntax} @@ -393,7 +417,7 @@ % \begin{function} % { % \cs_new:Nn, \cs_new:cn, -% \cs_new:Nx, \cs_new:cx +% \cs_new:Ne, \cs_new:ce % } % \begin{syntax} % \cs{cs_new:Nn} \meta{function} \Arg{code} @@ -409,7 +433,7 @@ % \begin{function} % { % \cs_new_nopar:Nn, \cs_new_nopar:cn, -% \cs_new_nopar:Nx, \cs_new_nopar:cx +% \cs_new_nopar:Ne, \cs_new_nopar:ce % } % \begin{syntax} % \cs{cs_new_nopar:Nn} \meta{function} \Arg{code} @@ -426,7 +450,7 @@ % \begin{function} % { % \cs_new_protected:Nn, \cs_new_protected:cn, -% \cs_new_protected:Nx, \cs_new_protected:cx +% \cs_new_protected:Ne, \cs_new_protected:ce % } % \begin{syntax} % \cs{cs_new_protected:Nn} \meta{function} \Arg{code} @@ -443,7 +467,7 @@ % \begin{function} % { % \cs_new_protected_nopar:Nn, \cs_new_protected_nopar:cn, -% \cs_new_protected_nopar:Nx, \cs_new_protected_nopar:cx +% \cs_new_protected_nopar:Ne, \cs_new_protected_nopar:ce % } % \begin{syntax} % \cs{cs_new_protected_nopar:Nn} \meta{function} \Arg{code} @@ -461,7 +485,7 @@ % \begin{function} % { % \cs_set:Nn, \cs_set:cn, -% \cs_set:Nx, \cs_set:cx +% \cs_set:Ne, \cs_set:ce % } % \begin{syntax} % \cs{cs_set:Nn} \meta{function} \Arg{code} @@ -478,7 +502,7 @@ % \begin{function} % { % \cs_set_nopar:Nn, \cs_set_nopar:cn, -% \cs_set_nopar:Nx, \cs_set_nopar:cx +% \cs_set_nopar:Ne, \cs_set_nopar:ce % } % \begin{syntax} % \cs{cs_set_nopar:Nn} \meta{function} \Arg{code} @@ -496,7 +520,7 @@ % \begin{function} % { % \cs_set_protected:Nn, \cs_set_protected:cn, -% \cs_set_protected:Nx, \cs_set_protected:cx +% \cs_set_protected:Ne, \cs_set_protected:ce % } % \begin{syntax} % \cs{cs_set_protected:Nn} \meta{function} \Arg{code} @@ -514,7 +538,7 @@ % \begin{function} % { % \cs_set_protected_nopar:Nn, \cs_set_protected_nopar:cn, -% \cs_set_protected_nopar:Nx, \cs_set_protected_nopar:cx +% \cs_set_protected_nopar:Ne, \cs_set_protected_nopar:ce % } % \begin{syntax} % \cs{cs_set_protected_nopar:Nn} \meta{function} \Arg{code} @@ -533,7 +557,7 @@ % \begin{function} % { % \cs_gset:Nn, \cs_gset:cn, -% \cs_gset:Nx, \cs_gset:cx +% \cs_gset:Ne, \cs_gset:ce % } % \begin{syntax} % \cs{cs_gset:Nn} \meta{function} \Arg{code} @@ -549,7 +573,7 @@ % \begin{function} % { % \cs_gset_nopar:Nn, \cs_gset_nopar:cn, -% \cs_gset_nopar:Nx, \cs_gset_nopar:cx +% \cs_gset_nopar:Ne, \cs_gset_nopar:ce % } % \begin{syntax} % \cs{cs_gset_nopar:Nn} \meta{function} \Arg{code} @@ -566,7 +590,7 @@ % \begin{function} % { % \cs_gset_protected:Nn, \cs_gset_protected:cn, -% \cs_gset_protected:Nx, \cs_gset_protected:cx +% \cs_gset_protected:Ne, \cs_gset_protected:ce % } % \begin{syntax} % \cs{cs_gset_protected:Nn} \meta{function} \Arg{code} @@ -583,7 +607,7 @@ % \begin{function} % { % \cs_gset_protected_nopar:Nn, \cs_gset_protected_nopar:cn, -% \cs_gset_protected_nopar:Nx, \cs_gset_protected_nopar:cx +% \cs_gset_protected_nopar:Ne, \cs_gset_protected_nopar:ce % } % \begin{syntax} % \cs{cs_gset_protected_nopar:Nn} \meta{function} \Arg{code} @@ -1034,15 +1058,6 @@ % \end{texnote} % \end{function} % -% \begin{function}[updated = 2011-12-31]{\use:x} -% \begin{syntax} -% \cs{use:x} \Arg{expandable tokens} -% \end{syntax} -% Fully expands the \meta{expandable tokens} and inserts the -% result into the input stream at the current location. -% Any hash characters (|#|) in the argument must be doubled. -% \end{function} -% % \subsection{Selecting tokens from delimited arguments} % % A different kind of function for selecting tokens from the token @@ -1520,55 +1535,63 @@ % % \begin{macro} % { -% \cs_set_nopar:Npn , \cs_set_nopar:Npx , -% \cs_set:Npn , \cs_set:Npx , -% \cs_set_protected_nopar:Npn , \cs_set_protected_nopar:Npx , -% \cs_set_protected:Npn , \cs_set_protected:Npx +% \cs_set_nopar:Npn , \cs_set_nopar:Npe , \cs_set_nopar:Npx , +% \cs_set:Npn , \cs_set:Npe , \cs_set:Npx , +% \cs_set_protected_nopar:Npn , \cs_set_protected_nopar:Npe , \cs_set_protected_nopar:Npx , +% \cs_set_protected:Npn , \cs_set_protected:Npe , \cs_set_protected:Npx % } % All assignment functions in \LaTeX3 should be naturally protected; % after all, the \TeX{} primitives for assignments are and it can be % a cause of problems if others aren't. % \begin{macrocode} \tex_let:D \cs_set_nopar:Npn \tex_def:D +\tex_let:D \cs_set_nopar:Npe \tex_edef:D \tex_let:D \cs_set_nopar:Npx \tex_edef:D \tex_protected:D \tex_long:D \tex_def:D \cs_set:Npn { \tex_long:D \tex_def:D } -\tex_protected:D \tex_long:D \tex_def:D \cs_set:Npx +\tex_protected:D \tex_long:D \tex_def:D \cs_set:Npe { \tex_long:D \tex_edef:D } +\tex_let:D \cs_set:Npx \cs_set:Npe \tex_protected:D \tex_long:D \tex_def:D \cs_set_protected_nopar:Npn { \tex_protected:D \tex_def:D } -\tex_protected:D \tex_long:D \tex_def:D \cs_set_protected_nopar:Npx +\tex_protected:D \tex_long:D \tex_def:D \cs_set_protected_nopar:Npe { \tex_protected:D \tex_edef:D } +\tex_let:D \cs_set_protected_nopar:Npx \cs_set_protected_nopar:Npe \tex_protected:D \tex_long:D \tex_def:D \cs_set_protected:Npn { \tex_protected:D \tex_long:D \tex_def:D } -\tex_protected:D \tex_long:D \tex_def:D \cs_set_protected:Npx +\tex_protected:D \tex_long:D \tex_def:D \cs_set_protected:Npe { \tex_protected:D \tex_long:D \tex_edef:D } +\tex_let:D \cs_set_protected:Npx \cs_set_protected:Npe % \end{macrocode} % \end{macro} % % \begin{macro} % { -% \cs_gset_nopar:Npn , \cs_gset_nopar:Npx , -% \cs_gset:Npn , \cs_gset:Npx , -% \cs_gset_protected_nopar:Npn , \cs_gset_protected_nopar:Npx , -% \cs_gset_protected:Npn , \cs_gset_protected:Npx +% \cs_gset_nopar:Npn , \cs_gset_nopar:Npe , \cs_gset_nopar:Npx , +% \cs_gset:Npn , \cs_gset:Npe , \cs_gset:Npx , +% \cs_gset_protected_nopar:Npn , \cs_gset_protected_nopar:Npe , \cs_gset_protected_nopar:Npx , +% \cs_gset_protected:Npn , \cs_gset_protected:Npe , \cs_gset_protected:Npx % } % Global versions of the above functions. % \begin{macrocode} \tex_let:D \cs_gset_nopar:Npn \tex_gdef:D +\tex_let:D \cs_gset_nopar:Npe \tex_xdef:D \tex_let:D \cs_gset_nopar:Npx \tex_xdef:D \cs_set_protected:Npn \cs_gset:Npn { \tex_long:D \tex_gdef:D } -\cs_set_protected:Npn \cs_gset:Npx +\cs_set_protected:Npn \cs_gset:Npe { \tex_long:D \tex_xdef:D } +\tex_let:D \cs_gset:Npx \cs_gset:Npe \cs_set_protected:Npn \cs_gset_protected_nopar:Npn { \tex_protected:D \tex_gdef:D } -\cs_set_protected:Npn \cs_gset_protected_nopar:Npx +\cs_set_protected:Npn \cs_gset_protected_nopar:Npe { \tex_protected:D \tex_xdef:D } +\tex_let:D \cs_gset_protected_nopar:Npx \cs_gset_protected_nopar:Npe \cs_set_protected:Npn \cs_gset_protected:Npn { \tex_protected:D \tex_long:D \tex_gdef:D } -\cs_set_protected:Npn \cs_gset_protected:Npx +\cs_set_protected:Npn \cs_gset_protected:Npe { \tex_protected:D \tex_long:D \tex_xdef:D } +\tex_let:D \cs_gset_protected:Npx \cs_gset_protected:Npe % \end{macrocode} % \end{macro} % @@ -1921,7 +1944,7 @@ { \@@_generate_conditional_parm:NNNpnn \cs_new_protected:Npn p } \cs_set_protected:Npn \@@_generate_conditional_parm:NNNpnn #1#2#3#4# { - \use:x + \use:e { \@@_generate_conditional:nnNNNnnn \cs_split_function:N #3 @@ -1973,7 +1996,7 @@ { \@@_generate_conditional_count:NNNnn \cs_new_protected:Npn p } \cs_set_protected:Npn \@@_generate_conditional_count:NNNnn #1#2#3 { - \use:x + \use:e { \@@_generate_conditional_count:nnNNNnn \cs_split_function:N #3 @@ -1986,7 +2009,7 @@ { \@@_generate_conditional:nnNNNnnn {#1} {#2} #3 #4 #5 } { \tl_count:n {#2} } { - \msg_error:nnxx { kernel } { bad-number-of-arguments } + \msg_error:nnee { kernel } { bad-number-of-arguments } { \token_to_str:c { #1 : #2 } } { \tl_count:n {#2} } \use_none:nn @@ -2024,11 +2047,11 @@ \cs_set_protected:Npn \@@_generate_conditional:nnNNNnnn #1#2#3#4#5#6#7#8 { \if_meaning:w \c_false_bool #3 - \msg_error:nnx { kernel } { missing-colon } + \msg_error:nne { kernel } { missing-colon } { \token_to_str:c {#1} } \exp_after:wN \use_none:nn \fi: - \use:x + \use:e { \exp_not:N \@@_generate_conditional:NNnnnnNw \exp_not:n { #4 #5 {#1} {#2} {#6} } @@ -2064,7 +2087,7 @@ \use:c { @@_generate_ #8 _form:wNNnnnnN } \tl_if_empty:nF {#8} { - \msg_error:nnxx + \msg_error:nnee { kernel } { conditional-form-unknown } {#8} { \token_to_str:c { #3 : #4 } } } @@ -2118,7 +2141,7 @@ { #7 \@@_p_true:w \fi: \c_false_bool } } { - \msg_error:nnx { kernel } { protected-predicate } + \msg_error:nne { kernel } { protected-predicate } { \token_to_str:c { #4 _p: #5 } } } } @@ -2176,7 +2199,7 @@ { \@@_set_eq_conditional:NNNn \cs_new_eq:cc } \cs_set_protected:Npn \@@_set_eq_conditional:NNNn #1#2#3#4 { - \use:x + \use:e { \exp_not:N \@@_set_eq_conditional:nnNnnNNw \cs_split_function:N #2 @@ -2216,12 +2239,12 @@ \cs_set_protected:Npn \@@_set_eq_conditional:nnNnnNNw #1#2#3#4#5#6 { \if_meaning:w \c_false_bool #3 - \msg_error:nnx { kernel } { missing-colon } + \msg_error:nne { kernel } { missing-colon } { \token_to_str:c {#1} } \exp_after:wN \@@_use_none_delimit_by_q_recursion_stop:w \fi: \if_meaning:w \c_false_bool #6 - \msg_error:nnx { kernel } { missing-colon } + \msg_error:nne { kernel } { missing-colon } { \token_to_str:c {#4} } \exp_after:wN \@@_use_none_delimit_by_q_recursion_stop:w \fi: @@ -2235,7 +2258,7 @@ \use:c { @@_set_eq_conditional_ #6 _form:wNnnnn } \tl_if_empty:nF {#6} { - \msg_error:nnxx + \msg_error:nnee { kernel } { conditional-form-unknown } {#6} { \token_to_str:c { #1 : #2 } } } @@ -2554,14 +2577,14 @@ % only temporary, they will be redefined later on. % % \begin{macro} -% {\msg_error:nnxx, \msg_error:nnx, \msg_error:nn} +% {\msg_error:nnee, \msg_error:nne, \msg_error:nn} % If an internal error occurs before \LaTeX3 has loaded \pkg{l3msg} then % the code should issue a usable if terse error message and halt. This % can only happen if a coding error is made by the team, so this is % a reasonable response. Setting the \tn{newlinechar} is needed, to % turn |^^J| into a proper line break in plain \TeX{}. % \begin{macrocode} -\cs_set_protected:Npn \msg_error:nnxx #1#2#3#4 +\cs_set_protected:Npn \msg_error:nnee #1#2#3#4 { \tex_newlinechar:D = `\^^J \scan_stop: \tex_errmessage:D @@ -2574,10 +2597,10 @@ } \tex_end:D } -\cs_set_protected:Npn \msg_error:nnx #1#2#3 - { \msg_error:nnxx {#1} {#2} {#3} { } } +\cs_set_protected:Npn \msg_error:nne #1#2#3 + { \msg_error:nnee {#1} {#2} {#3} { } } \cs_set_protected:Npn \msg_error:nn #1#2 - { \msg_error:nnxx {#1} {#2} { } { } } + { \msg_error:nnee {#1} {#2} { } { } } % \end{macrocode} % \end{macro} % @@ -2589,14 +2612,14 @@ % \end{macrocode} % \end{macro} % -% \begin{macro}[documented-as=\iow_log:n]{\iow_log:x, \iow_term:x} +% \begin{macro}[documented-as=\iow_log:n]{\iow_log:e, \iow_term:e} % We define a routine to write only to the log file. And a % similar one for writing to both the log file and the terminal. -% These will be redefined later by \pkg{l3io}. +% These will be redefined later by \pkg{l3file}. % \begin{macrocode} -\cs_set_protected:Npn \iow_log:x +\cs_set_protected:Npn \iow_log:e { \tex_immediate:D \tex_write:D -1 } -\cs_set_protected:Npn \iow_term:x +\cs_set_protected:Npn \iow_term:e { \tex_immediate:D \tex_write:D 16 } % \end{macrocode} % \end{macro} @@ -2614,7 +2637,7 @@ { \cs_if_free:NF #1 { - \msg_error:nnxx { kernel } { command-already-defined } + \msg_error:nnee { kernel } { command-already-defined } { \token_to_str:N #1 } { \token_to_meaning:N #1 } } } @@ -2631,10 +2654,10 @@ % % \begin{macro} % { -% \cs_new_nopar:Npn , \cs_new_nopar:Npx , -% \cs_new:Npn , \cs_new:Npx , -% \cs_new_protected_nopar:Npn , \cs_new_protected_nopar:Npx , -% \cs_new_protected:Npn , \cs_new_protected:Npx +% \cs_new_nopar:Npn , \cs_new_nopar:Npe , \cs_new_nopar:Npx , +% \cs_new:Npn , \cs_new:Npe , \cs_new:Npx , +% \cs_new_protected_nopar:Npn , \cs_new_protected_nopar:Npe , \cs_new_protected_nopar:Npx , +% \cs_new_protected:Npn , \cs_new_protected:Npe , \cs_new_protected:Npx % } % \begin{macro}{\@@_tmp:w} % Function which check that the control sequence is free before @@ -2649,12 +2672,16 @@ } } \@@_tmp:w \cs_new_nopar:Npn \cs_gset_nopar:Npn +\@@_tmp:w \cs_new_nopar:Npe \cs_gset_nopar:Npe \@@_tmp:w \cs_new_nopar:Npx \cs_gset_nopar:Npx \@@_tmp:w \cs_new:Npn \cs_gset:Npn +\@@_tmp:w \cs_new:Npe \cs_gset:Npe \@@_tmp:w \cs_new:Npx \cs_gset:Npx \@@_tmp:w \cs_new_protected_nopar:Npn \cs_gset_protected_nopar:Npn +\@@_tmp:w \cs_new_protected_nopar:Npe \cs_gset_protected_nopar:Npe \@@_tmp:w \cs_new_protected_nopar:Npx \cs_gset_protected_nopar:Npx \@@_tmp:w \cs_new_protected:Npn \cs_gset_protected:Npn +\@@_tmp:w \cs_new_protected:Npe \cs_gset_protected:Npe \@@_tmp:w \cs_new_protected:Npx \cs_gset_protected:Npx % \end{macrocode} % \end{macro} @@ -2662,9 +2689,9 @@ % % \begin{macro}[documented-as=\cs_set_nopar:Npn] % { -% \cs_set_nopar:cpn , \cs_set_nopar:cpx , -% \cs_gset_nopar:cpn , \cs_gset_nopar:cpx , -% \cs_new_nopar:cpn , \cs_new_nopar:cpx +% \cs_set_nopar:cpn , \cs_set_nopar:cpe , \cs_set_nopar:cpx , +% \cs_gset_nopar:cpn , \cs_gset_nopar:cpe , \cs_gset_nopar:cpx , +% \cs_new_nopar:cpn , \cs_new_nopar:cpe , \cs_new_nopar:cpx % } % Like \cs{cs_set_nopar:Npn} and \cs{cs_new_nopar:Npn}, except that the % first argument consists of the sequence of characters that should @@ -2680,64 +2707,76 @@ \cs_set:Npn \@@_tmp:w #1#2 { \cs_new_protected_nopar:Npn #1 { \exp_args:Nc #2 } } \@@_tmp:w \cs_set_nopar:cpn \cs_set_nopar:Npn +\@@_tmp:w \cs_set_nopar:cpe \cs_set_nopar:Npe \@@_tmp:w \cs_set_nopar:cpx \cs_set_nopar:Npx \@@_tmp:w \cs_gset_nopar:cpn \cs_gset_nopar:Npn +\@@_tmp:w \cs_gset_nopar:cpe \cs_gset_nopar:Npe \@@_tmp:w \cs_gset_nopar:cpx \cs_gset_nopar:Npx \@@_tmp:w \cs_new_nopar:cpn \cs_new_nopar:Npn +\@@_tmp:w \cs_new_nopar:cpe \cs_new_nopar:Npe \@@_tmp:w \cs_new_nopar:cpx \cs_new_nopar:Npx % \end{macrocode} % \end{macro} % % \begin{macro}[documented-as=\cs_set:Npn] % { -% \cs_set:cpn , \cs_set:cpx , -% \cs_gset:cpn , \cs_gset:cpx , -% \cs_new:cpn , \cs_new:cpx +% \cs_set:cpn , \cs_set:cpe , \cs_set:cpx , +% \cs_gset:cpn , \cs_gset:cpe , \cs_gset:cpx , +% \cs_new:cpn , \cs_new:cpe , \cs_new:cpx % } % Variants of the \cs{cs_set:Npn} versions which make a csname out % of the first arguments. We may also do this globally. % \begin{macrocode} \@@_tmp:w \cs_set:cpn \cs_set:Npn +\@@_tmp:w \cs_set:cpe \cs_set:Npe \@@_tmp:w \cs_set:cpx \cs_set:Npx \@@_tmp:w \cs_gset:cpn \cs_gset:Npn +\@@_tmp:w \cs_gset:cpe \cs_gset:Npe \@@_tmp:w \cs_gset:cpx \cs_gset:Npx \@@_tmp:w \cs_new:cpn \cs_new:Npn +\@@_tmp:w \cs_new:cpe \cs_new:Npe \@@_tmp:w \cs_new:cpx \cs_new:Npx % \end{macrocode} % \end{macro} % % \begin{macro}[documented-as=\cs_set_protected_nopar:Npn] % { -% \cs_set_protected_nopar:cpn , \cs_set_protected_nopar:cpx , -% \cs_gset_protected_nopar:cpn , \cs_gset_protected_nopar:cpx , -% \cs_new_protected_nopar:cpn , \cs_new_protected_nopar:cpx +% \cs_set_protected_nopar:cpn , \cs_set_protected_nopar:cpe , \cs_set_protected_nopar:cpx , +% \cs_gset_protected_nopar:cpn , \cs_gset_protected_nopar:cpe , \cs_gset_protected_nopar:cpx , +% \cs_new_protected_nopar:cpn , \cs_new_protected_nopar:cpe , \cs_new_protected_nopar:cpx % } % Variants of the \cs{cs_set_protected_nopar:Npn} versions which make % a csname out of the first arguments. We may also do this globally. % \begin{macrocode} \@@_tmp:w \cs_set_protected_nopar:cpn \cs_set_protected_nopar:Npn +\@@_tmp:w \cs_set_protected_nopar:cpe \cs_set_protected_nopar:Npe \@@_tmp:w \cs_set_protected_nopar:cpx \cs_set_protected_nopar:Npx \@@_tmp:w \cs_gset_protected_nopar:cpn \cs_gset_protected_nopar:Npn +\@@_tmp:w \cs_gset_protected_nopar:cpe \cs_gset_protected_nopar:Npe \@@_tmp:w \cs_gset_protected_nopar:cpx \cs_gset_protected_nopar:Npx \@@_tmp:w \cs_new_protected_nopar:cpn \cs_new_protected_nopar:Npn +\@@_tmp:w \cs_new_protected_nopar:cpe \cs_new_protected_nopar:Npe \@@_tmp:w \cs_new_protected_nopar:cpx \cs_new_protected_nopar:Npx % \end{macrocode} % \end{macro} % % \begin{macro}[documented-as=\cs_set_protected:Npn] % { -% \cs_set_protected:cpn , \cs_set_protected:cpx , -% \cs_gset_protected:cpn , \cs_gset_protected:cpx , -% \cs_new_protected:cpn , \cs_new_protected:cpx +% \cs_set_protected:cpn , \cs_set_protected:cpe , \cs_set_protected:cpx , +% \cs_gset_protected:cpn , \cs_gset_protected:cpe , \cs_gset_protected:cpx , +% \cs_new_protected:cpn , \cs_new_protected:cpe , \cs_new_protected:cpx % } % Variants of the \cs{cs_set_protected:Npn} versions which make a csname % out of the first arguments. We may also do this globally. % \begin{macrocode} \@@_tmp:w \cs_set_protected:cpn \cs_set_protected:Npn +\@@_tmp:w \cs_set_protected:cpe \cs_set_protected:Npe \@@_tmp:w \cs_set_protected:cpx \cs_set_protected:Npx \@@_tmp:w \cs_gset_protected:cpn \cs_gset_protected:Npn +\@@_tmp:w \cs_gset_protected:cpe \cs_gset_protected:Npe \@@_tmp:w \cs_gset_protected:cpx \cs_gset_protected:Npx \@@_tmp:w \cs_new_protected:cpn \cs_new_protected:Npn +\@@_tmp:w \cs_new_protected:cpe \cs_new_protected:Npe \@@_tmp:w \cs_new_protected:cpx \cs_new_protected:Npx % \end{macrocode} % \end{macro} @@ -2827,7 +2866,7 @@ % \begin{macrocode} \cs_set_protected:Npn \__kernel_cs_parm_from_arg_count:nnF #1#2 { - \exp_args:Nx \@@_parm_from_arg_count_test:nnF + \exp_args:Ne \@@_parm_from_arg_count_test:nnF { \exp_after:wN \exp_not:n \if_case:w \int_eval:n {#2} @@ -2914,7 +2953,7 @@ { \__kernel_cs_parm_from_arg_count:nnF { \use:nnn #2 #1 } {#3} { - \msg_error:nnxx { kernel } { bad-number-of-arguments } + \msg_error:nnee { kernel } { bad-number-of-arguments } { \token_to_str:N #1 } { \int_eval:n {#3} } \use_none:n } @@ -2944,18 +2983,18 @@ % % \begin{macro} % { -% \cs_set:Nn , \cs_set:Nx , -% \cs_set_nopar:Nn , \cs_set_nopar:Nx , -% \cs_set_protected:Nn , \cs_set_protected:Nx , -% \cs_set_protected_nopar:Nn , \cs_set_protected_nopar:Nx , -% \cs_gset:Nn , \cs_gset:Nx , -% \cs_gset_nopar:Nn , \cs_gset_nopar:Nx , -% \cs_gset_protected:Nn , \cs_gset_protected:Nx , -% \cs_gset_protected_nopar:Nn , \cs_gset_protected_nopar:Nx , -% \cs_new:Nn , \cs_new:Nx , -% \cs_new_nopar:Nn , \cs_new_nopar:Nx , -% \cs_new_protected:Nn , \cs_new_protected:Nx , -% \cs_new_protected_nopar:Nn , \cs_new_protected_nopar:Nx , +% \cs_set:Nn , \cs_set:Ne , \cs_set:Nx , +% \cs_set_nopar:Nn , \cs_set_nopar:Ne , \cs_set_nopar:Nx , +% \cs_set_protected:Nn , \cs_set_protected:Ne , \cs_set_protected:Nx , +% \cs_set_protected_nopar:Nn , \cs_set_protected_nopar:Ne , \cs_set_protected_nopar:Nx , +% \cs_gset:Nn , \cs_gset:Ne , \cs_gset:Nx , +% \cs_gset_nopar:Nn , \cs_gset_nopar:Ne , \cs_gset_nopar:Nx , +% \cs_gset_protected:Nn , \cs_gset_protected:Ne , \cs_gset_protected:Nx , +% \cs_gset_protected_nopar:Nn , \cs_gset_protected_nopar:Ne , \cs_gset_protected_nopar:Nx , +% \cs_new:Nn , \cs_new:Ne , \cs_new:Nx , +% \cs_new_nopar:Nn , \cs_new_nopar:Ne , \cs_new_nopar:Nx , +% \cs_new_protected:Nn , \cs_new_protected:Ne , \cs_new_protected:Nx , +% \cs_new_protected_nopar:Nn , \cs_new_protected_nopar:Ne , \cs_new_protected_nopar:Nx , % } % We want to define \cs{cs_set:Nn} as % \begin{verbatim} @@ -2980,7 +3019,7 @@ } \cs_new_protected:Npn \@@_generate_from_signature:NNn #1#2 { - \use:x + \use:e { \@@_generate_from_signature:nnNNNn \cs_split_function:N #2 @@ -2995,14 +3034,14 @@ { \tl_map_function:nN {#2} \@@_generate_from_signature:n } \tl_if_empty:oF \@@_tmp:w { - \msg_error:nnxxx { kernel } { non-base-function } + \msg_error:nneee { kernel } { non-base-function } { \token_to_str:N #5 } {#2} { \@@_tmp:w } } \cs_generate_from_arg_count:NNnn #5 #4 { \tl_count:n {#2} } {#6} } { - \msg_error:nnx { kernel } { missing-colon } + \msg_error:nne { kernel } { missing-colon } { \token_to_str:N #5 } } } @@ -3015,46 +3054,58 @@ % Then we define the 24 variants beginning with |N|. % \begin{macrocode} \@@_tmp:w { set } { Nn } { Npn } +\@@_tmp:w { set } { Ne } { Npe } \@@_tmp:w { set } { Nx } { Npx } \@@_tmp:w { set_nopar } { Nn } { Npn } +\@@_tmp:w { set_nopar } { Ne } { Npe } \@@_tmp:w { set_nopar } { Nx } { Npx } \@@_tmp:w { set_protected } { Nn } { Npn } +\@@_tmp:w { set_protected } { Ne } { Npe } \@@_tmp:w { set_protected } { Nx } { Npx } \@@_tmp:w { set_protected_nopar } { Nn } { Npn } +\@@_tmp:w { set_protected_nopar } { Ne } { Npe } \@@_tmp:w { set_protected_nopar } { Nx } { Npx } \@@_tmp:w { gset } { Nn } { Npn } +\@@_tmp:w { gset } { Ne } { Npe } \@@_tmp:w { gset } { Nx } { Npx } \@@_tmp:w { gset_nopar } { Nn } { Npn } +\@@_tmp:w { gset_nopar } { Ne } { Npe } \@@_tmp:w { gset_nopar } { Nx } { Npx } \@@_tmp:w { gset_protected } { Nn } { Npn } +\@@_tmp:w { gset_protected } { Ne } { Npe } \@@_tmp:w { gset_protected } { Nx } { Npx } \@@_tmp:w { gset_protected_nopar } { Nn } { Npn } +\@@_tmp:w { gset_protected_nopar } { Ne } { Npe } \@@_tmp:w { gset_protected_nopar } { Nx } { Npx } \@@_tmp:w { new } { Nn } { Npn } +\@@_tmp:w { new } { Ne } { Npe } \@@_tmp:w { new } { Nx } { Npx } \@@_tmp:w { new_nopar } { Nn } { Npn } +\@@_tmp:w { new_nopar } { Ne } { Npe } \@@_tmp:w { new_nopar } { Nx } { Npx } \@@_tmp:w { new_protected } { Nn } { Npn } +\@@_tmp:w { new_protected } { Ne } { Npe } \@@_tmp:w { new_protected } { Nx } { Npx } \@@_tmp:w { new_protected_nopar } { Nn } { Npn } +\@@_tmp:w { new_protected_nopar } { Ne } { Npe } \@@_tmp:w { new_protected_nopar } { Nx } { Npx } % \end{macrocode} % \end{macro} % % \begin{macro}[documented-as=\cs_set:Nn] % { -% \cs_set:cn , \cs_set:cx , -% \cs_set_nopar:cn , \cs_set_nopar:cx , -% \cs_set_protected:cn , \cs_set_protected:cx , -% \cs_set_protected_nopar:cn , \cs_set_protected_nopar:cx , -% \cs_gset:cn , \cs_gset:cx , -% \cs_gset_nopar:cn , \cs_gset_nopar:cx , -% \cs_gset_protected:cn , \cs_gset_protected:cx , -% \cs_gset_protected_nopar:cn , \cs_gset_protected_nopar:cx , -% \cs_new:cn , \cs_new:cx , -% \cs_new_nopar:cn , \cs_new_nopar:cx , -% \cs_new_protected:cn , \cs_new_protected:cx , -% \cs_new_protected_nopar:cn , \cs_new_protected_nopar:cx , +% \cs_set:cn , \cs_set:ce , \cs_set:cx , +% \cs_set_nopar:cn , \cs_set_nopar:ce , \cs_set_nopar:cx , +% \cs_set_protected:cn , \cs_set_protected:ce , \cs_set_protected:cx , +% \cs_set_protected_nopar:cn , \cs_set_protected_nopar:ce , \cs_set_protected_nopar:cx , +% \cs_gset:cn , \cs_gset:ce , \cs_gset:cx , +% \cs_gset_nopar:cn , \cs_gset_nopar:ce , \cs_gset_nopar:cx , +% \cs_gset_protected:cn , \cs_gset_protected:ce , \cs_gset_protected:cx , +% \cs_gset_protected_nopar:cn , \cs_gset_protected_nopar:ce , \cs_gset_protected_nopar:cx , +% \cs_new:cn , \cs_new:ce , \cs_new:cx , +% \cs_new_nopar:cn , \cs_new_nopar:ce , \cs_new_nopar:cx , +% \cs_new_protected:cn , \cs_new_protected:ce , \cs_new_protected:cx , +% \cs_new_protected_nopar:cn , \cs_new_protected_nopar:ce , \cs_new_protected_nopar:cx , % } % The 24 |c| variants simply use \cs{exp_args:Nc}. % \begin{macrocode} @@ -3067,28 +3118,40 @@ } } \@@_tmp:w { set } { n } +\@@_tmp:w { set } { e } \@@_tmp:w { set } { x } \@@_tmp:w { set_nopar } { n } +\@@_tmp:w { set_nopar } { e } \@@_tmp:w { set_nopar } { x } \@@_tmp:w { set_protected } { n } +\@@_tmp:w { set_protected } { e } \@@_tmp:w { set_protected } { x } \@@_tmp:w { set_protected_nopar } { n } +\@@_tmp:w { set_protected_nopar } { e } \@@_tmp:w { set_protected_nopar } { x } \@@_tmp:w { gset } { n } +\@@_tmp:w { gset } { e } \@@_tmp:w { gset } { x } \@@_tmp:w { gset_nopar } { n } +\@@_tmp:w { gset_nopar } { e } \@@_tmp:w { gset_nopar } { x } \@@_tmp:w { gset_protected } { n } +\@@_tmp:w { gset_protected } { e } \@@_tmp:w { gset_protected } { x } \@@_tmp:w { gset_protected_nopar } { n } +\@@_tmp:w { gset_protected_nopar } { e } \@@_tmp:w { gset_protected_nopar } { x } \@@_tmp:w { new } { n } +\@@_tmp:w { new } { e } \@@_tmp:w { new } { x } \@@_tmp:w { new_nopar } { n } +\@@_tmp:w { new_nopar } { e } \@@_tmp:w { new_nopar } { x } \@@_tmp:w { new_protected } { n } +\@@_tmp:w { new_protected } { e } \@@_tmp:w { new_protected } { x } \@@_tmp:w { new_protected_nopar } { n } +\@@_tmp:w { new_protected_nopar } { e } \@@_tmp:w { new_protected_nopar } { x } % \end{macrocode} % \end{macro} @@ -3133,7 +3196,7 @@ \cs_if_exist:NTF #1 {#2} { - \msg_error:nnx { kernel } { variable-not-defined } + \msg_error:nne { kernel } { variable-not-defined } { \token_to_str:N #1 } } } @@ -3196,7 +3259,7 @@ { \group_begin: \int_set:Nn \tex_escapechar:D { `\\ } - \exp_args:NNx + \exp_args:NNe \group_end: #1 { \token_to_str:N #2 = \cs_meaning:N #2 } } @@ -3214,7 +3277,7 @@ { \@@_group_show:NN \int_zero:N 0 } \cs_new_protected:Npn \@@_group_show:NN #1#2 { - \use:x + \use:e { #1 \tex_interactionmode:D \int_set:Nn \tex_tracingonline:D {#2} @@ -3247,7 +3310,7 @@ % catcode~$12$. If the token in question isn't a macro, the token % \cs{scan_stop:} is returned instead. % \begin{macrocode} -\use:x +\use:e { \exp_not:n { \cs_new:Npn \@@_prefix_arg_replacement:wN #1 } \tl_to_str:n { macro : } \exp_not:n { #2 -> #3 \s_@@_stop #4 } diff --git a/macros/latex/contrib/l3kernel/l3bootstrap.dtx b/macros/latex/contrib/l3kernel/l3bootstrap.dtx index aaa4333858..e300bccc67 100644 --- a/macros/latex/contrib/l3kernel/l3bootstrap.dtx +++ b/macros/latex/contrib/l3kernel/l3bootstrap.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % @@ -313,7 +313,7 @@ Type H <return> for immediate help}\def~{\errmessage{% { \bool_if:NF \l_@@_expl_bool { - \cs_set_protected:Npx \ExplSyntaxOff + \cs_set_protected:Npe \ExplSyntaxOff { \char_set_catcode:nn { 9 } { \char_value_catcode:n { 9 } } \char_set_catcode:nn { 32 } { \char_value_catcode:n { 32 } } diff --git a/macros/latex/contrib/l3kernel/l3box.dtx b/macros/latex/contrib/l3kernel/l3box.dtx index 34b6ca44ef..dfa6b3c451 100644 --- a/macros/latex/contrib/l3kernel/l3box.dtx +++ b/macros/latex/contrib/l3kernel/l3box.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % @@ -1372,7 +1372,7 @@ \group_end: } { - \msg_error:nnx { kernel } { variable-not-defined } + \msg_error:nne { kernel } { variable-not-defined } { \token_to_str:N #2 } } } diff --git a/macros/latex/contrib/l3kernel/l3candidates.dtx b/macros/latex/contrib/l3kernel/l3candidates.dtx index f3a5021425..6e455b099c 100644 --- a/macros/latex/contrib/l3kernel/l3candidates.dtx +++ b/macros/latex/contrib/l3kernel/l3candidates.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % @@ -129,10 +129,10 @@ % % \begin{function}[added = 2018-04-01] % { -% \tl_build_put_left:Nn, \tl_build_put_left:Nx, -% \tl_build_gput_left:Nn, \tl_build_gput_left:Nx, -% \tl_build_put_right:Nn, \tl_build_put_right:Nx, -% \tl_build_gput_right:Nn, \tl_build_gput_right:Nx, +% \tl_build_put_left:Nn, \tl_build_put_left:Ne, +% \tl_build_gput_left:Nn, \tl_build_gput_left:Ne, +% \tl_build_put_right:Nn, \tl_build_put_right:Ne, +% \tl_build_gput_right:Nn, \tl_build_gput_right:Ne % } % \begin{syntax} % \cs{tl_build_put_left:Nn} \meta{tl~var} \Arg{tokens} @@ -198,9 +198,9 @@ % hence in the \texttt{x}-expanding assignment. % \begin{macrocode} \cs_new_protected:Npn \seq_set_filter:NNn - { \@@_set_filter:NNNn \__kernel_tl_set:Nx } + { \@@_set_filter:NNNn \__kernel_tl_set:Ne } \cs_new_protected:Npn \seq_gset_filter:NNn - { \@@_set_filter:NNNn \__kernel_tl_gset:Nx } + { \@@_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} } } @@ -231,8 +231,8 @@ % name is that of \meta{tl~var} followed by~|'|. There are between $0$ % and $4$ \cs{exp_end:} to keep track of when \meta{left} and % \meta{right} should be put into the \meta{next~tl}. The -% \meta{assignment} is \cs{cs_set_nopar:Npx} if the variable is local, -% and \cs{cs_gset_nopar:Npx} if it is global. +% \meta{assignment} is \cs{cs_set_nopar:Npe} if the variable is local, +% and \cs{cs_gset_nopar:Npe} if it is global. % % \begin{macro}{\tl_build_begin:N, \tl_build_gbegin:N} % \begin{macro}{\@@_build_begin:NN, \@@_build_begin:NNN} @@ -241,7 +241,7 @@ % derived from |#1| without any external data such as a counter. % Empty that \meta{next~tl} and setup the structure. The local and % global versions only differ by a single function -% \cs[no-index]{cs_(g)set_nopar:Npx} used for all assignments: this is +% \cs[no-index]{cs_(g)set_nopar:Npe} used for all assignments: this is % important because only that function is stored in the \meta{tl~var} % and \meta{next~tl} for subsequent assignments. In principle % \cs{@@_build_begin:NNN} could use \cs[no-index]{tl_(g)clear_new:N} @@ -250,9 +250,9 @@ % clear it locally or globally as appropriate. % \begin{macrocode} \cs_new_protected:Npn \tl_build_begin:N #1 - { \@@_build_begin:NN \cs_set_nopar:Npx #1 } + { \@@_build_begin:NN \cs_set_nopar:Npe #1 } \cs_new_protected:Npn \tl_build_gbegin:N #1 - { \@@_build_begin:NN \cs_gset_nopar:Npx #1 } + { \@@_build_begin:NN \cs_gset_nopar:Npe #1 } \cs_new_protected:Npn \@@_build_begin:NN #1#2 { \exp_args:Nc \@@_build_begin:NNN { \cs_to_str:N #2 ' } #2 #1 } \cs_new_protected:Npn \@@_build_begin:NNN #1#2#3 @@ -283,8 +283,8 @@ % % \begin{macro} % { -% \tl_build_put_right:Nn, \tl_build_put_right:Nx, -% \tl_build_gput_right:Nn, \tl_build_gput_right:Nx, +% \tl_build_put_right:Nn, \tl_build_put_right:Ne, \tl_build_put_right:Nx, +% \tl_build_gput_right:Nn, \tl_build_gput_right:Ne, \tl_build_gput_right:Nx, % \@@_build_last:NNn, \@@_build_put:nn, \@@_build_put:nw % } % Similar to \cs{tl_put_right:Nn}, but apply \cs{exp:w} to |#1|. Most @@ -299,32 +299,24 @@ % place without ever becoming a macro argument). We use % \cs{exp_after:wN} rather than some \cs{exp_args:No} to avoid reading % arguments that are likely very long token lists. We use -% \cs[no-index]{cs_(g)set_nopar:Npx} rather than -% \cs[no-index]{tl_(g)set:Nx} partly for the same reason and partly +% \cs[no-index]{cs_(g)set_nopar:Npe} rather than +% \cs[no-index]{tl_(g)set:Ne} partly for the same reason and partly % because the assignments are interrupted by brace tricks, which % implies that the assignment does not simply set the token list to an % |x|-expansion of the second argument. % \begin{macrocode} \cs_new_protected:Npn \tl_build_put_right:Nn #1#2 { - \cs_set_nopar:Npx #1 + \cs_set_nopar:Npe #1 { \exp_after:wN \exp_not:n \exp_after:wN { \exp:w #1 #2 } } } -\cs_new_protected:Npn \tl_build_put_right:Nx #1#2 - { - \cs_set_nopar:Npx #1 - { \exp_after:wN \exp_not:n \exp_after:wN { \exp:w #1 } #2 } - } +\cs_generate_variant:Nn \tl_build_put_right:Nn { Ne , Nx } \cs_new_protected:Npn \tl_build_gput_right:Nn #1#2 { - \cs_gset_nopar:Npx #1 + \cs_gset_nopar:Npe #1 { \exp_after:wN \exp_not:n \exp_after:wN { \exp:w #1 #2 } } } -\cs_new_protected:Npn \tl_build_gput_right:Nx #1#2 - { - \cs_gset_nopar:Npx #1 - { \exp_after:wN \exp_not:n \exp_after:wN { \exp:w #1 } #2 } - } +\cs_generate_variant:Nn \tl_build_gput_right:Nn { Ne , Nx } \cs_new_protected:Npn \@@_build_last:NNn #1#2 { \if_false: { { \fi: @@ -350,8 +342,9 @@ % % \begin{macro} % { -% \tl_build_put_left:Nn, \tl_build_put_left:Nx, -% \tl_build_gput_left:Nn, \tl_build_gput_left:Nx, \@@_build_put_left:NNn +% \tl_build_put_left:Nn, \tl_build_put_left:Ne, \tl_build_put_left:Nx, +% \tl_build_gput_left:Nn, \tl_build_gput_left:Ne, \tl_build_gput_left:Nx, +% \@@_build_put_left:NNn % } % See \cs{tl_build_put_right:Nn} for all the machinery. We could % easily provide \cs[no-index]{tl_build_put_left_right:Nnn}, by just @@ -359,11 +352,11 @@ % |x|-expanding assignment. % \begin{macrocode} \cs_new_protected:Npn \tl_build_put_left:Nn #1 - { \@@_build_put_left:NNn \cs_set_nopar:Npx #1 } -\cs_generate_variant:Nn \tl_build_put_left:Nn { Nx } + { \@@_build_put_left:NNn \cs_set_nopar:Npe #1 } +\cs_generate_variant:Nn \tl_build_put_left:Nn { Ne , Nx } \cs_new_protected:Npn \tl_build_gput_left:Nn #1 - { \@@_build_put_left:NNn \cs_gset_nopar:Npx #1 } -\cs_generate_variant:Nn \tl_build_gput_left:Nn { Nx } + { \@@_build_put_left:NNn \cs_gset_nopar:Npe #1 } +\cs_generate_variant:Nn \tl_build_gput_left:Nn { Ne , Nx } \cs_new_protected:Npn \@@_build_put_left:NNn #1#2#3 { #1 #2 @@ -389,7 +382,7 @@ % trick to wrap all the \meta{right} parts together. % \begin{macrocode} \cs_new_protected:Npn \tl_build_get:NN - { \@@_build_get:NNN \__kernel_tl_set:Nx } + { \@@_build_get:NNN \__kernel_tl_set:Ne } \cs_new_protected:Npn \@@_build_get:NNN #1#2#3 { #1 #3 { \if_false: { \fi: \exp_after:wN \@@_build_get:w #2 } } } \cs_new:Npn \@@_build_get:w #1 \@@_build_last:NNn #2#3#4 @@ -410,16 +403,16 @@ % Get the data then clear the \meta{next~tl} recursively until finding % an empty one. It is perhaps wasteful to repeatedly use % \cs{cs_to_str:N}. The local/global scope is checked by -% \cs{tl_set:Nx} or \cs{tl_gset:Nx}. +% \cs{tl_set:Ne} or \cs{tl_gset:Ne}. % \begin{macrocode} \cs_new_protected:Npn \tl_build_end:N #1 { - \@@_build_get:NNN \__kernel_tl_set:Nx #1 #1 + \@@_build_get:NNN \__kernel_tl_set:Ne #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:Nx #1 #1 + \@@_build_get:NNN \__kernel_tl_gset:Ne #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 diff --git a/macros/latex/contrib/l3kernel/l3cctab.dtx b/macros/latex/contrib/l3kernel/l3cctab.dtx index fc9cdd9e92..4192ec029a 100644 --- a/macros/latex/contrib/l3kernel/l3cctab.dtx +++ b/macros/latex/contrib/l3kernel/l3cctab.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % @@ -543,7 +543,7 @@ { \seq_gpop:NNF \g_@@_unused_seq \l_@@_internal_a_tl { \@@_begin_aux: } - \exp_args:Nx \@@_chk_group_begin:n + \@@_chk_group_begin:e { \@@_nesting_number:N \l_@@_internal_a_tl } \seq_gpush:NV \g_@@_stack_seq \l_@@_internal_a_tl \exp_args:NV \@@_gset:n \l_@@_internal_a_tl @@ -566,7 +566,7 @@ \seq_gpop:NNTF \g_@@_stack_seq \l_@@_internal_a_tl { \seq_gpush:NV \g_@@_unused_seq \l_@@_internal_a_tl - \exp_args:Nx \@@_chk_group_end:n + \exp_args:Ne \@@_chk_group_end:n { \@@_nesting_number:N \l_@@_internal_a_tl } \@@_select:N \l_@@_internal_a_tl } @@ -575,7 +575,8 @@ % \end{macrocode} % \end{macro} % -% \begin{macro}{\@@_chk_group_begin:n,\@@_chk_group_end:n} +% \begin{macro} +% {\@@_chk_group_begin:n,\@@_chk_group_begin:e, \@@_chk_group_end:n} % Catcode tables are not allowed to be intermixed with groups, so here % we check that they are properly nested regarding \TeX{} groups. % \cs{@@_chk_group_begin:n} stores the current group level in a stack, @@ -636,10 +637,11 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_chk_group_begin:n #1 { - \seq_gpush:Nx \g_@@_group_seq + \seq_gpush:Ne \g_@@_group_seq { \int_use:N \tex_currentgrouplevel:D } \cs_set_eq:cN { @@_group_ #1 _chk: } \prg_do_nothing: } +\cs_generate_variant:Nn \@@_chk_group_begin:n { e } \cs_new_protected:Npn \@@_chk_group_end:n #1 { \seq_gpop:NN \g_@@_group_seq \l_@@_internal_b_tl @@ -650,7 +652,7 @@ } { \cs_if_exist_p:c { @@_group_ #1 _chk: } } { - \msg_error:nnx { cctab } { group-mismatch } + \msg_error:nne { cctab } { group-mismatch } { \int_sign:n { \tex_currentgrouplevel:D - \l_@@_internal_b_tl } @@ -675,10 +677,10 @@ \exp_after:wN \exp_after:wN \exp_after:wN \@@_nesting_number:w \exp_after:wN \token_to_str:N #1 } - \use:x + \use:e { \cs_new:Npn \exp_not:N \@@_nesting_number:w - ##1 \tl_to_str:n { g_@@_ } ##2 \tl_to_str:n { _cctab } {##2} + #1 \tl_to_str:n { g_@@_ } #2 \tl_to_str:n { _cctab } {#2} } } % \end{macrocode} @@ -754,13 +756,13 @@ \@@_chk_if_valid_aux:NTF #1 { \prg_return_true: } { - \msg_error:nnx { cctab } { invalid-cctab } + \msg_error:nne { cctab } { invalid-cctab } { \token_to_str:N #1 } \prg_return_false: } } { - \msg_error:nnx { kernel } { command-not-defined } + \msg_error:nne { kernel } { command-not-defined } { \token_to_str:N #1 } \prg_return_false: } diff --git a/macros/latex/contrib/l3kernel/l3clist.dtx b/macros/latex/contrib/l3kernel/l3clist.dtx index 0eaac6a532..8fc2f6870b 100644 --- a/macros/latex/contrib/l3kernel/l3clist.dtx +++ b/macros/latex/contrib/l3kernel/l3clist.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % @@ -123,8 +123,8 @@ % % \begin{function}[added = 2014-07-05] % { -% \clist_const:Nn, \clist_const:Nx, -% \clist_const:cn, \clist_const:cx +% \clist_const:Nn, \clist_const:Ne, +% \clist_const:cn, \clist_const:ce % } % \begin{syntax} % \cs{clist_const:Nn} \meta{clist~var} \Arg{comma list} @@ -216,14 +216,14 @@ % % \begin{function}[added = 2011-09-06] % { -% \clist_set:Nn, \clist_set:NV, -% \clist_set:No, \clist_set:Nx, -% \clist_set:cn, \clist_set:cV, -% \clist_set:co, \clist_set:cx, -% \clist_gset:Nn, \clist_gset:NV, -% \clist_gset:No, \clist_gset:Nx, -% \clist_gset:cn, \clist_gset:cV, -% \clist_gset:co, \clist_gset:cx +% \clist_set:Nn, \clist_set:NV, \clist_set:Ne, +% \clist_set:No, +% \clist_set:cn, \clist_set:cV, \clist_set:ce, +% \clist_set:co, +% \clist_gset:Nn, \clist_gset:NV, \clist_gset:Ne, +% \clist_gset:No, +% \clist_gset:cn, \clist_gset:cV, \clist_gset:ce, +% \clist_gset:co % } % \begin{syntax} % \cs{clist_set:Nn} \meta{clist~var} |{|\meta{item_1},\ldots{},\meta{item_n}|}| @@ -241,17 +241,17 @@ % \begin{function}[updated = 2011-09-05] % { % \clist_put_left:Nn, \clist_put_left:NV, -% \clist_put_left:Nv, -% \clist_put_left:No, \clist_put_left:Nx, +% \clist_put_left:Nv, \clist_put_left:Ne, +% \clist_put_left:No, % \clist_put_left:cn, \clist_put_left:cV, -% \clist_put_left:cv, -% \clist_put_left:co, \clist_put_left:cx, +% \clist_put_left:cv, \clist_put_left:ce, +% \clist_put_left:co, % \clist_gput_left:Nn, \clist_gput_left:NV, -% \clist_gput_left:Nv, -% \clist_gput_left:No, \clist_gput_left:Nx, +% \clist_gput_left:Nv, \clist_gput_left:Ne, +% \clist_gput_left:No, % \clist_gput_left:cn, \clist_gput_left:cV, -% \clist_gput_left:cv, -% \clist_gput_left:co, \clist_gput_left:cx +% \clist_gput_left:cv, \clist_gput_left:ce, +% \clist_gput_left:co % } % \begin{syntax} % \cs{clist_put_left:Nn} \meta{clist~var} |{|\meta{item_1},\ldots{},\meta{item_n}|}| @@ -268,17 +268,17 @@ % \begin{function}[updated = 2011-09-05] % { % \clist_put_right:Nn, \clist_put_right:NV, -% \clist_put_right:Nv, -% \clist_put_right:No, \clist_put_right:Nx, +% \clist_put_right:Nv, \clist_put_right:Ne, +% \clist_put_right:No, % \clist_put_right:cn, \clist_put_right:cV, -% \clist_put_right:cv, -% \clist_put_right:co, \clist_put_right:cx, +% \clist_put_right:cv, \clist_put_right:ce, +% \clist_put_right:co, % \clist_gput_right:Nn, \clist_gput_right:NV, -% \clist_gput_right:Nv, -% \clist_gput_right:No, \clist_gput_right:Nx, +% \clist_gput_right:Nv, \clist_gput_right:Ne, +% \clist_gput_right:No, % \clist_gput_right:cn, \clist_gput_right:cV, -% \clist_gput_right:cv, -% \clist_gput_right:co, \clist_gput_right:cx +% \clist_gput_right:cv, \clist_gput_right:ce, +% \clist_gput_right:co % } % \begin{syntax} % \cs{clist_put_right:Nn} \meta{clist~var} |{|\meta{item_1},\ldots{},\meta{item_n}|}| @@ -444,7 +444,7 @@ % \texttt{n}-type comma lists. % % \begin{function}[rEXP, updated = 2012-06-29] -% {\clist_map_function:NN, \clist_map_function:cN, \clist_map_function:nN} +% {\clist_map_function:NN, \clist_map_function:cN, \clist_map_function:nN, \clist_map_function:eN} % \begin{syntax} % \cs{clist_map_function:NN} \meta{clist~var} \meta{function} % \end{syntax} @@ -548,7 +548,7 @@ % \end{function} % % \begin{function}[EXP, added = 2012-07-13] -% {\clist_count:N, \clist_count:c, \clist_count:n} +% {\clist_count:N, \clist_count:c, \clist_count:n, \clist_count:e} % \begin{syntax} % \cs{clist_count:N} \meta{clist~var} % \end{syntax} @@ -706,10 +706,10 @@ % % \begin{function} % { -% \clist_push:Nn, \clist_push:NV, \clist_push:No, \clist_push:Nx, -% \clist_push:cn, \clist_push:cV, \clist_push:co, \clist_push:cx, -% \clist_gpush:Nn, \clist_gpush:NV, \clist_gpush:No, \clist_gpush:Nx, -% \clist_gpush:cn, \clist_gpush:cV, \clist_gpush:co, \clist_gpush:cx +% \clist_push:Nn, \clist_push:NV, \clist_push:No, +% \clist_push:cn, \clist_push:cV, \clist_push:co, +% \clist_gpush:Nn, \clist_gpush:NV, \clist_gpush:No, +% \clist_gpush:cn, \clist_gpush:cV, \clist_gpush:co, % } % \begin{syntax} % \cs{clist_push:Nn} \meta{clist~var} \Arg{items} @@ -722,7 +722,7 @@ % \section{Using a single item} % % \begin{function}[added = 2014-07-17, EXP] -% {\clist_item:Nn, \clist_item:cn, \clist_item:nn} +% {\clist_item:Nn, \clist_item:cn, \clist_item:nn, \clist_item:en} % \begin{syntax} % \cs{clist_item:Nn} \meta{clist~var} \Arg{int expr} % \end{syntax} @@ -984,15 +984,16 @@ % % \begin{macro} % { -% \clist_const:Nn, \clist_const:cn, -% \clist_const:Nx, \clist_const:cx +% \clist_const:Nn, \clist_const:Ne, \clist_const:Nx, +% \clist_const:cn, \clist_const:ce, \clist_const:cx % } % Creating and initializing a constant comma list is done by % sanitizing all items (stripping spaces and braces). % \begin{macrocode} \cs_new_protected:Npn \clist_const:Nn #1#2 - { \tl_const:Nx #1 { \@@_sanitize:n {#2} } } -\cs_generate_variant:Nn \clist_const:Nn { c , Nx , cx } + { \tl_const:Ne #1 { \@@_sanitize:n {#2} } } +\cs_generate_variant:Nn \clist_const:Nn { Ne , c , ce } +\cs_generate_variant:Nn \clist_const:Nn { Nx , cx } % \end{macrocode} % \end{macro} % @@ -1066,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:Nx } + { \@@_set_from_seq:NNNN \clist_clear:N \__kernel_tl_set:Ne } \cs_new_protected:Npn \clist_gset_from_seq:NN - { \@@_set_from_seq:NNNN \clist_gclear:N \__kernel_tl_gset:Nx } + { \@@_set_from_seq:NNNN \clist_gclear:N \__kernel_tl_gset:Ne } \cs_new_protected:Npn \@@_set_from_seq:NNNN #1#2#3#4 { \seq_if_empty:NTF #4 @@ -1107,9 +1108,9 @@ % a little work to do. % \begin{macrocode} \cs_new_protected:Npn \clist_concat:NNN - { \@@_concat:NNNN \__kernel_tl_set:Nx } + { \@@_concat:NNNN \__kernel_tl_set:Ne } \cs_new_protected:Npn \clist_gconcat:NNN - { \@@_concat:NNNN \__kernel_tl_gset:Nx } + { \@@_concat:NNNN \__kernel_tl_gset:Ne } \cs_new_protected:Npn \@@_concat:NNNN #1#2#3#4 { #1 #2 @@ -1140,47 +1141,49 @@ % % \begin{macro} % { -% \clist_set:Nn, \clist_set:NV, -% \clist_set:No, \clist_set:Nx, -% \clist_set:cn, \clist_set:cV, -% \clist_set:co, \clist_set:cx +% \clist_set:Nn, \clist_set:NV, \clist_set:Ne, +% \clist_set:No, \clist_set:Nx, +% \clist_set:cn, \clist_set:cV, \clist_set:ce, +% \clist_set:co, \clist_set:cx % } % \begin{macro} % { -% \clist_gset:Nn, \clist_gset:NV, +% \clist_gset:Nn, \clist_gset:NV, \clist_gset:Ne, % \clist_gset:No, \clist_gset:Nx, -% \clist_gset:cn, \clist_gset:cV, -% \clist_gset:co, \clist_gset:cx +% \clist_gset:cn, \clist_gset:cV, \clist_gset:ce, +% \clist_gset:co, \clist_gset:cx, % } % \begin{macrocode} \cs_new_protected:Npn \clist_set:Nn #1#2 - { \__kernel_tl_set:Nx #1 { \@@_sanitize:n {#2} } } + { \__kernel_tl_set:Ne #1 { \@@_sanitize:n {#2} } } \cs_new_protected:Npn \clist_gset:Nn #1#2 - { \__kernel_tl_gset:Nx #1 { \@@_sanitize:n {#2} } } -\cs_generate_variant:Nn \clist_set:Nn { NV , No , Nx , c , cV , co , cx } -\cs_generate_variant:Nn \clist_gset:Nn { NV , No , Nx , c , cV , co , cx } + { \__kernel_tl_gset:Ne #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 } +\cs_generate_variant:Nn \clist_gset:Nn { No , Nx , co , cx } % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro} % { -% \clist_put_left:Nn, \clist_put_left:NV, -% \clist_put_left:Nv, -% \clist_put_left:No, \clist_put_left:Nx, -% \clist_put_left:cn, \clist_put_left:cV, -% \clist_put_left:cv, -% \clist_put_left:co, \clist_put_left:cx +% \clist_put_left:Nn, \clist_put_left:NV, +% \clist_put_left:Nv, \clist_put_left:Ne, +% \clist_put_left:No, \clist_put_left:Nx, +% \clist_put_left:cn, \clist_put_left:cV, +% \clist_put_left:cv, \clist_put_left:ce, +% \clist_put_left:co, \clist_put_left:cx, % } % \UnitTested % \begin{macro} % { % \clist_gput_left:Nn, \clist_gput_left:NV, -% \clist_gput_left:Nv, +% \clist_gput_left:Nv, \clist_gput_left:Ne, % \clist_gput_left:No, \clist_gput_left:Nx, % \clist_gput_left:cn, \clist_gput_left:cV, -% \clist_gput_left:cv, -% \clist_gput_left:co, \clist_gput_left:cx +% \clist_gput_left:cv, \clist_gput_left:ce, +% \clist_gput_left:co, \clist_gput_left:cx, % } % \UnitTested % \begin{macro}{\@@_put_left:NNNn} @@ -1197,10 +1200,10 @@ #2 \l_@@_internal_clist {#4} #1 #3 \l_@@_internal_clist #3 } -\cs_generate_variant:Nn \clist_put_left:Nn { NV , Nv , No , Nx } -\cs_generate_variant:Nn \clist_put_left:Nn { c , cV , cv , co , cx } -\cs_generate_variant:Nn \clist_gput_left:Nn { NV , Nv , No , Nx } -\cs_generate_variant:Nn \clist_gput_left:Nn { c , cV , cv , co , cx } +\cs_generate_variant:Nn \clist_put_left:Nn { NV , Nv , Ne , c , cV , cv , ce } +\cs_generate_variant:Nn \clist_put_left:Nn { No , Nx , co , cx } +\cs_generate_variant:Nn \clist_gput_left:Nn { NV , Nv , Ne , c , cV , cv , ce } +\cs_generate_variant:Nn \clist_gput_left:Nn { No , Nx , co , cx } % \end{macrocode} % \end{macro} % \end{macro} @@ -1209,21 +1212,21 @@ % \begin{macro} % { % \clist_put_right:Nn, \clist_put_right:NV, -% \clist_put_right:Nv, +% \clist_put_right:Nv, \clist_put_right:Ne, % \clist_put_right:No, \clist_put_right:Nx, % \clist_put_right:cn, \clist_put_right:cV, -% \clist_put_right:cv, +% \clist_put_right:cv, \clist_put_right:ce, % \clist_put_right:co, \clist_put_right:cx % } % \UnitTested % \begin{macro} % { % \clist_gput_right:Nn, \clist_gput_right:NV, -% \clist_gput_right:Nv, +% \clist_gput_right:Nv, \clist_gput_right:Ne, % \clist_gput_right:No, \clist_gput_right:Nx, % \clist_gput_right:cn, \clist_gput_right:cV, -% \clist_gput_right:cv, -% \clist_gput_right:co, \clist_gput_right:cx +% \clist_gput_right:cv, \clist_gput_right:ce, +% \clist_gput_right:cx, \clist_gput_right:co % } % \UnitTested % \begin{macro}{\@@_put_right:NNNn} @@ -1237,10 +1240,14 @@ #2 \l_@@_internal_clist {#4} #1 #3 #3 \l_@@_internal_clist } -\cs_generate_variant:Nn \clist_put_right:Nn { NV , Nv , No , Nx } -\cs_generate_variant:Nn \clist_put_right:Nn { c , cV , cv , co , cx } -\cs_generate_variant:Nn \clist_gput_right:Nn { NV , Nv , No , Nx } -\cs_generate_variant:Nn \clist_gput_right:Nn { c , cV , cv , co , cx } +\cs_generate_variant:Nn \clist_put_right:Nn + { NV , Nv , Ne , c , cV , cv , ce } +\cs_generate_variant:Nn \clist_put_right:Nn + { No , Nx , co , cx } +\cs_generate_variant:Nn \clist_gput_right:Nn + { NV , Nv , Ne , c , cV , cv , ce } +\cs_generate_variant:Nn \clist_gput_right:Nn + { No , Nx , co , cx } % \end{macrocode} % \end{macro} % \end{macro} @@ -1288,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:Nx } + { \@@_pop:NNN \__kernel_tl_set:Ne } \cs_new_protected:Npn \clist_gpop:NN - { \@@_pop:NNN \__kernel_tl_gset:Nx } + { \@@_pop:NNN \__kernel_tl_gset:Ne } \cs_new_protected:Npn \@@_pop:NNN #1#2#3 { \if_meaning:w #2 \c_empty_clist @@ -1335,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:Nx #1 #2 } + { \@@_pop_TF:NNN \__kernel_tl_set:Ne #1 #2 } \prg_new_protected_conditional:Npnn \clist_gpop:NN #1#2 { T , F , TF } - { \@@_pop_TF:NNN \__kernel_tl_gset:Nx #1 #2 } + { \@@_pop_TF:NNN \__kernel_tl_gset:Ne #1 #2 } \cs_new_protected:Npn \@@_pop_TF:NNN #1#2#3 { \if_meaning:w #2 \c_empty_clist @@ -1357,32 +1364,20 @@ % % \begin{macro}{ % \clist_push:Nn, \clist_push:NV, \clist_push:No, \clist_push:Nx, -% \clist_push:cn, \clist_push:cV, \clist_push:co, \clist_push:cx +% \clist_push:cn, \clist_push:cV, \clist_push:co, \clist_push:cx, % } % \UnitTested % \begin{macro}{ % \clist_gpush:Nn, \clist_gpush:NV, \clist_gpush:No, \clist_gpush:Nx, -% \clist_gpush:cn, \clist_gpush:cV, \clist_gpush:co, \clist_gpush:cx +% \clist_gpush:cn, \clist_gpush:cV, \clist_gpush:co, \clist_gpush:cx, % } % \UnitTested % Pushing to a comma list is the same as adding on the left. % \begin{macrocode} \cs_new_eq:NN \clist_push:Nn \clist_put_left:Nn -\cs_new_eq:NN \clist_push:NV \clist_put_left:NV -\cs_new_eq:NN \clist_push:No \clist_put_left:No -\cs_new_eq:NN \clist_push:Nx \clist_put_left:Nx -\cs_new_eq:NN \clist_push:cn \clist_put_left:cn -\cs_new_eq:NN \clist_push:cV \clist_put_left:cV -\cs_new_eq:NN \clist_push:co \clist_put_left:co -\cs_new_eq:NN \clist_push:cx \clist_put_left:cx +\cs_generate_variant:Nn \clist_push:Nn { NV , No , Nx , c , cV , co , cx } \cs_new_eq:NN \clist_gpush:Nn \clist_gput_left:Nn -\cs_new_eq:NN \clist_gpush:NV \clist_gput_left:NV -\cs_new_eq:NN \clist_gpush:No \clist_gput_left:No -\cs_new_eq:NN \clist_gpush:Nx \clist_gput_left:Nx -\cs_new_eq:NN \clist_gpush:cn \clist_gput_left:cn -\cs_new_eq:NN \clist_gpush:cV \clist_gput_left:cV -\cs_new_eq:NN \clist_gpush:co \clist_gput_left:co -\cs_new_eq:NN \clist_gpush:cx \clist_gput_left:cx +\cs_generate_variant:Nn \clist_gpush:Nn { NV , No , Nx , c , cV , co , cx } % \end{macrocode} % \end{macro} % \end{macro} @@ -1415,7 +1410,7 @@ { \clist_if_in:NnF \l_@@_internal_remove_clist {##1} { - \tl_put_right:Nx \l_@@_internal_remove_clist + \tl_put_right:Ne \l_@@_internal_remove_clist { \clist_if_empty:NF \l_@@_internal_remove_clist { , } \@@_if_wrap:nTF {##1} { \exp_not:n { {##1} } } { \exp_not:n {##1} } @@ -1478,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:Nx } + { \@@_remove_all:NNNn \clist_set_from_seq:NN \__kernel_tl_set:Ne } \cs_new_protected:Npn \clist_gremove_all:Nn - { \@@_remove_all:NNNn \clist_gset_from_seq:NN \__kernel_tl_gset:Nx } + { \@@_remove_all:NNNn \clist_gset_from_seq:NN \__kernel_tl_gset:Ne } \cs_new_protected:Npn \@@_remove_all:NNNn #1#2#3#4 { \@@_if_wrap:nTF {#4} @@ -1534,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:Nx #1 { \exp_args:No \clist_reverse:n {#1} } } + { \__kernel_tl_set:Ne #1 { \exp_args:No \clist_reverse:n {#1} } } \cs_new_protected:Npn \clist_greverse:N #1 - { \__kernel_tl_gset:Nx #1 { \exp_args:No \clist_reverse:n {#1} } } + { \__kernel_tl_gset:Ne #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} @@ -1657,7 +1652,7 @@ { \@@_if_wrap:nTF {#2} { - \cs_set:Npx \@@_tmp:w ##1 + \cs_set:Npe \@@_tmp:w ##1 { \exp_not:N \tl_if_eq:nnT {##1} \exp_not:n @@ -1726,7 +1721,7 @@ % \end{macro} % \end{macro} % -% \begin{macro}{\clist_map_function:nN} +% \begin{macro}{\clist_map_function:nN, \clist_map_function:eN} % \UnitTested % \begin{macro}{\@@_map_function_n:Nn} % \begin{macro}{\@@_map_unbrace:wn} @@ -1745,6 +1740,7 @@ \s_@@_stop \clist_map_break: , \prg_break_point:Nn \clist_map_break: { } } +\cs_generate_variant:Nn \clist_map_function:nN { e } \cs_new:Npn \@@_map_function_n:Nn #1 #2 { \@@_use_none_delimit_by_s_stop:w #2 \s_@@_stop @@ -1893,7 +1889,7 @@ % \end{macrocode} % \end{macro} % -% \begin{macro}{\clist_count:N, \clist_count:c, \clist_count:n} +% \begin{macro}{\clist_count:N, \clist_count:c, \clist_count:n, \clist_count:e} % \begin{macro}{\@@_count:n} % \begin{macro}{\@@_count:w} % Counting the items in a comma list is done using the same approach as for @@ -1933,6 +1929,7 @@ } } \exp_args:No \@@_tmp:w \c_space_tl +\cs_generate_variant:Nn \clist_count:n { e } % \end{macrocode} % \end{macro} % \end{macro} @@ -2110,7 +2107,7 @@ % \end{macro} % \end{macro} % -% \begin{macro}{\clist_item:nn} +% \begin{macro}{\clist_item:nn, \clist_item:en} % \begin{macro}{ % \@@_item_n:nw, % \@@_item_n_loop:nw, @@ -2130,6 +2127,7 @@ {#1} \@@_item_n:nw } +\cs_generate_variant:Nn \clist_item:nn { e } \cs_new:Npn \@@_item_n:nw #1 { \@@_item_n_loop:nw {#1} \prg_do_nothing: } \cs_new:Npn \@@_item_n_loop:nw #1 #2, @@ -2188,9 +2186,9 @@ % |#2| serving as a dummy code to prevent a check performed by this % auxiliary. % \begin{macrocode} -\cs_new_protected:Npn \clist_show:N { \@@_show:NN \msg_show:nnxxxx } +\cs_new_protected:Npn \clist_show:N { \@@_show:NN \msg_show:nneeee } \cs_generate_variant:Nn \clist_show:N { c } -\cs_new_protected:Npn \clist_log:N { \@@_show:NN \msg_log:nnxxxx } +\cs_new_protected:Npn \clist_log:N { \@@_show:NN \msg_log:nneeee } \cs_generate_variant:Nn \clist_log:N { c } \cs_new_protected:Npn \@@_show:NN #1#2 { @@ -2205,7 +2203,7 @@ { } { } } { - \msg_error:nnxx { clist } { non-clist } + \msg_error:nnee { clist } { non-clist } { \token_to_str:N #2 } { \tl_to_str:N #2 } } } @@ -2217,8 +2215,8 @@ % A variant of the above: no existence check, empty first argument for % the message. % \begin{macrocode} -\cs_new_protected:Npn \clist_show:n { \@@_show:Nn \msg_show:nnxxxx } -\cs_new_protected:Npn \clist_log:n { \@@_show:Nn \msg_log:nnxxxx } +\cs_new_protected:Npn \clist_show:n { \@@_show:Nn \msg_show:nneeee } +\cs_new_protected:Npn \clist_log:n { \@@_show:Nn \msg_log:nneeee } \cs_new_protected:Npn \@@_show:Nn #1#2 { #1 { clist } { show } diff --git a/macros/latex/contrib/l3kernel/l3coffins.dtx b/macros/latex/contrib/l3kernel/l3coffins.dtx index 2269c6c686..94824400de 100644 --- a/macros/latex/contrib/l3kernel/l3coffins.dtx +++ b/macros/latex/contrib/l3kernel/l3coffins.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % @@ -602,7 +602,7 @@ \coffin_if_exist:NTF #1 { #2 } { - \msg_error:nnx { coffin } { unknown } + \msg_error:nne { coffin } { unknown } { \token_to_str:N #1 } } } @@ -736,7 +736,7 @@ } #5 #1 \vbox_set_top:Nn \l_@@_internal_box { \vbox_unpack:N #1 } - \@@_set_pole:Nnx #1 { T } + \@@_set_pole:Nne #1 { T } { { 0pt } { @@ -749,7 +749,7 @@ \box_clear:N \l_@@_internal_box } } -\cs_new_protected:Npx \@@_set_vertical_aux: +\cs_new_protected:Npe \@@_set_vertical_aux: { \bool_lazy_and:nnT { \cs_if_exist_p:N \fmtname } @@ -834,7 +834,7 @@ #5 #6 #1 \vbox_set_top:Nn \l_@@_internal_box { \vbox_unpack:N #1 } - \@@_set_pole:Nnx #1 { T } + \@@_set_pole:Nne #1 { T } { { 0pt } { @@ -949,7 +949,7 @@ \prop_get:cnNF { coffin ~ \@@_to_value:N #1 ~ poles } {#2} #3 { - \msg_error:nnxx { coffin } { unknown-pole } + \msg_error:nnee { coffin } { unknown-pole } { \exp_not:n {#2} } { \token_to_str:N #1 } \tl_set:Nn #3 { { 0pt } { 0pt } { 0pt } { 0pt } } } @@ -989,17 +989,17 @@ % \coffin_gset_vertical_pole:Nnn, \coffin_gset_vertical_pole:cnn % } % \begin{macro}{\@@_set_vertical_pole:NnnN} -% \begin{macro}{\@@_set_pole:Nnn, \@@_set_pole:Nnx} +% \begin{macro}{\@@_set_pole:Nnn, \@@_set_pole:Nne} % Setting the pole of a coffin at the user/designer level requires a % bit more care. The idea here is to provide a reasonable interface to % the system, then to do the setting with full expansion. The % three-argument version is used internally to do a direct setting. % \begin{macrocode} \cs_new_protected:Npn \coffin_set_horizontal_pole:Nnn #1#2#3 - { \@@_set_horizontal_pole:NnnN #1 {#2} {#3} \prop_put:cnx } + { \@@_set_horizontal_pole:NnnN #1 {#2} {#3} \prop_put:cne } \cs_generate_variant:Nn \coffin_set_horizontal_pole:Nnn { c } \cs_new_protected:Npn \coffin_gset_horizontal_pole:Nnn #1#2#3 - { \@@_set_horizontal_pole:NnnN #1 {#2} {#3} \prop_gput:cnx } + { \@@_set_horizontal_pole:NnnN #1 {#2} {#3} \prop_gput:cne } \cs_generate_variant:Nn \coffin_gset_horizontal_pole:Nnn { c } \cs_new_protected:Npn \@@_set_horizontal_pole:NnnN #1#2#3#4 { @@ -1014,10 +1014,10 @@ } } \cs_new_protected:Npn \coffin_set_vertical_pole:Nnn #1#2#3 - { \@@_set_vertical_pole:NnnN #1 {#2} {#3} \prop_put:cnx } + { \@@_set_vertical_pole:NnnN #1 {#2} {#3} \prop_put:cne } \cs_generate_variant:Nn \coffin_set_vertical_pole:Nnn { c } \cs_new_protected:Npn \coffin_gset_vertical_pole:Nnn #1#2#3 - { \@@_set_vertical_pole:NnnN #1 {#2} {#3} \prop_gput:cnx } + { \@@_set_vertical_pole:NnnN #1 {#2} {#3} \prop_gput:cne } \cs_generate_variant:Nn \coffin_gset_vertical_pole:Nnn { c } \cs_new_protected:Npn \@@_set_vertical_pole:NnnN #1#2#3#4 { @@ -1036,7 +1036,7 @@ \prop_put:cnn { coffin ~ \@@_to_value:N #1 ~ poles } {#2} {#3} } -\cs_generate_variant:Nn \@@_set_pole:Nnn { Nnx } +\cs_generate_variant:Nn \@@_set_pole:Nnn { Nne } % \end{macrocode} % \end{macro} % \end{macro} @@ -1070,9 +1070,9 @@ % of the underlying \TeX{} box. % \begin{macrocode} \cs_new_protected:Npn \@@_update_corners:N #1 - { \@@_update_corners:NN #1 \prop_put:Nnx } + { \@@_update_corners:NN #1 \prop_put:Nne } \cs_new_protected:Npn \@@_gupdate_corners:N #1 - { \@@_update_corners:NN #1 \prop_gput:Nnx } + { \@@_update_corners:NN #1 \prop_gput:Nne } \cs_new_protected:Npn \@@_update_corners:NN #1#2 { \exp_args:Nc \@@_update_corners:NNN @@ -1115,9 +1115,9 @@ % coffins. % \begin{macrocode} \cs_new_protected:Npn \@@_update_poles:N #1 - { \@@_update_poles:NN #1 \prop_put:Nnx } + { \@@_update_poles:NN #1 \prop_put:Nne } \cs_new_protected:Npn \@@_gupdate_poles:N #1 - { \@@_update_poles:NN #1 \prop_gput:Nnx } + { \@@_update_poles:NN #1 \prop_gput:Nne } \cs_new_protected:Npn \@@_update_poles:NN #1#2 { \exp_args:Nc \@@_update_poles:NNN @@ -1277,7 +1277,7 @@ % more complexity, we now work out both slopes and pass to an auxiliary. % \begin{macrocode} { - \use:x + \use:e { \@@_calculate_intersection:nnnnnn { \dim_to_fp:n {#4} / \dim_to_fp:n {#3} } @@ -1494,17 +1494,17 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_set_bounding:N #1 { - \prop_put:Nnx \l_@@_bounding_prop { tl } + \prop_put:Nne \l_@@_bounding_prop { tl } { { 0pt } { \dim_eval:n { \box_ht:N #1 } } } - \prop_put:Nnx \l_@@_bounding_prop { tr } + \prop_put:Nne \l_@@_bounding_prop { tr } { { \dim_eval:n { \box_wd:N #1 } } { \dim_eval:n { \box_ht:N #1 } } } \dim_set:Nn \l_@@_internal_dim { -\box_dp:N #1 } - \prop_put:Nnx \l_@@_bounding_prop { bl } + \prop_put:Nne \l_@@_bounding_prop { bl } { { 0pt } { \dim_use:N \l_@@_internal_dim } } - \prop_put:Nnx \l_@@_bounding_prop { br } + \prop_put:Nne \l_@@_bounding_prop { br } { { \dim_eval:n { \box_wd:N #1 } } { \dim_use:N \l_@@_internal_dim } @@ -1523,13 +1523,13 @@ \cs_new_protected:Npn \@@_rotate_bounding:nnn #1#2#3 { \@@_rotate_vector:nnNN {#2} {#3} \l_@@_x_dim \l_@@_y_dim - \prop_put:Nnx \l_@@_bounding_prop {#1} + \prop_put:Nne \l_@@_bounding_prop {#1} { { \dim_use:N \l_@@_x_dim } { \dim_use:N \l_@@_y_dim } } } \cs_new_protected:Npn \@@_rotate_corner:Nnnn #1#2#3#4 { \@@_rotate_vector:nnNN {#3} {#4} \l_@@_x_dim \l_@@_y_dim - \prop_put:Nnx \l_@@_corners_prop {#2} + \prop_put:Nne \l_@@_corners_prop {#2} { { \dim_use:N \l_@@_x_dim } { \dim_use:N \l_@@_y_dim } } } % \end{macrocode} @@ -1546,7 +1546,7 @@ \@@_rotate_vector:nnNN {#3} {#4} \l_@@_x_dim \l_@@_y_dim \@@_rotate_vector:nnNN {#5} {#6} \l_@@_x_prime_dim \l_@@_y_prime_dim - \prop_put:Nnx \l_@@_poles_prop {#2} + \prop_put:Nne \l_@@_poles_prop {#2} { { \dim_use:N \l_@@_x_dim } { \dim_use:N \l_@@_y_dim } { \dim_use:N \l_@@_x_prime_dim } @@ -1647,7 +1647,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_shift_corner:Nnnn #1#2#3#4 { - \prop_put:Nnx \l_@@_corners_prop {#2} + \prop_put:Nne \l_@@_corners_prop {#2} { { \dim_eval:n { #3 - \l_@@_left_corner_dim } } { \dim_eval:n { #4 - \l_@@_bottom_corner_dim } } @@ -1655,7 +1655,7 @@ } \cs_new_protected:Npn \@@_shift_pole:Nnnnnn #1#2#3#4#5#6 { - \prop_put:Nnx \l_@@_poles_prop {#2} + \prop_put:Nne \l_@@_poles_prop {#2} { { \dim_eval:n { #3 - \l_@@_left_corner_dim } } { \dim_eval:n { #4 - \l_@@_bottom_corner_dim } } @@ -1821,13 +1821,13 @@ \cs_new_protected:Npn \@@_scale_corner:Nnnn #1#2#3#4 { \@@_scale_vector:nnNN {#3} {#4} \l_@@_x_dim \l_@@_y_dim - \prop_put:Nnx \l_@@_corners_prop {#2} + \prop_put:Nne \l_@@_corners_prop {#2} { { \dim_use:N \l_@@_x_dim } { \dim_use:N \l_@@_y_dim } } } \cs_new_protected:Npn \@@_scale_pole:Nnnnnn #1#2#3#4#5#6 { \@@_scale_vector:nnNN {#3} {#4} \l_@@_x_dim \l_@@_y_dim - \prop_put:Nnx \l_@@_poles_prop {#2} + \prop_put:Nne \l_@@_poles_prop {#2} { { \dim_use:N \l_@@_x_dim } { \dim_use:N \l_@@_y_dim } {#5} {#6} @@ -1844,14 +1844,14 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_x_shift_corner:Nnnn #1#2#3#4 { - \prop_put:Nnx \l_@@_corners_prop {#2} + \prop_put:Nne \l_@@_corners_prop {#2} { { \dim_eval:n { #3 + \box_wd:N #1 } } {#4} } } \cs_new_protected:Npn \@@_x_shift_pole:Nnnnnn #1#2#3#4#5#6 { - \prop_put:Nnx \l_@@_poles_prop {#2} + \prop_put:Nne \l_@@_poles_prop {#2} { { \dim_eval:n { #3 + \box_wd:N #1 } } {#4} {#5} {#6} @@ -2068,7 +2068,7 @@ \tl_if_in:nnTF {#2} { - } { \tl_set:Nn \l_@@_internal_tl { {#2} } } { \tl_set:Nn \l_@@_internal_tl { { #1 - #2 } } } - \exp_last_unbraced:NNo \@@_set_pole:Nnx \l_@@_aligned_coffin + \exp_last_unbraced:NNo \@@_set_pole:Nne \l_@@_aligned_coffin { \l_@@_internal_tl } { { \dim_use:N \l_@@_x_dim } { \dim_use:N \l_@@_y_dim } @@ -2092,7 +2092,7 @@ } \cs_new_protected:Npn \@@_offset_corner:Nnnnn #1#2#3#4#5#6 { - \prop_put:cnx + \prop_put:cne { coffin ~ \@@_to_value:N \l_@@_aligned_coffin \c_space_tl corners @@ -2130,11 +2130,11 @@ { \dim_compare:nNnTF {#2} < {#6} { - \@@_set_pole:Nnx #9 { T } + \@@_set_pole:Nne #9 { T } { { 0pt } {#6} { 1000pt } { 0pt } } } { - \@@_set_pole:Nnx #9 { T } + \@@_set_pole:Nne #9 { T } { { 0pt } {#2} { 1000pt } { 0pt } } } } @@ -2142,11 +2142,11 @@ { \dim_compare:nNnTF {#2} < {#6} { - \@@_set_pole:Nnx #9 { B } + \@@_set_pole:Nne #9 { B } { { 0pt } {#2} { 1000pt } { 0pt } } } { - \@@_set_pole:Nnx #9 { B } + \@@_set_pole:Nne #9 { B } { { 0pt } {#6} { 1000pt } { 0pt } } } } @@ -2490,10 +2490,10 @@ % structure then the code complains. % \begin{macrocode} \cs_new_protected:Npn \coffin_show_structure:N - { \@@_show_structure:NN \msg_show:nnxxxx } + { \@@_show_structure:NN \msg_show:nneeee } \cs_generate_variant:Nn \coffin_show_structure:N { c } \cs_new_protected:Npn \coffin_log_structure:N - { \@@_show_structure:NN \msg_log:nnxxxx } + { \@@_show_structure:NN \msg_log:nneeee } \cs_generate_variant:Nn \coffin_log_structure:N { c } \cs_new_protected:Npn \@@_show_structure:NN #1#2 { @@ -2525,8 +2525,8 @@ % } % Essentially a combination of \cs{coffin_show_structure:N} and % \cs{box_show:Nnn}, but we need to avoid having two prompts, so we -% use \cs{msg_term:nnxxxx} instead of -% \cs{msg_show:nnxxxx} in the |show| case. +% use \cs{msg_term:nneeee} instead of +% \cs{msg_show:nneeee} in the |show| case. % \begin{macrocode} \cs_new_protected:Npn \coffin_show:N #1 { \coffin_show:Nnn #1 \c_max_int \c_max_int } @@ -2535,10 +2535,10 @@ { \coffin_log:Nnn #1 \c_max_int \c_max_int } \cs_generate_variant:Nn \coffin_log:N { c } \cs_new_protected:Npn \coffin_show:Nnn - { \@@_show:NNNnn \msg_term:nnxxxx \box_show:Nnn } + { \@@_show:NNNnn \msg_term:nneeee \box_show:Nnn } \cs_generate_variant:Nn \coffin_show:Nnn { c } \cs_new_protected:Npn \coffin_log:Nnn - { \@@_show:NNNnn \msg_log:nnxxxx \box_show:Nnn } + { \@@_show:NNNnn \msg_log:nneeee \box_show:Nnn } \cs_generate_variant:Nn \coffin_log:Nnn { c } \cs_new_protected:Npn \@@_show:NNNnn #1#2#3#4#5 { diff --git a/macros/latex/contrib/l3kernel/l3color.dtx b/macros/latex/contrib/l3kernel/l3color.dtx index 1453001a2a..3d225b2d22 100644 --- a/macros/latex/contrib/l3kernel/l3color.dtx +++ b/macros/latex/contrib/l3kernel/l3color.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % @@ -720,7 +720,7 @@ \cs_generate_variant:Nn \exp_last_unbraced:Nf { c } \cs_new_protected:Npn \@@_convert:nnnN #1#2#3#4 { - \tl_set:Nx #4 + \tl_set:Ne #4 { \cs_if_exist_use:cTF { @@_convert_ #1 _ #2 :w } { #3 \s_@@_stop } @@ -850,11 +850,11 @@ % otherwise expands, then starts working through the expression itself. % At the end, we apply the payload. % \begin{macrocode} -\cs_new_protected:Npx \@@_parse:nN #1#2 +\cs_new_protected:Npe \@@_parse:nN #1#2 { - \tl_set:Nx \exp_not:c { l_@@_named_ . _tl } + \tl_set:Ne \exp_not:c { l_@@_named_ . _tl } { \exp_not:N \@@_model:N \exp_not:N \l_@@_current_tl } - \prop_put:NVx \exp_not:c { l_@@_named_ . _prop } + \prop_put:NVe \exp_not:c { l_@@_named_ . _prop } \exp_not:c { l_@@_named_ . _tl } { \exp_not:N \@@_values:N \exp_not:N \l_@@_current_tl } \exp_not:N \exp_args:Ne \exp_not:N \@@_parse_aux:nN @@ -889,14 +889,14 @@ \prop_get:cnNTF { l_@@_named_ #3 _prop } {#1} \l_@@_value_tl - { \tl_set:Nx #2 { {#1} { \l_@@_value_tl } } } + { \tl_set:Ne #2 { {#1} { \l_@@_value_tl } } } { \tl_set_eq:Nc \l_@@_model_tl { l_@@_named_ #3 _tl } \prop_get:cVN { l_@@_named_ #3 _prop } \l_@@_model_tl \l_@@_value_tl \@@_convert:nnN \l_@@_model_tl {#1} \l_@@_value_tl - \tl_set:Nx #2 + \tl_set:Ne #2 { {#1} { \l_@@_value_tl } @@ -926,7 +926,7 @@ \group_begin: \@@_extract:nNN {#2} \l_@@_model_tl \l_@@_value_tl \@@_parse_loop:w #3 ! ! ! ! \s_@@_stop - \tl_set:Nx \l_@@_internal_tl + \tl_set:Ne \l_@@_internal_tl { { \l_@@_model_tl } { \l_@@_value_tl } } \exp_args:NNNV \group_end: \tl_set:Nn #1 \l_@@_internal_tl @@ -951,7 +951,7 @@ { \fp_compare_p:nNn {#1} > { 0 } } { \fp_compare_p:nNn {#1} < { 100 } } { - \use:x + \use:e { \@@_parse_loop:nn {#1} { \tl_if_blank:nTF {#2} { white } {#2} } @@ -1004,7 +1004,7 @@ { \@@_parse_gray:n {#2} } { \@@_parse_std:n {#2} } } - \tl_set:Nx \l_@@_value_tl + \tl_set:Ne \l_@@_value_tl { \@@_parse_mix:NVVn \l_@@_model_tl \l_@@_value_tl \l_@@_next_value_tl {#1} @@ -1400,7 +1400,7 @@ \@@_convert:VVN \l_@@_model_tl \l_color_fixed_model_tl \l_@@_value_tl } - \tl_set:Nx #1 + \tl_set:Ne #1 { { \l_color_fixed_model_tl } { \l_@@_value_tl } } } } @@ -1419,12 +1419,12 @@ % will therefore always be available. The finalisation is separate from the % main function so it can also be applied to \emph{e.g.}~page color. % \begin{macrocode} -\cs_new_protected:Npx \@@_finalise_current: +\cs_new_protected:Npe \@@_finalise_current: { - \tl_set:Nx \exp_not:c { l_@@_named_ . _tl } + \tl_set:Ne \exp_not:c { l_@@_named_ . _tl } { \exp_not:N \@@_model:N \exp_not:N \l_@@_current_tl } \prop_clear:N \exp_not:c { l_@@_named_ . _prop } - \prop_put:NVx \exp_not:c { l_@@_named_ . _prop } + \prop_put:NVe \exp_not:c { l_@@_named_ . _prop } \exp_not:c { l_@@_named_ . _tl } { \exp_not:N \@@_values:N \exp_not:N \l_@@_current_tl } } @@ -1488,7 +1488,7 @@ { \cs_if_exist:cTF { @@_parse_model_ #1 :w } { - \tl_set:Nx #3 + \tl_set:Ne #3 { \use:c { @@_parse_model_ #1 :w } #2 , 0 , 0 , 0 , 0 \s_@@_stop } } { \msg_error:nnn { color } { unknown-model } {#1} } @@ -1496,7 +1496,7 @@ \cs_new_protected:Npn \@@_select_swap:Nnn #1#2#3 { \@@_convert:nVnN {#2} \l_color_fixed_model_tl {#3} \l_@@_value_tl - \tl_set:Nx #1 + \tl_set:Ne #1 { { \l_color_fixed_model_tl } { \l_@@_value_tl } } } % \end{macrocode} @@ -1781,10 +1781,10 @@ { \@@_parse:nN {#2} \l_@@_named_tl \tl_clear_new:c { l_@@_named_ #1 _tl } - \tl_set:cx { l_@@_named_ #1 _tl } + \tl_set:ce { l_@@_named_ #1 _tl } { \@@_model:N \l_@@_named_tl } \prop_clear_new:c { l_@@_named_ #1 _prop } - \prop_put:cvx { l_@@_named_ #1 _prop } { l_@@_named_ #1 _tl } + \prop_put:cve { l_@@_named_ #1 _prop } { l_@@_named_ #1 _tl } { \@@_values:N \l_@@_named_tl } \@@_set:nnw {#1} {#2} #2 ! \s_@@_stop } @@ -1811,7 +1811,7 @@ \@@_parse:nN {#2} \l_@@_internal_tl \exp_args:NNNV \group_end: \tl_set:Nn \l_@@_internal_tl \l_@@_internal_tl - \prop_put:cxx { l_@@_named_ #1 _prop } + \prop_put:cee { l_@@_named_ #1 _prop } { \@@_model:N \l_@@_internal_tl } { \@@_values:N \l_@@_internal_tl } } @@ -1828,16 +1828,16 @@ {#1} {#3} } } -\cs_new_protected:Npx \@@_set_aux:nnn #1#2#3 +\cs_new_protected:Npe \@@_set_aux:nnn #1#2#3 { \exp_not:N \@@_set_colon:nnw {#2} {#3} #1 \c_colon_str \c_colon_str \exp_not:N \s_@@_stop } -\use:x +\use:e { \cs_new_protected:Npn \exp_not:N \@@_set_colon:nnw - ##1##2 ##3 \c_colon_str ##4 \c_colon_str - ##5 \exp_not:N \s_@@_stop + #1#2 #3 \c_colon_str #4 \c_colon_str + #5 \exp_not:N \s_@@_stop } { \tl_if_blank:nTF {#4} @@ -1851,10 +1851,10 @@ \tl_if_blank:nF {#2} { \@@_select:nnN {#2} {#4} \l_@@_named_tl - \tl_set:Nx \l_@@_internal_tl { \@@_model:N \l_@@_named_tl } + \tl_set:Ne \l_@@_internal_tl { \@@_model:N \l_@@_named_tl } \tl_if_empty:cT { l_@@_named_ #1 _tl } { \tl_set_eq:cN { l_@@_named_ #1 _tl } \l_@@_internal_tl } - \prop_put:cVx { l_@@_named_ #1 _prop } \l_@@_internal_tl + \prop_put:cVe { l_@@_named_ #1 _prop } \l_@@_internal_tl { \@@_values:N \l_@@_named_tl } \@@_set_loop:nw {#1} #3 \s_@@_mark #5 \s_@@_stop } @@ -1867,9 +1867,9 @@ \prop_clear_new:c { l_@@_named_ #1 _prop } \str_if_eq:nnTF {#2} { . } { - \tl_set:cx { l_@@_named_ #1 _tl } + \tl_set:ce { l_@@_named_ #1 _tl } { \@@_model:N \l_@@_current_tl } - \prop_put:cvx { l_@@_named_ #1 _prop } { l_@@_named_ #1 _tl } + \prop_put:cve { l_@@_named_ #1 _prop } { l_@@_named_ #1 _tl } { \@@_values:N \l_@@_current_tl } } { @@ -1909,7 +1909,7 @@ % \begin{macrocode} \prop_new:c { l_@@_named_._prop } \tl_new:c { l_@@_named_._tl } -\tl_set:cx { l_@@_named_._tl } { \@@_model:N \l_@@_current_tl } +\tl_set:ce { l_@@_named_._tl } { \@@_model:N \l_@@_current_tl } % \end{macrocode} % \end{variable} % @@ -2005,7 +2005,7 @@ \group_begin: \cs_set_protected:Npn \@@_tmp:w #1#2 { - \cs_new_protected:cpx { @@_export_format_ #1 :nnN } ##1##2##3 + \cs_new_protected:cpe { @@_export_format_ #1 :nnN } ##1##2##3 { \exp_not:N \@@_export:nnnNN {#2} {##1} {##2} ##3 \exp_not:c { @@_export_ #1 :Nw } @@ -2042,10 +2042,10 @@ % required, then do some simple maths. % \begin{macrocode} \cs_new_protected:cpn { @@_export_comma-sep-rgb:Nw } #1#2 ~ #3 ~ #4 \s_@@_stop - { \tl_set:Nx #1 { #2 , #3 , #4 } } + { \tl_set:Ne #1 { #2 , #3 , #4 } } \cs_new_protected:Npn \@@_export_HTML:Nw #1#2 ~ #3 ~ #4 \s_@@_stop { - \tl_set:Nx #1 + \tl_set:Ne #1 { \@@_export_HTML:n {#2} \@@_export_HTML:n {#3} @@ -2195,7 +2195,7 @@ % \end{macrocode} % \end{macro} % -% \begin{macro}{\@@_model_init:nnn, \@@_model_init:nnx} +% \begin{macro}{\@@_model_init:nnn, \@@_model_init:nne} % A shared auxiliary to do the basics of setting up a new model: reserve a % number, create a white-equivalent, set up links to the backend. % \begin{macrocode} @@ -2204,13 +2204,13 @@ \int_gincr:N \g_@@_model_int \clist_map_inline:nn { fill , stroke , select } { - \cs_new_protected:cpx { @@_backend_ ##1 _ #1 :n } ####1 + \cs_new_protected:cpe { @@_backend_ ##1 _ #1 :n } ####1 { \exp_not:c { @@_backend_ ##1 _ #2 :nn } { color \int_use:N \g_@@_model_int } {####1} } } - \cs_new_protected:cpx { @@_model_ #1 _white: } + \cs_new_protected:cpe { @@_model_ #1 _white: } { \prop_put:Nnn \exp_not:N \l_@@_named_white_prop {#1} { \exp_not:n {#3} } @@ -2219,7 +2219,7 @@ } \use:c { @@_model_ #1 _white: } } -\cs_generate_variant:Nn \@@_model_init:nnn { nnx } +\cs_generate_variant:Nn \@@_model_init:nnn { nne } % \end{macrocode} % \end{macro} % @@ -2309,7 +2309,7 @@ \use:c { @@_model_separation_ #8 :nnnnnn } {#6} {#7} {#1} {#2} {#3} {#4} \prop_gput:Nnn \g_@@_alternative_model_prop {#6} {#8} - \prop_gput:Nnx \g_@@_colorants_prop {#6} + \prop_gput:Nne \g_@@_colorants_prop {#6} { \str_convert_pdfname:n {#7} } } \cs_new_protected:Npn \@@_model_separation_cmyk:nnnnnn #1#2#3#4#5#6 @@ -2355,7 +2355,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_model_convert:nnn #1#2#3 { - \cs_new:cpx { @@_convert_ #1 _ #3 :w } ##1 \s_@@_stop + \cs_new:cpe { @@_convert_ #1 _ #3 :w } ##1 \s_@@_stop { \exp_not:N \exp_args:NNe \exp_not:N \use:nn \exp_not:c { @@_convert_ #2 _ #3 :w } @@ -2520,7 +2520,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_model_devicen:nnn #1#2#3 { - \exp_args:Nx \@@_model_devicen:nnnn + \exp_args:Ne \@@_model_devicen:nnnn { \clist_count:n {#2} } {#1} {#2} {#3} } % \end{macrocode} @@ -2531,7 +2531,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_model_devicen:nnnn #1#2#3#4 { - \@@_model_init:nnx {#4} { devicen } + \@@_model_init:nne {#4} { devicen } { 0 \prg_replicate:nn { #1 - 1 } { ~ 0 } } @@ -2539,7 +2539,7 @@ { \@@_model_devicen_parse_generic:nn } {#4} {#1} \@@_model_devicen_init:nnn {#1} {#2} {#3} - \@@_model_devicen_convert:nnnx {#4} {#2} {#3} + \@@_model_devicen_convert:nnne {#4} {#2} {#3} { 1 \prg_replicate:nn { #1 - 1 } { ~ 1 } } @@ -2602,7 +2602,7 @@ {#1} { \@@_model_devicen_parse:nw {#2} ##1 , ##2 , \q_nil , \s_@@_stop } } - \cs_new:cpx { @@_parse_mix_ #1 :nw } + \cs_new:cpe { @@_parse_mix_ #1 :nw } ##1 ##2 \s_@@_mark ##3 \s_@@_stop { \exp_not:N \@@_model_devicen_mix:nw {##1} @@ -2680,7 +2680,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_model_devicen_init:nnnn #1#2#3#4 { - \tl_set:Nx \l_@@_internal_tl + \tl_set:Ne \l_@@_internal_tl { \prg_replicate:nn {#1} { 1.0 ~ } } \int_zero:N \l_@@_internal_int \clist_map_inline:nn {#4} @@ -2691,7 +2691,7 @@ \exp_after:wN \@@_model_devicen_transform:w \l_@@_value_tl , 0 , 0 , 0 , \s_@@_stop {#1} {#2} } - \tl_put_right:Nx \l_@@_internal_tl + \tl_put_right:Ne \l_@@_internal_tl { \prg_replicate:nn {#1} { neg ~ 1.0 ~ add ~ #1 ~ -1 ~ roll ~ } @@ -2699,7 +2699,7 @@ \prg_replicate:nn {#2} { ~ pop } ~ #1 ~ 1 ~ roll } - \use:x + \use:e { \@@_backend_devicen_init:nnn { @@ -2737,7 +2737,7 @@ } \cs_new_protected:Npn \@@_model_devicen_transform:nnn #1#2#3 { - \tl_put_right:Nx \l_@@_internal_tl + \tl_put_right:Ne \l_@@_internal_tl { \fp_compare:nNnF {#3} = \c_zero_fp { @@ -2761,7 +2761,7 @@ { \use:c { @@_model_devicen_convert_ #2 :nnn } {#1} {#3} } -\cs_generate_variant:Nn \@@_model_devicen_convert:nnnn { nnnx } +\cs_generate_variant:Nn \@@_model_devicen_convert:nnnn { nnne } \cs_new_protected:Npn \@@_model_devicen_convert_cmyk:nnn #1#2 { \tl_const:cn { c_@@_fallback_ #1 _tl } { cmyk } @@ -2780,7 +2780,7 @@ \cs_new_protected:Npn \@@_model_devicen_convert:nnnnn #1#2#3#4#5 { \cs_new:cpn { @@_convert_ #2 _ #1 :w } ##1 \s_@@_stop {#5} - \cs_new:cpx { @@_convert_ #1 _ #2 :w } ##1 \s_@@_stop + \cs_new:cpe { @@_convert_ #1 _ #2 :w } ##1 \s_@@_stop { \exp_not:c { @@_convert_devicen_ #2 : \prg_replicate:nn {#3} { n } w } \prg_replicate:nn {#3} { { 1 } } @@ -2963,7 +2963,7 @@ } \cs_new_protected:Npn \@@_model_iccbased:nn #1#2 { - \exp_args:NNx \prop_get:NnNTF \c_@@_icc_colorspace_signatures_prop + \prop_get:NeNTF \c_@@_icc_colorspace_signatures_prop { \file_hex_dump:nnn { #1 } { 17 } { 20 } } \l_@@_internal_tl { \exp_last_unbraced:NV \@@_model_iccbased_aux:nnnnnn @@ -2986,7 +2986,7 @@ \cs_new:cpn { @@_convert_ #5 _gray:w } ##1 \s_@@_stop { 0 } \cs_new:cpn { @@_convert_gray_ #5 :w } ##1 \s_@@_stop { #2 } \use:c { @@_model_devicen_parse_ #1 :nn } {#5} {#1} - \exp_args:Nx \@@_backend_iccbased_init:nnn + \exp_args:Ne \@@_backend_iccbased_init:nnn { \file_full_name:n {#6} } {#1} {#4} } % \end{macrocode} @@ -3047,9 +3047,9 @@ % is similar to the keys module here. % \begin{macrocode} \cs_new_protected:Npn \color_show:n - { \@@_show:Nn \msg_show:nnxxxx } + { \@@_show:Nn \msg_show:nneeee } \cs_new_protected:Npn \color_log:n - { \@@_show:Nn \msg_log:nnxxxx } + { \@@_show:Nn \msg_log:nneeee } \cs_new_protected:Npn \@@_show:Nn #1#2 { #1 { color } { show } diff --git a/macros/latex/contrib/l3kernel/l3debug.dtx b/macros/latex/contrib/l3kernel/l3debug.dtx index d700a0f021..8efdc986cc 100644 --- a/macros/latex/contrib/l3kernel/l3debug.dtx +++ b/macros/latex/contrib/l3kernel/l3debug.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % @@ -108,12 +108,12 @@ % \cs{flag_if_exist_p:n}, and if not raises a kernel-level error. % \end{function} % -% \begin{function}{\__kernel_debug_log:x} +% \begin{function}{\__kernel_debug_log:e} % \begin{syntax} -% \cs{__kernel_debug_log:x} \Arg{message text} +% \cs{__kernel_debug_log:e} \Arg{message text} % \end{syntax} % If the \texttt{log-functions} option is active, this function writes -% the \meta{message text} to the log file using \cs{iow_log:x}. +% the \meta{message text} to the log file using \cs{iow_log:e}. % Otherwise, the \meta{message text} is ignored using \cs{use_none:n}. % This function is only created if debugging is enabled. % \end{function} @@ -220,7 +220,7 @@ } \cs_set_protected:Npn \debug_resume: { - \__kernel_tl_set:Nx \l_@@_suspended_tl + \__kernel_tl_set:Ne \l_@@_suspended_tl { \tl_tail:N \l_@@_suspended_tl } \tl_if_empty:NT \l_@@_suspended_tl { @@ -269,7 +269,7 @@ \@@_suspended:T \use_none:nnn \cs_if_exist:NF ##1 { - \msg_error:nnx { debug } { non-declared-variable } + \msg_error:nne { debug } { non-declared-variable } { \token_to_str:N ##1 } } } @@ -278,7 +278,7 @@ \@@_suspended:T \use_none:nnn \cs_if_exist:NF ##1 { - \msg_error:nnx { kernel } { command-not-defined } + \msg_error:nne { kernel } { command-not-defined } { \token_to_str:N ##1 } } } @@ -362,7 +362,7 @@ \if:w #1 \scan_stop: \cs_gset_nopar:Npn #1 {#2} \else: - \msg_error:nnxxx { debug } { local-global } + \msg_error:nneee { debug } { local-global } {#1} {#2} { \iow_char:N \\ #3 } \fi: \fi: @@ -374,19 +374,19 @@ % \end{macro} % % \begin{macro}{\@@_log-functions_on:, \@@_log-functions_off:} -% \begin{macro}{\__kernel_debug_log:x} +% \begin{macro}{\__kernel_debug_log:e} % These two functions (corresponding to the \pkg{expl3} option -% \texttt{log-functions}) control whether \cs{__kernel_debug_log:x} +% \texttt{log-functions}) control whether \cs{__kernel_debug_log:e} % writes to the log file or not. By default, logging is off. % \begin{macrocode} \cs_new_protected:cpn { @@_log-functions_on: } { - \cs_set_protected:Npn \__kernel_debug_log:x - { \@@_suspended:T \use_none:nn \iow_log:x } + \cs_set_protected:Npn \__kernel_debug_log:e + { \@@_suspended:T \use_none:nn \iow_log:e } } \cs_new_protected:cpn { @@_log-functions_off: } - { \cs_set_protected:Npn \__kernel_debug_log:x { \use_none:n } } -\cs_new_protected:Npn \__kernel_debug_log:x { \use_none:n } + { \cs_set_protected:Npn \__kernel_debug_log:e { \use_none:n } } +\cs_new_protected:Npn \__kernel_debug_log:e { \use_none:n } % \end{macrocode} % \end{macro} % \end{macro} @@ -510,11 +510,11 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_generate_parameter_list:NNN #1#2#3 { - \__kernel_tl_set:Nx \l_@@_internal_tl + \__kernel_tl_set:Ne \l_@@_internal_tl { \exp_last_unbraced:Nf \use_ii:nnn \cs_split_function:N #1 } - \__kernel_tl_set:Nx #2 + \__kernel_tl_set:Ne #2 { \exp_args:NV \@@_build_parm_text:n \l_@@_internal_tl } - \__kernel_tl_set:Nx #3 + \__kernel_tl_set:Ne #3 { \exp_args:NV \@@_build_arg_list:n \l_@@_internal_tl } } \cs_new:Npn \@@_build_parm_text:n #1 @@ -658,7 +658,7 @@ { \cs_gset_eq:cN { @@_ \cs_to_str:N #1 } #1 \@@_generate_parameter_list:NNN #1 \l_@@_tmpa_tl \l_@@_tmpb_tl - \exp_args:Nx \tex_scantokens:D + \exp_args:Ne \tex_scantokens:D { \tex_global:D \cs_prefix_spec:N #1 \tex_def:D \exp_not:N #1 @@ -673,23 +673,23 @@ } \cs_set_protected:Npn \@@_add_to_debug_code:Nnn #1#2#3 { - \use:x + \use:e { \cs_set:Npn \exp_not:N \@@_tmp:w - ####1 \tl_to_str:n { macro: } - ####2 \tl_to_str:n { -> } - ####3 \c_backslash_str \tl_to_str:n { @@_ } + ##1 \tl_to_str:n { macro: } + ##2 \tl_to_str:n { -> } + ##3 \c_backslash_str \tl_to_str:n { @@_ } \cs_to_str:N #1 - ####4 \s_@@_stop + ##4 \s_@@_stop { - \exp_not:N \exp_args:Nx \exp_not:N \tex_scantokens:D + \exp_not:N \exp_args:Ne \exp_not:N \tex_scantokens:D { - \tex_global:D ####1 - \tex_def:D \exp_not:N #1 ####2 + \tex_global:D ##1 + \tex_def:D \exp_not:N #1 ##2 { - ####3 \tl_to_str:n {#2} + ##3 \tl_to_str:n {#2} \c_backslash_str @@_ \cs_to_str:N #1 - ####4 \tl_to_str:n {#3} + ##4 \tl_to_str:n {#3} } } } @@ -721,7 +721,7 @@ } \cs_set_protected:Npn \@@_patch_weird:Nnn #1#2#3 { - \use:x + \use:e { \tex_endlinechar:D -1 \scan_stop: \exp_not:N \tex_scantokens:D @@ -790,8 +790,8 @@ % % % \begin{macrocode} -\cs_gset_protected:Npn \__kernel_tl_set:Nx { \cs_set_nopar:Npx } -\cs_gset_protected:Npn \__kernel_tl_gset:Nx { \cs_gset_nopar:Npx } +\cs_gset_protected:Npn \__kernel_tl_set:Ne { \cs_set_nopar:Npe } +\cs_gset_protected:Npn \__kernel_tl_gset:Ne { \cs_gset_nopar:Npe } % \end{macrocode} % % Patching where the first argument to a function needs scope-checking: @@ -838,20 +838,21 @@ \skip_set_eq:NN \skip_add:Nn \skip_sub:Nn - \__kernel_tl_set:Nx + \__kernel_tl_set:Ne \tl_clear:N \tl_set_eq:NN \tl_put_left:Nn \tl_put_left:NV + \tl_put_left:Nv + \tl_put_left:Ne \tl_put_left:No - \tl_put_left:Nx \tl_put_right:Nn \tl_put_right:NV + \tl_put_right:Nv + \tl_put_right:Ne \tl_put_right:No - \tl_put_right:Nx \tl_build_begin:N \tl_build_put_right:Nn - \tl_build_put_right:Nx \tl_build_put_left:Nn \vbox_set:Nn \vbox_set_top:Nn @@ -902,20 +903,21 @@ \skip_gset_eq:NN \skip_gadd:Nn \skip_gsub:Nn - \__kernel_tl_gset:Nx + \__kernel_tl_gset:Ne \tl_gclear:N \tl_gset_eq:NN \tl_gput_left:Nn \tl_gput_left:NV + \tl_gput_left:Nv + \tl_gput_left:Ne \tl_gput_left:No - \tl_gput_left:Nx \tl_gput_right:Nn \tl_gput_right:NV + \tl_gput_right:Nv + \tl_gput_right:Ne \tl_gput_right:No - \tl_gput_right:Nx \tl_build_gbegin:N \tl_build_gput_right:Nn - \tl_build_gput_right:Nx \tl_build_gput_left:Nn \vbox_gset:Nn \vbox_gset_top:Nn @@ -940,7 +942,6 @@ \muskip_const:Nn \skip_const:Nn \tl_const:Nn - \tl_const:Nx } % \end{macrocode} % @@ -991,7 +992,7 @@ \__kernel_patch:nnn { } { - \__kernel_debug_log:x + \__kernel_debug_log:e { Defining~\token_to_str:N #1~ \msg_line_context: } } { \__kernel_chk_if_free_cs:N } @@ -1000,7 +1001,7 @@ { \cs_if_free:NF #4 { - \__kernel_debug_log:x + \__kernel_debug_log:e { Variant~\token_to_str:N #4~% already~defined;~ not~ changing~ it~ \msg_line_context: @@ -1013,7 +1014,7 @@ \__kernel_patch:nnn { \cs_if_exist:cF { \c_@@_code_root_str #1 } - { \__kernel_debug_log:x { Defining~key~#1~\msg_line_context: } } + { \__kernel_debug_log:e { Defining~key~#1~\msg_line_context: } } } { } { \@@_cmd_set_direct:nn } @@ -1021,7 +1022,7 @@ \__kernel_patch:nnn { } { - \__kernel_debug_log:x + \__kernel_debug_log:e { Defining~message~ #1 / #2 ~\msg_line_context: } } { \@@_chk_free:nn } @@ -1059,7 +1060,7 @@ { \@@_trace_push:nnN { regex } { 1 } \@@_escape_use:nnnn \group_begin: - \__kernel_tl_set:Nx \l_@@_internal_a_tl + \__kernel_tl_set:Ne \l_@@_internal_a_tl { \@@_trace_pop:nnN { regex } { 1 } \@@_escape_use:nnnn } \use_none:nnn } @@ -1081,7 +1082,7 @@ { \@@_build_for_cs:n } \__kernel_patch:nnn { - \@@_trace:nnx { regex } { 2 } + \@@_trace:nne { regex } { 2 } { regex~new~state~ L=\int_use:N \l_@@_left_state_int ~ -> ~ @@ -1103,24 +1104,24 @@ \__kernel_patch:nnn { \@@_trace_push:nnN { regex } { 1 } \@@_match:n - \@@_trace:nnx { regex } { 1 } { analyzing~query~token~list } + \@@_trace:nne { regex } { 1 } { analyzing~query~token~list } } { \@@_trace_pop:nnN { regex } { 1 } \@@_match:n } { \@@_match:n } \__kernel_patch:nnn { \@@_trace_push:nnN { regex } { 1 } \@@_match_cs:n - \@@_trace:nnx { regex } { 1 } { analyzing~query~token~list } + \@@_trace:nne { regex } { 1 } { analyzing~query~token~list } } { \@@_trace_pop:nnN { regex } { 1 } \@@_match_cs:n } { \@@_match_cs:n } \__kernel_patch:nnn - { \@@_trace:nnx { regex } { 1 } { initializing } } + { \@@_trace:nne { regex } { 1 } { initializing } } { } { \@@_match_init: } \__kernel_patch:nnn { - \@@_trace:nnx { regex } { 2 } + \@@_trace:nne { regex } { 2 } { state~\int_use:N \l_@@_curr_state_int } } { } @@ -1153,7 +1154,7 @@ { \char_set_catcode_parameter:N \# \tex_endlinechar:D -1 \scan_stop: - \exp_args:Nx \tex_scantokens:D + \exp_args:Ne \tex_scantokens:D { \tex_global:D \cs_prefix_spec:N #1 \tex_def:D \exp_not:N #1 \cs_parameter_spec:N #1 @@ -1172,7 +1173,7 @@ { \tl_map_inline:nn {#1} { - \exp_args:NNx \__kernel_patch:Nn ##1 + \exp_args:NNe \__kernel_patch:Nn ##1 { { \c_hash_str 1 } { @@ -1238,7 +1239,7 @@ { \tl_map_inline:nn {#1} { - \exp_args:NNx \__kernel_patch:Nn ##1 + \exp_args:NNe \__kernel_patch:Nn ##1 { { \exp_not:N \__kernel_chk_expr:nNnN { \c_hash_str 1 } @@ -1286,7 +1287,7 @@ { \tl_map_inline:nn {#1} { - \exp_args:NNx \__kernel_patch:Nn ##1 + \exp_args:NNe \__kernel_patch:Nn ##1 { { \exp_not:N \__kernel_chk_expr:nNnN { \c_hash_str 1 } @@ -1325,7 +1326,7 @@ { \clist_map_inline:nn { :nNnT , :nNnF , :nNnTF , _p:nNn } { - \exp_args:Ncx \__kernel_patch:Nn { #1 ##1 } + \exp_args:Nce \__kernel_patch:Nn { #1 ##1 } { { \exp_not:N \__kernel_chk_expr:nNnN { \c_hash_str 1 } @@ -1349,7 +1350,7 @@ { \clist_map_inline:nn { :nT , :nF , :nTF , _p:n } { - \exp_args:Ncx \__kernel_patch:Nn { #1 ##1 } + \exp_args:Nce \__kernel_patch:Nn { #1 ##1 } { { \exp_not:N \__kernel_chk_expr:nNnN { \c_hash_str 1 } diff --git a/macros/latex/contrib/l3kernel/l3deprecation.dtx b/macros/latex/contrib/l3kernel/l3deprecation.dtx index a60fe16ff4..c9564f4080 100644 --- a/macros/latex/contrib/l3kernel/l3deprecation.dtx +++ b/macros/latex/contrib/l3kernel/l3deprecation.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % @@ -145,11 +145,11 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_warn_once:nnNnn #1#2#3#4#5 { - \cs_gset_protected:Npx #3 + \cs_gset_protected:Npe #3 { \__kernel_if_debug:TF { - \exp_not:N \msg_warning:nnxxx + \exp_not:N \msg_warning:nneee { deprecation } { deprecated-command } {#1} { \token_to_str:N #3 } @@ -193,7 +193,7 @@ \exp_not:N \msg_expandable_error:nnnnn { deprecation } { deprecated-command } { \tl_to_str:n {#3} } { \token_to_str:N #1 } { \tl_to_str:n {#2} } - \exp_not:N \msg_error:nnxxx + \exp_not:N \msg_error:nneee { deprecation } { deprecated-command } { \tl_to_str:n {#3} } { \token_to_str:N #1 } { \tl_to_str:n {#2} } } @@ -682,25 +682,25 @@ { meaning } { meaning_remove } } { - \use:x + \use:e { \__kernel_patch_deprecation:nnNNpn { 2022-01-11 } { \peek_remove_spaces:n } - \cs_gset_protected:Npn \exp_not:c { peek_ #1 _ignore_spaces:NTF } ####1####2####3 + \cs_gset_protected:Npn \exp_not:c { peek_ #1 _ignore_spaces:NTF } ##1##2##3 { \peek_remove_spaces:n - { \exp_not:c { peek_ #1 :NTF } ####1 {####2} {####3} } + { \exp_not:c { peek_ #1 :NTF } ##1 {##2} {##3} } } \__kernel_patch_deprecation:nnNNpn { 2022-01-11 } { \peek_remove_spaces:n } - \cs_gset_protected:Npn \exp_not:c { peek_ #1 _ignore_spaces:NT } ####1####2 + \cs_gset_protected:Npn \exp_not:c { peek_ #1 _ignore_spaces:NT } ##1##2 { \peek_remove_spaces:n - { \exp_not:c { peek_ #1 :NT } ####1 {####2} } + { \exp_not:c { peek_ #1 :NT } ##1 {##2} } } \__kernel_patch_deprecation:nnNNpn { 2022-01-11 } { \peek_remove_spaces:n } - \cs_gset_protected:Npn \exp_not:c { peek_ #1 _ignore_spaces:NF } ####1####2 + \cs_gset_protected:Npn \exp_not:c { peek_ #1 _ignore_spaces:NF } ##1##2 { \peek_remove_spaces:n - { \exp_not:c { peek_ #1 :NF } ####1 {####2} } + { \exp_not:c { peek_ #1 :NF } ##1 {##2} } } } } diff --git a/macros/latex/contrib/l3kernel/l3doc.dtx b/macros/latex/contrib/l3kernel/l3doc.dtx index b1744b9f7b..ed675106ba 100644 --- a/macros/latex/contrib/l3kernel/l3doc.dtx +++ b/macros/latex/contrib/l3kernel/l3doc.dtx @@ -85,7 +85,7 @@ and all files in that bundle must be distributed together. % require you to do updates, if the class changes.}} % % \author{\Team} -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % \maketitle % \tableofcontents % @@ -957,7 +957,7 @@ and all files in that bundle must be distributed together. % \seq_set_split:NoV, % \str_case:fn, % \tl_count:f, -% \tl_greplace_all:Nxn, +% \tl_greplace_all:Nen, % \tl_greplace_all:Nno, % \tl_if_head_eq_charcode:oNTF, % \tl_if_head_eq_charcode:oNT, @@ -968,17 +968,14 @@ and all files in that bundle must be distributed together. % \tl_if_in:NoTF, % \tl_if_in:NoT, % \tl_if_in:NoF, -% \tl_remove_all:Nx, -% \tl_replace_all:Nxn, -% \tl_replace_all:Nnx, +% \tl_remove_all:Ne, +% \tl_replace_all:Nen, +% \tl_replace_all:Nne, % \tl_replace_all:Non, % \tl_replace_all:Nno, % \tl_replace_once:Noo, % \tl_to_str:f, % \tl_to_str:o, -% \prop_get:NxNTF, -% \prop_put:Nxn, -% \prop_gput:NVx, % } % A few missing variants. % \begin{macrocode} @@ -1001,9 +998,6 @@ and all files in that bundle must be distributed together. \cs_generate_variant:Nn \tl_replace_once:Nnn { Noo } \cs_generate_variant:Nn \tl_set_rescan:Nnn { NnV } \cs_generate_variant:Nn \tl_to_str:n { f , o } -\cs_generate_variant:Nn \prop_get:NnNTF { Nx } -\cs_generate_variant:Nn \prop_put:Nnn { Nx } -\cs_generate_variant:Nn \prop_gput:Nnn { NVx } % \end{macrocode} % \end{macro} % @@ -1033,7 +1027,7 @@ and all files in that bundle must be distributed together. \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:Nx #1 { \exp_after:wN \@@_tmp:w #1 #2 \q_stop } + \__kernel_tl_set:Ne #1 { \exp_after:wN \@@_tmp:w #1 #2 \q_stop } } \cs_generate_variant:Nn \@@_trim_right:Nn { No } % \end{macrocode} @@ -1076,7 +1070,7 @@ and all files in that bundle must be distributed together. #1 \g_@@_module_name_tl } } -\cs_new_protected:Npx \@@_replace_at_at_aux:Nn #1#2 +\cs_new_protected:Npe \@@_replace_at_at_aux:Nn #1#2 { \tl_replace_all:Nnn #1 { \token_to_str:N @ } { @ } \tl_replace_all:Nnn #1 { \token_to_str:N _ } { _ } @@ -1130,7 +1124,7 @@ and all files in that bundle must be distributed together. \@@_trim_right:Nn \l_@@_detect_internals_tl _ \@@_trim_right:Nn \l_@@_detect_internals_tl : \@@_trim_right:No \l_@@_detect_internals_tl { \token_to_str:N : } - \msg_warning:nnxxx { l3doc } { foreign-internal } + \msg_warning:nneee { l3doc } { foreign-internal } { \tl_to_str:N \l_@@_detect_internals_cs_tl } { \tl_to_str:N \l_@@_detect_internals_tl } { \tl_to_str:N \g_@@_module_name_tl } @@ -1253,14 +1247,14 @@ and all files in that bundle must be distributed together. \@@_if_almost_str:nTF {#1} { \@@_key_get_base_TF:nN {#1} \l_@@_tmpa_tl - \__kernel_tl_set:Nx #2 + \__kernel_tl_set:Ne #2 { \@@_split_function_do:on \l_@@_tmpa_tl { \@@_base_form_aux:nnN } } } { \tl_set:Nn #2 {#1} } } -\cs_new:Npx \@@_key_get_base_TF:nN #1#2 +\cs_new:Npe \@@_key_get_base_TF:nN #1#2 { - \__kernel_tl_set:Nx #2 { \exp_not:N \tl_to_str:n {#1} } + \__kernel_tl_set:Ne #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 } @@ -1312,7 +1306,7 @@ and all files in that bundle must be distributed together. \tl_if_head_eq_charcode:nNTF {#4} : { #2 {#1} } { - \use:x + \use:e { \exp_not:n {#3} { \@@_base_form_aux:nnN {#4} {#5} #6 } @@ -1602,7 +1596,7 @@ and all files in that bundle must be distributed together. % \begin{macrocode} \cs_set_protected:Npn \ifnot@excluded { - \exp_args:Nxx \expanded@notin + \exp_args:Nee \expanded@notin { \c_backslash_str \tl_to_str:N \macro@namepart , } { \exp_args:NV \tl_to_str:n \index@excludelist } } @@ -2016,7 +2010,7 @@ and all files in that bundle must be distributed together. \verbatim@font \@@_if_almost_str:VT \l_@@_cmd_tl { - \__kernel_tl_set:Nx \l_@@_cmd_tl { \tl_to_str:N \l_@@_cmd_tl } + \__kernel_tl_set:Ne \l_@@_cmd_tl { \tl_to_str:N \l_@@_cmd_tl } \bool_if:NT \g_@@_cs_break_bool { \regex_replace_all:nnN @@ -2038,13 +2032,13 @@ and all files in that bundle must be distributed together. { \quark_if_no_value:NF \l_@@_cmd_index_tl { - \__kernel_tl_set:Nx \l_@@_cmd_tl + \__kernel_tl_set:Ne \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:Nx \l_@@_index_module_tl + \__kernel_tl_set:Ne \l_@@_index_module_tl { \tl_to_str:N \l_@@_cmd_module_tl } } \@@_special_index_module:ooonN @@ -2153,19 +2147,19 @@ and all files in that bundle must be distributed together. % \end{macro} % % \begin{macro} -% {\@@_get_hyper_target:nN, \@@_get_hyper_target:oN, \@@_get_hyper_target:xN} +% {\@@_get_hyper_target:nN, \@@_get_hyper_target:oN, \@@_get_hyper_target:eN} % Create a \pkg{hyperref} anchor from a macro name~|#1| and stores it % in the token list variable~|#2|. For instance, |\prg_replicate:nn| % gives |doc/function//prg/replicate:nn|. % \begin{macrocode} \cs_new_protected:Npn \@@_get_hyper_target:nN #1#2 { - \__kernel_tl_set:Nx #2 { \tl_to_str:n {#1} } - \tl_replace_all:Nxn #2 { \c_underscore_str } { / } - \tl_remove_all:Nx #2 { \c_backslash_str } + \__kernel_tl_set:Ne #2 { \tl_to_str:n {#1} } + \tl_replace_all:Nen #2 { \c_underscore_str } { / } + \tl_remove_all:Ne #2 { \c_backslash_str } \tl_put_left:Nn #2 { doc/function// } } -\cs_generate_variant:Nn \@@_get_hyper_target:nN { o , x } +\cs_generate_variant:Nn \@@_get_hyper_target:nN { o , e } % \end{macrocode} % \end{macro} % @@ -2183,21 +2177,21 @@ and all files in that bundle must be distributed together. % \begin{macrocode} \cs_new_protected:Npn \@@_names_get_seq:nN #1#2 { - \__kernel_tl_set:Nx \l_@@_tmpa_tl { \tl_to_str:n {#1} } + \__kernel_tl_set:Ne \l_@@_tmpa_tl { \tl_to_str:n {#1} } \bool_if:NTF \l_@@_names_verb_bool { \seq_clear:N #2 \seq_put_right:NV #2 \l_@@_tmpa_tl } { - \tl_remove_all:Nx \l_@@_tmpa_tl + \tl_remove_all:Ne \l_@@_tmpa_tl { \iow_char:N \^^M \c_percent_str } - \tl_remove_all:Nx \l_@@_tmpa_tl { \tl_to_str:n { ^ ^ A } } - \tl_remove_all:Nx \l_@@_tmpa_tl { \iow_char:N \^^I } - \tl_remove_all:Nx \l_@@_tmpa_tl { \iow_char:N \^^M } + \tl_remove_all:Ne \l_@@_tmpa_tl { \tl_to_str:n { ^ ^ A } } + \tl_remove_all:Ne \l_@@_tmpa_tl { \iow_char:N \^^I } + \tl_remove_all:Ne \l_@@_tmpa_tl { \iow_char:N \^^M } \@@_detect_internals:N \l_@@_tmpa_tl \@@_replace_at_at:N \l_@@_tmpa_tl - \exp_args:NNx \seq_set_from_clist:Nn #2 + \exp_args:NNe \seq_set_from_clist:Nn #2 { \tl_to_str:N \l_@@_tmpa_tl } } } @@ -2238,14 +2232,14 @@ and all files in that bundle must be distributed together. \tl_if_head_eq_charcode:nNTF {#2} : { \@@_names_parse_aux:nnn {#4} {#4} { \scan_stop: } } { - \exp_args:Nx \@@_names_parse_aux:nnn + \exp_args:Ne \@@_names_parse_aux:nnn { \@@_base_form_aux:nnN {#1} {#2} #3 } {#1} {#2} } } { \bool_if:NT \l_@@_macro_TF_bool - { \msg_error:nnx { l3doc } { no-signature-TF } {#4} } + { \msg_error:nne { l3doc } { no-signature-TF } {#4} } \@@_names_parse_aux:nnn {#4} {#4} { \scan_stop: } } } @@ -2294,12 +2288,12 @@ and all files in that bundle must be distributed together. \str_if_eq:VnTF \l_@@_tmpa_tl { \scan_stop: } { \seq_gclear:N \g_@@_variants_seq - \@@_names_typeset_auxii:x { \g_@@_base_name_tl } + \@@_names_typeset_auxii:e { \g_@@_base_name_tl } } { \seq_gset_eq:NN \g_@@_variants_seq #1 \seq_gpop:NN \g_@@_variants_seq \l_@@_tmpb_tl - \@@_names_typeset_auxii:x + \@@_names_typeset_auxii:e { \g_@@_base_name_tl : \l_@@_tmpb_tl } } } @@ -2308,7 +2302,7 @@ and all files in that bundle must be distributed together. % \end{macro} % % \begin{macro} -% {\@@_names_typeset_auxii:n, \@@_names_typeset_auxii:x} +% {\@@_names_typeset_auxii:n, \@@_names_typeset_auxii:e} % In case the option |pTF| was given, typeset predicates before the % |TF| functions. In case the option |noTF| was given, typeset the % non-|TF| function as well. Pass the relevant boolean in both cases @@ -2318,7 +2312,7 @@ and all files in that bundle must be distributed together. { \bool_if:NT \l_@@_macro_pTF_bool { - \@@_names_typeset_block:xN + \@@_names_typeset_block:eN { \@@_predicate_from_base:n {#1} } \c_false_bool } @@ -2326,11 +2320,11 @@ and all files in that bundle must be distributed together. { \@@_names_typeset_block:nN {#1} \c_false_bool } \@@_names_typeset_block:nN {#1} \l_@@_macro_TF_bool } -\cs_generate_variant:Nn \@@_names_typeset_auxii:n { x } +\cs_generate_variant:Nn \@@_names_typeset_auxii:n { e } % \end{macrocode} % \end{macro} % -% \begin{macro}{\@@_names_typeset_block:nN, \@@_names_typeset_block:xN} +% \begin{macro}{\@@_names_typeset_block:nN, \@@_names_typeset_block:eN} % Names in \env{function} and \env{macro} environments are typeset % differently. To distinguish the two note that % \cs{l_@@_nested_macro_int} is at least one when in an \env{macro} @@ -2343,7 +2337,7 @@ and all files in that bundle must be distributed together. { \@@_typeset_function_block:nN } { \@@_macro_typeset_block:nN } } -\cs_generate_variant:Nn \@@_names_typeset_block:nN { x } +\cs_generate_variant:Nn \@@_names_typeset_block:nN { e } % \end{macrocode} % \end{macro} % @@ -2391,7 +2385,7 @@ and all files in that bundle must be distributed together. \seq_set_eq:NN \l_@@_tmpa_seq ##1 \seq_pop:NN \l_@@_tmpa_seq \l_@@_tmpa_tl \seq_get:NN \l_@@_tmpa_seq \l_@@_tmpb_tl - \exp_args:NNx + \exp_args:NNe \group_end: #1 { @@ -2479,7 +2473,7 @@ and all files in that bundle must be distributed together. \exp_args:No \@@_date_compare:nNnT {#1} > { \c_sys_year_int - \c_sys_month_int - \c_sys_day_int } { - \msg_error:nnxx { l3doc } { future-date } + \msg_error:nnee { l3doc } { future-date } { \tl_to_str:N \l_@@_macro_argument_tl } {#1} } @@ -2707,15 +2701,15 @@ and all files in that bundle must be distributed together. % % ^^A TODO: collect all index targets from a given function environment in a box and stick it at the top. % \begin{macro} -% {\@@_typeset_function_block:nN, \@@_typeset_function_block:xN} -% \begin{macro}{\@@_function_index:n, \@@_function_index:x} +% {\@@_typeset_function_block:nN, \@@_typeset_function_block:eN} +% \begin{macro}{\@@_function_index:n, \@@_function_index:e} % |#1| is a csname, |#2| a boolean indicating whether to add |TF| or not. % \begin{macrocode} \cs_new_protected:Npn \@@_typeset_function_block:nN #1#2 { - \@@_function_index:x + \@@_function_index:e { #1 \bool_if:NT #2 { \tl_to_str:n {TF} } } - \@@_function_label:xN {#1} #2 + \@@_function_label:eN {#1} #2 #1 \bool_if:NT #2 { \@@_typeset_TF: } \@@_typeset_expandability: @@ -2723,13 +2717,13 @@ and all files in that bundle must be distributed together. { \@@_typeset_variant_list:nN {#1} #2 } \\ } -\cs_generate_variant:Nn \@@_typeset_function_block:nN { x } +\cs_generate_variant:Nn \@@_typeset_function_block:nN { e } \cs_new_protected:Npn \@@_function_index:n #1 { \seq_gput_right:Nn \g_doc_functions_seq {#1} \@@_special_index:nn {#1} { usage } } -\cs_generate_variant:Nn \@@_function_index:n { x } +\cs_generate_variant:Nn \@@_function_index:n { e } % \end{macrocode} % % \begin{macrocode} @@ -2796,7 +2790,7 @@ and all files in that bundle must be distributed together. { \bool_if:NF \l_@@_no_label_bool { - \@@_get_hyper_target:xN + \@@_get_hyper_target:eN { \exp_not:n {#1} \bool_if:NT #2 { \tl_to_str:n {TF} } @@ -2805,7 +2799,7 @@ and all files in that bundle must be distributed together. \exp_args:No \label { \l_@@_tmpa_tl } } } -\cs_generate_variant:Nn \@@_function_label:nN { x } +\cs_generate_variant:Nn \@@_function_label:nN { e } % \end{macrocode} % \end{macro} % \end{macro} @@ -3064,7 +3058,7 @@ and all files in that bundle must be distributed together. \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:Nx \l_@@_macro_do_not_index_tl + \__kernel_tl_set:Ne \l_@@_macro_do_not_index_tl { \seq_use:Nn \l_@@_tmpa_seq { , } } \exp_args:NV \DoNotIndex \l_@@_macro_do_not_index_tl } @@ -3105,7 +3099,7 @@ and all files in that bundle must be distributed together. \@@_macro_single:nNN {#1} \c_true_bool #2 \seq_if_empty:NF \g_@@_variants_seq { - \@@_macro_typeset_variant_list:xN + \@@_macro_typeset_variant_list:eN { \@@_get_function_name:n {#1} } #2 } } @@ -3115,7 +3109,7 @@ and all files in that bundle must be distributed together. \seq_map_inline:Nn \g_@@_variants_seq { \@@_macro_single:nNN { #1 : ##1 } \c_false_bool #2 } } -\cs_generate_variant:Nn \@@_macro_typeset_variant_list:nN { x } +\cs_generate_variant:Nn \@@_macro_typeset_variant_list:nN { e } % \end{macrocode} % \end{macro} % @@ -3137,7 +3131,7 @@ and all files in that bundle must be distributed together. \tl_set:Nn \saved@macroname {#1} \@@_macro_typeset_one:nN {#1} #3 \bool_if:NT #3 { \DoNotIndex {#1} } - \exp_args:Nx \@@_macro_index:nN + \exp_args:Ne \@@_macro_index:nN { #1 \bool_if:NT #3 { \tl_to_str:n { TF } } } #2 } @@ -3191,7 +3185,7 @@ and all files in that bundle must be distributed together. \cs_new_protected:Npn \@@_print_macroname:nN #1#2 { \strut - \@@_get_hyper_target:xN + \@@_get_hyper_target:eN { \exp_not:n {#1} \bool_if:NT #2 { \tl_to_str:n {TF} } @@ -3295,7 +3289,7 @@ and all files in that bundle must be distributed together. % \begin{macrocode} \cs_new_protected:Npn \@@_test_missing:n #1 { - \@@_test_missing_aux:Nxn + \@@_test_missing_aux:Nen \g_@@_missing_tests_prop { \seq_use:Nn \l_@@_names_seq { , } } { { \g_file_curr_name_str \c_space_tl (#1) } } @@ -3307,7 +3301,7 @@ and all files in that bundle must be distributed together. { \tl_set:Nn \l_@@_tmpa_tl {#3} } \prop_put:Nno #1 {#2} \l_@@_tmpa_tl } -\cs_generate_variant:Nn \@@_test_missing_aux:Nnn { Nx } +\cs_generate_variant:Nn \@@_test_missing_aux:Nnn { Ne } % \end{macrocode} % \end{macro} % @@ -3345,7 +3339,7 @@ and all files in that bundle must be distributed together. { \seq_set_filter:NNn \l_@@_tmpa_seq \l_@@_names_seq { ! \@@_if_macro_internal_p:n {##1} } - \seq_gput_right:Nx \g_@@_not_tested_seq + \seq_gput_right:Ne \g_@@_not_tested_seq { \seq_use:Nn \l_@@_tmpa_seq { , } \bool_if:NTF \l_@@_macro_pTF_bool {~(pTF)} @@ -3415,10 +3409,10 @@ and all files in that bundle must be distributed together. \bool_if:NTF \l_@@_macro_var_bool {variable} {function} \int_compare:nNnTF \l_@@_tmpa_int = 1 {~is~} {s~are~} documented~on~page~ - \@@_get_hyper_target:xN + \@@_get_hyper_target:eN { \seq_item:Nn \g_@@_nested_names_seq { 1 } } \l_@@_tmpa_tl - \exp_args:Nx \pageref { \l_@@_tmpa_tl } . + \exp_args:Ne \pageref { \l_@@_tmpa_tl } . } \seq_gclear:N \g_@@_nested_names_seq } @@ -3540,6 +3534,39 @@ and all files in that bundle must be distributed together. % \end{macrocode} % \end{environment} % +% \subsection{Footnote support} +% The environments \env{function} and \env{variable} are boxes +% and so looses footnotes. The following implements support. +% It relies currently on an internal from hyperref to get the correct targets. +% +% \begin{macrocode} +\providecommand\Hy@footnote@currentHref{} +\prop_new:N\g_@@_fnmark_prop +\cs_new_protected:Npn \@@_fn_store: + { + \prop_gput:Nee\g_@@_fnmark_prop + {fn\int_use:N\c@footnote}{{\Hy@footnote@currentHref}{\int_use:N\c@footnote}} + } +\cs_new_protected:Npn \@@_fn_restore:n #1 + { + \prop_get:NnN \g_@@_fnmark_prop {fn#1}\l_@@_tmpa_tl + \tl_gset:Ne\Hy@footnote@currentHref + {\exp_last_unbraced:NV\use_i:nn \l_@@_tmpa_tl } + \setcounter{footnote}{\exp_last_unbraced:NV\use_ii:nn \l_@@_tmpa_tl} + } + +\cs_generate_variant:Nn \hook_gput_next_code:nn {ne} +\cs_new_protected:Npn \@@_fn_footnote:nn #1 #2 + { + \footnotemark + \@@_fn_store: + \hook_gput_next_code:ne {env/#1/after} + {\exp_not:N\@@_fn_restore:n{\int_use:N\c@footnote}{\exp_not:n{\footnotetext{#2}}}}} + +\AddToHook{env/function/begin}{\def\footnote{\@@_fn_footnote:nn{function}}} +\AddToHook{env/variable/begin}{\def\footnote{\@@_fn_footnote:nn{variable}}} +% \end{macrocode} +% % \subsection{Documenting templates} % % \begin{macrocode} @@ -3713,7 +3740,7 @@ and all files in that bundle must be distributed together. \@tempswatrue \if@partsw \@tempswafalse - \cs_set:Npx \@tempb {#1} + \cs_set:Npe \@tempb {#1} \clist_map_inline:Nn \@partlist { \if_meaning:w \@tempa \@tempb @@ -3734,7 +3761,7 @@ and all files in that bundle must be distributed together. \part{\currentfile} { \cs_set_eq:NN \ttfamily\relax - \cs_gset:Npx \filekey + \cs_gset:Npe \filekey { \filekey,~ \thepart = { \ttfamily \currentfile } } } \DocInput{\currentfile} @@ -3920,6 +3947,8 @@ and all files in that bundle must be distributed together. \tl_new:N \l_@@_doc_def_tl \tl_new:N \l_@@_doc_undef_tl \tl_new:N \l_@@_undoc_def_tl +\tl_const:Nn \c_@@_iow_separator_tl { ---- } +\tl_const:Nn \c_@@_iow_midrule_tl { -- } % \end{macrocode} % % \begin{macrocode} @@ -3928,7 +3957,7 @@ and all files in that bundle must be distributed together. \bool_lazy_and:nnT { \g_@@_typeset_implementation_bool } { \g_@@_checkfunc_bool } { - \iow_term:x { \c_@@_iow_separator_tl \iow_newline: } + \iow_term:e { \c_@@_iow_separator_tl \iow_newline: } \iow_open:Nn \g_@@_func_iow { \c_sys_jobname_str .cmds } \tl_clear:N \l_@@_doc_def_tl @@ -3938,12 +3967,12 @@ and all files in that bundle must be distributed together. { \seq_if_in:NnTF \g_doc_macros_seq {##1} { - \tl_put_right:Nx \l_@@_doc_def_tl + \tl_put_right:Ne \l_@@_doc_def_tl { ##1 \iow_newline: } \iow_now:Nn \g_@@_func_iow { > ~ ##1 } } { - \tl_put_right:Nx \l_@@_doc_undef_tl + \tl_put_right:Ne \l_@@_doc_undef_tl { ##1 \iow_newline: } \iow_now:Nn \g_@@_func_iow { ! ~ ##1 } } @@ -3952,7 +3981,7 @@ and all files in that bundle must be distributed together. { \seq_if_in:NnF \g_doc_functions_seq {##1} { - \tl_put_right:Nx \l_@@_undoc_def_tl + \tl_put_right:Ne \l_@@_undoc_def_tl { ##1 \iow_newline: } \iow_now:Nn \g_@@_func_iow { ? ~ ##1 } } @@ -3971,13 +4000,13 @@ and all files in that bundle must be distributed together. \l_@@_undoc_def_tl \iow_close:N \g_@@_func_iow - \iow_term:x { \c_@@_iow_separator_tl } + \iow_term:e { \c_@@_iow_separator_tl } } } \AtEndDocument { \@@_show_functions_defined: } % \end{macrocode} % -% TODO: use \cs{iow_term:x}. +% TODO: use \cs{iow_term:e}. % \begin{macrocode} \cs_new_protected:Npn \@@_functions_typeout:nN #1#2 { @@ -4014,7 +4043,7 @@ and all files in that bundle must be distributed together. \iow_newline: \space\space\space\space\space\space * ~ ##1 } - \tl_put_right:Nx \l_@@_tmpa_tl + \tl_put_right:Ne \l_@@_tmpa_tl { \iow_newline: \iow_newline: The~ following~ macro(s)~ have~ incomplete~ tests: @@ -4032,7 +4061,7 @@ and all files in that bundle must be distributed together. \iow_newline: \space\space\space\space ##1 } - \tl_put_right:Nx \l_@@_tmpa_tl + \tl_put_right:Ne \l_@@_tmpa_tl { \iow_newline: \iow_newline: @@ -4073,7 +4102,7 @@ and all files in that bundle must be distributed together. % \end{macrocode} % Force targets on every code line. % \begin{macrocode} -\cs_set_nopar:Npx \theCodelineNo +\cs_set_nopar:Npe \theCodelineNo { \group_begin: \exp_not:N \HD@savedestfalse @@ -4091,7 +4120,7 @@ and all files in that bundle must be distributed together. % \begin{macrocode} \bool_new:N \l_@@_allow_indexing_bool \bool_set_true:N \l_@@_allow_indexing_bool -\use:x +\use:e { \exp_not:n { \cs_set_nopar:Npn \@starttoc #1 } { @@ -4162,7 +4191,7 @@ and all files in that bundle must be distributed together. % \begin{macrocode} \cs_gset_protected:Npn \it@is@a #1 { - \use:x + \use:e { \@@_special_index_module:nnnnN {#1} @@ -4223,7 +4252,7 @@ and all files in that bundle must be distributed together. % \end{arguments} % \begin{macrocode} { - \use:x + \use:e { \exp_not:n { \@@_special_index_aux:nnnnnn {#1} {#2} } \tl_if_empty:nTF {#3} @@ -4297,7 +4326,7 @@ and all files in that bundle must be distributed together. % \begin{macrocode} \group_begin: \char_set_active_eq:NN - \scan_stop: -\tl_const:Nx \c_@@_active_minus_tl { \char_generate:nn { `- } { 13 } } +\tl_const:Ne \c_@@_active_minus_tl { \char_generate:nn { `- } { 13 } } \group_end: \cs_new_eq:NN \@@_old_hdpindex:nn \hdpindex \cs_new_eq:NN \@@_old_hdclindex:nnn \hdclindex @@ -4308,7 +4337,7 @@ and all files in that bundle must be distributed together. \cs_new_protected:Npn \@@_hdindex:nn #1#2 { \tl_set:Nn \l_@@_tmpa_tl {#2} - \tl_replace_all:Nxn \l_@@_tmpa_tl + \tl_replace_all:Nen \l_@@_tmpa_tl { \exp_not:V \c_@@_active_minus_tl \exp_not:V \c_@@_active_minus_tl } { -- } \seq_set_split:NnV \l_@@_tmpa_seq { -- } \l_@@_tmpa_tl @@ -4322,11 +4351,11 @@ and all files in that bundle must be distributed together. \tl_replace_all:Nnn \l_@@_tmpa_tl { MMMM } { \use_none:nn } \tl_if_in:NnT \l_@@_tmpa_tl { MMMD } { - \tl_replace_all:Nxn \l_@@_tmpa_tl + \tl_replace_all:Nen \l_@@_tmpa_tl { \exp_not:V \c_@@_active_minus_tl MMMD } { - MMMD } \tl_replace_all:Nnn \l_@@_tmpa_tl { - MMMD } { \@@_hdindex_aux:w } } - \use:x { \exp_not:n {#1} { \exp_not:V \l_@@_tmpa_tl } } + \use:e { \exp_not:n {#1} { \exp_not:V \l_@@_tmpa_tl } } } \cs_new_protected:Npn \@@_hdindex_aux:w #1 M { } % \end{macrocode} @@ -4335,7 +4364,7 @@ and all files in that bundle must be distributed together. % \begin{macrocode} \cs_new_protected:Npn \@@_special_index_set:Nn #1#2 { - \__kernel_tl_set:Nx #1 { \tl_to_str:n {#2} } + \__kernel_tl_set:Ne #1 { \tl_to_str:n {#2} } \@@_if_almost_str:nTF {#2} { \tl_replace_all:Non #1 { \tl_to_str:n { __ } } @@ -4344,7 +4373,7 @@ and all files in that bundle must be distributed together. \token_to_str:N \_ \token_to_str:N \_ \token_to_str:N \verb * \verbatimchar } - \exp_args:Nx \tl_map_inline:nn + \exp_args:Ne \tl_map_inline:nn { \tl_to_str:N \verbatimchar \token_to_str:N _ } { \tl_replace_all:Nnn #1 {##1} @@ -4353,7 +4382,7 @@ and all files in that bundle must be distributed together. \token_to_str:N \verb * \verbatimchar } } - \__kernel_tl_set:Nx #1 + \__kernel_tl_set:Ne #1 { \token_to_str:N \verb * \verbatimchar #1 \verbatimchar @@ -4377,7 +4406,7 @@ and all files in that bundle must be distributed together. { \tl_map_inline:nn { \quotechar \actualchar \encapchar \levelchar \bslash } { - \tl_replace_all:Nxn #1 + \tl_replace_all:Nen #1 { \tl_to_str:N ##1 } { \quotechar \tl_to_str:N ##1 } } } @@ -4404,7 +4433,7 @@ and all files in that bundle must be distributed together. \cs_new_protected:Npn \@@_key_get:n #1 { \@@_key_get_base:nN {#1} \l_@@_index_macro_tl - \__kernel_tl_set:Nx \l_@@_index_key_tl + \__kernel_tl_set:Ne \l_@@_index_key_tl { \tl_to_str:N \l_@@_index_macro_tl } \tl_clear:N \l_@@_index_module_tl \tl_if_in:NoTF \l_@@_index_key_tl { \tl_to_str:n { __ } } @@ -4427,7 +4456,7 @@ and all files in that bundle must be distributed together. } \cs_new_protected:Npn \@@_key_pop: { - \__kernel_tl_set:Nx \l_@@_index_key_tl + \__kernel_tl_set:Ne \l_@@_index_key_tl { \tl_tail:N \l_@@_index_key_tl } } % \end{macrocode} @@ -4442,7 +4471,7 @@ and all files in that bundle must be distributed together. { \cs_set:Npn \@@_tmpa:w ##1 #1 ##2 \q_stop { \exp_not:n {##1} } - \__kernel_tl_set:Nx \l_@@_index_module_tl + \__kernel_tl_set:Ne \l_@@_index_module_tl { \exp_after:wN \@@_tmpa:w \l_@@_index_module_tl #1 \q_stop } } \cs_new_protected:Npn \@@_key_drop_underscores: @@ -4495,7 +4524,7 @@ and all files in that bundle must be distributed together. % \begin{macrocode} \cs_new_protected:Npn \@@_key_var: { - \exp_args:Nx \tl_if_head_eq_charcode:nNTF + \exp_args:Ne \tl_if_head_eq_charcode:nNTF { \exp_args:No \str_tail:n \l_@@_index_key_tl } _ { \str_case:fn { \str_head:N \l_@@_index_key_tl } @@ -4535,7 +4564,7 @@ and all files in that bundle must be distributed together. % sorted differently in an index. % \begin{macrocode} \clist_new:N \g_@@_non_modules_clist -\clist_gset:Nx \g_@@_non_modules_clist +\clist_gset:Ne \g_@@_non_modules_clist { \tl_to_str:n { diff --git a/macros/latex/contrib/l3kernel/l3doc.pdf b/macros/latex/contrib/l3kernel/l3doc.pdf Binary files differindex 8ec07dcef3..b8cd8d1e29 100644 --- a/macros/latex/contrib/l3kernel/l3doc.pdf +++ b/macros/latex/contrib/l3kernel/l3doc.pdf diff --git a/macros/latex/contrib/l3kernel/l3docstrip.dtx b/macros/latex/contrib/l3kernel/l3docstrip.dtx index 2b40c56fc5..df2b7c63ab 100644 --- a/macros/latex/contrib/l3kernel/l3docstrip.dtx +++ b/macros/latex/contrib/l3kernel/l3docstrip.dtx @@ -63,7 +63,7 @@ % }^^A % } % -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3docstrip.pdf b/macros/latex/contrib/l3kernel/l3docstrip.pdf Binary files differindex d93d065c3b..39d53ac5b9 100644 --- a/macros/latex/contrib/l3kernel/l3docstrip.pdf +++ b/macros/latex/contrib/l3kernel/l3docstrip.pdf diff --git a/macros/latex/contrib/l3kernel/l3expan.dtx b/macros/latex/contrib/l3kernel/l3expan.dtx index 0d7e3e877a..d4fe6b3a30 100644 --- a/macros/latex/contrib/l3kernel/l3expan.dtx +++ b/macros/latex/contrib/l3kernel/l3expan.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % @@ -501,6 +501,7 @@ % \exp_args:NNNo, % \exp_args:NNNV, % \exp_args:NNNv, +% \exp_args:NNNe, % \exp_args:Nccc, % \exp_args:NcNc, % \exp_args:NcNo, @@ -664,8 +665,8 @@ % This is the \TeX{} \tn{noexpand} primitive. It only prevents % expansion. At the beginning of an |f|-type argument, a space % \meta{token} is removed even if it appears as \cs{exp_not:N} -% \cs{c_space_token}. In an |x|-expanding definition -% (\cs{cs_new:Npx}), a macro parameter introduces an argument even +% \cs{c_space_token}. In an |e|-expanding definition +% (\cs{cs_new:Npe}), a macro parameter introduces an argument even % if it appears as \cs{exp_not:N} |#| |1|. This differs from % \cs{exp_not:n}. % \end{texnote} @@ -692,7 +693,7 @@ % \emph{must} be surrounded by braces. % \begin{texnote} % This is the \eTeX{} \tn{unexpanded} primitive. In an -% |x|-expanding definition (\cs{cs_new:Npx}), \cs{exp_not:n}~|{#1}| +% |x|-expanding definition (\cs{cs_new:Npe}), \cs{exp_not:n}~|{#1}| % is equivalent to |##1| rather than to~|#1|, namely it inserts the % two characters |#| and~|1|. In an |e|-type argument % \cs{exp_not:n}~|{#}| is equivalent to |#|, namely it inserts the @@ -947,7 +948,7 @@ % In this section a general mechanism for defining functions that handle % arguments is defined. These general expansion functions are % expandable unless |x| is used. (Any version of |x| is going to have -% to use one of the \LaTeX3 names for \cs{cs_set:Npx} at some +% to use one of the \LaTeX3 names for \cs{cs_set:Npe} at some % point, and so is never going to be expandable.) % % The definition of expansion functions with this technique happens @@ -1080,7 +1081,7 @@ % \begin{macrocode} \cs_new_protected:Npn \::x #1 \::: #2#3 { - \cs_set_nopar:Npx \l_@@_internal_tl + \cs_set_nopar:Npe \l_@@_internal_tl { \exp_not:n { #1 \::: } { \exp_not:n {#2} {#3} } } \l_@@_internal_tl } @@ -1325,7 +1326,7 @@ % % \begin{macro}[EXP] % { -% \exp_args:NNNV, \exp_args:NNNv, +% \exp_args:NNNV, \exp_args:NNNv, \exp_args:NNNe, % \exp_args:NcNc, \exp_args:NcNo, % \exp_args:Ncco, % } @@ -1345,6 +1346,13 @@ \exp_after:wN #3 \exp_after:wN { \exp:w \@@_eval_register:c {#4} } } +\cs_new:Npn \exp_args:NNNe #1#2#3#4 + { + \exp_after:wN #1 + \exp_after:wN #2 + \exp_after:wN #3 + \tex_expanded:D { {#4} } + } \cs_new:Npn \exp_args:NcNc #1#2#3#4 { \exp_after:wN #1 @@ -1410,7 +1418,7 @@ } \cs_new_protected:Npn \::x_unbraced \::: #1#2 { - \cs_set_nopar:Npx \l_@@_internal_tl { \exp_not:n {#1} #2 } + \cs_set_nopar:Npe \l_@@_internal_tl { \exp_not:n {#1} #2 } \l_@@_internal_tl } % \end{macrocode} @@ -1682,7 +1690,7 @@ % \end{arguments} % After making sure that the base form exists, test whether it is % protected or not and define \cs{@@_tmp:w} as either -% \cs{cs_new:Npx} or \cs{cs_new_protected:Npx}, which is +% \cs{cs_new:Npe} or \cs{cs_new_protected:Npe}, which is % then used to define all the variants (except those involving % \texttt{x}-expansion, always protected). Split up the original base % function only once, to grab its name and signature. Then we wish to @@ -1692,7 +1700,7 @@ \cs_new_protected:Npn \cs_generate_variant:Nn #1#2 { \@@_generate_variant:N #1 - \use:x + \use:e { \@@_generate_variant:nnNN \cs_split_function:N #1 @@ -1728,21 +1736,21 @@ % |\bot|, |\splittop|, or |\splitbot|, with |\| replaced by the % appropriate escape character. If |pr| appears in the part before % |ma|, the first \cs{s_@@_mark} is taken as an argument of the |wwNw| -% auxiliary, and |#3| is \cs{cs_new_protected:Npx}, otherwise it -% is \cs{cs_new:Npx}. +% auxiliary, and |#3| is \cs{cs_new_protected:Npe}, otherwise it +% is \cs{cs_new:Npe}. % \begin{macrocode} -\cs_new_protected:Npx \@@_generate_variant:N #1 +\cs_new_protected:Npe \@@_generate_variant:N #1 { \exp_not:N \exp_after:wN \exp_not:N \if_meaning:w \exp_not:N \exp_not:N #1 #1 - \cs_set_eq:NN \exp_not:N \@@_tmp:w \cs_new_protected:Npx + \cs_set_eq:NN \exp_not:N \@@_tmp:w \cs_new_protected:Npe \exp_not:N \else: \exp_not:N \exp_after:wN \exp_not:N \@@_generate_variant:ww \exp_not:N \token_to_meaning:N #1 \tl_to_str:n { ma } \s_@@_mark - \s_@@_mark \cs_new_protected:Npx + \s_@@_mark \cs_new_protected:Npe \tl_to_str:n { pr } - \s_@@_mark \cs_new:Npx + \s_@@_mark \cs_new:Npe \s_@@_stop \exp_not:N \fi: } @@ -1773,7 +1781,7 @@ \cs_new_protected:Npn \@@_generate_variant:nnNN #1#2#3#4 { \if_meaning:w \c_false_bool #3 - \msg_error:nnx { kernel } { missing-colon } + \msg_error:nne { kernel } { missing-colon } { \token_to_str:c {#1} } \exp_after:wN \@@_use_none_delimit_by_q_recursion_stop:w \fi: @@ -1837,7 +1845,7 @@ \if_meaning:w \scan_stop: #4 \exp_after:wN \@@_use_none_delimit_by_q_recursion_stop:w \fi: - \use:x + \use:e { \exp_not:N \@@_generate_variant:wwNN \@@_generate_variant_loop:nNwN { } @@ -1976,7 +1984,7 @@ \exp_not:n { \s_@@_mark - \msg_error:nnxx { kernel } { variant-too-long } + \msg_error:nnee { kernel } { variant-too-long } {#5} { \token_to_str:N #3 } \use_none:nnn \s_@@_stop @@ -1991,7 +1999,7 @@ \exp_not:n { \s_@@_mark - \msg_error:nnxxxx { kernel } { invalid-variant } + \msg_error:nneeee { kernel } { invalid-variant } {#7} { \token_to_str:N #5 } {#1} {#2} \use_none:nnn \s_@@_stop @@ -2005,7 +2013,7 @@ #3 \s_@@_stop #4 #5 {#6} {#7} \exp_not:n { - \msg_error:nnxxxx + \msg_error:nneeee { kernel } { deprecated-variant } {#7} { \token_to_str:N #5 } {#1} {#2} } @@ -2039,7 +2047,7 @@ % (provided \texttt{log-functions} is active). % Otherwise, make sure that the |\exp_args:N #3| form is defined, and % if it contains |x|, change \cs{@@_tmp:w} locally to -% \cs{cs_new_protected:Npx}. Then define the variant by +% \cs{cs_new_protected:Npe}. Then define the variant by % combining the |\exp_args:N #3| variant and the base function. % \begin{macrocode} \cs_new_protected:Npn \@@_generate_variant:wwNN @@ -2074,11 +2082,11 @@ % the \cs[no-index]{exp_args:N\dots} function as a macro taking up to % $9$~arguments and expanding them using \cs{use:x} or \cs{tex_expanded:D}. % \begin{macrocode} -\cs_new_protected:Npx \@@_generate_internal_variant:n #1 +\cs_new_protected:Npe \@@_generate_internal_variant:n #1 { \exp_not:N \@@_generate_internal_variant:wwnNwn #1 \s_@@_mark - { \cs_set_eq:NN \exp_not:N \@@_tmp:w \cs_new_protected:Npx } + { \cs_set_eq:NN \exp_not:N \@@_tmp:w \cs_new_protected:Npe } \cs_new_protected:cpn \use:x \token_to_str:N x \s_@@_mark @@ -2111,7 +2119,7 @@ ##3 \s_@@_mark { - \use:x + \use:e { ##1 { exp_args:N ##3 } { \@@_generate_internal_variant_loop:n ##3 { : \use_i:nn } } @@ -2206,7 +2214,7 @@ % \begin{macrocode} \cs_new_protected:Npn \prg_generate_conditional_variant:Nnn #1 { - \use:x + \use:e { \@@_generate_variant:nnNnn \cs_split_function:N #1 @@ -2215,7 +2223,7 @@ \cs_new_protected:Npn \@@_generate_variant:nnNnn #1#2#3#4#5 { \if_meaning:w \c_false_bool #3 - \msg_error:nnx { kernel } { missing-colon } + \msg_error:nne { kernel } { missing-colon } { \token_to_str:c {#1} } \@@_use_i_delimit_by_s_stop:nw \fi: @@ -2235,7 +2243,7 @@ \cs_if_exist_use:cTF { @@_generate_variant_#1_form:nnn } { {#3} {#4} {#5} } { - \msg_error:nnxx + \msg_error:nnee { kernel } { conditional-form-unknown } {#1} { \token_to_str:c { #3 : #4 } } } diff --git a/macros/latex/contrib/l3kernel/l3file.dtx b/macros/latex/contrib/l3kernel/l3file.dtx index 1c1401e392..2d2ae6a183 100644 --- a/macros/latex/contrib/l3kernel/l3file.dtx +++ b/macros/latex/contrib/l3kernel/l3file.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % @@ -448,7 +448,10 @@ % \subsection{Writing to files} % % \begin{function}[updated = 2012-06-05] -% {\iow_now:Nn, \iow_now:NV, \iow_now:Nx, \iow_now:cn, \iow_now:cV, \iow_now:cx} +% { +% \iow_now:Nn, \iow_now:NV, \iow_now:Ne, +% \iow_now:cn, \iow_now:cV, \iow_now:ce +% } % \begin{syntax} % \cs{iow_now:Nn} \meta{stream} \Arg{tokens} % \end{syntax} @@ -457,7 +460,7 @@ % on expansion of \cs{iow_now:Nn}). % \end{function} % -% \begin{function}{\iow_log:n, \iow_log:x} +% \begin{function}{\iow_log:n, \iow_log:e} % \begin{syntax} % \cs{iow_log:n} \Arg{tokens} % \end{syntax} @@ -465,7 +468,7 @@ % file immediately: it is a dedicated version of \cs{iow_now:Nn}. % \end{function} % -% \begin{function}{\iow_term:n, \iow_term:x} +% \begin{function}{\iow_term:n, \iow_term:e} % \begin{syntax} % \cs{iow_term:n} \Arg{tokens} % \end{syntax} @@ -475,8 +478,8 @@ % % \begin{function} % { -% \iow_shipout:Nn, \iow_shipout:Nx, -% \iow_shipout:cn, \iow_shipout:cx +% \iow_shipout:Nn, \iow_shipout:Ne, +% \iow_shipout:cn, \iow_shipout:ce % } % \begin{syntax} % \cs{iow_shipout:Nn} \meta{stream} \Arg{tokens} @@ -486,7 +489,7 @@ % shipout). The \texttt{x}-type variants expand the \meta{tokens} % at the point where the function is used but \emph{not} when the % resulting tokens are written to the \meta{stream} -% (\emph{cf.}~\cs{iow_shipout_x:Nn}). +% (\emph{cf.}~\cs{iow_shipout_e:Nn}). % \begin{texnote} % When using \pkg{expl3} with a format other than \LaTeX{}, new line % characters inserted using \cs{iow_newline:} or using the @@ -496,13 +499,13 @@ % \end{texnote} % \end{function} % -% \begin{function}[updated = 2012-09-08] +% \begin{function}[updated = 2023-09-17] % { -% \iow_shipout_x:Nn, \iow_shipout_x:Nx, -% \iow_shipout_x:cn, \iow_shipout_x:cx +% \iow_shipout_e:Nn, \iow_shipout_e:Ne, +% \iow_shipout_e:cn, \iow_shipout_e:ce % } % \begin{syntax} -% \cs{iow_shipout_x:Nn} \meta{stream} \Arg{tokens} +% \cs{iow_shipout_e:Nn} \meta{stream} \Arg{tokens} % \end{syntax} % This function writes \meta{tokens} to the specified % \meta{stream} when the current page is finalised (\emph{i.e.}~at @@ -528,7 +531,7 @@ % write difficult characters such as |%|, |{|, |}|, % \emph{etc.}~in messages, for example: % \begin{verbatim} -% \iow_now:Nx \g_my_iow { \iow_char:N \{ text \iow_char:N \} } +% \iow_now:Ne \g_my_iow { \iow_char:N \{ text \iow_char:N \} } % \end{verbatim} % The function has no effect if writing is taking place without % expansion (\emph{e.g.}~in the second argument of \cs{iow_now:Nn}). @@ -546,14 +549,14 @@ % character inserted by \cs{iow_newline:} is not recognized by % \TeX{}, which may lead to the insertion of additional unwanted % line-breaks. This issue only affects \cs{iow_shipout:Nn}, -% \cs{iow_shipout_x:Nn} and direct uses of primitive operations. +% \cs{iow_shipout_e:Nn} and direct uses of primitive operations. % \end{texnote} % \end{function} % % \subsection{Wrapping lines in output} % % \begin{function}[added = 2012-06-28, updated = 2017-12-04] -% {\iow_wrap:nnnN, \iow_wrap:nxnN} +% {\iow_wrap:nnnN, \iow_wrap:nenN} % \begin{syntax} % \cs{iow_wrap:nnnN} \Arg{text} \Arg{run-on text} \Arg{set up} \meta{function} % \end{syntax} @@ -705,8 +708,10 @@ % \end{texnote} % \end{variable} % -% \begin{function}[TF, updated = 2012-02-10]{\file_if_exist:n, \file_if_exist:V} +% \begin{function}[EXP, pTF, updated = 2023-09-18] +% {\file_if_exist:n, \file_if_exist:V} % \begin{syntax} +% \cs{file_if_exist_p:n} \Arg{file name} % \cs{file_if_exist:nTF} \Arg{file name} \Arg{true code} \Arg{false code} % \end{syntax} % Searches for \meta{file name} using the current \TeX{} search @@ -714,7 +719,8 @@ % \cs{l_file_search_path_seq}. % \end{function} % -% \begin{function}[noTF, added = 2019-01-16, updated = 2019-02-16]{\file_get:nnN} +% \begin{function}[noTF, added = 2019-01-16, updated = 2019-02-16] +% {\file_get:nnN, \file_get:VnN} % \begin{syntax} % \cs{file_get:nnN} \Arg{filename} \Arg{setup} \meta{tl} % \cs{file_get:nnNTF} \Arg{filename} \Arg{setup} \meta{tl} \Arg{true code} \Arg{false code} @@ -782,7 +788,8 @@ % Quotes (|"|) are invalid in file names and are discarded from the input. % \end{function} % -% \begin{function}[EXP, added = 2020-06-24]{\file_parse_full_name:n} +% \begin{function}[EXP, added = 2020-06-24] +% {\file_parse_full_name:n, \file_parse_full_name:V} % \begin{syntax} % \cs{file_parse_full_name:n} \Arg{full name} % \end{syntax} @@ -791,7 +798,8 @@ % each inside a pair of braces. % \end{function} % -% \begin{function}[EXP, added = 2020-06-24]{\file_parse_full_name_apply:nN} +% \begin{function}[EXP, added = 2020-06-24] +% {\file_parse_full_name_apply:nN, \file_parse_full_name_apply:VN} % \begin{syntax} % \cs{file_parse_full_name_apply:nN} \Arg{full name} \meta{function} % \end{syntax} @@ -801,7 +809,10 @@ % \end{function} % % \begin{function}[rEXP, added = 2019-11-19] -% {\file_hex_dump:n, \file_hex_dump:nnn} +% { +% \file_hex_dump:n, \file_hex_dump:V, +% \file_hex_dump:nnn, \file_hex_dump:Vnn +% } % \begin{syntax} % \cs{file_hex_dump:n} \Arg{file name} % \cs{file_hex_dump:nnn} \Arg{file name} \Arg{start index} \Arg{end index} @@ -819,7 +830,10 @@ % \end{function} % % \begin{function}[noTF, added = 2019-11-19] -% {\file_get_hex_dump:nN, \file_get_hex_dump:nnnN} +% { +% \file_get_hex_dump:nN, \file_get_hex_dump:VN, +% \file_get_hex_dump:nnnN, \file_get_hex_dump:VnnN +% } % \begin{syntax} % \cs{file_get_hex_dump:nN} \Arg{file name} \meta{tl var} % \cs{file_get_hex_dump:nnnN} \Arg{file name} \Arg{start index} \Arg{end index} \meta{tl var} @@ -829,7 +843,8 @@ % If the file is not found, the \meta{tl var} will be set to \cs{q_no_value}. % \end{function} % -% \begin{function}[rEXP, added = 2019-09-03]{\file_mdfive_hash:n} +% \begin{function}[rEXP, added = 2019-09-03] +% {\file_mdfive_hash:n, \file_mdfive_hash:V} % \begin{syntax} % \cs{file_mdfive_hash:n} \Arg{file name} % \end{syntax} @@ -845,7 +860,7 @@ % \end{function} % % \begin{function}[noTF, added = 2017-07-11, updated = 2019-02-16] -% {\file_get_mdfive_hash:nN} +% {\file_get_mdfive_hash:nN, \file_get_mdfive_hash:VN} % \begin{syntax} % \cs{file_get_mdfive_hash:nN} \Arg{file name} \meta{tl var} % \end{syntax} @@ -854,7 +869,7 @@ % the \meta{tl var} will be set to \cs{q_no_value}. % \end{function} % -% \begin{function}[rEXP, added = 2019-09-03]{\file_size:n} +% \begin{function}[rEXP, added = 2019-09-03]{\file_size:n, \file_size:V} % \begin{syntax} % \cs{file_size:n} \Arg{file name} % \end{syntax} @@ -865,7 +880,7 @@ % \end{function} % % \begin{function}[noTF, added = 2017-07-09, updated = 2019-02-16] -% {\file_get_size:nN} +% {\file_get_size:nN, \file_get_size:VN} % \begin{syntax} % \cs{file_get_size:nN} \Arg{file name} \meta{tl var} % \end{syntax} @@ -875,7 +890,8 @@ % This is not available in older versions of \XeTeX{}. % \end{function} % -% \begin{function}[rEXP, added = 2019-09-03]{\file_timestamp:n} +% \begin{function}[rEXP, added = 2019-09-03] +% {\file_timestamp:n, \file_timestamp:V} % \begin{syntax} % \cs{file_timestamp:n} \Arg{file name} % \end{syntax} @@ -891,7 +907,7 @@ % \end{function} % % \begin{function}[noTF, added = 2017-07-09, updated = 2019-02-16] -% {\file_get_timestamp:nN} +% {\file_get_timestamp:nN, \file_get_timestamp:VN} % \begin{syntax} % \cs{file_get_timestamp:nN} \Arg{file name} \meta{tl var} % \end{syntax} @@ -902,7 +918,12 @@ % \end{function} % % \begin{function}[added = 2019-05-13, updated = 2019-09-20, pTF, EXP] -% {\file_compare_timestamp:nNn} +% { +% \file_compare_timestamp:nNn, +% \file_compare_timestamp:nNV, +% \file_compare_timestamp:VNn, +% \file_compare_timestamp:VNV +% } % \begin{syntax} % \cs{file_compare_timestamp_p:nNn} \Arg{file-1} \meta{comparator} \Arg{file-2} % \cs{file_compare_timestamp:nNnTF} \Arg{file-1} \meta{comparator} \Arg{file-2} \Arg{true code} \Arg{false code} @@ -935,7 +956,8 @@ % function. An error is raised if the file is not found. % \end{function} % -% \begin{function}[added = 2023-05-18, EXP]{\file_input_raw:n} +% \begin{function}[added = 2023-05-18, EXP] +% {\file_input_raw:n, \file_input_raw:V} % \begin{syntax} % \cs{file_input_raw:n} \Arg{file name} % \end{syntax} @@ -950,7 +972,13 @@ % \end{texnote} % \end{function} % -% \begin{function}[added = 2014-07-02]{\file_if_exist_input:n, \file_if_exist_input:nF} +% \begin{function}[added = 2014-07-02] +% { +% \file_if_exist_input:n, +% \file_if_exist_input:V, +% \file_if_exist_input:nF, +% \file_if_exist_input:VF +% } % \begin{syntax} % \cs{file_if_exist_input:n} \Arg{file name} % \cs{file_if_exist_input:nF} \Arg{file name} \Arg{false code} @@ -1169,7 +1197,7 @@ { \@@_open_stream:Nn #1 {#2} } { \@@_new:N #1 - \__kernel_tl_set:Nx \l_@@_stream_tl { \int_eval:n {#1} } + \__kernel_tl_set:Ne \l_@@_stream_tl { \int_eval:n {#1} } \@@_open_stream:Nn #1 {#2} } } @@ -1178,7 +1206,7 @@ % Here, we act defensively in case \LuaTeX{} is in use with an % extensionless file name. % \begin{macrocode} -\cs_new_protected:Npx \@@_open_stream:Nn #1#2 +\cs_new_protected:Npe \@@_open_stream:Nn #1#2 { \tex_global:D \tex_chardef:D #1 = \exp_not:N \l_@@_stream_tl \scan_stop: \prop_gput:NVn \exp_not:N \g_@@_streams_prop #1 {#2} @@ -1192,7 +1220,7 @@ % \end{macro} % % \begin{macro}{\ior_shell_open:Nn} -% \begin{macro}{\@@_shell_open:nN} +% \begin{macro}{\@@_shell_open:nN, \@@_shell_open:oN} % Actually much easier than either the standard open or input versions! % When calling \cs{__kernel_ior_open:Nn} the file the pipe is added to % signal a shell command, but the quotes are not added yet---they are @@ -1201,18 +1229,19 @@ \cs_new_protected:Npn \ior_shell_open:Nn #1#2 { \sys_if_shell:TF - { \exp_args:No \@@_shell_open:nN { \tl_to_str:n {#2} } #1 } + { \@@_shell_open:oN { \tl_to_str:n {#2} } #1 } { \msg_error:nn { kernel } { pipe-failed } } } \cs_new_protected:Npn \@@_shell_open:nN #1#2 { \tl_if_in:nnTF {#1} { " } { - \msg_error:nnx + \msg_error:nne { kernel } { quote-in-shell } {#1} } { \__kernel_ior_open:Nn #2 { |#1 } } } +\cs_generate_variant:Nn \@@_shell_open:nN { o } \msg_new:nnnn { kernel } { pipe-failed } { Cannot~run~piped~system~commands. } { @@ -1259,10 +1288,10 @@ { \prop_get:NVNTF \g_@@_streams_prop #2 \l_@@_internal_tl { - \exp_args:Nx #1 + \exp_args:Ne #1 { \token_to_str:N #2 ~ open: ~ \l_@@_internal_tl } } - { \exp_args:Nx #1 { \token_to_str:N #2 ~ closed } } + { \exp_args:Ne #1 { \token_to_str:N #2 ~ closed } } } } % \end{macrocode} @@ -1278,8 +1307,8 @@ % \texttt{show-streams} takes care of translating |ior|/|iow| to % English. % \begin{macrocode} -\cs_new_protected:Npn \ior_show_list: { \@@_list:N \msg_show:nnxxxx } -\cs_new_protected:Npn \ior_log_list: { \@@_list:N \msg_log:nnxxxx } +\cs_new_protected:Npn \ior_show_list: { \@@_list:N \msg_show:nneeee } +\cs_new_protected:Npn \ior_log_list: { \@@_list:N \msg_log:nneeee } \cs_new_protected:Npn \@@_list:N #1 { #1 { kernel } { show-streams } @@ -1643,14 +1672,14 @@ % \begin{macrocode} \cs_new_protected:Npn \iow_open:Nn #1#2 { - \__kernel_tl_set:Nx \l_@@_file_name_tl + \__kernel_tl_set:Ne \l_@@_file_name_tl { \__kernel_file_name_sanitize:n {#2} } \iow_close:N #1 \seq_gpop:NNTF \g_@@_streams_seq \l_@@_stream_tl { \@@_open_stream:NV #1 \l_@@_file_name_tl } { \@@_new:N #1 - \__kernel_tl_set:Nx \l_@@_stream_tl { \int_eval:n {#1} } + \__kernel_tl_set:Ne \l_@@_stream_tl { \int_eval:n {#1} } \@@_open_stream:NV #1 \l_@@_file_name_tl } } @@ -1668,24 +1697,25 @@ % \end{macro} % % \begin{macro}{\iow_shell_open:Nn} -% \begin{macro}{\@@_shell_open:nN} +% \begin{macro}{\@@_shell_open:nN, \@@_shell_open:oN} % Very similar to the \texttt{ior} version % \begin{macrocode} \cs_new_protected:Npn \iow_shell_open:Nn #1#2 { \sys_if_shell:TF - { \exp_args:No \@@_shell_open:nN { \tl_to_str:n {#2} } #1 } + { \@@_shell_open:oN { \tl_to_str:n {#2} } #1 } { \msg_error:nn { kernel } { pipe-failed } } } \cs_new_protected:Npn \@@_shell_open:nN #1#2 { \tl_if_in:nnTF {#1} { " } { - \msg_error:nnx + \msg_error:nne { kernel } { quote-in-shell } {#1} } { \__kernel_iow_open:Nn #2 { |#1 } } } +\cs_generate_variant:Nn \@@_shell_open:nN { o } % \end{macrocode} % \end{macro} % \end{macro} @@ -1725,10 +1755,10 @@ { \prop_get:NVNTF \g_@@_streams_prop #2 \l_@@_internal_tl { - \exp_args:Nx #1 + \exp_args:Ne #1 { \token_to_str:N #2 ~ open: ~ \l_@@_internal_tl } } - { \exp_args:Nx #1 { \token_to_str:N #2 ~ closed } } + { \exp_args:Ne #1 { \token_to_str:N #2 ~ closed } } } } % \end{macrocode} @@ -1738,8 +1768,8 @@ % \begin{macro}{\@@_list:N} % Done as for input, but with a copy of the auxiliary so the name is correct. % \begin{macrocode} -\cs_new_protected:Npn \iow_show_list: { \@@_list:N \msg_show:nnxxxx } -\cs_new_protected:Npn \iow_log_list: { \@@_list:N \msg_log:nnxxxx } +\cs_new_protected:Npn \iow_show_list: { \@@_list:N \msg_show:nneeee } +\cs_new_protected:Npn \iow_log_list: { \@@_list:N \msg_log:nneeee } \cs_new_protected:Npn \@@_list:N #1 { #1 { kernel } { show-streams } @@ -1756,29 +1786,40 @@ % % \subsubsection{Deferred writing} % -% \begin{macro}{\iow_shipout_x:Nn, \iow_shipout_x:Nx, \iow_shipout_x:cn, \iow_shipout_x:cx} +% \begin{macro} +% { +% \iow_shipout_e:Nn, \iow_shipout_e:Ne, +% \iow_shipout_e:cn, \iow_shipout_e:ce +% } % First the easy part, this is the primitive, which expects its % argument to be braced. % \begin{macrocode} -\cs_new_protected:Npn \iow_shipout_x:Nn #1#2 +\cs_new_protected:Npn \iow_shipout_e:Nn #1#2 { \tex_write:D #1 {#2} } -\cs_generate_variant:Nn \iow_shipout_x:Nn { c, Nx, cx } +\cs_generate_variant:Nn \iow_shipout_e:Nn { Ne , c, ce } % \end{macrocode} % \end{macro} % -% \begin{macro}{\iow_shipout:Nn, \iow_shipout:Nx, \iow_shipout:cn, \iow_shipout:cx} +% \begin{macro} +% { +% \iow_shipout:Nn, \iow_shipout:Ne, +% \iow_shipout:Nx, +% \iow_shipout:cn, \iow_shipout:ce, +% \iow_shipout:cx +% } % With \eTeX{} available deferred writing without expansion is easy. % \begin{macrocode} \cs_new_protected:Npn \iow_shipout:Nn #1#2 { \tex_write:D #1 { \exp_not:n {#2} } } -\cs_generate_variant:Nn \iow_shipout:Nn { c, Nx, cx } +\cs_generate_variant:Nn \iow_shipout:Nn { Ne , c, ce } +\cs_generate_variant:Nn \iow_shipout:Nn { Nx , cx } % \end{macrocode} % \end{macro} % % \subsubsection{Immediate writing} % % \begin{macro}{\__kernel_iow_with:Nnn} -% \begin{macro}{\@@_with:nNnn} +% \begin{macro}{\@@_with:nNnn, \@@_with:oNnn} % If the integer~|#1| is equal to~|#2|, just leave~|#3| in the input % stream. Otherwise, pass the old value to an auxiliary, which sets % the integer to the new value, runs the code, and restores the @@ -1788,7 +1829,7 @@ { \int_compare:nNnTF {#1} = {#2} { \use:n } - { \exp_args:No \@@_with:nNnn { \int_use:N #1 } #1 {#2} } + { \@@_with:oNnn { \int_use:N #1 } #1 {#2} } } \cs_new_protected:Npn \@@_with:nNnn #1#2#3#4 { @@ -1796,14 +1837,17 @@ #4 \int_set:Nn #2 {#1} } +\cs_generate_variant:Nn \@@_with:nNnn { o } % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro} % { -% \iow_now:Nn, \iow_now:NV, \iow_now:Nx, -% \iow_now:cn, \iow_now:cV, \iow_now:cx +% \iow_now:Nn, \iow_now:NV, \iow_now:Ne, +% \iow_now:Nx, +% \iow_now:cn, \iow_now:cV, \iow_now:ce, +% \iow_now:cx % } % This routine writes the second argument onto the output stream without % expansion. If this stream isn't open, the output goes to the terminal @@ -1822,18 +1866,23 @@ \__kernel_iow_with:Nnn \tex_newlinechar:D { `\^^J } { \tex_immediate:D \tex_write:D #1 { \exp_not:n {#2} } } } -\cs_generate_variant:Nn \iow_now:Nn { NV , Nx , c , cV , cx } +\cs_generate_variant:Nn \iow_now:Nn { NV , Ne , c , cV , ce } +\cs_generate_variant:Nn \iow_now:Nn { Nx , cx } % \end{macrocode} % \end{macro} % -% \begin{macro}{\iow_log:n, \iow_log:x} -% \begin{macro}{\iow_term:n, \iow_term:x} -% Writing to the log and the terminal directly are relatively easy. +% \begin{macro}{\iow_log:n, \iow_log:e, \iow_log:x} +% \begin{macro}{\iow_term:n, \iow_term:e, \iow_term:x} +% Writing to the log and the terminal directly are relatively easy; +% as we need the two \texttt{e}-type variants for bootstrapping, +% they are redefinitions here. % \begin{macrocode} -\cs_set_protected:Npn \iow_log:x { \iow_now:Nx \c_log_iow } \cs_new_protected:Npn \iow_log:n { \iow_now:Nn \c_log_iow } -\cs_set_protected:Npn \iow_term:x { \iow_now:Nx \c_term_iow } +\cs_set_protected:Npn \iow_log:e { \iow_now:Ne \c_log_iow } +\cs_generate_variant:Nn \iow_log:n { x } \cs_new_protected:Npn \iow_term:n { \iow_now:Nn \c_term_iow } +\cs_set_protected:Npn \iow_term:e { \iow_now:Ne \c_term_iow } +\cs_generate_variant:Nn \iow_term:n { x } % \end{macrocode} % \end{macro} % \end{macro} @@ -1902,14 +1951,14 @@ \cs_new:Npn \@@_unindent:w { } \cs_new_protected:Npn \@@_set_indent:n #1 { - \__kernel_tl_set:Nx \l_@@_one_indent_tl + \__kernel_tl_set:Ne \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 } \exp_last_unbraced:NNo \cs_set:Npn \@@_unindent:w \l_@@_one_indent_tl { } } -\exp_args:Nx \@@_set_indent:n { \prg_replicate:nn { 4 } { ~ } } +\exp_args:Ne \@@_set_indent:n { \prg_replicate:nn { 4 } { ~ } } % \end{macrocode} % \end{variable} % \end{macro} @@ -1968,13 +2017,13 @@ % \begin{macrocode} \group_begin: \int_set:Nn \tex_escapechar:D { -1 } - \tl_const:Nx \c_@@_wrap_marker_tl + \tl_const:Ne \c_@@_wrap_marker_tl { \tl_to_str:n { \^^I \^^O \^^W \^^_ \^^W \^^R \^^A \^^P } } \group_end: \tl_map_inline:nn { { end } { newline } { allow_break } { indent } { unindent } } { - \tl_const:cx { c_@@_wrap_ #1 _marker_tl } + \tl_const:ce { c_@@_wrap_ #1 _marker_tl } { \c_@@_wrap_marker_tl #1 @@ -1998,7 +2047,7 @@ \msg_error:nnnn { kernel } { iow-indent } { \iow_wrap:nnnN } { \iow_wrap_allow_break: } } -\cs_new:Npx \@@_wrap_allow_break: { \c_@@_wrap_allow_break_marker_tl } +\cs_new:Npe \@@_wrap_allow_break: { \c_@@_wrap_allow_break_marker_tl } \cs_new:Npn \@@_wrap_allow_break_error: { \msg_expandable_error:nnnn { kernel } { iow-indent } @@ -2026,7 +2075,7 @@ { \iow_wrap:nnnN } { \iow_indent:n } {#1} #1 } -\cs_new:Npx \@@_indent:n #1 +\cs_new:Npe \@@_indent:n #1 { \c_@@_wrap_indent_marker_tl #1 @@ -2043,7 +2092,7 @@ % \end{macro} % \end{macro} % -% \begin{macro}{\iow_wrap:nnnN, \iow_wrap:nxnN} +% \begin{macro}{\iow_wrap:nnnN, \iow_wrap:nenN} % The main wrapping function works as follows. First give |\\|, % \verb*|\ | and other formatting commands the correct definition for % messages and perform the given setup~|#3|. The definition of @@ -2059,11 +2108,11 @@ \group_begin: \cs_if_exist_use:N \conditionally@traceoff \int_set:Nn \tex_escapechar:D { -1 } - \cs_set:Npx \{ { \token_to_str:N \{ } - \cs_set:Npx \# { \token_to_str:N \# } - \cs_set:Npx \} { \token_to_str:N \} } - \cs_set:Npx \% { \token_to_str:N \% } - \cs_set:Npx \~ { \token_to_str:N \~ } + \cs_set:Npe \{ { \token_to_str:N \{ } + \cs_set:Npe \# { \token_to_str:N \# } + \cs_set:Npe \} { \token_to_str:N \} } + \cs_set:Npe \% { \token_to_str:N \% } + \cs_set:Npe \~ { \token_to_str:N \~ } \int_set:Nn \tex_escapechar:D { 92 } \cs_set_eq:NN \\ \iow_newline: \cs_set_eq:NN \ \c_catcode_other_space_tl @@ -2079,7 +2128,7 @@ % \cs{iow_wrap:nnnN}. % \begin{macrocode} \cs_set_eq:NN \protect \token_to_str:N - \__kernel_tl_set:Nx \l_@@_wrap_tl {#1} + \__kernel_tl_set:Ne \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} @@ -2087,8 +2136,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:Nx \l_@@_newline_tl { \iow_newline: #2 } - \__kernel_tl_set:Nx \l_@@_newline_tl { \tl_to_str:N \l_@@_newline_tl } + \__kernel_tl_set:Ne \l_@@_newline_tl { \iow_newline: #2 } + \__kernel_tl_set:Ne \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} @@ -2112,7 +2161,7 @@ \exp_args:NNf \group_end: #4 { \tl_to_str:N \l_@@_wrap_tl } } -\cs_generate_variant:Nn \iow_wrap:nnnN { nx } +\cs_generate_variant:Nn \iow_wrap:nnnN { ne } % \end{macrocode} % \end{macro} % @@ -2128,12 +2177,12 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_wrap_do: { - \__kernel_tl_set:Nx \l_@@_wrap_tl + \__kernel_tl_set:Ne \l_@@_wrap_tl { \exp_args:No \__kernel_str_to_other_fast:n \l_@@_wrap_tl \c_@@_wrap_end_marker_tl } - \__kernel_tl_set:Nx \l_@@_wrap_tl + \__kernel_tl_set:Ne \l_@@_wrap_tl { \exp_after:wN \@@_wrap_fix_newline:w \l_@@_wrap_tl ^^J \q_@@_nil ^^J \s_@@_stop @@ -2397,7 +2446,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_wrap_allow_break:n #1 { - \__kernel_tl_set:Nx \l_@@_line_tl + \__kernel_tl_set:Ne \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 @@ -2417,7 +2466,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_wrap_indent:n #1 { - \tl_put_right:Nx \l_@@_line_tl { \l_@@_line_part_tl } + \tl_put_right:Ne \l_@@_line_tl { \l_@@_line_part_tl } \bool_set_false:N \l_@@_line_break_bool \int_add:Nn \l_@@_indent_int { \l_@@_one_indent_int } \tl_put_right:No \l_@@_indent_tl { \l_@@_one_indent_tl } @@ -2425,10 +2474,10 @@ } \cs_new_protected:Npn \@@_wrap_unindent:n #1 { - \tl_put_right:Nx \l_@@_line_tl { \l_@@_line_part_tl } + \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:Nx \l_@@_indent_tl + \__kernel_tl_set:Ne \l_@@_indent_tl { \exp_after:wN \@@_unindent:w \l_@@_indent_tl } \@@_wrap_chunk:nw {#1} } @@ -2467,9 +2516,9 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_wrap_store_do:n #1 { - \__kernel_tl_set:Nx \l_@@_line_tl + \__kernel_tl_set:Ne \l_@@_line_tl { \l_@@_line_tl \l_@@_line_part_tl } - \__kernel_tl_set:Nx \l_@@_wrap_tl + \__kernel_tl_set:Ne \l_@@_wrap_tl { \l_@@_wrap_tl \l_@@_newline_tl @@ -2495,6 +2544,21 @@ % \end{macrocode} % \end{macro} % +% \subsection{Deprecated functions} +% +% \begin{macro} +% { +% \iow_shipout_x:Nn, \iow_shipout_x:Nx, +% \iow_shipout_x:cn, \iow_shipout_x:cx +% } +% Previously described as \texttt{x}-type, but the hash behaviour is really +% \texttt{e}-type. +% \begin{macrocode} +\cs_new_eq:NN \iow_shipout_x:Nn \iow_shipout_e:Nn +\cs_generate_variant:Nn \iow_shipout_x:Nn { Nx , c, cx } +% \end{macrocode} +% \end{macro} +% % \begin{macrocode} %<@@=file> % \end{macrocode} @@ -2539,7 +2603,7 @@ { \cs_set:Npn \@@_tmp:w ##1 " ##2 " ##3 \s_@@_stop { { } {##2} { } } - \seq_gput_right:Nx \g_@@_stack_seq + \seq_gput_right:Ne \g_@@_stack_seq { \exp_after:wN \@@_tmp:w \tex_jobname:D " \tex_jobname:D " \s_@@_stop @@ -2811,11 +2875,11 @@ % The same idea as the marker for rescanning token lists: this pair of % tokens cannot appear in a file that is being input. % \begin{macrocode} -\tl_const:Nx \c_@@_marker_tl { : \token_to_str:N : } +\tl_const:Ne \c_@@_marker_tl { : \token_to_str:N : } % \end{macrocode} % \end{variable} % -% \begin{macro}[TF]{\file_get:nnN} +% \begin{macro}[TF]{\file_get:nnN, \file_get:VnN} % \begin{macro}{\file_get:nnN,\@@_get_aux:nnN,\@@_get_do:Nw} % The approach here is similar to that for \cs{tl_set_rescan:Nnn}. % The file contents are grabbed as an argument delimited by @@ -2830,6 +2894,7 @@ \file_get:nnNF {#1} {#2} #3 { \tl_set:Nn #3 { \q_no_value } } } +\cs_generate_variant:Nn \file_get:nnN { V } \prg_new_protected_conditional:Npnn \file_get:nnN #1#2#3 { T , F , TF } { \file_get_full_name:nNTF {#1} \l_@@_full_name_tl @@ -2841,7 +2906,8 @@ } { \prg_return_false: } } -\cs_new_protected:Npx \@@_get_aux:nnN #1#2#3 +\prg_generate_conditional_variant:Nnn \file_get:nnN { V } { T , F , TF } +\cs_new_protected:Npe \@@_get_aux:nnN #1#2#3 { \exp_not:N \if_false: { \exp_not:N \fi: \group_begin: @@ -2901,6 +2967,7 @@ \exp_args:Ne \@@_full_name:n { \__kernel_file_name_sanitize:n {#1} } } +\cs_generate_variant:Nn \file_full_name:n { V } % \end{macrocode} % First, we check of the file is just here: no mapping so we do not % need the break part of the broader auxiliary. We are using the fact @@ -3011,7 +3078,7 @@ } { \@@_ext_check:nnw {#1} { #2 #3 / } #4 / #5 \s_@@_stop } } -\cs_new:Npx \@@_ext_check:nnnw #1#2#3#4 . #5 . #6 \s_@@_stop +\cs_new:Npe \@@_ext_check:nnnw #1#2#3#4 . #5 . #6 \s_@@_stop { \exp_not:N \@@_quark_if_nil:nTF {#5} { @@ -3065,15 +3132,14 @@ \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:Nx #2 + \__kernel_tl_set:Ne #2 { \file_full_name:n {#1} } \tl_if_empty:NTF #2 { \prg_return_false: } { \prg_return_true: } } -\cs_generate_variant:Nn \file_get_full_name:nNT { V } -\cs_generate_variant:Nn \file_get_full_name:nNF { V } -\cs_generate_variant:Nn \file_get_full_name:nNTF { V } +\prg_generate_conditional_variant:Nnn \file_get_full_name:nN + { V } { T , F , TF } % \end{macrocode} % \end{macro} % \end{macro} @@ -3086,7 +3152,12 @@ % \end{macrocode} % \end{variable} % -% \begin{macro}[rEXP]{\file_mdfive_hash:n, \file_size:n, \file_timestamp:n} +% \begin{macro}[rEXP] +% { +% \file_mdfive_hash:n, \file_mdfive_hash:V, +% \file_size:n, \file_size:V, +% \file_timestamp:n, \file_timestamp:V +% } % \begin{macro}[rEXP]{\@@_details:nn, \@@_details_aux:nn} % \begin{macro}[rEXP]{\@@_mdfive_hash:n} % Getting file details by expansion is relatively easy if a bit repetitive. @@ -3095,8 +3166,10 @@ % \begin{macrocode} \cs_new:Npn \file_size:n #1 { \@@_details:nn {#1} { size } } +\cs_generate_variant:Nn \file_size:n { V } \cs_new:Npn \file_timestamp:n #1 { \@@_details:nn {#1} { moddate } } +\cs_generate_variant:Nn \file_timestamp:n { V } \cs_new:Npn \@@_details:nn #1#2 { \exp_args:Ne \@@_details_aux:nn @@ -3109,6 +3182,7 @@ } \cs_new:Npn \file_mdfive_hash:n #1 { \exp_args:Ne \@@_mdfive_hash:n { \file_full_name:n {#1} } } +\cs_generate_variant:Nn \file_mdfive_hash:n { V } \cs_new:Npn \@@_mdfive_hash:n #1 { \tex_mdfivesum:D file {#1} } % \end{macrocode} @@ -3116,10 +3190,10 @@ % \end{macro} % \end{macro} % -% \begin{macro}[rEXP]{\file_hex_dump:nnn, \@@_hex_dump_auxi:nnn} +% \begin{macro}[rEXP]{\file_hex_dump:nnn, \file_hex_dump:Vnn, \@@_hex_dump_auxi:nnn} % \begin{macro}[rEXP]{\@@_hex_dump_auxii:nnnn, \@@_hex_dump_auxiii:nnnn} % \begin{macro}[rEXP]{\@@_hex_dump_auxiiv:nnn} -% \begin{macro}[rEXP]{\file_hex_dump:n, \@@_hex_dump:n} +% \begin{macro}[rEXP]{\file_hex_dump:n, \file_hex_dump:V, \@@_hex_dump:n} % These are separate as they need multiple arguments \emph{or} the % file size. For \LuaTeX{}, the emulation does not need the file % size so we save a little on expansion. @@ -3131,6 +3205,7 @@ { \int_eval:n {#2} } { \int_eval:n {#3} } } +\cs_generate_variant:Nn \file_hex_dump:nnn { V } \cs_new:Npn \@@_hex_dump_auxi:nnn #1#2#3 { \bool_lazy_any:nF @@ -3174,6 +3249,7 @@ } \cs_new:Npn \file_hex_dump:n #1 { \exp_args:Ne \@@_hex_dump:n { \file_full_name:n {#1} } } +\cs_generate_variant:Nn \file_hex_dump:n { V } \sys_if_engine_luatex:TF { \cs_new:Npn \@@_hex_dump:n #1 @@ -3197,10 +3273,10 @@ % % \begin{macro}[noTF] % { -% \file_get_hex_dump:nN, -% \file_get_mdfive_hash:nN -% \file_get_size:nN, -% \file_get_timestamp:nN +% \file_get_hex_dump:nN, \file_get_hex_dump:VN, +% \file_get_mdfive_hash:nN, \file_get_mdfive_hash:VN, +% \file_get_size:nN, \file_get_size:VN, +% \file_get_timestamp:nN, \file_get_timestamp:VN % } % \begin{macro}{\@@_get_details:nnN} % Non-expandable wrappers around the above in the case where appropriate @@ -3208,23 +3284,35 @@ % \begin{macrocode} \cs_new_protected:Npn \file_get_hex_dump:nN #1#2 { \file_get_hex_dump:nNF {#1} #2 { \tl_set:Nn #2 { \q_no_value } } } +\cs_generate_variant:Nn \file_get_hex_dump:nN { V } \cs_new_protected:Npn \file_get_mdfive_hash:nN #1#2 { \file_get_mdfive_hash:nNF {#1} #2 { \tl_set:Nn #2 { \q_no_value } } } +\cs_generate_variant:Nn \file_get_mdfive_hash:nN { V } \cs_new_protected:Npn \file_get_size:nN #1#2 { \file_get_size:nNF {#1} #2 { \tl_set:Nn #2 { \q_no_value } } } +\cs_generate_variant:Nn \file_get_size:nN { V } \cs_new_protected:Npn \file_get_timestamp:nN #1#2 { \file_get_timestamp:nNF {#1} #2 { \tl_set:Nn #2 { \q_no_value } } } +\cs_generate_variant:Nn \file_get_timestamp:nN { V } \prg_new_protected_conditional:Npnn \file_get_hex_dump:nN #1#2 { T , F , TF } { \@@_get_details:nnN {#1} { hex_dump } #2 } +\prg_generate_conditional_variant:Nnn \file_get_hex_dump:nN + { V } { T , F , TF } \prg_new_protected_conditional:Npnn \file_get_mdfive_hash:nN #1#2 { T , F , TF } { \@@_get_details:nnN {#1} { mdfive_hash } #2 } +\prg_generate_conditional_variant:Nnn \file_get_mdfive_hash:nN + { V } { T , F , TF } \prg_new_protected_conditional:Npnn \file_get_size:nN #1#2 { T , F , TF } { \@@_get_details:nnN {#1} { size } #2 } +\prg_generate_conditional_variant:Nnn \file_get_size:nN + { V } { T , F , TF } \prg_new_protected_conditional:Npnn \file_get_timestamp:nN #1#2 { T , F , TF } { \@@_get_details:nnN {#1} { timestamp } #2 } +\prg_generate_conditional_variant:Nnn \file_get_timestamp:nN + { V } { T , F , TF } \cs_new_protected:Npn \@@_get_details:nnN #1#2#3 { - \__kernel_tl_set:Nx #3 + \__kernel_tl_set:Ne #3 { \use:c { file_ #2 :n } {#1} } \tl_if_empty:NTF #3 { \prg_return_false: } @@ -3234,7 +3322,7 @@ % \end{macro} % \end{macro} % -% \begin{macro}[noTF]{\file_get_hex_dump:nnnN} +% \begin{macro}[noTF]{\file_get_hex_dump:nnnN, \file_get_hex_dump:VnnN} % Custom code due to the additional arguments. % \begin{macrocode} \cs_new_protected:Npn \file_get_hex_dump:nnnN #1#2#3#4 @@ -3242,15 +3330,18 @@ \file_get_hex_dump:nnnNF {#1} {#2} {#3} #4 { \tl_set:Nn #4 { \q_no_value } } } +\cs_generate_variant:Nn \file_get_hex_dump:nnnN { V } \prg_new_protected_conditional:Npnn \file_get_hex_dump:nnnN #1#2#3#4 { T , F , TF } { - \__kernel_tl_set:Nx #4 + \__kernel_tl_set:Ne #4 { \file_hex_dump:nnn {#1} {#2} {#3} } \tl_if_empty:NTF #4 { \prg_return_false: } { \prg_return_true: } } +\prg_generate_conditional_variant:Nnn \file_get_hex_dump:nnnN + { V } { T , F , TF } % \end{macrocode} % \end{macro} % @@ -3262,7 +3353,13 @@ % \end{macrocode} % \end{macro} % -% \begin{macro}[EXP, pTF]{\file_compare_timestamp:nNn} +% \begin{macro}[EXP, pTF] +% { +% \file_compare_timestamp:nNn, +% \file_compare_timestamp:nNV, +% \file_compare_timestamp:VNn +% \file_compare_timestamp:VNV +% } % \begin{macro}[EXP]{\@@_compare_timestamp:nnN} % \begin{macro}[EXP]{\@@_timestamp:n} % Comparison of file date can be done by using the low-level nature of the @@ -3276,6 +3373,8 @@ { \file_full_name:n {#3} } #2 } +\prg_generate_conditional_variant:Nnn \file_compare_timestamp:nNn + { nNV , V , VNV } { p , T , F , TF } \cs_new:Npn \@@_compare_timestamp:nnN #1#2#3 { \tl_if_blank:nTF {#1} @@ -3320,17 +3419,23 @@ % something, whereas if the file was not located then the return value % is empty. % \begin{macrocode} -\prg_new_protected_conditional:Npnn \file_if_exist:n #1 { T , F , TF } +\prg_new_conditional:Npnn \file_if_exist:n #1 { p , T , F , TF } { - \file_get_full_name:nNTF {#1} \l_@@_full_name_tl - { \prg_return_true: } + \tl_if_blank:eTF { \file_full_name:n {#1} } { \prg_return_false: } + { \prg_return_true: } } -\prg_generate_conditional_variant:Nnn \file_if_exist:n { V } { T , F , TF } +\prg_generate_conditional_variant:Nnn \file_if_exist:n { V } { p , T , F , TF } % \end{macrocode} % \end{macro} % -% \begin{macro}{\file_if_exist_input:n, \file_if_exist_input:nF} +% \begin{macro} +% { +% \file_if_exist_input:n, +% \file_if_exist_input:V, +% \file_if_exist_input:nF, +% \file_if_exist_input:VF +% } % Input of a file with a test for existence. We do not define the |T| % or |TF| variants because the most useful place to place the % \meta{true code} would be inconsistent with other conditionals. @@ -3340,12 +3445,14 @@ \file_get_full_name:nNT {#1} \l_@@_full_name_tl { \@@_input:V \l_@@_full_name_tl } } +\cs_generate_variant:Nn \file_if_exist_input:n { V } \cs_new_protected:Npn \file_if_exist_input:nF #1#2 { \file_get_full_name:nNTF {#1} \l_@@_full_name_tl { \@@_input:V \l_@@_full_name_tl } {#2} } +\cs_generate_variant:Nn \file_if_exist_input:nF { V } % \end{macrocode} % \end{macro} % @@ -3361,7 +3468,7 @@ % \begin{macrocode} \cs_new_protected:Npn \__kernel_file_missing:n #1 { - \msg_error:nnx { kernel } { file-not-found } + \msg_error:nne { kernel } { file-not-found } { \__kernel_file_name_sanitize:n {#1} } } % \end{macrocode} @@ -3384,7 +3491,7 @@ { \__kernel_file_missing:n {#1} } } \cs_generate_variant:Nn \file_input:n { V } -\cs_new_protected:Npx \@@_input:n #1 +\cs_new_protected:Npe \@@_input:n #1 { \exp_not:N \clist_if_exist:NTF \exp_not:N \@filelist { \exp_not:N \@addtofilelist {#1} } @@ -3403,7 +3510,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_input_push:n #1 { - \seq_gpush:Nx \g_@@_stack_seq + \seq_gpush:Ne \g_@@_stack_seq { { \g_file_curr_dir_str } { \g_file_curr_name_str } @@ -3435,12 +3542,13 @@ % \end{macro} % \end{macro} % -% \begin{macro}{\file_input_raw:n, \@@_input_raw:nn} +% \begin{macro}{\file_input_raw:n, \file_input_raw:V, \@@_input_raw:nn} % No error checking, no tracking. % \begin{macrocode} \cs_new:Npn \file_input_raw:n #1 { \exp_args:Ne \@@_input_raw:nn { \file_full_name:n {#1} } {#1} } -\cs_new:Npx \@@_input_raw:nn #1#2 +\cs_generate_variant:Nn \file_input_raw:n { V } +\cs_new:Npe \@@_input_raw:nn #1#2 { \exp_not:N \tl_if_blank:nTF {#1} { @@ -3459,7 +3567,8 @@ % \end{macrocode} % \end{macro} % -% \begin{macro}{\file_parse_full_name:n, \file_parse_full_name_apply:nN} +% \begin{macro}{\file_parse_full_name:n, \file_parse_full_name:nV} +% \begin{macro}{\file_parse_full_name_apply:nN \file_parse_full_name_apply:VN} % The main parsing macro \cs{file_parse_full_name_apply:nN} passes the % file name |#1| through \cs{__kernel_file_name_sanitize:n} so that we % have a single normalised way to treat files internally. @@ -3472,11 +3581,13 @@ \file_parse_full_name_apply:nN {#1} \prg_do_nothing: } +\cs_generate_variant:Nn \file_parse_full_name:n { V } \cs_new:Npn \file_parse_full_name_apply:nN #1 { \exp_args:Ne \@@_parse_full_name_auxi:nN { \__kernel_file_name_sanitize:n {#1} } } +\cs_generate_variant:Nn \file_parse_full_name_apply:nN { V } % \end{macrocode} % % \begin{macro}{\@@_parse_full_name_auxi:nN} @@ -3549,6 +3660,7 @@ % \end{macro} % \end{macro} % \end{macro} +% \end{macro} % % \begin{macro}{\file_parse_full_name:nNNN, \file_parse_full_name:VNNN} % \begin{macrocode} @@ -3575,14 +3687,14 @@ % \cs{AtBeginDocument} into \cs{g_@@_record_seq}), turning it to a % string (this does not affect the commas of this comma list). % \begin{macrocode} -\cs_new_protected:Npn \file_show_list: { \@@_list:N \msg_show:nnxxxx } -\cs_new_protected:Npn \file_log_list: { \@@_list:N \msg_log:nnxxxx } +\cs_new_protected:Npn \file_show_list: { \@@_list:N \msg_show:nneeee } +\cs_new_protected:Npn \file_log_list: { \@@_list:N \msg_log:nneeee } \cs_new_protected:Npn \@@_list:N #1 { \seq_clear:N \l_@@_tmp_seq \clist_if_exist:NT \@filelist { - \exp_args:NNx \seq_set_from_clist:Nn \l_@@_tmp_seq + \exp_args:NNe \seq_set_from_clist:Nn \l_@@_tmp_seq { \tl_to_str:N \@filelist } } \seq_concat:NNN \l_@@_tmp_seq \l_@@_tmp_seq \g_@@_record_seq @@ -3605,7 +3717,7 @@ { \AtBeginDocument { - \exp_args:NNx \seq_set_from_clist:Nn \l_@@_tmp_seq + \exp_args:NNe \seq_set_from_clist:Nn \l_@@_tmp_seq { \tl_to_str:N \@filelist } \seq_gconcat:NNN \g_@@_record_seq @@ -3738,7 +3850,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_mismatched_dependency_error:nn #1 #2 { - \exp_args:NNx \ior_shell_open:Nn \g_@@_internal_ior + \exp_args:NNe \ior_shell_open:Nn \g_@@_internal_ior { kpsewhich ~ --all ~ --engine = \c_sys_engine_exec_str @@ -3869,7 +3981,7 @@ % \begin{macrocode} \sys_if_engine_luatex:TF { - \str_const:Nx \c_sys_platform_str + \str_const:Ne \c_sys_platform_str { \tex_directlua:D { tex.print(os.type) } } } { diff --git a/macros/latex/contrib/l3kernel/l3flag.dtx b/macros/latex/contrib/l3kernel/l3flag.dtx index 3fb3930535..637da52ee7 100644 --- a/macros/latex/contrib/l3kernel/l3flag.dtx +++ b/macros/latex/contrib/l3kernel/l3flag.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % @@ -243,7 +243,7 @@ { \exp_args:Nc \__kernel_chk_defined:NT { flag~#2 } { - \exp_args:Nx #1 + \exp_args:Ne #1 { \tl_to_str:n { flag~#2~height } = \flag_height:n {#2} } } } diff --git a/macros/latex/contrib/l3kernel/l3fp-assign.dtx b/macros/latex/contrib/l3kernel/l3fp-assign.dtx index ecdd6ea31c..da05eafa39 100644 --- a/macros/latex/contrib/l3kernel/l3fp-assign.dtx +++ b/macros/latex/contrib/l3kernel/l3fp-assign.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % \maketitle % % \begin{documentation} @@ -80,11 +80,11 @@ % assignments. % \begin{macrocode} \cs_new_protected:Npn \fp_set:Nn #1#2 - { \__kernel_tl_set:Nx #1 { \exp_not:f { \@@_parse:n {#2} } } } + { \__kernel_tl_set:Ne #1 { \exp_not:f { \@@_parse:n {#2} } } } \cs_new_protected:Npn \fp_gset:Nn #1#2 - { \__kernel_tl_gset:Nx #1 { \exp_not:f { \@@_parse:n {#2} } } } + { \__kernel_tl_gset:Ne #1 { \exp_not:f { \@@_parse:n {#2} } } } \cs_new_protected:Npn \fp_const:Nn #1#2 - { \tl_const:Nx #1 { \exp_not:f { \@@_parse:n {#2} } } } + { \tl_const:Ne #1 { \exp_not:f { \@@_parse:n {#2} } } } \cs_generate_variant:Nn \fp_set:Nn {c} \cs_generate_variant:Nn \fp_gset:Nn {c} \cs_generate_variant:Nn \fp_const:Nn {c} @@ -183,7 +183,7 @@ \s_@@ \@@_chk:w ??? ; \s_@@_stop } } - { \exp_args:Nx #1 { \token_to_str:N #2 = \fp_to_tl:N #2 } } + { \exp_args:Ne #1 { \token_to_str:N #2 = \fp_to_tl:N #2 } } } \cs_new:Npn \@@_show_validate:w #1 \s_@@ \@@_chk:w #2#3#4#5 ; #6 \s_@@_stop diff --git a/macros/latex/contrib/l3kernel/l3fp-aux.dtx b/macros/latex/contrib/l3kernel/l3fp-aux.dtx index 1f6b333761..3db65c9d29 100644 --- a/macros/latex/contrib/l3kernel/l3fp-aux.dtx +++ b/macros/latex/contrib/l3kernel/l3fp-aux.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % @@ -226,7 +226,7 @@ % stream and its contents reach \TeX{}'s stomach. % \begin{macrocode} \cs_new_protected:Npn \@@_misused:n #1 - { \msg_error:nnx { fp } { misused } { \fp_to_tl:n {#1} } } + { \msg_error:nne { fp } { misused } { \fp_to_tl:n {#1} } } % \end{macrocode} % \end{macro} % @@ -338,7 +338,7 @@ % point numbers. This replaces infinities when converting to formats % that do not support infinities. % \begin{macrocode} -\tl_const:Nx \c_@@_overflowing_fp +\tl_const:Ne \c_@@_overflowing_fp { \s_@@ \@@_chk:w 1 0 { \int_eval:n { \c_@@_max_exponent_int + 1 } } @@ -596,7 +596,7 @@ \s_@@ { \@@_type_from_scan_other:N #1 } \s_@@_stop } -\cs_new:Npx \@@_type_from_scan_other:N #1 +\cs_new:Npe \@@_type_from_scan_other:N #1 { \exp_not:N \exp_after:wN \exp_not:N \@@_type_from_scan:w \exp_not:N \token_to_str:N #1 \s_@@_mark diff --git a/macros/latex/contrib/l3kernel/l3fp-basics.dtx b/macros/latex/contrib/l3kernel/l3fp-basics.dtx index 6a8d6376fb..3c5ad9195b 100644 --- a/macros/latex/contrib/l3kernel/l3fp-basics.dtx +++ b/macros/latex/contrib/l3kernel/l3fp-basics.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % @@ -129,7 +129,7 @@ % that \cs{@@_+_o:ww} can still perform the sanity check that it was % followed by \cs{s_@@}. % \begin{macrocode} -\cs_new:cpx { @@_-_o:ww } \s_@@ +\cs_new:cpe { @@_-_o:ww } \s_@@ { \exp_not:c { @@_+_o:ww } \exp_not:n { \s_@@ \@@_neg_sign:N } @@ -1429,11 +1429,11 @@ { + 5 * #1 \exp_after:wN \@@_div_significand_vi:Nw - \int_value:w \@@_int_eval:w -20 + 2*#2#3 - #1*#6#7 + + \int_value:w \@@_int_eval:w -50 + 2*#2#3 - #1*#6#7 + \exp_after:wN \@@_div_significand_v:NN - \int_value:w \@@_int_eval:w 199980 + 2*#4 - #1*#8 + + \int_value:w \@@_int_eval:w 499950 + 2*#4 - #1*#8 + \exp_after:wN \@@_div_significand_v:NN - \int_value:w \@@_int_eval:w 200000 + 2*#5 - #1*#9 ; + \int_value:w \@@_int_eval:w 500000 + 2*#5 - #1*#9 ; } \cs_new:Npn \@@_div_significand_v:NN #1#2 { #1#2 \@@_int_eval_end: + } \cs_new:Npn \@@_div_significand_vi:Nw #1#2; diff --git a/macros/latex/contrib/l3kernel/l3fp-convert.dtx b/macros/latex/contrib/l3kernel/l3fp-convert.dtx index bce0ddc8fd..835f9c4341 100644 --- a/macros/latex/contrib/l3kernel/l3fp-convert.dtx +++ b/macros/latex/contrib/l3kernel/l3fp-convert.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3fp-expo.dtx b/macros/latex/contrib/l3kernel/l3fp-expo.dtx index d9c8cf5685..5ac216bf4c 100644 --- a/macros/latex/contrib/l3kernel/l3fp-expo.dtx +++ b/macros/latex/contrib/l3kernel/l3fp-expo.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3fp-extended.dtx b/macros/latex/contrib/l3kernel/l3fp-extended.dtx index 0a5ac448aa..b83b37335b 100644 --- a/macros/latex/contrib/l3kernel/l3fp-extended.dtx +++ b/macros/latex/contrib/l3kernel/l3fp-extended.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3fp-logic.dtx b/macros/latex/contrib/l3kernel/l3fp-logic.dtx index 9f11464f29..2f439c2925 100644 --- a/macros/latex/contrib/l3kernel/l3fp-logic.dtx +++ b/macros/latex/contrib/l3kernel/l3fp-logic.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % @@ -487,7 +487,7 @@ { \int_gincr:N \g__kernel_prg_map_int \exp_args:NNc \@@_step:NNnnnn - \cs_gset_protected:Npx + \cs_gset_protected:Npe { @@_map_ \int_use:N \g__kernel_prg_map_int :w } {#1} {#2} {#3} { diff --git a/macros/latex/contrib/l3kernel/l3fp-parse.dtx b/macros/latex/contrib/l3kernel/l3fp-parse.dtx index 86e2366f2d..418974d826 100644 --- a/macros/latex/contrib/l3kernel/l3fp-parse.dtx +++ b/macros/latex/contrib/l3kernel/l3fp-parse.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % @@ -864,7 +864,7 @@ \exp_after:wN \@@_parse_exponent:N \exp:w \@@_parse_expand:w } -\cs_new:Npx \@@_parse_one_register_aux:Nw #1 +\cs_new:Npe \@@_parse_one_register_aux:Nw #1 { \exp_not:n { @@ -1937,7 +1937,7 @@ \fi: \@@_parse_expand:w } -\cs_new:Npx \@@_parse_lparen_after:NwN #1#2 @ #3 +\cs_new:Npe \@@_parse_lparen_after:NwN #1#2 @ #3 { \exp_not:N \token_if_eq_meaning:NNTF #3 \exp_not:c { @@_parse_infix_):N } diff --git a/macros/latex/contrib/l3kernel/l3fp-random.dtx b/macros/latex/contrib/l3kernel/l3fp-random.dtx index bb0e4b12f0..3e3b5cfdfc 100644 --- a/macros/latex/contrib/l3kernel/l3fp-random.dtx +++ b/macros/latex/contrib/l3kernel/l3fp-random.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3fp-round.dtx b/macros/latex/contrib/l3kernel/l3fp-round.dtx index c0c656189f..f0853f5999 100644 --- a/macros/latex/contrib/l3kernel/l3fp-round.dtx +++ b/macros/latex/contrib/l3kernel/l3fp-round.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3fp-traps.dtx b/macros/latex/contrib/l3kernel/l3fp-traps.dtx index 9b59b1759d..674ecdfd2d 100644 --- a/macros/latex/contrib/l3kernel/l3fp-traps.dtx +++ b/macros/latex/contrib/l3kernel/l3fp-traps.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % \maketitle % % \begin{documentation} @@ -127,11 +127,11 @@ { invalid_operation , division_by_zero , overflow , underflow } {#1} { - \msg_error:nnxx { fp } + \msg_error:nnee { fp } { unknown-fpu-trap-type } {#1} {#2} } { - \msg_error:nnx + \msg_error:nne { fp } { unknown-fpu-exception } {#1} } } diff --git a/macros/latex/contrib/l3kernel/l3fp-trig.dtx b/macros/latex/contrib/l3kernel/l3fp-trig.dtx index f4cc0513ad..b7bc6c19ce 100644 --- a/macros/latex/contrib/l3kernel/l3fp-trig.dtx +++ b/macros/latex/contrib/l3kernel/l3fp-trig.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % @@ -91,13 +91,13 @@ {cos} {cot} {csc} {sec} {sin} {tan} } { - \cs_new:cpx { @@_parse_word_#1:N } + \cs_new:cpe { @@_parse_word_#1:N } { \exp_not:N \@@_parse_unary_function:NNN \exp_not:c { @@_#1_o:w } \exp_not:N \use_i:nn } - \cs_new:cpx { @@_parse_word_#1d:N } + \cs_new:cpe { @@_parse_word_#1d:N } { \exp_not:N \@@_parse_unary_function:NNN \exp_not:c { @@_#1_o:w } @@ -1201,7 +1201,7 @@ { #1 { acot } { acotd } } { \@@_atan_default:w \@@_acotii_o:Nww #1 } } -\cs_new:Npx \@@_atan_default:w #1#2#3 @ { #1 #2 #3 \c_one_fp @ } +\cs_new:Npe \@@_atan_default:w #1#2#3 @ { #1 #2 #3 \c_one_fp @ } % \end{macrocode} % \end{macro} % diff --git a/macros/latex/contrib/l3kernel/l3fp.dtx b/macros/latex/contrib/l3kernel/l3fp.dtx index 17193dd8af..60a7b7534f 100644 --- a/macros/latex/contrib/l3kernel/l3fp.dtx +++ b/macros/latex/contrib/l3kernel/l3fp.dtx @@ -49,7 +49,7 @@ % }^^A % } % -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3fparray.dtx b/macros/latex/contrib/l3kernel/l3fparray.dtx index e3693f0a41..9929135baa 100644 --- a/macros/latex/contrib/l3kernel/l3fparray.dtx +++ b/macros/latex/contrib/l3kernel/l3fparray.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % @@ -250,7 +250,7 @@ \cs_generate_variant:Nn \fparray_gset:Nnn { c } \cs_new_protected:Npn \@@_array_gset:NNNNww #1#2#3#4#5 ; #6 ; { - \@@_array_bounds:NNnTF \msg_error:nnxxx #4 {#5} + \@@_array_bounds:NNnTF \msg_error:nneee #4 {#5} { \exp_after:wN \@@_change_func_type:NNN \@@_use_i_until_s:nw #6 ; diff --git a/macros/latex/contrib/l3kernel/l3int.dtx b/macros/latex/contrib/l3kernel/l3int.dtx index 5bb880ead3..e012e191d2 100644 --- a/macros/latex/contrib/l3kernel/l3int.dtx +++ b/macros/latex/contrib/l3kernel/l3int.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % @@ -1353,7 +1353,7 @@ % \end{macro} % % \begin{macro}{\int_const:Nn, \int_const:cn} -% \begin{macro}{\@@_const:nN} +% \begin{macro}{\@@_const:nN, \@@_const:eN} % \begin{macro}{\@@_constdef:Nw} % \begin{variable}{\c_@@_max_constdef_int} % \UnitTested @@ -1365,7 +1365,8 @@ % enabled) this runs some checks that constants would fail. % \begin{macrocode} \cs_new_protected:Npn \int_const:Nn #1#2 - { \exp_args:Nx \@@_const:nN { \int_eval:n {#2} } #1 } + { \@@_const:eN { \int_eval:n {#2} } #1 } +\cs_generate_variant:Nn \int_const:Nn { c } \cs_new_protected:Npn \@@_const:nN #1#2 { \int_compare:nNnTF {#1} < \c_zero_int @@ -1386,7 +1387,7 @@ } #2 = \@@_eval:w #1 \@@_eval_end: } -\cs_generate_variant:Nn \int_const:Nn { c } +\cs_generate_variant:Nn \@@_const:nN { e } \if_int_odd:w 0 \cs_if_exist:NT \tex_luatexversion:D { 1 } \cs_if_exist:NT \tex_omathchardef:D { 1 } @@ -2003,7 +2004,7 @@ { \int_gincr:N \g__kernel_prg_map_int \exp_args:NNc \@@_step:NNnnnn - \cs_gset_protected:Npx + \cs_gset_protected:Npe { @@_map_ \int_use:N \g__kernel_prg_map_int :w } {#1}{#2}{#3} { @@ -2035,7 +2036,7 @@ % % \begin{macro}{\int_to_symbols:nnn} % \UnitTested -% \begin{macro}{\@@_to_symbols:nnnn} +% \begin{macro}{\@@_to_symbols:nnnn, \@@_to_symbols:ennn} % For conversion of integers to arbitrary symbols the method is in % general as follows. The input number (|#1|) is compared to the total % number of symbols available at each place (|#2|). If the input is larger @@ -2050,7 +2051,7 @@ { \int_compare:nNnTF {#1} > {#2} { - \exp_args:NNo \exp_args:No \@@_to_symbols:nnnn + \@@_to_symbols:ennn { \int_case:nn { 1 + \int_mod:nn { #1 - 1 } {#2} } @@ -2066,6 +2067,7 @@ { \int_div_truncate:nn { #2 - 1 } {#3} } {#3} {#4} #1 } +\cs_generate_variant:Nn \@@_to_symbols:nnnn { e } % \end{macrocode} % \end{macro} % \end{macro} diff --git a/macros/latex/contrib/l3kernel/l3intarray.dtx b/macros/latex/contrib/l3kernel/l3intarray.dtx index cdbf71784c..10458ad602 100644 --- a/macros/latex/contrib/l3kernel/l3intarray.dtx +++ b/macros/latex/contrib/l3kernel/l3intarray.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % @@ -238,7 +238,7 @@ end, 'protected', 'global') { \__kernel_chk_if_free_cs:N #1 \int_gincr:N \g_@@_table_int - \cs_gset_nopar:Npx #1 { \@@:w \int_use:N \g_@@_table_int \c_space_tl } + \cs_gset_nopar:Npe #1 { \@@:w \int_use:N \g_@@_table_int \c_space_tl } } \cs_new_protected:Npn \intarray_new:Nn #1#2 { @@ -246,7 +246,7 @@ end, 'protected', 'global') \@@_gset_count:Nw #1 \int_eval:n {#2} \scan_stop: \int_compare:nNnT { \intarray_count:N #1 } < 0 { - \msg_error:nnx { kernel } { negative-array-size } + \msg_error:nne { kernel } { negative-array-size } { \intarray_count:N #1 } } } @@ -387,7 +387,7 @@ end, 'protected', 'global') { \@@_gset:wF \int_eval:n {#2} #1 \int_eval:n{#3} { - \msg_error:nnxxx { kernel } { out-of-bounds } + \msg_error:nneee { kernel } { out-of-bounds } { \token_to_str:N #1 } { \int_use:N \l_@@_bad_index_int } { \intarray_count:N #1 } } } @@ -640,7 +640,7 @@ luacmd('@@_gset_range:w', function() \@@_count:w #1 = \int_eval:n {#2} \scan_stop: \int_compare:nNnT { \intarray_count:N #1 } < 0 { - \msg_error:nnx { kernel } { negative-array-size } + \msg_error:nne { kernel } { negative-array-size } { \intarray_count:N #1 } } \int_compare:nNnT { \intarray_count:N #1 } > 0 @@ -716,7 +716,7 @@ luacmd('@@_gset_range:w', function() \cs_generate_variant:Nn \intarray_gset:Nnn { c } \cs_new_protected:Npn \@@_gset:Nww #1#2 ; #3 ; { - \@@_bounds:NNnTF \msg_error:nnxxx #1 {#2} + \@@_bounds:NNnTF \msg_error:nneee #1 {#2} { \@@_gset_overflow_test:nw {#3} \__kernel_intarray_gset:Nnn #1 {#2} {#3} @@ -742,7 +742,7 @@ luacmd('@@_gset_range:w', function() } \cs_new_protected:Npn \@@_gset_overflow:NNnn #1#2#3#4 { - \msg_error:nnxxxx { kernel } { overflow } + \msg_error:nneeee { kernel } { overflow } { \token_to_str:N #2 } {#3} {#4} { \@@_signed_max_dim:n {#4} } #1 #2 {#3} { \@@_signed_max_dim:n {#4} } } @@ -915,9 +915,9 @@ luacmd('@@_gset_range:w', function() % \begin{macro}{\intarray_show:N, \intarray_show:c, \intarray_log:N, \intarray_log:c} % Convert the list to a comma list (with spaces after each comma) % \begin{macrocode} -\cs_new_protected:Npn \intarray_show:N { \@@_show:NN \msg_show:nnxxxx } +\cs_new_protected:Npn \intarray_show:N { \@@_show:NN \msg_show:nneeee } \cs_generate_variant:Nn \intarray_show:N { c } -\cs_new_protected:Npn \intarray_log:N { \@@_show:NN \msg_log:nnxxxx } +\cs_new_protected:Npn \intarray_log:N { \@@_show:NN \msg_log:nneeee } \cs_generate_variant:Nn \intarray_log:N { c } \cs_new_protected:Npn \@@_show:NN #1#2 { diff --git a/macros/latex/contrib/l3kernel/l3kernel-functions.dtx b/macros/latex/contrib/l3kernel/l3kernel-functions.dtx index c2d442f183..d517f72a22 100644 --- a/macros/latex/contrib/l3kernel/l3kernel-functions.dtx +++ b/macros/latex/contrib/l3kernel/l3kernel-functions.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % @@ -491,9 +491,9 @@ % only a single expansion. % \end{function} % -% \begin{function}{\__kernel_tl_set:Nx, \__kernel_tl_gset:Nx} +% \begin{function}{\__kernel_tl_set:Ne, \__kernel_tl_gset:Ne} % \begin{syntax} -% \cs{__kernel_tl_set:Nx} \meta{tl~var} \Arg{tokens} +% \cs{__kernel_tl_set:Ne} \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 @@ -545,7 +545,7 @@ % { % \__kernel_backend_literal:n, % \__kernel_backend_literal:e, -% \__kernel_backend_literal:x +% \__kernel_backend_literal:e % } % \begin{syntax} % \cs{__kernel_backend_literal:n} \Arg{content} @@ -558,7 +558,7 @@ % \begin{function} % { % \__kernel_backend_literal_postscript:n, -% \__kernel_backend_literal_postscript:x +% \__kernel_backend_literal_postscript:e % } % \begin{syntax} % \cs{__kernel_backend_literal_postscript:n} \Arg{PostScript} @@ -570,7 +570,7 @@ % \begin{function} % { % \__kernel_backend_literal_pdf:n, -% \__kernel_backend_literal_pdf:x +% \__kernel_backend_literal_pdf:e % } % \begin{syntax} % \cs{__kernel_backend_literal_pdf:n} \Arg{PDF instructions} @@ -582,7 +582,7 @@ % \begin{function} % { % \__kernel_backend_literal_svg:n, -% \__kernel_backend_literal_svg:x +% \__kernel_backend_literal_svg:e % } % \begin{syntax} % \cs{__kernel_backend_literal_svg:n} \Arg{SVG instructions} @@ -594,7 +594,7 @@ % \begin{function} % { % \__kernel_backend_postscript:n, -% \__kernel_backend_postscript:x +% \__kernel_backend_postscript:e % } % \begin{syntax} % \cs{__kernel_backend_postscript:n} \Arg{PostScript} @@ -626,7 +626,7 @@ % \begin{function} % { % \__kernel_backend_matrix:n, -% \__kernel_backend_matrix:x +% \__kernel_backend_matrix:e % } % \begin{syntax} % \cs{__kernel_backend_matrix:n} \Arg{matrix} diff --git a/macros/latex/contrib/l3kernel/l3keys.dtx b/macros/latex/contrib/l3kernel/l3keys.dtx index 8a78f8cd7c..95ddcd0a38 100644 --- a/macros/latex/contrib/l3kernel/l3keys.dtx +++ b/macros/latex/contrib/l3kernel/l3keys.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % @@ -124,7 +124,8 @@ % % \section{Creating keys} % -% \begin{function}[updated = 2017-11-14]{\keys_define:nn} +% \begin{function}[updated = 2017-11-14] +% {\keys_define:nn, \keys_define:ne} % \begin{syntax} % \cs{keys_define:nn} \Arg{module} \Arg{keyval list} % \end{syntax} @@ -216,7 +217,7 @@ % \end{function} % % \begin{function}[added = 2011-08-21, updated = 2013-07-10] -% {.choices:nn, .choices:Vn, .choices:on, .choices:xn} +% {.choices:nn, .choices:Vn, .choices:en, .choices:on} % \begin{syntax} % \meta{key} .choices:nn = \Arg{choices} \Arg{code} % \end{syntax} @@ -263,7 +264,7 @@ % \end{function} % % \begin{function}[updated = 2013-07-09] -% {.default:n, .default:V, .default:o, .default:x} +% {.default:n, .default:V, .default:e, .default:o} % \begin{syntax} % \meta{key} .default:n = \Arg{default} % \end{syntax} @@ -355,7 +356,7 @@ % \end{function} % % \begin{function}[updated = 2013-07-09] -% {.initial:n, .initial:V, .initial:o, .initial:x} +% {.initial:n, .initial:V, .initial:e, .initial:o} % \begin{syntax} % \meta{key} .initial:n = \Arg{value} % \end{syntax} @@ -424,7 +425,7 @@ % \end{function} % % \begin{function}[added = 2011-08-21, updated = 2013-07-10] -% {.multichoices:nn, .multichoices:Vn, .multichoices:on, .multichoices:xn} +% {.multichoices:nn, .multichoices:Vn, .multichoices:en, .multichoices:on} % \begin{syntax} % \meta{key} .multichoices:nn \Arg{choices} \Arg{code} % \end{syntax} @@ -480,14 +481,14 @@ % at the point that the key is set up. % \end{function} % -% \begin{function}[added = 2021-10-30] -% {.str_set_x:N, .str_set_x:c, .str_gset_x:N, .str_gset_x:c} +% \begin{function}[added = 2023-09-18] +% {.str_set_e:N, .str_set_e:c, .str_gset_e:N, .str_gset_e:c} % \begin{syntax} -% \meta{key} .str_set_x:N = \meta{string variable} +% \meta{key} .str_set_e:N = \meta{string variable} % \end{syntax} % Defines \meta{key} to set \meta{string variable} to \meta{value}, -% which will be subjected to an \texttt{x}-type expansion -% (\emph{i.e.}~using \cs{str_set:Nx}). If the variable does not exist, +% which will be subjected to an \texttt{e}-type expansion +% (\emph{i.e.}~using \cs{str_set:Ne}). If the variable does not exist, % it is created globally at the point that the key is set up. % \end{function} % @@ -500,13 +501,14 @@ % at the point that the key is set up. % \end{function} % -% \begin{function}{.tl_set_x:N, .tl_set_x:c, .tl_gset_x:N, .tl_gset_x:c} +% \begin{function}[added = 2023-09-18] +% {.tl_set_e:N, .tl_set_e:c, .tl_gset_e:N, .tl_gset_e:c} % \begin{syntax} -% \meta{key} .tl_set_x:N = \meta{token list variable} +% \meta{key} .tl_set_e:N = \meta{token list variable} % \end{syntax} % Defines \meta{key} to set \meta{token list variable} to \meta{value}, -% which will be subjected to an \texttt{x}-type expansion -% (\emph{i.e.}~using \cs{tl_set:Nx}). If the variable does not exist, +% which will be subjected to an \texttt{e}-type expansion +% (\emph{i.e.}~using \cs{tl_set:Ne}). If the variable does not exist, % it is created globally at the point that the key is set up. % \end{function} % @@ -637,7 +639,7 @@ % key / choice-b .code:n = code-b, % key / choice-c .code:n = code-c, % key / unknown .code:n = -% \msg_error:nnxxx { mymodule } { unknown-choice } +% \msg_error:nneee { mymodule } { unknown-choice } % { key } % Name of choice key % { choice-a , choice-b , choice-c } % Valid choices % { \exp_not:n {#1} } % Invalid choice given @@ -724,7 +726,10 @@ % \section{Setting keys} % % \begin{function}[updated = 2017-11-14] -% {\keys_set:nn, \keys_set:nV, \keys_set:nv, \keys_set:no, \keys_set:nx} +% { +% \keys_set:nn, \keys_set:nV, \keys_set:nv, \keys_set:ne, +% \keys_set:no, +% } % \begin{syntax} % \cs{keys_set:nn} \Arg{module} \Arg{keyval list} % \end{syntax} @@ -782,11 +787,14 @@ % \begin{function}[added = 2011-08-23, updated = 2019-01-29] % { % \keys_set_known:nn, \keys_set_known:nV, -% \keys_set_known:nv, \keys_set_known:no, +% \keys_set_known:nv, \keys_set_known:ne, +% \keys_set_known:no % \keys_set_known:nnN, \keys_set_known:nVN, -% \keys_set_known:nvN, \keys_set_known:noN, +% \keys_set_known:nvN, \keys_set_known:neN, +% \keys_set_known:noN % \keys_set_known:nnnN, \keys_set_known:nVnN, -% \keys_set_known:nvnN, \keys_set_known:nonN +% \keys_set_known:nvnN, \keys_set_known:nenN, +% \keys_set_known:nonN % } % \begin{syntax} % \cs{keys_set_known:nn} \Arg{module} \Arg{keyval list} @@ -1730,7 +1738,7 @@ % % \subsection{The key defining mechanism} % -% \begin{macro}{\keys_define:nn} +% \begin{macro}{\keys_define:nn, \keys_define:ne, \keys_define:nx} % \begin{macro}{\@@_define:nnn, \@@_define:onn} % The public function for definitions is just a wrapper for the lower % level mechanism, more or less. The outer function is designed to @@ -1739,9 +1747,10 @@ % \begin{macrocode} \cs_new_protected:Npn \keys_define:nn { \@@_define:onn \l_@@_module_str } +\cs_generate_variant:Nn \keys_define:nn { ne , nx } \cs_new_protected:Npn \@@_define:nnn #1#2#3 { - \str_set:Nx \l_@@_module_str { \@@_trim_spaces:n {#2} } + \str_set:Ne \l_@@_module_str { \@@_trim_spaces:n {#2} } \keyval_parse:NNn \@@_define:n \@@_define:nn {#3} \str_set:Nn \l_@@_module_str {#1} } @@ -1776,7 +1785,7 @@ { \str_if_empty:NF \l_@@_property_str { - \msg_error:nnxx { keys } { property-unknown } + \msg_error:nnee { keys } { property-unknown } \l_@@_property_str \l_keys_path_str } } @@ -1798,12 +1807,12 @@ % and storing the text before and after it. Everything is turned into % strings, so there is no problem using an \texttt{x}-type expansion. Since % \cs{@@_trim_spaces:n} will turn its argument into a string anyway, this -% function uses \cs{cs_set_nopar:Npx} instead of \cs{tl_set:Nx} to gain some +% function uses \cs{cs_set_nopar:Npe} instead of \cs{tl_set:Ne} to gain some % speed. % \begin{macrocode} \cs_new_protected:Npn \@@_property_find:n #1 { - \cs_set_nopar:Npx \l_@@_property_str { \@@_trim_spaces:n { #1 } } + \cs_set_nopar:Npe \l_@@_property_str { \@@_trim_spaces:n { #1 } } \exp_after:wN \@@_property_find_auxi:w \l_@@_property_str \s_@@_nil \@@_property_find_auxii:w . \s_@@_nil \@@_property_find_err:w @@ -1816,22 +1825,22 @@ #1 \s_@@_mark #2 \s_@@_nil \@@_property_find_auxii:w . \s_@@_nil \@@_property_find_err:w { - \cs_set_nopar:Npx \l_keys_path_str + \cs_set_nopar:Npe \l_keys_path_str { \str_if_empty:NF \l_@@_module_str { \l_@@_module_str / } #1 } \@@_property_find_auxi:w #2 \s_@@_nil \@@_property_find_auxiii:w . \s_@@_nil \@@_property_find_auxiv:w } \cs_new_protected:Npn \@@_property_find_auxiii:w #1 \s_@@_mark { - \cs_set_nopar:Npx \l_keys_path_str { \l_keys_path_str . #1 } + \cs_set_nopar:Npe \l_keys_path_str { \l_keys_path_str . #1 } \@@_property_find_auxi:w } \cs_new_protected:Npn \@@_property_find_auxiv:w #1 \s_@@_nil \@@_property_find_auxiii:w \s_@@_mark \s_@@_nil \@@_property_find_auxiv:w { - \cs_set_nopar:Npx \l_@@_property_str { . #1 } - \cs_set_nopar:Npx \l_keys_path_str + \cs_set_nopar:Npe \l_@@_property_str { . #1 } + \cs_set_nopar:Npe \l_keys_path_str { \exp_after:wN \@@_trim_spaces:n \exp_after:wN { \l_keys_path_str } } \tl_set_eq:NN \l_keys_path_tl \l_keys_path_str } @@ -1861,7 +1870,7 @@ \l_@@_property_str \s_@@_stop { \use:c { \c_@@_props_root_str \l_@@_property_str } } { - \msg_error:nnxx { keys } { property-requires-value } + \msg_error:nnee { keys } { property-requires-value } \l_@@_property_str \l_keys_path_str } } @@ -1896,13 +1905,13 @@ { \bool_if_exist:NF #1 { \bool_new:N #1 } \@@_choice_make: - \@@_cmd_set:nx { \l_keys_path_str / true } + \@@_cmd_set:ne { \l_keys_path_str / true } { \exp_not:c { bool_ #2 set_ #3 :N } \exp_not:N #1 } - \@@_cmd_set:nx { \l_keys_path_str / false } + \@@_cmd_set:ne { \l_keys_path_str / false } { \exp_not:c { bool_ #2 set_ #4 :N } \exp_not:N #1 } \@@_cmd_set_direct:nn { \l_keys_path_str / unknown } { - \msg_error:nnx { keys } { boolean-values-only } + \msg_error:nne { keys } { boolean-values-only } \l_keys_path_str } \@@_default_set:n { true } @@ -1932,7 +1941,7 @@ { \c_@@_type_root_str \@@_parent:o \l_keys_path_str } { choice } { - \msg_error:nnxx { keys } { nested-choice-key } + \msg_error:nnee { keys } { nested-choice-key } \l_keys_path_tl { \@@_parent:o \l_keys_path_str } } { \@@_choice_make_aux:N #1 } @@ -1946,7 +1955,7 @@ \@@_cmd_set_direct:nn \l_keys_path_str { #1 {##1} } \@@_cmd_set_direct:nn { \l_keys_path_str / unknown } { - \msg_error:nnxx { keys } { choice-unknown } + \msg_error:nnee { keys } { choice-unknown } \l_keys_path_str {##1} } } @@ -1971,7 +1980,7 @@ \clist_map_inline:nn {#2} { \int_incr:N \l_keys_choice_int - \@@_cmd_set:nx + \@@_cmd_set:ne { \l_keys_path_str / \@@_trim_spaces:n {##1} } { \tl_set:Nn \exp_not:N \l_keys_choice_tl {##1} @@ -1987,7 +1996,7 @@ % % \begin{macro} % { -% \@@_cmd_set:nn, \@@_cmd_set:nx, \@@_cmd_set:Vn, \@@_cmd_set:Vo, +% \@@_cmd_set:nn, \@@_cmd_set:Vn, \@@_cmd_set:ne, \@@_cmd_set:Vo, % \@@_cmd_set_direct:nn % } % Setting the code for a key first logs if appropriate that we are @@ -1995,7 +2004,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_cmd_set:nn #1#2 { \@@_cmd_set_direct:nn {#1} { \@@_precompile:n {#2} } } -\cs_generate_variant:Nn \@@_cmd_set:nn { nx , Vn , Vo } +\cs_generate_variant:Nn \@@_cmd_set:nn { ne , Vn , Vo } \cs_new_protected:Npn \@@_cmd_set_direct:nn #1#2 { \cs_set_protected:cpn { \c_@@_code_root_str #1 } ##1 {#2} } % \end{macrocode} @@ -2008,7 +2017,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_cs_set:NNpn #1#2#3# { - \cs_set_protected:cpx { \c_@@_code_root_str \l_keys_path_str } ##1 + \cs_set_protected:cpe { \c_@@_code_root_str \l_keys_path_str } ##1 { \@@_precompile:n { #1 \exp_not:N #2 \exp_not:n {#3} {##1} } @@ -2020,7 +2029,7 @@ % \end{macro} % % \begin{macro}{\@@_default_set:n} -% Setting a default value is easy. These are stored using \cs{cs_set_nopar:cpx} as this +% Setting a default value is easy. These are stored using \cs{cs_set_nopar:cpe} as this % avoids any worries about whether a token list exists. % \begin{macrocode} \cs_new_protected:Npn \@@_default_set:n #1 @@ -2032,7 +2041,7 @@ \tex_undefined:D } { - \cs_set_nopar:cpx + \cs_set_nopar:cpe { \c_@@_default_root_str \l_keys_path_str } { \exp_not:n {#1} } \@@_value_requirement:nn { required } { false } @@ -2114,13 +2123,13 @@ \cs_new_protected:Npn \@@_legacy_if_set:nnnn #1#2#3#4 { \@@_choice_make: - \@@_cmd_set:nx { \l_keys_path_str / true } + \@@_cmd_set:ne { \l_keys_path_str / true } { \exp_not:c { legacy_if_#2 set_ #3 :n } { \exp_not:n {#1} } } - \@@_cmd_set:nx { \l_keys_path_str / false } + \@@_cmd_set:ne { \l_keys_path_str / false } { \exp_not:c { legacy_if_#2 set_ #4 :n } { \exp_not:n {#1} } } \@@_cmd_set:nn { \l_keys_path_str / unknown } { - \msg_error:nnx { keys } { boolean-values-only } + \msg_error:nne { keys } { boolean-values-only } \l_keys_path_str } \@@_default_set:n { true } @@ -2165,7 +2174,7 @@ \prop_if_exist:NF #1 { \prop_new:N #1 } \exp_after:wN \@@_find_key_module:wNN \l_keys_path_str \s_@@_stop \l_@@_tmpa_tl \l_@@_tmpb_tl - \@@_cmd_set:nx \l_keys_path_str + \@@_cmd_set:ne \l_keys_path_str { \exp_not:c { prop_ #2 put:Nnn } \exp_not:N #1 @@ -2225,7 +2234,7 @@ } } { - \msg_error:nnx { keys } + \msg_error:nne { keys } { boolean-values-only } { .value_ #1 :n } } @@ -2234,7 +2243,7 @@ { \bool_if:NF \l_@@_no_value_bool { - \msg_error:nnxx { keys } { value-forbidden } + \msg_error:nnee { keys } { value-forbidden } \l_keys_path_str \l_keys_value_tl \use_none:nnn } @@ -2243,7 +2252,7 @@ { \bool_if:NT \l_@@_no_value_bool { - \msg_error:nnx { keys } { value-required } + \msg_error:nne { keys } { value-required } \l_keys_path_str \use_none:nnn } @@ -2294,7 +2303,7 @@ { \prop_get:NVNF #1 \l_@@_module_str \l_@@_tmpa_tl { \tl_clear:N \l_@@_tmpa_tl } - \tl_set:Nx \l_@@_tmpb_tl + \tl_set:Ne \l_@@_tmpb_tl { \exp_after:wN \@@_usage:w \l_keys_path_str \s_@@_stop } \bool_if:NTF #2 { \clist_put_right:NV \l_@@_tmpa_tl \l_@@_tmpb_tl } @@ -2316,7 +2325,7 @@ \cs_new_protected:Npn \@@_variable_set:NnnN #1#2#3#4 { \use:c { #2_if_exist:NF } #1 { \use:c { #2 _new:N } #1 } - \@@_cmd_set:nx \l_keys_path_str + \@@_cmd_set:ne \l_keys_path_str { \exp_not:c { #2 _ #3 set:N #4 } \exp_not:N #1 @@ -2386,8 +2395,7 @@ % \end{macrocode} % \end{macro} % -% \begin{macro} -% {.choices:nn, .choices:Vn, .choices:on, .choices:xn} +% \begin{macro}{.choices:nn, .choices:Vn, .choices:en, .choices:on, .choices:xn} % For auto-generation of a series of mutually-exclusive choices. % Here, |#1| consists of two separate % arguments, hence the slightly odd-looking implementation. @@ -2396,6 +2404,8 @@ { \@@_choices_make:nn #1 } \cs_new_protected:cpn { \c_@@_props_root_str .choices:Vn } #1 { \exp_args:NV \@@_choices_make:nn #1 } +\cs_new_protected:cpn { \c_@@_props_root_str .choices:en } #1 + { \exp_args:Ne \@@_choices_make:nn #1 } \cs_new_protected:cpn { \c_@@_props_root_str .choices:on } #1 { \exp_args:No \@@_choices_make:nn #1 } \cs_new_protected:cpn { \c_@@_props_root_str .choices:xn } #1 @@ -2452,13 +2462,15 @@ % \end{macro} % \end{macro} % -% \begin{macro}{.default:n, .default:V, .default:o, .default:x} +% \begin{macro}{.default:n, .default:V, .default:e, .default:o, .default:x} % Expansion is left to the internal functions. % \begin{macrocode} \cs_new_protected:cpn { \c_@@_props_root_str .default:n } #1 { \@@_default_set:n {#1} } \cs_new_protected:cpn { \c_@@_props_root_str .default:V } #1 { \exp_args:NV \@@_default_set:n #1 } +\cs_new_protected:cpn { \c_@@_props_root_str .default:e } #1 + { \exp_args:Ne \@@_default_set:n {#1} } \cs_new_protected:cpn { \c_@@_props_root_str .default:o } #1 { \exp_args:No \@@_default_set:n {#1} } \cs_new_protected:cpn { \c_@@_props_root_str .default:x } #1 @@ -2514,13 +2526,15 @@ % \end{macrocode} % \end{macro} % -% \begin{macro}{.initial:n, .initial:V, .initial:o, .initial:x} +% \begin{macro}{.initial:n, .initial:V, .initial:e, .initial:o, .initial:x} % The standard hand-off approach. % \begin{macrocode} \cs_new_protected:cpn { \c_@@_props_root_str .initial:n } #1 { \@@_initialise:n {#1} } \cs_new_protected:cpn { \c_@@_props_root_str .initial:V } #1 { \exp_args:NV \@@_initialise:n #1 } +\cs_new_protected:cpn { \c_@@_props_root_str .initial:e } #1 + { \exp_args:Ne \@@_initialise:n {#1} } \cs_new_protected:cpn { \c_@@_props_root_str .initial:o } #1 { \exp_args:No \@@_initialise:n {#1} } \cs_new_protected:cpn { \c_@@_props_root_str .initial:x } #1 @@ -2579,11 +2593,7 @@ % \end{macro} % % \begin{macro}{.multichoice:} -% \begin{macro} -% { -% .multichoices:nn, .multichoices:Vn, .multichoices:on, -% .multichoices:xn, -% } +% \begin{macro}{.multichoices:nn, .multichoices:Vn, .multichoices:en, .multichoices:on, .multichoices:xn} % The same idea as \texttt{.choice:} and \texttt{.choices:nn}, but % where more than one choice is allowed. % \begin{macrocode} @@ -2593,6 +2603,8 @@ { \@@_multichoices_make:nn #1 } \cs_new_protected:cpn { \c_@@_props_root_str .multichoices:Vn } #1 { \exp_args:NV \@@_multichoices_make:nn #1 } +\cs_new_protected:cpn { \c_@@_props_root_str .multichoices:en } #1 + { \exp_args:Ne \@@_multichoices_make:nn #1 } \cs_new_protected:cpn { \c_@@_props_root_str .multichoices:on } #1 { \exp_args:No \@@_multichoices_make:nn #1 } \cs_new_protected:cpn { \c_@@_props_root_str .multichoices:xn } #1 @@ -2647,26 +2659,26 @@ % % \begin{macro}{.str_set:N, .str_set:c} % \begin{macro}{.str_gset:N, .str_gset:c} -% \begin{macro}{.str_set_x:N, .str_set_x:c} -% \begin{macro}{.str_gset_x:N, .str_gset_x:c} +% \begin{macro}{.str_set_e:N, .str_set_e:c} +% \begin{macro}{.str_gset_e:N, .str_gset_e:c} % Setting a variable is very easy: just pass the data along. % \begin{macrocode} \cs_new_protected:cpn { \c_@@_props_root_str .str_set:N } #1 { \@@_variable_set:NnnN #1 { str } { } n } \cs_new_protected:cpn { \c_@@_props_root_str .str_set:c } #1 { \@@_variable_set:cnnN {#1} { str } { } n } -\cs_new_protected:cpn { \c_@@_props_root_str .str_set_x:N } #1 - { \@@_variable_set:NnnN #1 { str } { } x } -\cs_new_protected:cpn { \c_@@_props_root_str .str_set_x:c } #1 - { \@@_variable_set:cnnN {#1} { str } { } x } +\cs_new_protected:cpn { \c_@@_props_root_str .str_set_e:N } #1 + { \@@_variable_set:NnnN #1 { str } { } e } +\cs_new_protected:cpn { \c_@@_props_root_str .str_set_e:c } #1 + { \@@_variable_set:cnnN {#1} { str } { } e } \cs_new_protected:cpn { \c_@@_props_root_str .str_gset:N } #1 { \@@_variable_set:NnnN #1 { str } { g } n } \cs_new_protected:cpn { \c_@@_props_root_str .str_gset:c } #1 { \@@_variable_set:cnnN {#1} { str } { g } n } -\cs_new_protected:cpn { \c_@@_props_root_str .str_gset_x:N } #1 - { \@@_variable_set:NnnN #1 { str } { g } x } -\cs_new_protected:cpn { \c_@@_props_root_str .str_gset_x:c } #1 - { \@@_variable_set:cnnN {#1} { str } { g } x } +\cs_new_protected:cpn { \c_@@_props_root_str .str_gset_e:N } #1 + { \@@_variable_set:NnnN #1 { str } { g } e } +\cs_new_protected:cpn { \c_@@_props_root_str .str_gset_e:c } #1 + { \@@_variable_set:cnnN {#1} { str } { g } e } % \end{macrocode} % \end{macro} % \end{macro} @@ -2675,26 +2687,26 @@ % % \begin{macro}{.tl_set:N, .tl_set:c} % \begin{macro}{.tl_gset:N, .tl_gset:c} -% \begin{macro}{.tl_set_x:N, .tl_set_x:c} -% \begin{macro}{.tl_gset_x:N, .tl_gset_x:c} +% \begin{macro}{.tl_set_e:N, .tl_set_e:c} +% \begin{macro}{.tl_gset_e:N, .tl_gset_e:c} % Setting a variable is very easy: just pass the data along. % \begin{macrocode} \cs_new_protected:cpn { \c_@@_props_root_str .tl_set:N } #1 { \@@_variable_set:NnnN #1 { tl } { } n } \cs_new_protected:cpn { \c_@@_props_root_str .tl_set:c } #1 { \@@_variable_set:cnnN {#1} { tl } { } n } -\cs_new_protected:cpn { \c_@@_props_root_str .tl_set_x:N } #1 - { \@@_variable_set:NnnN #1 { tl } { } x } -\cs_new_protected:cpn { \c_@@_props_root_str .tl_set_x:c } #1 - { \@@_variable_set:cnnN {#1} { tl } { } x } +\cs_new_protected:cpn { \c_@@_props_root_str .tl_set_e:N } #1 + { \@@_variable_set:NnnN #1 { tl } { } e } +\cs_new_protected:cpn { \c_@@_props_root_str .tl_set_e:c } #1 + { \@@_variable_set:cnnN {#1} { tl } { } e } \cs_new_protected:cpn { \c_@@_props_root_str .tl_gset:N } #1 { \@@_variable_set:NnnN #1 { tl } { g } n } \cs_new_protected:cpn { \c_@@_props_root_str .tl_gset:c } #1 { \@@_variable_set:cnnN {#1} { tl } { g } n } -\cs_new_protected:cpn { \c_@@_props_root_str .tl_gset_x:N } #1 - { \@@_variable_set:NnnN #1 { tl } { g } x } -\cs_new_protected:cpn { \c_@@_props_root_str .tl_gset_x:c } #1 - { \@@_variable_set:cnnN {#1} { tl } { g } x } +\cs_new_protected:cpn { \c_@@_props_root_str .tl_gset_e:N } #1 + { \@@_variable_set:NnnN #1 { tl } { g } e } +\cs_new_protected:cpn { \c_@@_props_root_str .tl_gset_e:c } #1 + { \@@_variable_set:cnnN {#1} { tl } { g } e } % \end{macrocode} % \end{macro} % \end{macro} @@ -2732,7 +2744,8 @@ % % \begin{macro} % { -% \keys_set:nn, \keys_set:nV, \keys_set:nv, \keys_set:no, \keys_set:nx, +% \keys_set:nn, \keys_set:nV, \keys_set:nv, \keys_set:ne, +% \keys_set:no, \keys_set:nx, % \@@_set:nn % } % \begin{macro}{\@@_set:nnn} @@ -2740,7 +2753,7 @@ % \begin{macrocode} \cs_new_protected:Npn \keys_set:nn #1#2 { - \use:x + \use:e { \bool_set_false:N \exp_not:N \l_@@_only_known_bool \bool_set_false:N \exp_not:N \l_@@_filtered_bool @@ -2758,12 +2771,12 @@ { \exp_not:o \l_@@_relative_tl } } } -\cs_generate_variant:Nn \keys_set:nn { nV , nv , no , nx } +\cs_generate_variant:Nn \keys_set:nn { nV , nv , ne , no , nx } \cs_new_protected:Npn \@@_set:nn #1#2 { \exp_args:No \@@_set:nnn \l_@@_module_str {#1} {#2} } \cs_new_protected:Npn \@@_set:nnn #1#2#3 { - \str_set:Nx \l_@@_module_str { \@@_trim_spaces:n {#2} } + \str_set:Ne \l_@@_module_str { \@@_trim_spaces:n {#2} } \keyval_parse:NNn \@@_set_keyval:n \@@_set_keyval:nn {#3} \str_set:Nn \l_@@_module_str {#1} } @@ -2774,18 +2787,21 @@ % \begin{macro} % { % \keys_set_known:nnN, \keys_set_known:nVN, -% \keys_set_known:nvN, \keys_set_known:noN +% \keys_set_known:nvN, \keys_set_known:neN, +% \keys_set_known:noN % } % \begin{macro} % { % \keys_set_known:nnnN, \keys_set_known:nVnN, -% \keys_set_known:nvnN, \keys_set_known:nonN +% \keys_set_known:nvnN, \keys_set_known:nenN, +% \keys_set_known:nonN % } % \begin{macro}{\@@_set_known:nnnnN} % \begin{macro} % { % \keys_set_known:nn, \keys_set_known:nV, -% \keys_set_known:nv, \keys_set_known:no +% \keys_set_known:nv, \keys_set_known:ne, +% \keys_set_known:no % } % \begin{macro}{\@@_set_known:nnn} % Setting known keys simply means setting the appropriate flag, then @@ -2799,26 +2815,26 @@ \exp_args:No \@@_set_known:nnnnN \l_@@_unused_clist \q_@@_no_value {#1} {#2} #3 } -\cs_generate_variant:Nn \keys_set_known:nnN { nV , nv , no } +\cs_generate_variant:Nn \keys_set_known:nnN { nV , nv , ne , no } \cs_new_protected:Npn \keys_set_known:nnnN #1#2#3#4 { \exp_args:No \@@_set_known:nnnnN \l_@@_unused_clist {#3} {#1} {#2} #4 } -\cs_generate_variant:Nn \keys_set_known:nnnN { nV , nv , no } +\cs_generate_variant:Nn \keys_set_known:nnnN { nV , nv , ne , no } \cs_new_protected:Npn \@@_set_known:nnnnN #1#2#3#4#5 { \clist_clear:N \l_@@_unused_clist \@@_set_known:nnn {#2} {#3} {#4} - \__kernel_tl_set:Nx #5 { \exp_not:o \l_@@_unused_clist } + \__kernel_tl_set:Ne #5 { \exp_not:o \l_@@_unused_clist } \tl_set:Nn \l_@@_unused_clist {#1} } \cs_new_protected:Npn \keys_set_known:nn #1#2 { \@@_set_known:nnn \q_@@_no_value {#1} {#2} } -\cs_generate_variant:Nn \keys_set_known:nn { nV , nv , no } +\cs_generate_variant:Nn \keys_set_known:nn { nV , nv , ne , no } \cs_new_protected:Npn \@@_set_known:nnn #1#2#3 { - \use:x + \use:e { \bool_set_true:N \exp_not:N \l_@@_only_known_bool \bool_set_false:N \exp_not:N \l_@@_filtered_bool @@ -2888,7 +2904,7 @@ { \clist_clear:N \l_@@_unused_clist \@@_set_filter:nnnn {#2} {#3} {#4} {#5} - \__kernel_tl_set:Nx #6 { \exp_not:o \l_@@_unused_clist } + \__kernel_tl_set:Ne #6 { \exp_not:o \l_@@_unused_clist } \tl_set:Nn \l_@@_unused_clist {#1} } \cs_new_protected:Npn \keys_set_filter:nnn #1#2#3 @@ -2896,7 +2912,7 @@ \cs_generate_variant:Nn \keys_set_filter:nnn { nnV , nnv , nno } \cs_new_protected:Npn \@@_set_filter:nnnn #1#2#3#4 { - \use:x + \use:e { \bool_set_false:N \exp_not:N \l_@@_only_known_bool \bool_set_true:N \exp_not:N \l_@@_filtered_bool @@ -2915,7 +2931,7 @@ } \cs_new_protected:Npn \keys_set_groups:nnn #1#2#3 { - \use:x + \use:e { \bool_set_false:N \exp_not:N \l_@@_only_known_bool \bool_set_false:N \exp_not:N \l_@@_filtered_bool @@ -3001,7 +3017,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_set_keyval:nnn #1#2#3 { - \__kernel_tl_set:Nx \l_keys_path_str + \__kernel_tl_set:Ne \l_keys_path_str { \tl_if_blank:nF {#1} { #1 / } @@ -3020,7 +3036,7 @@ } \cs_generate_variant:Nn \@@_set_keyval:nnn { o } % \end{macrocode} -% This function uses \cs{cs_set_nopar:Npx} internally for performance reasons, +% This function uses \cs{cs_set_nopar:Npe} internally for performance reasons, % the argument |#1| is already a string in every usage, so turning it into a % string again seems unnecessary. % \begin{macrocode} @@ -3036,12 +3052,12 @@ \cs_new_protected:Npn \@@_find_key_module_auxii:Nw #1 #2 \s_@@_mark #3 \s_@@_nil \@@_find_key_module_auxii:Nw { - \cs_set_nopar:Npx #1 { \tl_if_empty:NF #1 { #1 / } #2 } + \cs_set_nopar:Npe #1 { \tl_if_empty:NF #1 { #1 / } #2 } \@@_find_key_module_auxi:Nw #1 #3 \s_@@_nil \@@_find_key_module_auxiii:Nw } \cs_new_protected:Npn \@@_find_key_module_auxiii:Nw #1 #2 \s_@@_mark { - \cs_set_nopar:Npx #1 { \tl_if_empty:NF #1 { #1 / } #2 } + \cs_set_nopar:Npe #1 { \tl_if_empty:NF #1 { #1 / } #2 } \@@_find_key_module_auxi:Nw #1 } \cs_new_protected:Npn \@@_find_key_module_auxiv:Nw @@ -3209,7 +3225,7 @@ { \c_@@_code_root_str \l_@@_module_str / unknown } { \@@_execute:no { \l_@@_module_str / unknown } \l_keys_value_tl } { - \msg_error:nnxx { keys } { unknown } + \msg_error:nnee { keys } { unknown } \l_keys_path_str \l_@@_module_str } } @@ -3248,7 +3264,7 @@ { \@@_quark_if_no_value:NTF \l_@@_relative_tl { - \clist_put_right:Nx \l_@@_unused_clist + \clist_put_right:Ne \l_@@_unused_clist { \l_keys_key_str \bool_if:NF \l_@@_no_value_bool @@ -3258,7 +3274,7 @@ { \tl_if_empty:NTF \l_@@_relative_tl { - \clist_put_right:Nx \l_@@_unused_clist + \clist_put_right:Ne \l_@@_unused_clist { \l_keys_path_str \bool_if:NF \l_@@_no_value_bool @@ -3270,30 +3286,30 @@ } \cs_new_protected:Npn \@@_store_unused_aux: { - \__kernel_tl_set:Nx \l_@@_relative_tl + \__kernel_tl_set:Ne \l_@@_relative_tl { \exp_args:No \@@_trim_spaces:n \l_@@_relative_tl } - \use:x + \use:e { \cs_set_protected:Npn \@@_store_unused:w - ####1 \l_@@_relative_tl / - ####2 \l_@@_relative_tl / - ####3 \s_@@_stop + ##1 \l_@@_relative_tl / + ##2 \l_@@_relative_tl / + ##3 \s_@@_stop } { \tl_if_blank:nF {##1} { - \msg_error:nnxx { keys } { bad-relative-key-path } + \msg_error:nnee { keys } { bad-relative-key-path } \l_keys_path_str \l_@@_relative_tl } - \clist_put_right:Nx \l_@@_unused_clist + \clist_put_right:Ne \l_@@_unused_clist { \exp_not:n {##2} \bool_if:NF \l_@@_no_value_bool { = { \exp_not:o \l_keys_value_tl } } } } - \use:x + \use:e { \@@_store_unused:w \l_keys_path_str \l_@@_relative_tl / \l_@@_relative_tl / @@ -3458,9 +3474,9 @@ % To show a key, show its code using a message. % \begin{macrocode} \cs_new_protected:Npn \keys_show:nn - { \@@_show:Nnn \msg_show:nnxxxx } + { \@@_show:Nnn \msg_show:nneeee } \cs_new_protected:Npn \keys_log:nn - { \@@_show:Nnn \msg_log:nnxxxx } + { \@@_show:Nnn \msg_log:nneeee } \cs_new_protected:Npn \@@_show:Nnn #1#2#3 { #1 { keys } { show-key } @@ -3483,7 +3499,7 @@ } { } { } } -\cs_new:Npx \@@_show:n #1 +\cs_new:Npe \@@_show:n #1 { \exp_not:N \@@_show:w #1 @@ -3492,21 +3508,21 @@ \tl_to_str:n { \@@_precompile:n } \exp_not:N \s_@@_stop } -\use:x +\use:e { \cs_new:Npn \exp_not:N \@@_show:w - ##1 \tl_to_str:n { \@@_precompile:n } - ##2 \tl_to_str:n { \@@_precompile:n } - ##3 \exp_not:N \s_@@_stop + #1 \tl_to_str:n { \@@_precompile:n } + #2 \tl_to_str:n { \@@_precompile:n } + #3 \exp_not:N \s_@@_stop } { \tl_if_blank:nTF {#2} {#1} { \@@_show:Nw #2 \s_@@_stop } } -\use:x +\use:e { - \cs_new:Npn \exp_not:N \@@_show:Nw ##1##2 + \cs_new:Npn \exp_not:N \@@_show:Nw #1#2 \c_right_brace_str \exp_not:N \s_@@_stop } {#2} @@ -3568,6 +3584,38 @@ \prop_gput:Nnn \g_msg_module_type_prop { keys } { } % \end{macrocode} % +% \subsection{Deprecated functions} +% +% \begin{macro}{.str_set_x:N, .str_set_x:c} +% \begin{macro}{.str_gset_x:N, .str_gset_x:c} +% \begin{macrocode} +\cs_new_protected:cpn { \c_@@_props_root_str .str_set_x:N } #1 + { \@@_variable_set:NnnN #1 { str } { } x } +\cs_new_protected:cpn { \c_@@_props_root_str .str_set_x:c } #1 + { \@@_variable_set:cnnN {#1} { str } { } x } +\cs_new_protected:cpn { \c_@@_props_root_str .str_gset_x:N } #1 + { \@@_variable_set:NnnN #1 { str } { g } x } +\cs_new_protected:cpn { \c_@@_props_root_str .str_gset_x:c } #1 + { \@@_variable_set:cnnN {#1} { str } { g } x } +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro}{.tl_set_x:N, .tl_set_x:c} +% \begin{macro}{.tl_gset_x:N, .tl_gset_x:c} +% \begin{macrocode} +\cs_new_protected:cpn { \c_@@_props_root_str .tl_set_x:N } #1 + { \@@_variable_set:NnnN #1 { tl } { } x } +\cs_new_protected:cpn { \c_@@_props_root_str .tl_set_x:c } #1 + { \@@_variable_set:cnnN {#1} { tl } { } x } +\cs_new_protected:cpn { \c_@@_props_root_str .tl_gset_x:N } #1 + { \@@_variable_set:NnnN #1 { tl } { g } x } +\cs_new_protected:cpn { \c_@@_props_root_str .tl_gset_x:c } #1 + { \@@_variable_set:cnnN {#1} { tl } { g } x } +% \end{macrocode} +% \end{macro} +% \end{macro} +% % \begin{macrocode} %</package> % \end{macrocode} diff --git a/macros/latex/contrib/l3kernel/l3legacy.dtx b/macros/latex/contrib/l3kernel/l3legacy.dtx index 4142ac4658..92b8cdb971 100644 --- a/macros/latex/contrib/l3kernel/l3legacy.dtx +++ b/macros/latex/contrib/l3kernel/l3legacy.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3luatex.dtx b/macros/latex/contrib/l3kernel/l3luatex.dtx index 4e1f6a5bb8..c7832c892d 100644 --- a/macros/latex/contrib/l3kernel/l3luatex.dtx +++ b/macros/latex/contrib/l3kernel/l3luatex.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3msg.dtx b/macros/latex/contrib/l3kernel/l3msg.dtx index 82092523fa..4feb4115a1 100644 --- a/macros/latex/contrib/l3kernel/l3msg.dtx +++ b/macros/latex/contrib/l3kernel/l3msg.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % @@ -105,8 +105,8 @@ % % \begin{function}[updated = 2011-08-16] % { -% \msg_new:nnnn, \msg_new:nnxx, -% \msg_new:nnn, \msg_new:nnx +% \msg_new:nnnn, \msg_new:nnee, +% \msg_new:nnn, \msg_new:nne % } % \begin{syntax} % \cs{msg_new:nnnn} \Arg{module} \Arg{message} \Arg{text} \Arg{more text} @@ -320,12 +320,12 @@ % \msg_fatal:nnVn , % \msg_fatal:nnnV , % \msg_fatal:nnV , -% \msg_fatal:nnxxxx , -% \msg_fatal:nnxxx , -% \msg_fatal:nnnxx , -% \msg_fatal:nnxx , -% \msg_fatal:nnnx , -% \msg_fatal:nnx +% \msg_fatal:nneeee , +% \msg_fatal:nneee , +% \msg_fatal:nnnee , +% \msg_fatal:nnee , +% \msg_fatal:nnne , +% \msg_fatal:nne % } % \begin{syntax} % \cs{msg_fatal:nnnnnn} \Arg{module} \Arg{message} \Arg{arg one} \Arg{arg two} \Arg{arg three} \Arg{arg four} @@ -347,12 +347,12 @@ % \msg_critical:nnVn , % \msg_critical:nnnV , % \msg_critical:nnV , -% \msg_critical:nnxxxx , -% \msg_critical:nnxxx , -% \msg_critical:nnnxx , -% \msg_critical:nnxx , -% \msg_critical:nnnx , -% \msg_critical:nnx +% \msg_critical:nneeee , +% \msg_critical:nneee , +% \msg_critical:nnnee , +% \msg_critical:nnee , +% \msg_critical:nnne , +% \msg_critical:nne % } % \begin{syntax} % \cs{msg_critical:nnnnnn} \Arg{module} \Arg{message} \Arg{arg one} \Arg{arg two} \Arg{arg three} \Arg{arg four} @@ -380,12 +380,12 @@ % \msg_error:nnVn , % \msg_error:nnnV , % \msg_error:nnV , -% \msg_error:nnxxxx , -% \msg_error:nnxxx , -% \msg_error:nnnxx , -% \msg_error:nnxx , -% \msg_error:nnnx , -% \msg_error:nnx +% \msg_error:nneeee , +% \msg_error:nneee , +% \msg_error:nnnee , +% \msg_error:nnee , +% \msg_error:nnne , +% \msg_error:nne % } % \begin{syntax} % \cs{msg_error:nnnnnn} \Arg{module} \Arg{message} \Arg{arg one} \Arg{arg two} \Arg{arg three} \Arg{arg four} @@ -402,21 +402,20 @@ % \msg_warning:nnnnn , % \msg_warning:nnnn , % \msg_warning:nnn , -% \msg_warning:nnn , % \msg_warning:nn , % \msg_warning:nnVV , % \msg_warning:nnVn , % \msg_warning:nnnV , % \msg_warning:nnV , -% \msg_warning:nnxxxx , -% \msg_warning:nnxxx , -% \msg_warning:nnnxx , -% \msg_warning:nnxx , -% \msg_warning:nnnx , -% \msg_warning:nnx +% \msg_warning:nneeee , +% \msg_warning:nneee , +% \msg_warning:nnnee , +% \msg_warning:nnee , +% \msg_warning:nnne , +% \msg_warning:nne % } % \begin{syntax} -% \cs{msg_warning:nnxxxx} \Arg{module} \Arg{message} \Arg{arg one} \Arg{arg two} \Arg{arg three} \Arg{arg four} +% \cs{msg_warning:nnnnnn} \Arg{module} \Arg{message} \Arg{arg one} \Arg{arg two} \Arg{arg three} \Arg{arg four} % \end{syntax} % Issues \meta{module} warning \meta{message}, passing \meta{arg one} % to \meta{arg four} to the text-creating functions. The warning text @@ -435,12 +434,12 @@ % \msg_note:nnVn , % \msg_note:nnnV , % \msg_note:nnV , -% \msg_note:nnxxxx , -% \msg_note:nnxxx , -% \msg_note:nnnxx , -% \msg_note:nnxx , -% \msg_note:nnnx , -% \msg_note:nnx , +% \msg_note:nneeee , +% \msg_note:nneee , +% \msg_note:nnnee , +% \msg_note:nnee , +% \msg_note:nnne , +% \msg_note:nne , % \msg_info:nnnnnn , % \msg_info:nnnnn , % \msg_info:nnnn , @@ -450,12 +449,12 @@ % \msg_info:nnVn , % \msg_info:nnnV , % \msg_info:nnV , -% \msg_info:nnxxxx , -% \msg_info:nnxxx , -% \msg_info:nnnxx , -% \msg_info:nnxx , -% \msg_info:nnnx , -% \msg_info:nnx +% \msg_info:nneeee , +% \msg_info:nneee , +% \msg_info:nnnee , +% \msg_info:nnee , +% \msg_info:nnne , +% \msg_info:nne % } % \begin{syntax} % \cs{msg_note:nnnnnn} \Arg{module} \Arg{message} \Arg{arg one} \Arg{arg two} \Arg{arg three} \Arg{arg four} @@ -480,12 +479,12 @@ % \msg_term:nnVn , % \msg_term:nnnV , % \msg_term:nnV , -% \msg_term:nnxxxx , -% \msg_term:nnxxx , -% \msg_term:nnnxx , -% \msg_term:nnxx , -% \msg_term:nnnx , -% \msg_term:nnx , +% \msg_term:nneeee , +% \msg_term:nneee , +% \msg_term:nnnee , +% \msg_term:nnee , +% \msg_term:nnne , +% \msg_term:nne , % \msg_log:nnnnnn , % \msg_log:nnnnn , % \msg_log:nnnn , @@ -495,12 +494,12 @@ % \msg_log:nnVn , % \msg_log:nnnV , % \msg_log:nnV , -% \msg_log:nnxxxx , -% \msg_log:nnxxx , -% \msg_log:nnnxx , -% \msg_log:nnxx , -% \msg_log:nnnx , -% \msg_log:nnx +% \msg_log:nneeee , +% \msg_log:nneee , +% \msg_log:nnnee , +% \msg_log:nnee , +% \msg_log:nnne , +% \msg_log:nne % } % \begin{syntax} % \cs{msg_term:nnnnnn} \Arg{module} \Arg{message} \Arg{arg one} \Arg{arg two} \Arg{arg three} \Arg{arg four} @@ -525,12 +524,12 @@ % \msg_none:nnVn , % \msg_none:nnnV , % \msg_none:nnV , -% \msg_none:nnxxxx , -% \msg_none:nnxxx , -% \msg_none:nnnxx , -% \msg_none:nnxx , -% \msg_none:nnnx , -% \msg_none:nnx +% \msg_none:nneeee , +% \msg_none:nneee , +% \msg_none:nnnee , +% \msg_none:nnee , +% \msg_none:nnne , +% \msg_none:nne % } % \begin{syntax} % \cs{msg_none:nnnnnn} \Arg{module} \Arg{message} \Arg{arg one} \Arg{arg two} \Arg{arg three} \Arg{arg four} @@ -552,12 +551,12 @@ % \msg_show:nnVn , % \msg_show:nnnV , % \msg_show:nnV , -% \msg_show:nnxxxx , -% \msg_show:nnxxx , -% \msg_show:nnnxx , -% \msg_show:nnxx , -% \msg_show:nnnx , -% \msg_show:nnx +% \msg_show:nneeee , +% \msg_show:nneee , +% \msg_show:nnnee , +% \msg_show:nnee , +% \msg_show:nnne , +% \msg_show:nne % } % \begin{syntax} % \cs{msg_show:nnnnnn} \Arg{module} \Arg{message} \Arg{arg one} \Arg{arg two} \Arg{arg three} \Arg{arg four} @@ -579,7 +578,7 @@ % \cs{seq_map_function:NN} \meta{seq} \cs{msg_show_item:n} % \cs{prop_map_function:NN} \meta{prop} \cs{msg_show_item:nn} % \end{syntax} -% Used in the text of messages for \cs{msg_show:nnxxxx} to show or log +% Used in the text of messages for \cs{msg_show:nnnnnn} to show or log % a list of items or key--value pairs. The output of % \cs{msg_show_item:n} produces a newline, the prefix |>|, two spaces, % then the braced string representation of its argument. @@ -798,14 +797,18 @@ { \msg_if_exist:nnT {#1} {#2} { - \msg_error:nnxx { msg } { already-defined } + \msg_error:nnnn { msg } { already-defined } {#1} {#2} } } % \end{macrocode} % \end{macro} % -% \begin{macro}{\msg_new:nnnn, \msg_new:nnxx, \msg_new:nnn, \msg_new:nnx} +% \begin{macro} +% { +% \msg_new:nnnn, \msg_new:nnee, \msg_new:nnxx, +% \msg_new:nnn, \msg_new:nne, \msg_new:nnx +% } % \begin{macro}{\msg_gset:nnnn, \msg_gset:nnn} % \begin{macro}{\msg_set:nnnn, \msg_set:nnn} % Setting a message simply means saving the appropriate text @@ -816,10 +819,10 @@ \@@_chk_free:nn {#1} {#2} \msg_gset:nnnn {#1} {#2} } -\cs_generate_variant:Nn \msg_new:nnnn { nnxx } +\cs_generate_variant:Nn \msg_new:nnnn { nnee , nnxx } \cs_new_protected:Npn \msg_new:nnn #1#2#3 { \msg_new:nnnn {#1} {#2} {#3} { } } -\cs_generate_variant:Nn \msg_new:nnn { nnx } +\cs_generate_variant:Nn \msg_new:nnn { nne , nnx } \cs_new_protected:Npn \msg_set:nnnn #1#2#3#4 { \cs_set:cpn { \c_@@_text_prefix_tl #1 / #2 } @@ -923,8 +926,8 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_interrupt:NnnnN #1#2#3#4#5 { - \str_set:Nx \l_@@_text_str { #1 {#2} } - \str_set:Nx \l_@@_name_str { \msg_module_name:n {#2} } + \str_set:Ne \l_@@_text_str { #1 {#2} } + \str_set:Ne \l_@@_name_str { \msg_module_name:n {#2} } \cs_if_eq:cNTF { \c_@@_more_text_prefix_tl #2 / #3 } \@@_no_more_text:nnnn @@ -972,7 +975,7 @@ \iow_wrap:nnnN { \\ #3 } { } { } \@@_interrupt_more_text:n \group_begin: \int_sub:Nn \l_iow_line_count_int { 2 } - \iow_wrap:nxnN { \l_@@_text_str : ~ #1 } + \iow_wrap:nenN { \l_@@_text_str : ~ #1 } { ( \l_@@_name_str ) \prg_replicate:nn @@ -993,7 +996,7 @@ \tl_set:Nn \l_@@_internal_tl {#1} } \cs_new_protected:Npn \@@_interrupt_more_text:n #1 - { \exp_args:Nx \tex_errhelp:D { #1 \iow_newline: } } + { \exp_args:Ne \tex_errhelp:D { #1 \iow_newline: } } % \end{macrocode} % \end{macro} % \end{macro} @@ -1165,39 +1168,28 @@ ##1##2##3##4##5##6 {#2} \cs_new_protected:cpn { msg_ #1 :nnnnnn } ##1##2##3##4##5##6 { - \use:x + \use:e { \exp_not:n { \@@_use:nnnnnnn {#1} {##1} {##2} } { \tl_to_str:n {##3} } { \tl_to_str:n {##4} } { \tl_to_str:n {##5} } { \tl_to_str:n {##6} } } } - \cs_new_protected:cpx { msg_ #1 :nnnnn } ##1##2##3##4##5 + \cs_new_protected:cpe { msg_ #1 :nnnnn } ##1##2##3##4##5 { \exp_not:c { msg_ #1 :nnnnnn } {##1} {##2} {##3} {##4} {##5} { } } - \cs_new_protected:cpx { msg_ #1 :nnnn } ##1##2##3##4 + \cs_new_protected:cpe { msg_ #1 :nnnn } ##1##2##3##4 { \exp_not:c { msg_ #1 :nnnnnn } {##1} {##2} {##3} {##4} { } { } } - \cs_new_protected:cpx { msg_ #1 :nnn } ##1##2##3 + \cs_new_protected:cpe { msg_ #1 :nnn } ##1##2##3 { \exp_not:c { msg_ #1 :nnnnnn } {##1} {##2} {##3} { } { } { } } - \cs_new_protected:cpx { msg_ #1 :nn } ##1##2 + \cs_new_protected:cpe { msg_ #1 :nn } ##1##2 { \exp_not:c { msg_ #1 :nnnnnn } {##1} {##2} { } { } { } { } } - \cs_generate_variant:cn { msg_ #1 :nnn } { nnV } - \cs_generate_variant:cn { msg_ #1 :nnnn } { nnVV , nnVn , nnnV , nnnx } - \cs_generate_variant:cn { msg_ #1 :nnnnn } { nnnxx } - \cs_new_protected:cpx { msg_ #1 :nnxxxx } ##1##2##3##4##5##6 - { - \use:x - { - \exp_not:N \exp_not:n - { \exp_not:c { msg_ #1 :nnnnnn } {##1} {##2} } - {##3} {##4} {##5} {##6} - } - } - \cs_new_protected:cpx { msg_ #1 :nnxxx } ##1##2##3##4##5 - { \exp_not:c { msg_ #1 :nnxxxx } {##1} {##2} {##3} {##4} {##5} { } } - \cs_new_protected:cpx { msg_ #1 :nnxx } ##1##2##3##4 - { \exp_not:c { msg_ #1 :nnxxxx } {##1} {##2} {##3} {##4} { } { } } - \cs_new_protected:cpx { msg_ #1 :nnx } ##1##2##3 - { \exp_not:c { msg_ #1 :nnxxxx } {##1} {##2} {##3} { } { } { } } + \cs_generate_variant:cn { msg_ #1 :nnn } + { nnV , nne , nnx } + \cs_generate_variant:cn { msg_ #1 :nnnn } + { nnVV , nnVn , nnnV , nnne , nnnx , nnee , nnxx } + \cs_generate_variant:cn { msg_ #1 :nnnnn } + { nnnee , nnnxx , nneee , nnxxx } + \cs_generate_variant:cn { msg_ #1 :nnnnnn } { nneeee , nnxxxx } } % \end{macrocode} % \end{macro} @@ -1213,11 +1205,17 @@ % \msg_fatal:nnVn , % \msg_fatal:nnnV , % \msg_fatal:nnV , +% \msg_fatal:nneeee , +% \msg_fatal:nneee , % \msg_fatal:nnxxxx , % \msg_fatal:nnxxx , +% \msg_fatal:nnnee , +% \msg_fatal:nnee , % \msg_fatal:nnnxx , % \msg_fatal:nnxx , % \msg_fatal:nnnx , +% \msg_fatal:nnne , +% \msg_fatal:nne , % \msg_fatal:nnx % } % \begin{macro}{\@@_fatal_exit:} @@ -1253,11 +1251,17 @@ % \msg_critical:nnVn , % \msg_critical:nnnV , % \msg_critical:nnV , +% \msg_critical:nneeee , +% \msg_critical:nneee , % \msg_critical:nnxxxx , % \msg_critical:nnxxx , +% \msg_critical:nnnee , +% \msg_critical:nnee , % \msg_critical:nnnxx , % \msg_critical:nnxx , % \msg_critical:nnnx , +% \msg_critical:nnne , +% \msg_critical:nne , % \msg_critical:nnx % } % Not quite so bad: just end the current file. @@ -1284,11 +1288,17 @@ % \msg_error:nnVn , % \msg_error:nnnV , % \msg_error:nnV , +% \msg_error:nneeee , +% \msg_error:nneee , % \msg_error:nnxxxx , % \msg_error:nnxxx , +% \msg_error:nnnee , +% \msg_error:nnee , % \msg_error:nnnxx , % \msg_error:nnxx , % \msg_error:nnnx , +% \msg_error:nnne , +% \msg_error:nne , % \msg_error:nnx % } % For an error, the interrupt routine is called. We check if there is @@ -1296,8 +1306,8 @@ % permanently empty text. We have to undefine the bootstrap versions % here. % \begin{macrocode} - \cs_undefine:N \msg_error:nnxx - \cs_undefine:N \msg_error:nnx + \cs_undefine:N \msg_error:nnee + \cs_undefine:N \msg_error:nne \cs_undefine:N \msg_error:nn \@@_class_new:nn { error } { @@ -1321,11 +1331,17 @@ % \msg_warning:nnVn , % \msg_warning:nnnV , % \msg_warning:nnV , +% \msg_warning:nneeee , +% \msg_warning:nneee , % \msg_warning:nnxxxx , % \msg_warning:nnxxx , +% \msg_warning:nnnee , +% \msg_warning:nnee , % \msg_warning:nnnxx , % \msg_warning:nnxx , % \msg_warning:nnnx , +% \msg_warning:nnne , +% \msg_warning:nne , % \msg_warning:nnx , % \msg_note:nnnnnn , % \msg_note:nnnnn , @@ -1336,11 +1352,17 @@ % \msg_note:nnVn , % \msg_note:nnnV , % \msg_note:nnV , +% \msg_note:nneeee , +% \msg_note:nneee , % \msg_note:nnxxxx , % \msg_note:nnxxx , +% \msg_note:nnnee , +% \msg_note:nnee , % \msg_note:nnnxx , % \msg_note:nnxx , % \msg_note:nnnx , +% \msg_note:nnne , +% \msg_note:nne , % \msg_note:nnx , % \msg_info:nnnnnn , % \msg_info:nnnnn , @@ -1351,12 +1373,18 @@ % \msg_info:nnVn , % \msg_info:nnnV , % \msg_info:nnV , +% \msg_info:nneeee , +% \msg_info:nneee , % \msg_info:nnxxxx , % \msg_info:nnxxx , +% \msg_info:nnnee , +% \msg_info:nnee , % \msg_info:nnnxx , % \msg_info:nnxx , % \msg_info:nnnx , -% \msg_info:nnx , +% \msg_info:nnne , +% \msg_info:nne , +% \msg_info:nnx % } % Warnings and information messages have no decoration. Warnings are % printed to the terminal while information can either go to the log @@ -1364,10 +1392,10 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_info_aux:NNnnnnnn #1#2#3#4#5#6#7#8 { - \str_set:Nx \l_@@_text_str { #2 {#3} } - \str_set:Nx \l_@@_name_str { \msg_module_name:n {#3} } + \str_set:Ne \l_@@_text_str { #2 {#3} } + \str_set:Ne \l_@@_name_str { \msg_module_name:n {#3} } #1 { } - \iow_wrap:nxnN + \iow_wrap:nenN { \l_@@_text_str : ~ \use:c { \c_@@_text_prefix_tl #3 / #4 } {#5} {#6} {#7} {#8} @@ -1404,21 +1432,6 @@ % % \begin{macro} % { -% \msg_log:nnnnnn , -% \msg_log:nnnnn , -% \msg_log:nnnn , -% \msg_log:nnn , -% \msg_log:nn , -% \msg_log:nnVV , -% \msg_log:nnVn , -% \msg_log:nnnV , -% \msg_log:nnV , -% \msg_log:nnxxxx , -% \msg_log:nnxxx , -% \msg_log:nnnxx , -% \msg_log:nnxx , -% \msg_log:nnnx , -% \msg_log:nnx , % \msg_term:nnnnnn , % \msg_term:nnnnn , % \msg_term:nnnn , @@ -1428,12 +1441,39 @@ % \msg_term:nnVn , % \msg_term:nnnV , % \msg_term:nnV , +% \msg_term:nneeee , +% \msg_term:nneee , % \msg_term:nnxxxx , % \msg_term:nnxxx , +% \msg_term:nnnee , +% \msg_term:nnee , % \msg_term:nnnxx , % \msg_term:nnxx , % \msg_term:nnnx , +% \msg_term:nnne , +% \msg_term:nne , % \msg_term:nnx , +% \msg_log:nnnnnn , +% \msg_log:nnnnn , +% \msg_log:nnnn , +% \msg_log:nnn , +% \msg_log:nn , +% \msg_log:nnVV , +% \msg_log:nnVn , +% \msg_log:nnnV , +% \msg_log:nnV , +% \msg_log:nneeee , +% \msg_log:nneee , +% \msg_log:nnxxxx , +% \msg_log:nnxxx , +% \msg_log:nnnee , +% \msg_log:nnee , +% \msg_log:nnnxx , +% \msg_log:nnxx , +% \msg_log:nnnx , +% \msg_log:nnne , +% \msg_log:nne , +% \msg_log:nnx % } % \enquote{Log} data is very similar to information, but with no extras % added. @@ -1467,11 +1507,17 @@ % \msg_none:nnVn , % \msg_none:nnnV , % \msg_none:nnV , +% \msg_none:nneeee , +% \msg_none:nneee , % \msg_none:nnxxxx , % \msg_none:nnxxx , +% \msg_none:nnnee , +% \msg_none:nnee , % \msg_none:nnnxx , % \msg_none:nnxx , % \msg_none:nnnx , +% \msg_none:nnne , +% \msg_none:nne , % \msg_none:nnx % } % The \texttt{none} message type is needed so that input can be gobbled. @@ -1491,11 +1537,17 @@ % \msg_show:nnVn , % \msg_show:nnnV , % \msg_show:nnV , +% \msg_show:nneeee , +% \msg_show:nneee , % \msg_show:nnxxxx , % \msg_show:nnxxx , +% \msg_show:nnnee , +% \msg_show:nnee , % \msg_show:nnnxx , % \msg_show:nnxx , -% \msg_show:nnx , +% \msg_show:nnnx , +% \msg_show:nnne , +% \msg_show:nne , % \msg_show:nnx % } % \begin{macro}{\@@_show:n, \@@_show:w, \@@_show_dot:w, \@@_show:nn} @@ -1563,18 +1615,18 @@ % the messages. We need to use |^^J| here directly as \pkg{l3file} is % not yet loaded. % \begin{macrocode} -\cs_new:Npx \msg_show_item:n #1 +\cs_new:Npe \msg_show_item:n #1 { ^^J > ~ \c_space_tl \exp_not:N \tl_to_str:n { {#1} } } -\cs_new:Npx \msg_show_item_unbraced:n #1 +\cs_new:Npe \msg_show_item_unbraced:n #1 { ^^J > ~ \c_space_tl \exp_not:N \tl_to_str:n {#1} } -\cs_new:Npx \msg_show_item:nn #1#2 +\cs_new:Npe \msg_show_item:nn #1#2 { ^^J > \use:nn { ~ } { ~ } \exp_not:N \tl_to_str:n { {#1} } \use:nn { ~ } { ~ } => \use:nn { ~ } { ~ } \exp_not:N \tl_to_str:n { {#2} } } -\cs_new:Npx \msg_show_item_unbraced:nn #1#2 +\cs_new:Npe \msg_show_item_unbraced:nn #1#2 { ^^J > \use:nn { ~ } { ~ } \exp_not:N \tl_to_str:n {#1} @@ -1595,7 +1647,7 @@ \cs_new:Npn \@@_class_chk_exist:nT #1 { \cs_if_free:cTF { @@_ #1 _code:nnnnnn } - { \msg_error:nnx { msg } { class-unknown } {#1} } + { \msg_error:nnn { msg } { class-unknown } {#1} } } % \end{macrocode} % \end{macro} @@ -1654,7 +1706,7 @@ \@@_class_chk_exist:nT {#1} { \tl_set:Nn \l_@@_current_class_tl {#1} - \cs_set_protected:Npx \@@_use_code: + \cs_set_protected:Npe \@@_use_code: { \exp_not:n { @@ -1665,7 +1717,7 @@ \@@_use_redirect_name:n { #2 / #3 } } } - { \msg_error:nnxx { msg } { unknown } {#2} {#3} } + { \msg_error:nnnn { msg } { unknown } {#2} {#3} } \cs_if_exist_use:N \conditionally@traceon } \cs_new_protected:Npn \@@_use_code: { } @@ -1815,7 +1867,7 @@ \tl_if_eq:NNTF \l_@@_class_tl \l_@@_current_class_tl { \prop_put:cnn { l_@@_redirect_ #2 _prop } {#3} {#2} - \msg_warning:nnxxxx + \msg_warning:nneeee { msg } { redirect-loop } { \seq_item:Nn \l_@@_class_loop_seq { 1 } } { \seq_item:Nn \l_@@_class_loop_seq { 2 } } @@ -1871,26 +1923,26 @@ % % \begin{macro} % { -% \__kernel_msg_info:nnxx , -% \__kernel_msg_warning:nnx , -% \__kernel_msg_warning:nnxx , -% \__kernel_msg_error:nnx , -% \__kernel_msg_error:nnxx , -% \__kernel_msg_error:nnxxx +% \__kernel_msg_info:nnee , +% \__kernel_msg_warning:nne , +% \__kernel_msg_warning:nnee , +% \__kernel_msg_error:nne , +% \__kernel_msg_error:nnee , +% \__kernel_msg_error:nneee % } % \begin{macrocode} -\cs_new_protected:Npn \__kernel_msg_info:nnxx #1 - { \msg_info:nnxx { LaTeX / #1 } } -\cs_new_protected:Npn \__kernel_msg_warning:nnx #1 - { \msg_warning:nnx { LaTeX / #1 } } -\cs_new_protected:Npn \__kernel_msg_warning:nnxx #1 - { \msg_warning:nnxx { LaTeX / #1 } } -\cs_new_protected:Npn \__kernel_msg_error:nnx #1 - { \msg_error:nnx { LaTeX / #1 } } -\cs_new_protected:Npn \__kernel_msg_error:nnxx #1 - { \msg_error:nnxx { LaTeX / #1 } } -\cs_new_protected:Npn \__kernel_msg_error:nnxxx #1 - { \msg_error:nnxxx { LaTeX / #1 } } +\cs_new_protected:Npn \__kernel_msg_info:nnee #1 + { \msg_info:nnee { LaTeX / #1 } } +\cs_new_protected:Npn \__kernel_msg_warning:nne #1 + { \msg_warning:nne { LaTeX / #1 } } +\cs_new_protected:Npn \__kernel_msg_warning:nnee #1 + { \msg_warning:nnee { LaTeX / #1 } } +\cs_new_protected:Npn \__kernel_msg_error:nne #1 + { \msg_error:nne { LaTeX / #1 } } +\cs_new_protected:Npn \__kernel_msg_error:nnee #1 + { \msg_error:nnee { LaTeX / #1 } } +\cs_new_protected:Npn \__kernel_msg_error:nneee #1 + { \msg_error:nneee { LaTeX / #1 } } % \end{macrocode} % \end{macro} % diff --git a/macros/latex/contrib/l3kernel/l3names.dtx b/macros/latex/contrib/l3kernel/l3names.dtx index f3f56f7f72..f299b21579 100644 --- a/macros/latex/contrib/l3kernel/l3names.dtx +++ b/macros/latex/contrib/l3kernel/l3names.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % diff --git a/macros/latex/contrib/l3kernel/l3news.pdf b/macros/latex/contrib/l3kernel/l3news.pdf Binary files differindex 7ebec4848a..7f0effadb8 100644 --- a/macros/latex/contrib/l3kernel/l3news.pdf +++ b/macros/latex/contrib/l3kernel/l3news.pdf diff --git a/macros/latex/contrib/l3kernel/l3news01.pdf b/macros/latex/contrib/l3kernel/l3news01.pdf Binary files differindex fe4f64501c..5508abfcc9 100644 --- a/macros/latex/contrib/l3kernel/l3news01.pdf +++ b/macros/latex/contrib/l3kernel/l3news01.pdf diff --git a/macros/latex/contrib/l3kernel/l3news02.pdf b/macros/latex/contrib/l3kernel/l3news02.pdf Binary files differindex 3b36d8a341..13e40ab8bd 100644 --- a/macros/latex/contrib/l3kernel/l3news02.pdf +++ b/macros/latex/contrib/l3kernel/l3news02.pdf diff --git a/macros/latex/contrib/l3kernel/l3news03.pdf b/macros/latex/contrib/l3kernel/l3news03.pdf Binary files differindex f3031cb0d8..f80fc2a519 100644 --- a/macros/latex/contrib/l3kernel/l3news03.pdf +++ b/macros/latex/contrib/l3kernel/l3news03.pdf diff --git a/macros/latex/contrib/l3kernel/l3news04.pdf b/macros/latex/contrib/l3kernel/l3news04.pdf Binary files differindex d7155a9049..c33cbf0cac 100644 --- a/macros/latex/contrib/l3kernel/l3news04.pdf +++ b/macros/latex/contrib/l3kernel/l3news04.pdf diff --git a/macros/latex/contrib/l3kernel/l3news05.pdf b/macros/latex/contrib/l3kernel/l3news05.pdf Binary files differindex 788ded7ff1..ffe3a03c6c 100644 --- a/macros/latex/contrib/l3kernel/l3news05.pdf +++ b/macros/latex/contrib/l3kernel/l3news05.pdf diff --git a/macros/latex/contrib/l3kernel/l3news06.pdf b/macros/latex/contrib/l3kernel/l3news06.pdf Binary files differindex 9778f1dd95..e25a8421bb 100644 --- a/macros/latex/contrib/l3kernel/l3news06.pdf +++ b/macros/latex/contrib/l3kernel/l3news06.pdf diff --git a/macros/latex/contrib/l3kernel/l3news07.pdf b/macros/latex/contrib/l3kernel/l3news07.pdf Binary files differindex 84e2f2c9f2..4159983011 100644 --- a/macros/latex/contrib/l3kernel/l3news07.pdf +++ b/macros/latex/contrib/l3kernel/l3news07.pdf diff --git a/macros/latex/contrib/l3kernel/l3news08.pdf b/macros/latex/contrib/l3kernel/l3news08.pdf Binary files differindex e91e2d344b..8d74fc5968 100644 --- a/macros/latex/contrib/l3kernel/l3news08.pdf +++ b/macros/latex/contrib/l3kernel/l3news08.pdf diff --git a/macros/latex/contrib/l3kernel/l3news09.pdf b/macros/latex/contrib/l3kernel/l3news09.pdf Binary files differindex 83832c3237..d4c60d81f7 100644 --- a/macros/latex/contrib/l3kernel/l3news09.pdf +++ b/macros/latex/contrib/l3kernel/l3news09.pdf diff --git a/macros/latex/contrib/l3kernel/l3news10.pdf b/macros/latex/contrib/l3kernel/l3news10.pdf Binary files differindex acbefc90b5..7b5dcec9cc 100644 --- a/macros/latex/contrib/l3kernel/l3news10.pdf +++ b/macros/latex/contrib/l3kernel/l3news10.pdf diff --git a/macros/latex/contrib/l3kernel/l3news11.pdf b/macros/latex/contrib/l3kernel/l3news11.pdf Binary files differindex 132979c8a7..1cfeef5b06 100644 --- a/macros/latex/contrib/l3kernel/l3news11.pdf +++ b/macros/latex/contrib/l3kernel/l3news11.pdf diff --git a/macros/latex/contrib/l3kernel/l3news12.pdf b/macros/latex/contrib/l3kernel/l3news12.pdf Binary files differindex c1ed0ffaca..cd159d28f3 100644 --- a/macros/latex/contrib/l3kernel/l3news12.pdf +++ b/macros/latex/contrib/l3kernel/l3news12.pdf diff --git a/macros/latex/contrib/l3kernel/l3pdf.dtx b/macros/latex/contrib/l3kernel/l3pdf.dtx index ebfdc9115b..f583b393ca 100644 --- a/macros/latex/contrib/l3kernel/l3pdf.dtx +++ b/macros/latex/contrib/l3kernel/l3pdf.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % @@ -60,7 +60,7 @@ % \end{function} % % \begin{function}[added = 2022-08-23] -% {\pdf_object_write:nnn, \pdf_object_write:nnx} +% {\pdf_object_write:nnn, \pdf_object_write:nne} % \begin{syntax} % \cs{pdf_object_write:nn} \Arg{object} \Arg{type} \Arg{content} % \end{syntax} @@ -87,7 +87,7 @@ % \end{function} % % \begin{function}[added = 2021-02-10] -% {\pdf_object_unnamed_write:nn, \pdf_object_unnamed_write:nx} +% {\pdf_object_unnamed_write:nn, \pdf_object_unnamed_write:ne} % \begin{syntax} % \cs{pdf_object_unnamed_write:nn} \Arg{type} \Arg{content} % \end{syntax} @@ -312,9 +312,14 @@ % \subsection{Objects} % % \begin{macro}{\pdf_object_new:n} -% \begin{macro}{\pdf_object_write:nnn, \pdf_object_write:nnx} +% \begin{macro} +% {\pdf_object_write:nnn, \pdf_object_write:nne, \pdf_object_write:nnx} % \begin{macro}{\pdf_object_ref:n} -% \begin{macro}{\pdf_object_unnamed_write:nn, \pdf_object_unnamed_write:nx} +% \begin{macro} +% { +% \pdf_object_unnamed_write:nn, \pdf_object_unnamed_write:ne, +% \pdf_object_unnamed_write:nx +% } % \begin{macro}{\pdf_object_ref_last:} % \begin{macro}[pTF]{\pdf_object_if_exist:n} % Simple to do: all objects create a constant |int| so it is not a @@ -332,14 +337,14 @@ \@@_backend_object_write:nnn {#1} {#2} {#3} \bool_gset_true:N \g_@@_init_bool } -\cs_generate_variant:Nn \pdf_object_write:nnn { nnx } +\cs_generate_variant:Nn \pdf_object_write:nnn { nne , nnx } \cs_new:Npn \pdf_object_ref:n #1 { \@@_backend_object_ref:n {#1} } \cs_new_protected:Npn \pdf_object_unnamed_write:nn #1#2 { \@@_backend_object_now:nn {#1} {#2} \bool_gset_true:N \g_@@_init_bool } -\cs_generate_variant:Nn \pdf_object_unnamed_write:nn { nx } +\cs_generate_variant:Nn \pdf_object_unnamed_write:nn { ne , nx } \cs_new:Npn \pdf_object_ref_last: { \@@_backend_object_last: } \prg_new_conditional:Npnn \pdf_object_if_exist:n #1 { p , T , F , TF } { @@ -536,7 +541,7 @@ } \cs_new_protected:Npn \pdf_object_write:nn #1#2 { - \exp_args:Nnx \@@_backend_object_write:nnn + \exp_args:Nne \@@_backend_object_write:nnn {#1} { \prop_item:Nn \g_@@_object_prop {#1} } {#2} \bool_gset_true:N \g_@@_init_bool } diff --git a/macros/latex/contrib/l3kernel/l3prefixes.csv b/macros/latex/contrib/l3kernel/l3prefixes.csv index 2de6430a12..710da8edbe 100644 --- a/macros/latex/contrib/l3kernel/l3prefixes.csv +++ b/macros/latex/contrib/l3kernel/l3prefixes.csv @@ -12,6 +12,7 @@ alloc,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https ampersand,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12, apfs,apfontspec,Qing Lee,https://github.com/CTeX-org/apfontspec,https://github.com/CTeX-org/apfontspec.git,https://github.com/CTeX-org/apfontspec/issues,2020-05-17,2020-05-17, arch,archaeologie,Lukas C. Bossert,http://www.biblatex-archaeologie.de,https://github.com/LukasCBossert/biblatex-archaeologie.git,https://github.com/LukasCBossert/biblatex-archaeologie/issues,2017-03-24,2017-03-24, +arsenal,arsenal,Boris Veytsman,https://github.com/borisveytsman/arsenal,https://github.com/borisveytsman/arsenal,https://github.com/borisveytsman/arsenal/issues array,hobby,Andrew Stacey,https://github.com/loopspace/hobby,https://github.com/loopspace/hobby,https://github.com/loopspace/hobby/issues,2013-03-16,2020-10-29, atsign,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12, avm,langsci-avm,Felix Kopecky,https://ctan.org/pkg/langsci-avm,https://github.com/langsci/langsci-avm,https://github.com/langsci/langsci-avm/issues,2020-03-11,2020-03-11, @@ -120,6 +121,7 @@ intarray,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,ht ior,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27, iot,iot,Island of TeX,https://islandoftex.gitlab.io,https://gitlab.com/islandoftex/texmf,https://gitlab.com/groups/islandoftex/texmf/-/issues,2023-07-18,2023-07-18, iow,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27, +iwonamath,iwonamath,Boris Veytsman,https://github.com/borisveytsman/iwonamath,https://github.com/borisveytsman/iwonamath,https://github.com/borisveytsman/iwonamath/issues jiazhu,jiazhu,Qing Lee,https://github.com/CTeX-org/ctex-kit,https://github.com/CTeX-org/ctex-kit.git,https://github.com/CTeX-org/ctex-kit/issues,2020-05-17,2020-05-17, job,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2021-04-23,2021-04-23, kernel,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27, @@ -197,6 +199,7 @@ prelim,prelim2e,Marei Peischl,https://github.com/TeXhackse/prelim2e,https://gith prg,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27, primargs,morewrites,Bruno Le Floch,https://github.com/blefloch/latex-morewrites,https://github.com/blefloch/latex-morewrites.git,https://github.com/blefloch/latex-morewrites/issues,2013-03-16,2015-09-22, prop,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27, +property,latex2e,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex2e.git,https://github.com/latex3/latex2e/issues,2021-01-20,2021-03-03, pseudo,pseudo,Magnus Lie Hetland,https://github.com/mlhetland/pseudo.sty,https://github.com/mlhetland/pseudo.sty.git,https://github.com/mlhetland/pseudo.sty/issues,2019-06-24,2019-06-24, ptex,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2015-07-28,2015-07-28, ptxcd,ptxcd, Marei Peischl,,,,2020-07-27,2020-07-27,Used for specific corporate design templates @@ -238,6 +241,7 @@ tag,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https:/ tasks,tasks,Clemens Niederberger,https://github.com/cgnieder/tasks/,https://github.com/cgnieder/tasks.git,https://github.com/cgnieder/cgnieder/tasks/issues,2013-03-16,2020-04-14, tblr,tabularray,Jianrui Lyu,https://github.com/lvjr/tabularray,https://github.com/lvjr/tabularray.git,https://github.com/lvjr/tabularray/issues,2022-04-02,2022-04-02, tcobox,tcolorbox,Thomas F. Sturm,https://github.com/T-F-S/tcolorbox,https://github.com/T-F-S/tcolorbox.git,https://github.com/T-F-S/tcolorbox/issues,2020-02-19,2020-02-19, +template,latex2e,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex2e.git,https://github.com/latex3/latex2e/issues,2021-01-20,2021-03-03, term,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12, tex,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27, text,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2020-01-15,2020-01-15, diff --git a/macros/latex/contrib/l3kernel/l3prefixes.pdf b/macros/latex/contrib/l3kernel/l3prefixes.pdf Binary files differindex 89ba420517..5d41b138f0 100644 --- a/macros/latex/contrib/l3kernel/l3prefixes.pdf +++ b/macros/latex/contrib/l3kernel/l3prefixes.pdf diff --git a/macros/latex/contrib/l3kernel/l3prg.dtx b/macros/latex/contrib/l3kernel/l3prg.dtx index ec778817d3..e3f09d90d3 100644 --- a/macros/latex/contrib/l3kernel/l3prg.dtx +++ b/macros/latex/contrib/l3kernel/l3prg.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % @@ -1079,11 +1079,11 @@ { \token_case_meaning:NnF #2 { - \c_true_bool { \exp_args:Nx #1 { \token_to_str:N #2 = true } } - \c_false_bool { \exp_args:Nx #1 { \token_to_str:N #2 = false } } + \c_true_bool { \exp_args:Ne #1 { \token_to_str:N #2 = true } } + \c_false_bool { \exp_args:Ne #1 { \token_to_str:N #2 = false } } } { - \msg_error:nnxxx { kernel } { bad-type } + \msg_error:nneee { kernel } { bad-type } { \token_to_str:N #2 } { \token_to_meaning:N #2 } { bool } } } diff --git a/macros/latex/contrib/l3kernel/l3prop.dtx b/macros/latex/contrib/l3kernel/l3prop.dtx index 2d5fc3edcc..69cafe1cff 100644 --- a/macros/latex/contrib/l3kernel/l3prop.dtx +++ b/macros/latex/contrib/l3kernel/l3prop.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % @@ -165,18 +165,28 @@ % % \begin{function}[updated = 2012-07-09] % { -% \prop_put:Nnn, \prop_put:NnV, \prop_put:Nno, \prop_put:Nne, \prop_put:Nnx, -% \prop_put:NVn, \prop_put:NVV, \prop_put:NVx, \prop_put:Nvx, -% \prop_put:Non, \prop_put:Nxn, \prop_put:NxV, \prop_put:Noo, \prop_put:Nxx, -% \prop_put:cnn, \prop_put:cnV, \prop_put:cno, \prop_put:cne, \prop_put:cnx, -% \prop_put:cVn, \prop_put:cVV, \prop_put:cVx, \prop_put:cvx, -% \prop_put:con, \prop_put:cxn, \prop_put:cxV, \prop_put:coo, \prop_put:cxx, -% \prop_gput:Nnn, \prop_gput:NnV, \prop_gput:Nno, \prop_gput:Nne, \prop_gput:Nnx, -% \prop_gput:NVn, \prop_gput:NVV, \prop_gput:NVx, \prop_gput:Nvx, -% \prop_gput:Non, \prop_gput:Nxn, \prop_gput:NxV, \prop_gput:Noo, \prop_gput:Nxx, -% \prop_gput:cnn, \prop_gput:cnV, \prop_gput:cno, \prop_gput:cne, \prop_gput:cnx, -% \prop_gput:cVn, \prop_gput:cVV, \prop_gput:cVx, \prop_gput:cvx, -% \prop_gput:con, \prop_gput:cxn, \prop_gput:cxV, \prop_gput:coo, \prop_gput:cxx +% \prop_put:Nnn, \prop_put:NnV, \prop_put:Nnv, \prop_put:Nne, +% \prop_put:NVn, \prop_put:NVV, \prop_put:NVv, \prop_put:NVe, +% \prop_put:Nvn, \prop_put:NvV, \prop_put:Nvv, \prop_put:Nve, +% \prop_put:Nen, \prop_put:NeV, \prop_put:Nev, \prop_put:Nee, +% \prop_put:Nno, \prop_put:Non, \prop_put:Noo, +% \prop_put:cnn, \prop_put:cnV, \prop_put:cnv, \prop_put:cne, +% \prop_put:cno, +% \prop_put:cVn, \prop_put:cVV, \prop_put:cVv, \prop_put:cVe, +% \prop_put:cvn, \prop_put:cvV, \prop_put:cvv, \prop_put:cve, +% \prop_put:cen, \prop_put:ceV, \prop_put:cev, \prop_put:cee, +% \prop_put:con, \prop_put:coo, +% \prop_gput:Nnn, \prop_gput:NnV, \prop_gput:Nnv, \prop_gput:Nne, +% \prop_gput:NVn, \prop_gput:NVV, \prop_gput:NVv, \prop_gput:NVe, +% \prop_gput:Nvn, \prop_gput:NvV, \prop_gput:Nvv, \prop_gput:Nve, +% \prop_gput:Nen, \prop_gput:NeV, \prop_gput:Nev, \prop_gput:Nee, +% \prop_gput:Nno, \prop_gput:Non, \prop_gput:Noo, +% \prop_gput:cnn, \prop_gput:cnV, \prop_gput:cnv, \prop_gput:cne, +% \prop_gput:cno, +% \prop_gput:cVn, \prop_gput:cVV, \prop_gput:cVv, \prop_gput:cVe, +% \prop_gput:cvn, \prop_gput:cvV, \prop_gput:cvv, \prop_gput:cve, +% \prop_gput:cen, \prop_gput:ceV, \prop_gput:cev, \prop_gput:cee, +% \prop_gput:con, \prop_gput:coo % } % \begin{syntax} % \cs{prop_put:Nnn} \meta{property list} \Arg{key} \Arg{value} @@ -192,8 +202,10 @@ % % \begin{function} % { -% \prop_put_if_new:Nnn, \prop_put_if_new:cnn, -% \prop_gput_if_new:Nnn, \prop_gput_if_new:cnn +% \prop_put_if_new:Nnn, \prop_put_if_new:NVn, \prop_put_if_new:NnV, +% \prop_put_if_new:cnn, \prop_put_if_new:cVn, \prop_put_if_new:cnV, +% \prop_gput_if_new:Nnn, \prop_gput_if_new:NVn, \prop_gput_if_new:NnV, +% \prop_gput_if_new:cnn, \prop_gput_if_new:cVn, \prop_gput_if_new:cnV % } % \begin{syntax} % \cs{prop_put_if_new:Nnn} \meta{property list} \Arg{key} \Arg{value} @@ -250,8 +262,10 @@ % % \begin{function}[updated = 2011-08-28] % { -% \prop_get:NnN, \prop_get:NVN, \prop_get:NvN, \prop_get:NoN, \prop_get:NxN, -% \prop_get:cnN, \prop_get:cVN, \prop_get:cvN, \prop_get:coN, \prop_get:cxN, +% \prop_get:NnN, \prop_get:NVN, \prop_get:NvN, \prop_get:NeN, +% \prop_get:NoN, +% \prop_get:cnN, \prop_get:cVN, \prop_get:cvN, \prop_get:ceN, +% \prop_get:coN, % \prop_get:cnc % } % \begin{syntax} @@ -267,7 +281,12 @@ % \end{function} % % \begin{function}[updated = 2011-08-18] -% {\prop_pop:NnN, \prop_pop:NoN, \prop_pop:cnN, \prop_pop:coN} +% { +% \prop_pop:NnN, \prop_pop:NVN, +% \prop_pop:NoN, +% \prop_pop:cnN, \prop_pop:cVN, +% \prop_pop:coN +% } % \begin{syntax} % \cs{prop_pop:NnN} \meta{property list} \Arg{key} \meta{tl var} % \end{syntax} @@ -281,7 +300,12 @@ % \end{function} % % \begin{function}[updated = 2011-08-18] -% {\prop_gpop:NnN, \prop_gpop:NoN, \prop_gpop:cnN, \prop_gpop:coN} +% { +% \prop_gpop:NnN, \prop_gpop:NVN, +% \prop_gpop:NoN, +% \prop_gpop:cnN, \prop_gpop:cVN, +% \prop_gpop:coN +% } % \begin{syntax} % \cs{prop_gpop:NnN} \meta{property list} \Arg{key} \meta{tl var} % \end{syntax} @@ -297,8 +321,8 @@ % % \begin{function}[added = 2014-07-17, EXP] % { -% \prop_item:Nn, \prop_item:NV, \prop_item:No, \prop_item:Ne, -% \prop_item:cn, \prop_item:cV, \prop_item:co, \prop_item:ce +% \prop_item:Nn, \prop_item:NV, \prop_item:Ne, \prop_item:No, +% \prop_item:cn, \prop_item:cV, \prop_item:ce, \prop_item:co % } % \begin{syntax} % \cs{prop_item:Nn} \meta{property list} \Arg{key} @@ -343,8 +367,10 @@ % % \begin{function}[added = 2012-05-12] % { -% \prop_remove:Nn, \prop_remove:NV, \prop_remove:cn, \prop_remove:cV, -% \prop_gremove:Nn, \prop_gremove:NV, \prop_gremove:cn, \prop_gremove:cV +% \prop_remove:Nn, \prop_remove:NV, \prop_remove:Ne, +% \prop_remove:cn, \prop_remove:cV, \prop_remove:ce, +% \prop_gremove:Nn, \prop_gremove:NV, \prop_gremove:Ne, +% \prop_gremove:cn, \prop_gremove:cV, \prop_gremove:ce, % } % \begin{syntax} % \cs{prop_remove:Nn} \meta{property list} \Arg{key} @@ -378,8 +404,8 @@ % % \begin{function}[updated = 2011-09-15, EXP, pTF] % { -% \prop_if_in:Nn, \prop_if_in:NV, \prop_if_in:No, -% \prop_if_in:cn, \prop_if_in:cV, \prop_if_in:co +% \prop_if_in:Nn, \prop_if_in:NV, \prop_if_in:Ne, \prop_if_in:No, +% \prop_if_in:cn, \prop_if_in:cV, \prop_if_in:ce, \prop_if_in:co % } % \begin{syntax} % \cs{prop_if_in_p:Nn} \meta{property list} \Arg{key} @@ -404,8 +430,10 @@ % % \begin{function}[updated = 2012-05-19, TF] % { -% \prop_get:NnN, \prop_get:NVN, \prop_get:NvN, \prop_get:NoN, \prop_get:NxN, -% \prop_get:cnN, \prop_get:cVN, \prop_get:cvN, \prop_get:coN, \prop_get:cxN, +% \prop_get:NnN, \prop_get:NVN, \prop_get:NvN, \prop_get:NeN, +% \prop_get:NoN, +% \prop_get:cnN, \prop_get:cVN, \prop_get:cvN, \prop_get:ceN, +% \prop_get:coN, % \prop_get:cnc % } % \begin{syntax} @@ -423,7 +451,12 @@ % \end{function} % % \begin{function}[TF, added = 2011-08-18, updated = 2012-05-19] -% {\prop_pop:NnN, \prop_pop:cnN} +% { +% \prop_pop:NnN, \prop_pop:NVN, +% \prop_pop:NoN, +% \prop_pop:cnN, \prop_pop:cVN, +% \prop_pop:coN +% } % \begin{syntax} % \cs{prop_pop:NnNTF} \meta{property list} \Arg{key} \meta{token list variable} \Arg{true code} \Arg{false code} % \end{syntax} @@ -439,7 +472,12 @@ % \end{function} % % \begin{function}[TF, added = 2011-08-18, updated = 2012-05-19] -% {\prop_gpop:NnN, \prop_gpop:cnN} +% { +% \prop_gpop:NnN, \prop_gpop:NVN, +% \prop_gpop:NoN, +% \prop_gpop:cnN, \prop_gpop:cVN, +% \prop_gpop:coN +% } % \begin{syntax} % \cs{prop_gpop:NnNTF} \meta{property list} \Arg{key} \meta{token list variable} \Arg{true code} \Arg{false code} % \end{syntax} @@ -874,7 +912,7 @@ \cs_new_protected:Npn \prop_const_from_keyval:Nn #1#2 { \prop_set_from_keyval:Nn \l_@@_internal_prop {#2} - \tl_const:Nx #1 { \exp_not:o \l_@@_internal_prop } + \tl_const:Ne #1 { \exp_not:o \l_@@_internal_prop } \prop_clear:N \l_@@_internal_prop } \cs_generate_variant:Nn \prop_const_from_keyval:Nn { c } @@ -959,9 +997,15 @@ % \end{macro} % % \begin{macro}[tested = m3prop002] -% {\prop_remove:Nn, \prop_remove:NV, \prop_remove:cn, \prop_remove:cV} +% { +% \prop_remove:Nn, \prop_remove:NV, \prop_remove:Ne, +% \prop_remove:cn, \prop_remove:cV, \prop_remove:ce +% } % \begin{macro}[tested = m3prop002] -% {\prop_gremove:Nn, \prop_gremove:NV, \prop_gremove:cn, \prop_gremove:cV} +% { +% \prop_gremove:Nn, \prop_gremove:NV, \prop_gremove:Ne, +% \prop_gremove:cn, \prop_gremove:cV, \prop_gremove:ce +% } % Deleting from a property starts by splitting the list. % If the key is present in the property list, the returned value is ignored. % If the key is missing, nothing happens. @@ -978,18 +1022,18 @@ { \tl_gset:Nn #1 { ##1 ##3 } } { } } -\cs_generate_variant:Nn \prop_remove:Nn { NV } -\cs_generate_variant:Nn \prop_remove:Nn { c , cV } -\cs_generate_variant:Nn \prop_gremove:Nn { NV } -\cs_generate_variant:Nn \prop_gremove:Nn { c , cV } +\cs_generate_variant:Nn \prop_remove:Nn { NV , Ne , c , cV , ce } +\cs_generate_variant:Nn \prop_gremove:Nn { NV , Ne , c , cV , ce } % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}[tested = m3prop002] % { -% \prop_get:NnN, \prop_get:NVN, \prop_get:NvN, \prop_get:NoN, \prop_get:NxN, -% \prop_get:cnN, \prop_get:cVN, \prop_get:cvN, \prop_get:coN, \prop_get:cxN, +% \prop_get:NnN, \prop_get:NVN, \prop_get:NvN, \prop_get:NeN, +% \prop_get:NoN, \prop_get:NxN, +% \prop_get:cnN, \prop_get:cVN, \prop_get:cvN, \prop_get:ceN, +% \prop_get:coN, \prop_get:cxN, % \prop_get:cnc % } % Getting an item from a list is very easy: after splitting, @@ -1002,15 +1046,26 @@ { \tl_set:Nn #3 {##2} } { \tl_set:Nn #3 { \q_no_value } } } -\cs_generate_variant:Nn \prop_get:NnN { NV , Nv , No , Nx } -\cs_generate_variant:Nn \prop_get:NnN { c , cV , cv , co , cx , cnc } +\cs_generate_variant:Nn \prop_get:NnN { NV , Nv , Ne , c , cV , cv , ce } +\cs_generate_variant:Nn \prop_get:NnN { No , Nx , co , cx } +\cs_generate_variant:Nn \prop_get:NnN { cnc } % \end{macrocode} % \end{macro} % % \begin{macro}[tested = m3prop002] -% {\prop_pop:NnN, \prop_pop:NoN, \prop_pop:cnN, \prop_pop:coN} +% { +% \prop_pop:NnN, \prop_pop:NVN, +% \prop_pop:NoN, +% \prop_pop:cnN, \prop_pop:cVN, +% \prop_pop:coN, +% } % \begin{macro}[tested = m3prop002] -% {\prop_gpop:NnN, \prop_gpop:NoN, \prop_gpop:cnN, \prop_gpop:coN} +% { +% \prop_gpop:NnN, \prop_gpop:NVN, +% \prop_gpop:NoN, +% \prop_gpop:cnN, \prop_gpop:cVN, +% \prop_gpop:coN, +% } % Popping a value also starts by doing the split. % If the key is present, save the value in the token list and update the % property list as when deleting. @@ -1034,10 +1089,10 @@ } { \tl_set:Nn #3 { \q_no_value } } } -\cs_generate_variant:Nn \prop_pop:NnN { No } -\cs_generate_variant:Nn \prop_pop:NnN { c , co } -\cs_generate_variant:Nn \prop_gpop:NnN { No } -\cs_generate_variant:Nn \prop_gpop:NnN { c , co } +\cs_generate_variant:Nn \prop_pop:NnN { NV , No } +\cs_generate_variant:Nn \prop_pop:NnN { c , cV , co } +\cs_generate_variant:Nn \prop_gpop:NnN { NV , No } +\cs_generate_variant:Nn \prop_gpop:NnN { c , cV , co } % \end{macrocode} % \end{macro} % \end{macro} @@ -1129,7 +1184,13 @@ % \end{macro} % % \begin{macro}[TF, tested = m3prop004] -% {\prop_pop:NnN, \prop_pop:cnN, \prop_gpop:NnN, \prop_gpop:cnN} +% { +% \prop_pop:NnN, \prop_pop:NVN, +% \prop_pop:cnN, \prop_pop:cVN, +% \prop_gpop:NnN, \prop_gpop:NVN, +% \prop_gpop:NoN, +% \prop_gpop:cnN, \prop_gpop:cVN, +% } % Popping an item from a property list, keeping track of whether % the key was present or not, is implemented as a conditional. % If the key was missing, neither the property list, nor the token @@ -1156,28 +1217,40 @@ } { \prg_return_false: } } -\prg_generate_conditional_variant:Nnn \prop_pop:NnN { c } { T , F , TF } -\prg_generate_conditional_variant:Nnn \prop_gpop:NnN { c } { T , F , TF } +\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 } % \end{macrocode} % \end{macro} % % \begin{macro}[tested = m3prop002] % { -% \prop_put:Nnn, \prop_put:NnV, \prop_put:Nno, \prop_put:Nne, \prop_put:Nnx, -% \prop_put:NVn, \prop_put:NVV, \prop_put:NVx, \prop_put:Nvx, -% \prop_put:Non, \prop_put:Nxn, \prop_put:NxV, \prop_put:Noo, \prop_put:Nxx, -% \prop_put:cnn, \prop_put:cnV, \prop_put:cno, \prop_put:cne, \prop_put:cnx, -% \prop_put:cVn, \prop_put:cVV, \prop_put:cVx, \prop_put:cvx, -% \prop_put:con, \prop_put:cxn, \prop_put:cxV, \prop_put:coo, \prop_put:cxx +% \prop_put:Nnn, \prop_put:NnV, \prop_put:Nnv, \prop_put:Nne, +% \prop_put:NVn, \prop_put:NVV, \prop_put:NVv, \prop_put:NVe, +% \prop_put:Nvn, \prop_put:NvV, \prop_put:Nvv, \prop_put:Nve, +% \prop_put:Nen, \prop_put:NeV, \prop_put:Nev, \prop_put:Nee, +% \prop_put:Nno, \prop_put:Nnx, \prop_put:NVx, +% \prop_put:Non, \prop_put:Noo, \prop_put:NxV, \prop_put:Nxx, +% \prop_put:cnn, \prop_put:cnV, \prop_put:cnv, \prop_put:cne, +% \prop_put:cno, \prop_put:cnx, +% \prop_put:cVn, \prop_put:cVV, \prop_put:cVv, \prop_put:cVe, +% \prop_put:cvn, \prop_put:cvV, \prop_put:cvv, \prop_put:cve, +% \prop_put:cen, \prop_put:ceV, \prop_put:cev, \prop_put:cee, +% \prop_put:con, \prop_put:coo, \prop_put:cxV, \prop_put:cxx % } % \begin{macro}[tested = m3prop002] % { -% \prop_gput:Nnn, \prop_gput:NnV, \prop_gput:Nno, \prop_gput:Nne, \prop_gput:Nnx, -% \prop_gput:NVn, \prop_gput:NVV, \prop_gput:NVx, \prop_hput:Nvx, -% \prop_gput:Non, \prop_gput:Nxn, \prop_pgut:NxV, \prop_gput:Noo, \prop_gput:Nxx, -% \prop_gput:cnn, \prop_gput:cnV, \prop_gput:cno, \prop_gput:cne, \prop_gput:cnx, -% \prop_gput:cVn, \prop_gput:cVV, \prop_gput:cVx, \prop_gput:cvx, -% \prop_gput:con, \prop_gput:cxn, \prop_gput:cxV, \prop_gput:coo, \prop_gput:cxx +% \prop_gput:Nnn, \prop_gput:NnV, \prop_gput:Nnv, \prop_gput:Nne, +% \prop_gput:NVn, \prop_gput:NVV, \prop_gput:NVv, \prop_gput:NVe, +% \prop_gput:Nvn, \prop_gput:NvV, \prop_gput:Nvv, \prop_gput:Nve, +% \prop_gput:Nen, \prop_gput:NeV, \prop_gput:Nev, \prop_gput:Nee, +% \prop_gput:Nno, \prop_gput:Non, \prop_gput:Noo, +% \prop_gput:Nnx, \prop_gput:NVx, \prop_gput:Nxn, \prop_gput:Nxx, +% \prop_gput:cnn, \prop_gput:cnV, \prop_gput:cnv, \prop_gput:cne, +% \prop_gput:cno, \prop_gput:cnx, +% \prop_gput:cVn, \prop_gput:cVV, \prop_gput:cVv, \prop_gput:cVe, +% \prop_gput:cvn, \prop_gput:cvV, \prop_gput:cvv, \prop_gput:cve, +% \prop_gput:cen, \prop_gput:ceV, \prop_gput:cev, \prop_gput:cee, +% \prop_gput:cno, \prop_gput:con, \prop_gput:cxn, \prop_gput:cxx % } % \begin{macro}{\@@_put:NNnn} % Since the branches of \cs{@@_split:NnTF} are used as the replacement @@ -1193,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:Nx } -\cs_new_protected:Npn \prop_gput:Nnn { \@@_put:NNnn \__kernel_tl_gset:Nx } +\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 \@@_put:NNnn #1#2#3#4 { \tl_set:Nn \l_@@_internal_tl @@ -1207,22 +1280,48 @@ { #1 #2 { \exp_not:o {#2} \l_@@_internal_tl } } } \cs_generate_variant:Nn \prop_put:Nnn - { NnV , Nno , Nne , Nnx , NV , NVV , NVx , Nvx , No , Nx , NxV , Noo , Nxx } + { + NnV , Nnv , Nne , NV , NVV , NVv , NVe , + Nv , NvV , Nvv , Nve , Ne , NeV , Nev , Nee + } +\cs_generate_variant:Nn \prop_put:Nnn + { Nno , No , Noo , Nnx , NVx , NxV , Nxx } +\cs_generate_variant:Nn \prop_put:Nnn + { + c , cnV , cnv , cne , cV , cVV , cVv , cVe , + cv , cvV , cvv , cve , ce , ceV , cev , cee + } \cs_generate_variant:Nn \prop_put:Nnn - { c , cnV , cno , cne , cnx , cV , cVV , cVx , cvx , co , cx , cxV , coo , cxx } + { cno , co , coo , cnx , cVx , cxV , cxx } +\cs_generate_variant:Nn \prop_gput:Nnn + { + NnV , Nnv , Nne , NV , NVV , NVv , NVe , + Nv , NvV , Nvv , Nve , Ne , NeV , Nev , Nee + } \cs_generate_variant:Nn \prop_gput:Nnn - { NnV , Nno , Nne , Nnx , NV , NVV , NVx , Nvx , No , Nx , NxV , Noo , Nxx } + { Nno , No , Noo , Nnx , NVx , NxV , Nxx } \cs_generate_variant:Nn \prop_gput:Nnn - { c , cnV , cno , cne , cnx , cV , cVV , cVx , cvx , co , cx , cxV , coo , cxx } + { + c , cnV , cnv , cne , cV , cVV , cVv , cVe , + cv , cvV , cvv , cve , ce , ceV , cev , cee + } +\cs_generate_variant:Nn \prop_gput:Nnn + { cno , co , coo , cnx , cVx , cxV , cxx } % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}[tested = m3prop002] -% {\prop_put_if_new:Nnn, \prop_put_if_new:cnn} +% { +% \prop_put_if_new:Nnn, \prop_put_if_new:NVn, \prop_put_if_new:NnV, +% \prop_put_if_new:cnn, \prop_put_if_new:cVn, \prop_put_if_new:cnV +% } % \begin{macro}[tested = m3prop002] -% {\prop_gput_if_new:Nnn, \prop_gput_if_new:cnn} +% { +% \prop_gput_if_new:Nnn, \prop_gput_if_new:NVn, \prop_gput_if_new:NnV, +% \prop_gput_if_new:cnn, \prop_gput_if_new:cVn, \prop_gput_if_new:cnV +% } % \begin{macro}{\@@_put_if_new:NNnn} % Adding conditionally also splits. If the key is already present, % the three brace groups given by \cs{@@_split:NnTF} are removed. @@ -1230,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:Nx } + { \@@_put_if_new:NNnn \__kernel_tl_set:Ne } \cs_new_protected:Npn \prop_gput_if_new:Nnn - { \@@_put_if_new:NNnn \__kernel_tl_gset:Nx } + { \@@_put_if_new:NNnn \__kernel_tl_gset:Ne } \cs_new_protected:Npn \@@_put_if_new:NNnn #1#2#3#4 { \tl_set:Nn \l_@@_internal_tl @@ -1244,8 +1343,10 @@ { } { #1 #2 { \exp_not:o {#2} \l_@@_internal_tl } } } -\cs_generate_variant:Nn \prop_put_if_new:Nnn { c } -\cs_generate_variant:Nn \prop_gput_if_new:Nnn { c } +\cs_generate_variant:Nn \prop_put_if_new:Nnn + { NnV , NV , cnV , cV } +\cs_generate_variant:Nn \prop_gput_if_new:Nnn + { NnV , NV , cnV , cV } % \end{macrocode} % \end{macro} % \end{macro} @@ -1278,8 +1379,8 @@ % % \begin{macro}[pTF, tested = m3prop003] % { -% \prop_if_in:Nn, \prop_if_in:NV, \prop_if_in:No, -% \prop_if_in:cn, \prop_if_in:cV, \prop_if_in:co +% \prop_if_in:Nn, \prop_if_in:NV, \prop_if_in:Ne, \prop_if_in:No, +% \prop_if_in:cn, \prop_if_in:cV, \prop_if_in:ce, \prop_if_in:co % } % \begin{macro}[EXP]{\@@_if_in:nnn} % Testing expandably if a key is in a property list @@ -1309,7 +1410,7 @@ { \prop_map_break:n { \use_i:nn \prg_return_true: } } } \prg_generate_conditional_variant:Nnn \prop_if_in:Nn - { NV , No , c , cV , co } { p , T , F , TF } + { NV , Ne , No , c , cV , ce , co } { p , T , F , TF } % \end{macrocode} % \end{macro} % \end{macro} @@ -1318,8 +1419,10 @@ % % \begin{macro}[TF, tested = m3prop004] % { -% \prop_get:NnN, \prop_get:NVN, \prop_get:NvN, \prop_get:NoN, \prop_get:NxN, -% \prop_get:cnN, \prop_get:cVN, \prop_get:cvN, \prop_get:coN, \prop_get:cxN, +% \prop_get:NnN, \prop_get:NVN, \prop_get:NvN, \prop_get:NeN, +% \prop_get:NoN, \prop_get:NxN, +% \prop_get:cnN, \prop_get:cVN, \prop_get:cvN, \prop_get:ceN, +% \prop_get:coN, \prop_get:cxN, % \prop_get:cnc % } % Getting the value corresponding to a key, keeping track of whether @@ -1336,7 +1439,11 @@ { \prg_return_false: } } \prg_generate_conditional_variant:Nnn \prop_get:NnN - { NV , Nv , No , Nx , c , cV , cv , co , cx , cnc } { T , F , TF } + { NV , Nv , Ne , c , cV , cv , ce } { T , F , TF } +\prg_generate_conditional_variant:Nnn \prop_get:NnN + { No , Nx , co , cx } { T , F , TF } +\prg_generate_conditional_variant:Nnn \prop_get:NnN + { cnc } { T , F , TF } % \end{macrocode} % \end{macro} % @@ -1471,9 +1578,9 @@ % we use \cs{msg_show_item:nn} to format both the key and the value % for each pair. % \begin{macrocode} -\cs_new_protected:Npn \prop_show:N { \@@_show:NN \msg_show:nnxxxx } +\cs_new_protected:Npn \prop_show:N { \@@_show:NN \msg_show:nneeee } \cs_generate_variant:Nn \prop_show:N { c } -\cs_new_protected:Npn \prop_log:N { \@@_show:NN \msg_log:nnxxxx } +\cs_new_protected:Npn \prop_log:N { \@@_show:NN \msg_log:nneeee } \cs_generate_variant:Nn \prop_log:N { c } \cs_new_protected:Npn \@@_show:NN #1#2 { diff --git a/macros/latex/contrib/l3kernel/l3quark.dtx b/macros/latex/contrib/l3kernel/l3quark.dtx index e05b5369e1..1a1e1aaf1f 100644 --- a/macros/latex/contrib/l3kernel/l3quark.dtx +++ b/macros/latex/contrib/l3kernel/l3quark.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % @@ -633,21 +633,21 @@ % % \begin{macro}{\@@_new_test:NNNn, \@@_new_test:Nccn, % \@@_new_test_aux:nnNNnnnn} -% \begin{macro}{\@@_new_conditional:Nnnn, \@@_new_conditional:Nxxn} +% \begin{macro}{\@@_new_conditional:Nnnn, \@@_new_conditional:Neen} % \begin{macrocode} \cs_new_protected:Npn \__kernel_quark_new_test:N #1 - { \@@_new_test_aux:Nx #1 { \@@_module_name:N #1 } } + { \@@_new_test_aux:Ne #1 { \@@_module_name:N #1 } } \cs_new_protected:Npn \@@_new_test_aux:Nn #1 #2 { \if_meaning:w \q_nil #2 \q_nil - \msg_error:nnx { quark } { invalid-function } + \msg_error:nne { quark } { invalid-function } { \token_to_str:N #1 } \else: \@@_new_test:Nccn #1 { q__#2_recursion_tail } { q__#2_recursion_stop } { __#2 } \fi: } -\cs_generate_variant:Nn \@@_new_test_aux:Nn { Nx } +\cs_generate_variant:Nn \@@_new_test_aux:Nn { Ne } \cs_new_protected:Npn \@@_new_test:NNNn #1 { \exp_last_unbraced:Nf \@@_new_test_aux:nnNNnnnn @@ -657,18 +657,18 @@ \cs_generate_variant:Nn \@@_new_test:NNNn { Ncc } \cs_new_protected:Npn \__kernel_quark_new_conditional:Nn #1 { - \@@_new_conditional:Nxxn #1 + \@@_new_conditional:Neen #1 { \@@_quark_conditional_name:N #1 } { \@@_module_name:N #1 } } \cs_new_protected:Npn \@@_new_conditional:Nnnn #1#2#3#4 { \if_meaning:w \q_nil #2 \q_nil - \msg_error:nnx { quark } { invalid-function } + \msg_error:nne { quark } { invalid-function } { \token_to_str:N #1 } \else: \if_meaning:w \q_nil #3 \q_nil - \msg_error:nnx { quark } { invalid-function } + \msg_error:nne { quark } { invalid-function } { \token_to_str:N #1 } \else: \exp_last_unbraced:Nf \@@_new_test_aux:nnNNnnnn @@ -678,12 +678,12 @@ \fi: \fi: } -\cs_generate_variant:Nn \@@_new_conditional:Nnnn { Nxx } +\cs_generate_variant:Nn \@@_new_conditional:Nnnn { Nee } \cs_new_protected:Npn \@@_new_test_aux:nnNNnnnn #1 #2 #3 #4 #5 { \cs_if_exist_use:cTF { @@_new_#5_#2:Nnnn } { #4 } { - \msg_error:nnxx { quark } { invalid-function } + \msg_error:nnee { quark } { invalid-function } { \token_to_str:N #4 } {#2} \use_none:nnn } @@ -951,7 +951,7 @@ { \tl_if_in:NnTF \g_@@_marks_tl { #1 } { - \msg_error:nnx { scanmark } { already-defined } + \msg_error:nne { scanmark } { already-defined } { \token_to_str:N #1 } } { diff --git a/macros/latex/contrib/l3kernel/l3regex.dtx b/macros/latex/contrib/l3kernel/l3regex.dtx index 3d342960ac..87dfcec47b 100644 --- a/macros/latex/contrib/l3kernel/l3regex.dtx +++ b/macros/latex/contrib/l3kernel/l3regex.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % @@ -1158,24 +1158,24 @@ % \end{macrocode} % \end{macro} % -% \begin{macro}{\@@_toks_put_left:Nx} -% \begin{macro}{\@@_toks_put_right:Nx, \@@_toks_put_right:Nn} +% \begin{macro}{\@@_toks_put_left:Ne} +% \begin{macro}{\@@_toks_put_right:Ne, \@@_toks_put_right:Nn} % During the building phase we wish to add \texttt{x}-expanded % material to \tn{toks}, either to the left or to the right. The % expansion is done \enquote{by hand} for optimization (these % operations are used quite a lot). The \texttt{Nn} version of -% \cs{@@_toks_put_right:Nx} is provided because it is more +% \cs{@@_toks_put_right:Ne} is provided because it is more % efficient than \texttt{x}-expanding with \cs{exp_not:n}. % \begin{macrocode} -\cs_new_protected:Npn \@@_toks_put_left:Nx #1#2 +\cs_new_protected:Npn \@@_toks_put_left:Ne #1#2 { - \cs_set_nopar:Npx \@@_tmp:w { #2 } + \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_right:Nx #1#2 +\cs_new_protected:Npn \@@_toks_put_right:Ne #1#2 { - \cs_set_nopar:Npx \@@_tmp:w {#2} + \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 } } @@ -1541,7 +1541,7 @@ { \int_compare:nNnTF \l_@@_curr_catcode_int = 0 { - \__kernel_tl_set:Nx \l_@@_internal_a_tl + \__kernel_tl_set:Ne \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 @@ -1568,7 +1568,7 @@ \@@_build_for_cs:n {#1} \bool_set_eq:NN \l_@@_saved_success_bool \g_@@_success_bool - \exp_args:Nx \@@_match_cs:n { \@@_curr_cs_to_str: } + \exp_args:Ne \@@_match_cs:n { \@@_curr_cs_to_str: } \if_meaning:w \c_true_bool \g_@@_success_bool \group_insert_after:N \@@_break_true:w \fi: @@ -1729,9 +1729,9 @@ \cs_set:Npn \@@_escape_escaped:N ##1 { #2 } \cs_set:Npn \@@_escape_raw:N ##1 { #3 } \@@_standard_escapechar: - \__kernel_tl_gset:Nx \g_@@_internal_tl + \__kernel_tl_gset:Ne \g_@@_internal_tl { \__kernel_str_to_other_fast:n {#4} } - \tl_put_right:Nx \l_@@_internal_a_tl + \tl_put_right:Ne \l_@@_internal_a_tl { \exp_after:wN \@@_escape_loop:N \g_@@_internal_tl \scan_stop: \prg_break_point: @@ -1797,17 +1797,17 @@ \prg_break: } \cs_new:cpn { @@_escape_~:w } { } -\cs_new:cpx { @@_escape_/a:w } +\cs_new:cpe { @@_escape_/a:w } { \exp_not:N \@@_escape_raw:N \iow_char:N \^^G } -\cs_new:cpx { @@_escape_/t:w } +\cs_new:cpe { @@_escape_/t:w } { \exp_not:N \@@_escape_raw:N \iow_char:N \^^I } -\cs_new:cpx { @@_escape_/n:w } +\cs_new:cpe { @@_escape_/n:w } { \exp_not:N \@@_escape_raw:N \iow_char:N \^^J } -\cs_new:cpx { @@_escape_/f:w } +\cs_new:cpe { @@_escape_/f:w } { \exp_not:N \@@_escape_raw:N \iow_char:N \^^L } -\cs_new:cpx { @@_escape_/r:w } +\cs_new:cpe { @@_escape_/r:w } { \exp_not:N \@@_escape_raw:N \iow_char:N \^^M } -\cs_new:cpx { @@_escape_/e:w } +\cs_new:cpe { @@_escape_/e:w } { \exp_not:N \@@_escape_raw:N \iow_char:N \^^[ } % \end{macrocode} % \end{macro} @@ -2421,7 +2421,7 @@ } { } \if_int_compare:w \l_@@_group_level_int > \c_zero_int - \msg_error:nnx { regex } { missing-rparen } + \msg_error:nne { regex } { missing-rparen } { \int_use:N \l_@@_group_level_int } \prg_replicate:nn { \l_@@_group_level_int } @@ -2440,7 +2440,7 @@ \fi: \tl_build_put_right:Nn \l_@@_build_tl { \if_false: { \fi: } } \tl_build_end:N \l_@@_build_tl - \exp_args:NNNx + \exp_args:NNNe \group_end: \tl_set:Nn \l_@@_internal_regex { \l_@@_build_tl } } @@ -2550,7 +2550,7 @@ \tl_build_put_right:Nn \l_@@_build_tl { \@@_class:NnnnN \c_true_bool { \if_false: } \fi: } } - \tl_build_put_right:Nx \l_@@_build_tl + \tl_build_put_right:Ne \l_@@_build_tl { \if_int_compare:w \l_@@_catcodes_int < \c_@@_all_catcodes_int @@ -2567,19 +2567,19 @@ % \end{macro} % % \begin{macro} -% {\@@_compile_abort_tokens:n, \@@_compile_abort_tokens:x} +% {\@@_compile_abort_tokens:n, \@@_compile_abort_tokens:e} % This function places the collected tokens back in the input stream, % each as a raw character. Spaces are not preserved. % \begin{macrocode} \cs_new_protected:Npn \@@_compile_abort_tokens:n #1 { - \use:x + \use:e { \exp_args:No \tl_map_function:nN { \tl_to_str:n {#1} } \@@_compile_raw:N } } -\cs_generate_variant:Nn \@@_compile_abort_tokens:n { x } +\cs_generate_variant:Nn \@@_compile_abort_tokens:n { e } % \end{macrocode} % \end{macro} % @@ -2617,7 +2617,7 @@ % \end{macro} % % \begin{macro}{\@@_compile_quantifier_none:} -% \begin{macro}{\@@_compile_quantifier_abort:xNN} +% \begin{macro}{\@@_compile_quantifier_abort:eNN} % Those functions are called whenever there is no quantifier, or a % braced construction is invalid (equivalent to no quantifier, and % whatever characters were grabbed are left raw). @@ -2627,11 +2627,11 @@ \tl_build_put_right:Nn \l_@@_build_tl { \if_false: { \fi: } { 1 } { 0 } \c_false_bool } } -\cs_new_protected:Npn \@@_compile_quantifier_abort:xNN #1#2#3 +\cs_new_protected:Npn \@@_compile_quantifier_abort:eNN #1#2#3 { \@@_compile_quantifier_none: - \msg_warning:nnxx { regex } { invalid-quantifier } {#1} {#3} - \@@_compile_abort_tokens:x {#1} + \msg_warning:nnee { regex } { invalid-quantifier } {#1} {#3} + \@@_compile_abort_tokens:e {#1} #2 #3 } % \end{macrocode} @@ -2703,7 +2703,7 @@ { \@@_get_digits:NTFw \l_@@_internal_a_int { \@@_compile_quantifier_braced_auxi:w } - { \@@_compile_quantifier_abort:xNN { \c_left_brace_str } } + { \@@_compile_quantifier_abort:eNN { \c_left_brace_str } } } \cs_new_protected:Npn \@@_compile_quantifier_braced_auxi:w #1#2 { @@ -2722,7 +2722,7 @@ } } { - \@@_compile_quantifier_abort:xNN + \@@_compile_quantifier_abort:eNN { \c_left_brace_str \int_use:N \l_@@_internal_a_int } #1 #2 } @@ -2735,7 +2735,7 @@ { \int_use:N \l_@@_internal_a_int } { -1 } } { - \@@_compile_quantifier_abort:xNN + \@@_compile_quantifier_abort:eNN { \c_left_brace_str \int_use:N \l_@@_internal_a_int , } #1 #2 } @@ -2746,7 +2746,7 @@ { \if_int_compare:w \l_@@_internal_a_int > \l_@@_internal_b_int - \msg_error:nnxx { regex } { backwards-quantifier } + \msg_error:nnee { regex } { backwards-quantifier } { \int_use:N \l_@@_internal_a_int } { \int_use:N \l_@@_internal_b_int } \int_zero:N \l_@@_internal_b_int @@ -2758,7 +2758,7 @@ { \int_use:N \l_@@_internal_b_int } } { - \@@_compile_quantifier_abort:xNN + \@@_compile_quantifier_abort:eNN { \c_left_brace_str \int_use:N \l_@@_internal_a_int , @@ -2780,7 +2780,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_compile_raw_error:N #1 { - \msg_error:nnx { regex } { bad-escape } {#1} + \msg_error:nne { regex } { bad-escape } {#1} \@@_compile_raw:N #1 } % \end{macrocode} @@ -2839,9 +2839,9 @@ \@@_if_end_range:NNTF #2 #3 { \if_int_compare:w `#1 > `#3 \exp_stop_f: - \msg_error:nnxx { regex } { range-backwards } {#1} {#3} + \msg_error:nnee { regex } { range-backwards } {#1} {#3} \else: - \tl_build_put_right:Nx \l_@@_build_tl + \tl_build_put_right:Ne \l_@@_build_tl { \if_int_compare:w `#1 = `#3 \exp_stop_f: \@@_item_equal:n @@ -2853,9 +2853,9 @@ \fi: } { - \msg_warning:nnxx { regex } { range-missing-end } + \msg_warning:nnee { regex } { range-missing-end } {#1} { \c_backslash_str #3 } - \tl_build_put_right:Nx \l_@@_build_tl + \tl_build_put_right:Ne \l_@@_build_tl { \@@_item_equal:n { \int_value:w `#1 \exp_stop_f: } \@@_item_equal:n { \int_value:w `- \exp_stop_f: } @@ -2873,7 +2873,7 @@ % \cs{@@_prop_.:}, which matches any character or control % sequence, and refuses $-2$ (end-marker). % \begin{macrocode} -\cs_new_protected:cpx { @@_compile_.: } +\cs_new_protected:cpe { @@_compile_.: } { \exp_not:N \@@_if_in_class:TF { \@@_compile_raw:N . } @@ -2904,9 +2904,9 @@ % \begin{macrocode} \cs_set_protected:Npn \@@_tmp:w #1#2 { - \cs_new_protected:cpx { @@_compile_/#1: } + \cs_new_protected:cpe { @@_compile_/#1: } { \@@_compile_one:n \exp_not:c { @@_prop_#1: } } - \cs_new_protected:cpx { @@_compile_/#2: } + \cs_new_protected:cpe { @@_compile_/#2: } { \@@_compile_one:n { \@@_item_reverse:n { \exp_not:c { @@_prop_#1: } } } @@ -2967,8 +2967,8 @@ } } } -\exp_args:Nx \@@_tmp:w { \iow_char:N \^ } { \@@_A_test: } -\exp_args:Nx \@@_tmp:w { \iow_char:N \$ } { \@@_Z_test: } +\exp_args:Ne \@@_tmp:w { \iow_char:N \^ } { \@@_A_test: } +\exp_args:Ne \@@_tmp:w { \iow_char:N \$ } { \@@_Z_test: } % \end{macrocode} % \end{macro} % \end{macro} @@ -3117,11 +3117,11 @@ { : { \@@_compile_class_posix:NNNNw } = { - \msg_warning:nnx { regex } + \msg_warning:nne { regex } { posix-unsupported } { = } } . { - \msg_warning:nnx { regex } + \msg_warning:nne { regex } { posix-unsupported } { . } } } @@ -3133,12 +3133,12 @@ \@@_two_if_eq:NNNNTF #5 #6 \@@_compile_special:N ^ { \bool_set_false:N \l_@@_internal_bool - \__kernel_tl_set:Nx \l_@@_internal_a_tl { \if_false: } \fi: + \__kernel_tl_set:Ne \l_@@_internal_a_tl { \if_false: } \fi: \@@_compile_class_posix_loop:w } { \bool_set_true:N \l_@@_internal_bool - \__kernel_tl_set:Nx \l_@@_internal_a_tl { \if_false: } \fi: + \__kernel_tl_set:Ne \l_@@_internal_a_tl { \if_false: } \fi: \@@_compile_class_posix_loop:w #5 #6 } } @@ -3163,9 +3163,9 @@ } } { - \msg_warning:nnx { regex } { posix-unknown } + \msg_warning:nne { regex } { posix-unknown } { \l_@@_internal_a_tl } - \@@_compile_abort_tokens:x + \@@_compile_abort_tokens:e { [: \bool_if:NF \l_@@_internal_bool { ^ } \l_@@_internal_a_tl :] @@ -3173,9 +3173,9 @@ } } { - \msg_error:nnxx { regex } { posix-missing-close } + \msg_error:nnee { regex } { posix-missing-close } { [: \l_@@_internal_a_tl } { #2 #4 } - \@@_compile_abort_tokens:x { [: \l_@@_internal_a_tl } + \@@_compile_abort_tokens:e { [: \l_@@_internal_a_tl } #1 #2 #3 #4 } } @@ -3213,7 +3213,7 @@ \if_int_compare:w \l_@@_group_level_int > \c_zero_int \tl_build_put_right:Nn \l_@@_build_tl { \if_false: { \fi: } } \tl_build_end:N \l_@@_build_tl - \exp_args:NNNx + \exp_args:NNNe \group_end: \tl_build_put_right:Nn \l_@@_build_tl { \l_@@_build_tl } \int_set_eq:NN \l_@@_catcodes_int \l_@@_default_catcodes_int @@ -3252,7 +3252,7 @@ \cs_if_exist_use:cF { @@_compile_special_group_\token_to_str:N #4 :w } { - \msg_warning:nnx { regex } { special-group-unknown } + \msg_warning:nne { regex } { special-group-unknown } { (? #4 } \@@_compile_group_begin:N \@@_group:nnnN \@@_compile_raw:N ? #3 #4 @@ -3321,7 +3321,7 @@ { \@@_item_caseless_range:nn } } { - \msg_warning:nnx { regex } { unknown-option } { (?i #2 } + \msg_warning:nne { regex } { unknown-option } { (?i #2 } \@@_compile_raw:N ( \@@_compile_raw:N ? \@@_compile_raw:N i @@ -3340,7 +3340,7 @@ { \@@_item_caseful_range:nn } } { - \msg_warning:nnx { regex } { unknown-option } { (?-#2#4 } + \msg_warning:nne { regex } { unknown-option } { (?-#2#4 } \@@_compile_raw:N ( \@@_compile_raw:N ? \@@_compile_raw:N - @@ -3379,7 +3379,7 @@ } { \cs_if_exist_use:cF { @@_compile_c_#2:w } } { - \msg_error:nnx { regex } { c-missing-category } {#2} + \msg_error:nne { regex } { c-missing-category } {#2} #1 #2 } } @@ -3453,7 +3453,7 @@ { \@@_compile_c_lbrack_end: } } { - \msg_error:nnx { regex } { c-missing-rbrack } {#2} + \msg_error:nne { regex } { c-missing-rbrack } {#2} \@@_compile_c_lbrack_end: #1 #2 } @@ -3534,12 +3534,12 @@ { \@@_compile_end: \flag_clear:n { @@_cs } - \__kernel_tl_set:Nx \l_@@_internal_a_tl + \__kernel_tl_set:Ne \l_@@_internal_a_tl { \exp_after:wN \@@_compile_cs_aux:Nn \l_@@_internal_regex \q_@@_nil \q_@@_nil \q_@@_recursion_stop } - \exp_args:Nx \@@_compile_one:n + \exp_args:Ne \@@_compile_one:n { \flag_if_raised:nTF { @@_cs } { \@@_item_cs:n { \exp_not:o \l_@@_internal_regex } } @@ -3622,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:Nx \l_@@_internal_a_tl { \if_false: } \fi: + \__kernel_tl_set:Ne \l_@@_internal_a_tl { \if_false: } \fi: \@@_compile_u_loop:NN } { @@ -3665,7 +3665,7 @@ } { \if_false: { \fi: } - \msg_error:nnx { regex } { u-missing-rbrace } {#2} + \msg_error:nne { regex } { u-missing-rbrace } {#2} \l_@@_internal_b_tl #1 #2 } @@ -3691,7 +3691,7 @@ \group_begin: \cs_set:Npn \@@_group:nnnN { \@@_group_no_capture:nnnN } \cs_set:Npn \@@_group_resetting:nnnN { \@@_group_no_capture:nnnN } - \exp_args:NNx + \exp_args:NNe \group_end: \@@_compile_ur:n { \use:c { \l_@@_internal_a_tl } } } @@ -3756,12 +3756,12 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_compile_u_in_cs: { - \__kernel_tl_gset:Nx \g_@@_internal_tl + \__kernel_tl_gset:Ne \g_@@_internal_tl { \exp_args:No \__kernel_str_to_other_fast:n { \l_@@_internal_a_tl } } - \tl_build_put_right:Nx \l_@@_build_tl + \tl_build_put_right:Ne \l_@@_build_tl { \tl_map_function:NN \g_@@_internal_tl \@@_compile_u_in_cs_aux:n @@ -3786,7 +3786,7 @@ { \tl_analysis_map_inline:Nn \l_@@_internal_a_tl { - \tl_build_put_right:Nx \l_@@_build_tl + \tl_build_put_right:Ne \l_@@_build_tl { \@@_class:NnnnN \c_true_bool { @@ -4096,7 +4096,7 @@ \cs_new_protected:Npn \@@_show_one:n #1 { \int_incr:N \l_@@_show_lines_int - \tl_build_put_right:Nx \l_@@_build_tl + \tl_build_put_right:Ne \l_@@_build_tl { \exp_not:N \iow_newline: \seq_map_function:NN \l_@@_show_prefix_seq \use:n @@ -4113,7 +4113,7 @@ % second argument in a deeper level of nesting. % \begin{macrocode} \cs_new_protected:Npn \@@_show_push:n #1 - { \seq_put_right:Nx \l_@@_show_prefix_seq { #1 ~ } } + { \seq_put_right:Ne \l_@@_show_prefix_seq { #1 ~ } } \cs_new_protected:Npn \@@_show_pop: { \seq_pop_right:NN \l_@@_show_prefix_seq \l_@@_internal_a_tl } \cs_new_protected:Npn \@@_show_scope:nn #1#2 @@ -4186,7 +4186,7 @@ \bool_if:NTF #1 { Match } { Don't~match } \@@_msg_repeated:nnN {#3} {#4} #5 } - \tl_build_put_right:Nx \l_@@_build_tl + \tl_build_put_right:Ne \l_@@_build_tl { \exp_not:o \l_@@_internal_a_tl } } } @@ -4367,7 +4367,7 @@ % \end{macrocode} % \end{variable} % -% \begin{macro}{\@@_case_build:n, \@@_case_build:x, \@@_case_build_aux:Nn, \@@_case_build_loop:n} +% \begin{macro}{\@@_case_build:n, \@@_case_build:e, \@@_case_build_aux:Nn, \@@_case_build_loop:n} % See \cs{@@_build:n}, but with a loop. % \begin{macrocode} \cs_new_protected:Npn \@@_case_build:n #1 @@ -4375,7 +4375,7 @@ \@@_case_build_aux:Nn \c_true_bool {#1} \int_gzero:N \g_@@_case_int } -\cs_generate_variant:Nn \@@_case_build:n { x } +\cs_generate_variant:Nn \@@_case_build:n { e } \cs_new_protected:Npn \@@_case_build_aux:Nn #1#2 { \@@_standard_escapechar: @@ -4386,7 +4386,7 @@ { \@@_action_start_wildcard:N #1 } % \@@_build_new_state: - \@@_toks_put_left:Nx \l_@@_left_state_int + \@@_toks_put_left:Ne \l_@@_left_state_int { \@@_action_submatch:nN { 0 } < } \@@_push_lr_states: \int_zero:N \l_@@_case_max_group_int @@ -4410,7 +4410,7 @@ } \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:Nx \l_@@_right_state_int + \@@_toks_put_left:Ne \l_@@_right_state_int { \@@_action_submatch:nN { 0 } > \int_gset:Nn \g_@@_case_int @@ -4498,9 +4498,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:Nx #2 { #1 { \int_eval:n { #3 - #2 } } } } + { \@@_toks_put_left:Ne #2 { #1 { \int_eval:n { #3 - #2 } } } } \cs_new_protected:Npn \@@_build_transition_right:nNn #1#2#3 - { \@@_toks_put_right:Nx #2 { #1 { \int_eval:n { #3 - #2 } } } } + { \@@_toks_put_right:Ne #2 { #1 { \int_eval:n { #3 - #2 } } } } % \end{macrocode} % \end{macro} % @@ -4529,7 +4529,7 @@ \cs_new_protected:Npn \@@_build_transitions_lazyness:NNNNN #1#2#3#4#5 { \@@_build_new_state: - \@@_toks_put_right:Nx \l_@@_left_state_int + \@@_toks_put_right:Ne \l_@@_left_state_int { \if_meaning:w \c_true_bool #1 #2 { \int_eval:n { #3 - \l_@@_left_state_int } } @@ -4557,7 +4557,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_class:NnnnN #1#2#3#4#5 { - \cs_set:Npx \@@_tests_action_cost:n ##1 + \cs_set:Npe \@@_tests_action_cost:n ##1 { \exp_not:n { \exp_not:n {#2} } \bool_if:NTF #1 @@ -4791,8 +4791,8 @@ \cs_new_protected:Npn \@@_group_submatches:nNN #1#2#3 { \if_int_compare:w #1 > - \c_one_int - \@@_toks_put_left:Nx #2 { \@@_action_submatch:nN {#1} < } - \@@_toks_put_left:Nx #3 { \@@_action_submatch:nN {#1} > } + \@@_toks_put_left:Ne #2 { \@@_action_submatch:nN {#1} < } + \@@_toks_put_left:Ne #3 { \@@_action_submatch:nN {#1} > } \fi: } % \end{macrocode} @@ -4953,7 +4953,7 @@ \cs_new_protected:Npn \@@_assertion:Nn #1#2 { \@@_build_new_state: - \@@_toks_put_right:Nx \l_@@_left_state_int + \@@_toks_put_right:Ne \l_@@_left_state_int { \exp_not:n {#2} \@@_break_point:TF @@ -5005,7 +5005,7 @@ \cs_new_protected:Npn \@@_command_K: { \@@_build_new_state: - \@@_toks_put_right:Nx \l_@@_left_state_int + \@@_toks_put_right:Ne \l_@@_left_state_int { \@@_action_submatch:nN { 0 } < \bool_set_true:N \l_@@_fresh_thread_bool @@ -5347,7 +5347,7 @@ \fi: \int_set_eq:NN \l_@@_start_pos_int \l_@@_success_pos_int \bool_set_false:N \l_@@_match_success_bool - \tl_set:Nx \l_@@_curr_submatches_tl + \tl_set:Ne \l_@@_curr_submatches_tl { \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 } @@ -5423,10 +5423,10 @@ \tl_set:Nn \l_@@_curr_token_tl {#1} \int_set:Nn \l_@@_curr_char_int {#2} \int_set:Nn \l_@@_curr_catcode_int { "#3 } - \tl_build_put_right:Nx \l_@@_matched_analysis_tl + \tl_build_put_right:Ne \l_@@_matched_analysis_tl { \exp_not:o \l_@@_curr_analysis_tl } \tl_set:Nn \l_@@_curr_analysis_tl { { {#1} {#2} #3 } } - \use:x + \use:e { \int_set_eq:NN \l_@@_max_thread_int \l_@@_min_thread_int \int_step_function:nnN @@ -5539,7 +5539,7 @@ { \@@_action_free_aux:nn { < \l_@@_step_int } } \cs_new_protected:Npn \@@_action_free_aux:nn #1#2 { - \use:x + \use:e { \int_add:Nn \l_@@_curr_state_int {#2} \exp_not:n @@ -5569,7 +5569,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_action_cost:n #1 { - \exp_args:Nx \@@_store_state:n + \exp_args:Ne \@@_store_state:n { \int_eval:n { \l_@@_curr_state_int + #1 } } } % \end{macrocode} @@ -5627,7 +5627,7 @@ } \cs_new_protected:Npn \@@_action_submatch_aux:w #1 ; #2#3 { - \tl_set:Nx \l_@@_curr_submatches_tl + \tl_set:Ne \l_@@_curr_submatches_tl { \prg_replicate:nn { #2 \if_meaning:w > #3 + \l_@@_capturing_group_int \fi: } @@ -5844,7 +5844,7 @@ % % \subsubsection{Framework} % -% \begin{macro}{\@@_replacement:n, \@@_replacement:x} +% \begin{macro}{\@@_replacement:n, \@@_replacement:e} % \begin{macro}{\@@_replacement_apply:Nn, \@@_replacement_set:n} % The replacement text is built incrementally. We keep track in % \cs{l_@@_balance_int} of the balance of explicit begin- and @@ -5882,25 +5882,25 @@ {#2} \prg_do_nothing: \prg_do_nothing: \if_int_compare:w \l_@@_replacement_csnames_int > \c_zero_int - \msg_error:nnx { regex } { replacement-missing-rbrace } + \msg_error:nne { regex } { replacement-missing-rbrace } { \int_use:N \l_@@_replacement_csnames_int } - \tl_build_put_right:Nx \l_@@_build_tl + \tl_build_put_right:Ne \l_@@_build_tl { \prg_replicate:nn \l_@@_replacement_csnames_int \cs_end: } \fi: \seq_if_empty:NF \l_@@_replacement_category_seq { - \msg_error:nnx { regex } { replacement-missing-rparen } + \msg_error:nne { regex } { replacement-missing-rparen } { \seq_count:N \l_@@_replacement_category_seq } \seq_clear:N \l_@@_replacement_category_seq } - \tl_gput_right:Nx \g_@@_balance_tl + \tl_gput_right:Ne \g_@@_balance_tl { + \int_use:N \l_@@_balance_int } \tl_build_end:N \l_@@_build_tl \exp_args:NNo \group_end: #1 \l_@@_build_tl } -\cs_generate_variant:Nn \@@_replacement:n { x } +\cs_generate_variant:Nn \@@_replacement:n { e } \cs_new_protected:Npn \@@_replacement_set:n #1 { \cs_set:Npn \@@_replacement_do_one_match:n ##1 @@ -5927,7 +5927,7 @@ % \end{macro} % \end{macro} % -% \begin{macro}{\@@_case_replacement:n, \@@_case_replacement:x} +% \begin{macro}{\@@_case_replacement:n, \@@_case_replacement:e} % \begin{macrocode} \tl_new:N \g_@@_case_replacement_tl \tl_new:N \g_@@_case_balance_tl @@ -5947,7 +5947,7 @@ \exp_args:No \@@_replacement_set:n { \g_@@_case_replacement_tl \fi: } } -\cs_generate_variant:Nn \@@_case_replacement:n { x } +\cs_generate_variant:Nn \@@_case_replacement:n { e } \cs_new_protected:Npn \@@_case_replacement_aux:n #1 { \tl_gput_right:Nn \g_@@_case_replacement_tl { \or: #1 } @@ -6458,7 +6458,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_replacement_error:NNN #1#2#3 { - \msg_error:nnx { regex } { replacement-#1 } {#3} + \msg_error:nne { regex } { replacement-#1 } {#3} #2 #3 } % \end{macrocode} @@ -6502,7 +6502,7 @@ \cs_new_protected:Npn \regex_const:Nn #1#2 { \@@_compile:n {#2} - \tl_const:Nx #1 { \exp_not:o \l_@@_internal_regex } + \tl_const:Ne #1 { \exp_not:o \l_@@_internal_regex } } % \end{macrocode} % \end{macro} @@ -6516,8 +6516,8 @@ % Then show the variable with some appropriate text. The auxiliary % \cs{@@_show:N} is defined in a different section. % \begin{macrocode} -\cs_new_protected:Npn \regex_show:n { \@@_show:Nn \msg_show:nnxxxx } -\cs_new_protected:Npn \regex_log:n { \@@_show:Nn \msg_log:nnxxxx } +\cs_new_protected:Npn \regex_show:n { \@@_show:Nn \msg_show:nneeee } +\cs_new_protected:Npn \regex_log:n { \@@_show:Nn \msg_log:nneeee } \cs_new_protected:Npn \@@_show:Nn #1#2 { \@@_compile:n {#2} @@ -6526,8 +6526,8 @@ { \tl_to_str:n {#2} } { } { \l_@@_internal_a_tl } { } } -\cs_new_protected:Npn \regex_show:N { \@@_show:NN \msg_show:nnxxxx } -\cs_new_protected:Npn \regex_log:N { \@@_show:NN \msg_log:nnxxxx } +\cs_new_protected:Npn \regex_show:N { \@@_show:NN \msg_show:nneeee } +\cs_new_protected:Npn \regex_log:N { \@@_show:NN \msg_log:nneeee } \cs_new_protected:Npn \@@_show:NN #1#2 { \__kernel_chk_tl_type:NnnT #2 { regex } @@ -6663,15 +6663,15 @@ { \int_if_odd:nTF { \tl_count:n {#1} } { - \msg_error:nnxxxx { regex } { case-odd } + \msg_error:nneeee { regex } { case-odd } { \token_to_str:N \regex_replace_case_once:nN(TF) } { code } { \tl_count:n {#1} } { \tl_to_str:n {#1} } \use_ii:nn } { \@@_replace_once_aux:nnN - { \@@_case_build:x { \@@_tl_odd_items:n {#1} } } - { \@@_replacement:x { \tl_item:nn {#1} { 2 * \g_@@_case_int } } } + { \@@_case_build:e { \@@_tl_odd_items:n {#1} } } + { \@@_replacement:e { \tl_item:nn {#1} { 2 * \g_@@_case_int } } } #2 \bool_if:NTF \g_@@_success_bool } @@ -6695,15 +6695,15 @@ { \int_if_odd:nTF { \tl_count:n {#1} } { - \msg_error:nnxxxx { regex } { case-odd } + \msg_error:nneeee { regex } { case-odd } { \token_to_str:N \regex_replace_case_all:nN(TF) } { code } { \tl_count:n {#1} } { \tl_to_str:n {#1} } \use_ii:nn } { \@@_replace_all_aux:nnN - { \@@_case_build:x { \@@_tl_odd_items:n {#1} } } - { \@@_case_replacement:x { \@@_tl_even_items:n {#1} } } + { \@@_case_build:e { \@@_tl_odd_items:n {#1} } } + { \@@_case_replacement:e { \@@_tl_even_items:n {#1} } } #2 \bool_if:NTF \g_@@_success_bool } @@ -6857,14 +6857,14 @@ { \int_if_odd:nTF { \tl_count:n {#1} } { - \msg_error:nnxxxx { regex } { case-odd } + \msg_error:nneeee { regex } { case-odd } { \token_to_str:N \regex_match_case:nn(TF) } { code } { \tl_count:n {#1} } { \tl_to_str:n {#1} } \use_ii:nn } { \@@_if_match:nn - { \@@_case_build:x { \@@_tl_odd_items:n {#1} } } + { \@@_case_build:e { \@@_tl_odd_items:n {#1} } } {#2} \bool_if:NTF \g_@@_success_bool } @@ -7001,7 +7001,7 @@ \flag_clear:n { @@_begin } \flag_clear:n { @@_end } \cs_set_eq:NN \@@_tmp:w \scan_stop: - \__kernel_tl_gset:Nx \g_@@_internal_tl + \__kernel_tl_gset:Ne \g_@@_internal_tl { \int_step_function:nnN { \l_@@_min_submatch_int } { \l_@@_submatch_int - 1 } \@@_extract_seq_aux:n @@ -7012,12 +7012,12 @@ \int_set:Nn \l_@@_added_end_int { \flag_height:n { @@_end } } \tex_afterassignment:D \@@_extract_check:w - \__kernel_tl_gset:Nx \g_@@_internal_tl + \__kernel_tl_gset:Ne \g_@@_internal_tl { \g_@@_internal_tl \if_false: { \fi: } } \int_compare:nNnT { \l_@@_added_begin_int + \l_@@_added_end_int } > 0 { - \msg_error:nnxxx { regex } { result-unbalanced } + \msg_error:nneee { regex } { result-unbalanced } { splitting~or~extracting~submatches } { \int_use:N \l_@@_added_begin_int } { \int_use:N \l_@@_added_end_int } @@ -7087,17 +7087,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:Nx} assignment, and \cs{@@_extract_check:w} is +% \cs{__kernel_tl_gset:Ne} 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:Nx} (thanks to our sneaky +% closing brace of the \cs{__kernel_tl_gset:Ne} (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:Nx} assignment. We need to add a begin-group +% \cs{__kernel_tl_gset:Ne} 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 +7113,7 @@ \int_incr:N \l_@@_added_begin_int \int_incr:N \l_@@_added_end_int \tex_afterassignment:D \@@_extract_check:w - \__kernel_tl_gset:Nx \g_@@_internal_tl + \__kernel_tl_gset:Ne \g_@@_internal_tl { \exp_after:wN \@@_extract_check_loop:w \g_@@_internal_tl @@ -7234,7 +7234,7 @@ \@@_replacement_balance_one_match:n { \l_@@_zeroth_submatch_int } } - \__kernel_tl_set:Nx \l_@@_internal_a_tl + \__kernel_tl_set:Ne \l_@@_internal_a_tl { \@@_replacement_do_one_match:n { \l_@@_zeroth_submatch_int } @@ -7283,7 +7283,7 @@ { \l_@@_submatch_int - 1 } \@@_replacement_balance_one_match:n } - \__kernel_tl_set:Nx \l_@@_internal_a_tl + \__kernel_tl_set:Ne \l_@@_internal_a_tl { \int_step_function:nnnN { \l_@@_min_submatch_int } @@ -7327,7 +7327,7 @@ \@@_group_end_replace_try: \int_compare:nNnT { \l_@@_added_begin_int + \l_@@_added_end_int } > 0 { - \msg_error:nnxxx { regex } { result-unbalanced } + \msg_error:nneee { regex } { result-unbalanced } { replacing } { \int_use:N \l_@@_added_begin_int } { \int_use:N \l_@@_added_end_int } } @@ -7337,7 +7337,7 @@ \cs_new_protected:Npn \@@_group_end_replace_try: { \tex_afterassignment:D \@@_group_end_replace_check:w - \__kernel_tl_gset:Nx \g_@@_internal_tl + \__kernel_tl_gset:Ne \g_@@_internal_tl { \prg_replicate:nn { \l_@@_added_begin_int } { { \if_false: } \fi: } \l_@@_internal_a_tl @@ -7592,11 +7592,11 @@ % \cs{@@_replacement:n}, which as usual defines % \cs{@@_replacement_do_one_match:n} to insert the tokens from the % start of the match attempt to the beginning of the match, followed -% by the replacement text. The \cs{use:x} expands for instance the +% by the replacement text. The \cs{use:e} expands for instance the % trailing \cs{@@_query_range:nn} down to a sequence of % \cs{@@_reinsert_item:n} \Arg{tokens} where \meta{tokens} % \texttt{o}-expand to a single token that we want to insert. After -% \texttt{x}-expansion, \cs{use:x} does \cs{use:n}, so we have +% \texttt{e}-expansion, \cs{use:e} does \cs{use:n}, so we have % \cs{exp_after:wN} \cs{l_@@_peek_true_tl} \cs{exp:w} \ldots{} % \cs{exp_end:}. This is set up such as to obtain % \cs{l_@@_peek_true_tl} followed by the replaced tokens (possibly @@ -7615,7 +7615,7 @@ \cs_set_eq:NN \@@_replacement_exp_not:N \@@_peek_replacement_token:n \cs_set_eq:NN \@@_replacement_exp_not:V \@@_peek_replacement_var:N \exp_args:No \@@_replacement:n { \l_@@_replacement_tl } - \use:x + \use:e { \exp_not:n { \exp_after:wN \l_@@_peek_true_tl \exp:w } \@@_replacement_do_one_match:n @@ -7736,7 +7736,7 @@ % % Messages for the preparsing phase. % \begin{macrocode} -\use:x +\use:e { \msg_new:nnn { regex } { trailing-backslash } { Trailing~'\iow_char:N\\'~in~regex~or~replacement. } @@ -8107,20 +8107,20 @@ % be merged. % % \begin{macro} -% {\@@_trace_push:nnN, \@@_trace_pop:nnN, \@@_trace:nnx} +% {\@@_trace_push:nnN, \@@_trace_pop:nnN, \@@_trace:nne} % Here |#1| is the module name (\texttt{regex}) and |#2| is % typically~1. If the module's current tracing level is less than % |#2| show nothing, otherwise write |#3| to the terminal. % \begin{macrocode} \cs_new_protected:Npn \@@_trace_push:nnN #1#2#3 - { \@@_trace:nnx {#1} {#2} { entering~ \token_to_str:N #3 } } + { \@@_trace:nne {#1} {#2} { entering~ \token_to_str:N #3 } } \cs_new_protected:Npn \@@_trace_pop:nnN #1#2#3 - { \@@_trace:nnx {#1} {#2} { leaving~ \token_to_str:N #3 } } -\cs_new_protected:Npn \@@_trace:nnx #1#2#3 + { \@@_trace:nne {#1} {#2} { leaving~ \token_to_str:N #3 } } +\cs_new_protected:Npn \@@_trace:nne #1#2#3 { \int_compare:nNnF { \int_use:c { g_@@_trace_#1_int } } < {#2} - { \iow_term:x { Trace:~#3 } } + { \iow_term:e { Trace:~#3 } } } % \end{macrocode} % \end{macro} @@ -8143,7 +8143,7 @@ \l_@@_min_state_int { \l_@@_max_state_int - 1 } { - \@@_trace:nnx { regex } {#1} + \@@_trace:nne { regex } {#1} { \iow_char:N \\toks ##1 = { \@@_toks_use:w ##1 } } } } diff --git a/macros/latex/contrib/l3kernel/l3seq.dtx b/macros/latex/contrib/l3kernel/l3seq.dtx index d523320f4e..9572261d46 100644 --- a/macros/latex/contrib/l3kernel/l3seq.dtx +++ b/macros/latex/contrib/l3kernel/l3seq.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % @@ -128,10 +128,10 @@ % { % \seq_set_split:Nnn , % \seq_set_split:NVn , \seq_set_split:NnV , \seq_set_split:NVV , -% \seq_set_split:Nnx , \seq_set_split:Nxx , +% \seq_set_split:Nne , \seq_set_split:Nee , % \seq_gset_split:Nnn, % \seq_gset_split:NVn , \seq_gset_split:NnV, \seq_gset_split:NVV, -% \seq_gset_split:Nnx , \seq_gset_split:Nxx +% \seq_gset_split:Nne , \seq_gset_split:Nee % } % \begin{syntax} % \cs{seq_set_split:Nnn} \meta{seq~var} \Arg{delimiter} \Arg{token list} @@ -196,14 +196,14 @@ % \section{Appending data to sequences} % % \begin{function}{ -% \seq_put_left:Nn, \seq_put_left:NV, \seq_put_left:Nv, -% \seq_put_left:No, \seq_put_left:Nx, -% \seq_put_left:cn, \seq_put_left:cV, \seq_put_left:cv, -% \seq_put_left:co, \seq_put_left:cx, -% \seq_gput_left:Nn, \seq_gput_left:NV, \seq_gput_left:Nv, -% \seq_gput_left:No, \seq_gput_left:Nx, -% \seq_gput_left:cn, \seq_gput_left:cV, \seq_gput_left:cv, -% \seq_gput_left:co, \seq_gput_left:cx +% \seq_put_left:Nn, \seq_put_left:NV, \seq_put_left:Nv, \seq_put_left:Ne, +% \seq_put_left:No, +% \seq_put_left:cn, \seq_put_left:cV, \seq_put_left:cv, \seq_put_left:ce, +% \seq_put_left:co, +% \seq_gput_left:Nn, \seq_gput_left:NV, \seq_gput_left:Nv, \seq_gput_left:Ne, +% \seq_gput_left:No, +% \seq_gput_left:cn, \seq_gput_left:cV, \seq_gput_left:cv, \seq_gput_left:ce, +% \seq_gput_left:co % } % \begin{syntax} % \cs{seq_put_left:Nn} \meta{seq~var} \Arg{item} @@ -212,14 +212,14 @@ % \end{function} % % \begin{function}{ -% \seq_put_right:Nn, \seq_put_right:NV, \seq_put_right:Nv, -% \seq_put_right:No, \seq_put_right:Nx, -% \seq_put_right:cn, \seq_put_right:cV, \seq_put_right:cv, -% \seq_put_right:co, \seq_put_right:cx, -% \seq_gput_right:Nn, \seq_gput_right:NV, \seq_gput_right:Nv, -% \seq_gput_right:No, \seq_gput_right:Nx, -% \seq_gput_right:cn, \seq_gput_right:cV, \seq_gput_right:cv, -% \seq_gput_right:co, \seq_gput_right:cx +% \seq_put_right:Nn, \seq_put_right:NV, \seq_put_right:Nv, \seq_put_right:Ne, +% \seq_put_right:No, +% \seq_put_right:cn, \seq_put_right:cV, \seq_put_right:cv, \seq_put_right:ce, +% \seq_put_right:co, +% \seq_gput_right:Nn, \seq_gput_right:NV, \seq_gput_right:Nv, \seq_gput_right:Ne, +% \seq_gput_right:No, +% \seq_gput_right:cn, \seq_gput_right:cV, \seq_gput_right:cv, \seq_gput_right:ce, +% \seq_gput_right:co, % } % \begin{syntax} % \cs{seq_put_right:Nn} \meta{seq~var} \Arg{item} @@ -471,10 +471,10 @@ % % \begin{function} % { -% \seq_remove_all:Nn, \seq_remove_all:NV, \seq_remove_all:Nx, -% \seq_remove_all:cn, \seq_remove_all:cV, \seq_remove_all:cx, -% \seq_gremove_all:Nn, \seq_gremove_all:NV, \seq_gremove_all:Nx, -% \seq_gremove_all:cn, \seq_gremove_all:cV, \seq_gremove_all:cx +% \seq_remove_all:Nn, \seq_remove_all:NV, \seq_remove_all:Ne, +% \seq_remove_all:cn, \seq_remove_all:cV, \seq_remove_all:ce, +% \seq_gremove_all:Nn, \seq_gremove_all:NV, \seq_gremove_all:Ne, +% \seq_gremove_all:cn, \seq_gremove_all:cV, \seq_gremove_all:ce % } % \begin{syntax} % \cs{seq_remove_all:Nn} \meta{seq~var} \Arg{item} @@ -554,8 +554,10 @@ % % \begin{function}[TF] % { -% \seq_if_in:Nn, \seq_if_in:NV, \seq_if_in:Nv, \seq_if_in:No, \seq_if_in:Nx, -% \seq_if_in:cn, \seq_if_in:cV, \seq_if_in:cv, \seq_if_in:co, \seq_if_in:cx +% \seq_if_in:Nn, \seq_if_in:NV, \seq_if_in:Nv, \seq_if_in:Ne, +% \seq_if_in:No, +% \seq_if_in:cn, \seq_if_in:cV, \seq_if_in:cv, \seq_if_in:ce, +% \seq_if_in:co, % } % \begin{syntax} % \cs{seq_if_in:NnTF} \meta{seq~var} \Arg{item} \Arg{true code} \Arg{false code} @@ -905,12 +907,14 @@ % % \begin{function} % { -% \seq_push:Nn, \seq_push:NV, \seq_push:Nv, \seq_push:No, \seq_push:Nx, -% \seq_push:cn, \seq_push:cV, \seq_push:cv, \seq_push:co, \seq_push:cx, -% \seq_gpush:Nn, \seq_gpush:NV, \seq_gpush:Nv, -% \seq_gpush:No, \seq_gpush:Nx, -% \seq_gpush:cn, \seq_gpush:cV, \seq_gpush:cv, -% \seq_gpush:co, \seq_gpush:cx +% \seq_push:Nn, \seq_push:NV, \seq_push:Nv, \seq_push:Ne, +% \seq_push:No, +% \seq_push:cn, \seq_push:cV, \seq_push:cv, \seq_push:ce, +% \seq_push:co, +% \seq_gpush:Nn, \seq_gpush:NV, \seq_gpush:Nv, \seq_gpush:Ne, +% \seq_gpush:No, +% \seq_gpush:cn, \seq_gpush:cV, \seq_gpush:cv, \seq_gpush:ce, +% \seq_gpush:co % } % \begin{syntax} % \cs{seq_push:Nn} \meta{seq~var} \Arg{item} @@ -1083,7 +1087,7 @@ % raised. The definition should always be set globally. % \end{function} % -% \begin{function}{\@@_push_item_def:n, \@@_push_item_def:x} +% \begin{function}{\@@_push_item_def:n, \@@_push_item_def:e} % \begin{syntax} % \cs{@@_push_item_def:n} \Arg{code} % \end{syntax} @@ -1234,22 +1238,22 @@ % \begin{macrocode} \cs_new_protected:Npn \seq_set_from_clist:NN #1#2 { - \__kernel_tl_set:Nx #1 + \__kernel_tl_set:Ne #1 { \s_@@ \clist_map_function:NN #2 \@@_wrap_item:n } } \cs_new_protected:Npn \seq_set_from_clist:Nn #1#2 { - \__kernel_tl_set:Nx #1 + \__kernel_tl_set:Ne #1 { \s_@@ \clist_map_function:nN {#2} \@@_wrap_item:n } } \cs_new_protected:Npn \seq_gset_from_clist:NN #1#2 { - \__kernel_tl_gset:Nx #1 + \__kernel_tl_gset:Ne #1 { \s_@@ \clist_map_function:NN #2 \@@_wrap_item:n } } \cs_new_protected:Npn \seq_gset_from_clist:Nn #1#2 { - \__kernel_tl_gset:Nx #1 + \__kernel_tl_gset:Ne #1 { \s_@@ \clist_map_function:nN {#2} \@@_wrap_item:n } } \cs_generate_variant:Nn \seq_set_from_clist:NN { Nc } @@ -1267,7 +1271,7 @@ % \begin{macrocode} \cs_new_protected:Npn \seq_const_from_clist:Nn #1#2 { - \tl_const:Nx #1 + \tl_const:Ne #1 { \s_@@ \clist_map_function:nN {#2} \@@_wrap_item:n } } \cs_generate_variant:Nn \seq_const_from_clist:Nn { c } @@ -1278,9 +1282,11 @@ % { % \seq_set_split:Nnn , % \seq_set_split:NVn , \seq_set_split:NnV , \seq_set_split:NVV , +% \seq_set_split:Nne , \seq_set_split:Nee , % \seq_set_split:Nnx , \seq_set_split:Nxx , % \seq_gset_split:Nnn, -% \seq_gset_split:NVn , \seq_gset_split:NnV, \seq_gset_split:NVV, +% \seq_gset_split:NVn, \seq_gset_split:NnV, \seq_gset_split:NVV, +% \seq_gset_split:Nne, \seq_gset_split:Nee, % \seq_gset_split:Nnx, \seq_gset_split:Nxx % } % \begin{macro} @@ -1316,13 +1322,13 @@ % braces which are outermost after space trimming. % \begin{macrocode} \cs_new_protected:Npn \seq_set_split:Nnn - { \@@_set_split:NNNnn \__kernel_tl_set:Nx \tl_trim_spaces:n } + { \@@_set_split:NNNnn \__kernel_tl_set:Ne \tl_trim_spaces:n } \cs_new_protected:Npn \seq_gset_split:Nnn - { \@@_set_split:NNNnn \__kernel_tl_gset:Nx \tl_trim_spaces:n } + { \@@_set_split:NNNnn \__kernel_tl_gset:Ne \tl_trim_spaces:n } \cs_new_protected:Npn \seq_set_split_keep_spaces:Nnn - { \@@_set_split:NNNnn \__kernel_tl_set:Nx \exp_not:n } + { \@@_set_split:NNNnn \__kernel_tl_set:Ne \exp_not:n } \cs_new_protected:Npn \seq_gset_split_keep_spaces:Nnn - { \@@_set_split:NNNnn \__kernel_tl_gset:Nx \exp_not:n } + { \@@_set_split:NNNnn \__kernel_tl_gset:Ne \exp_not:n } \cs_new_protected:Npn \@@_set_split:NNNnn #1#2#3#4#5 { \tl_if_empty:nTF {#4} @@ -1342,7 +1348,7 @@ \@@_set_split_end: \@@_set_split:Nw #2 \prg_do_nothing: } - \__kernel_tl_set:Nx \l_@@_internal_a_tl { \l_@@_internal_a_tl } + \__kernel_tl_set:Ne \l_@@_internal_a_tl { \l_@@_internal_a_tl } } #1 #3 { \s_@@ \l_@@_internal_a_tl } } @@ -1354,8 +1360,10 @@ } \cs_new:Npn \@@_set_split:w #1 \@@_set_split_end: { \@@_wrap_item:n {#1} } -\cs_generate_variant:Nn \seq_set_split:Nnn { NV , NnV , NVV , Nnx , Nxx } -\cs_generate_variant:Nn \seq_gset_split:Nnn { NV , NnV , NVV , Nnx , Nxx } +\cs_generate_variant:Nn \seq_set_split:Nnn { NV , NnV , NVV , Nne , Nee } +\cs_generate_variant:Nn \seq_set_split:Nnn { Nnx , Nxx } +\cs_generate_variant:Nn \seq_gset_split:Nnn { NV , NnV , NVV , Nne , Nee } +\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 } % \end{macrocode} @@ -1395,17 +1403,17 @@ % \subsection{Appending data to either end} % % \begin{macro}{ -% \seq_put_left:Nn, \seq_put_left:NV, \seq_put_left:Nv, +% \seq_put_left:Nn, \seq_put_left:NV, \seq_put_left:Nv, \seq_put_left:Ne, % \seq_put_left:No, \seq_put_left:Nx, -% \seq_put_left:cn, \seq_put_left:cV, \seq_put_left:cv, +% \seq_put_left:cn, \seq_put_left:cV, \seq_put_left:cv,\seq_put_left:ce, % \seq_put_left:co, \seq_put_left:cx % } % \UnitTested % \begin{macro}{ -% \seq_gput_left:Nn, \seq_gput_left:NV, \seq_gput_left:Nv, +% \seq_gput_left:Nn, \seq_gput_left:NV, \seq_gput_left:Nv, \seq_gput_left:Ne, % \seq_gput_left:No, \seq_gput_left:Nx, -% \seq_gput_left:cn, \seq_gput_left:cV, \seq_gput_left:cv, -% \seq_gput_left:co, \seq_gput_left:cx +% \seq_gput_left:cn, \seq_gput_left:cV, \seq_gput_left:cv, \seq_gput_left:ce, +% \seq_gput_left:co, \seq_put_left:cx % } % \begin{macro}[EXP]{\@@_put_left_aux:w} % When adding to the left of a sequence, remove \cs{s_@@}. This is @@ -1414,7 +1422,7 @@ % \begin{macrocode} \cs_new_protected:Npn \seq_put_left:Nn #1#2 { - \__kernel_tl_set:Nx #1 + \__kernel_tl_set:Ne #1 { \exp_not:n { \s_@@ \@@_item:n {#2} } \exp_not:f { \exp_after:wN \@@_put_left_aux:w #1 } @@ -1422,17 +1430,17 @@ } \cs_new_protected:Npn \seq_gput_left:Nn #1#2 { - \__kernel_tl_gset:Nx #1 + \__kernel_tl_gset:Ne #1 { \exp_not:n { \s_@@ \@@_item:n {#2} } \exp_not:f { \exp_after:wN \@@_put_left_aux:w #1 } } } \cs_new:Npn \@@_put_left_aux:w \s_@@ { \exp_stop_f: } -\cs_generate_variant:Nn \seq_put_left:Nn { NV , Nv , No , Nx } -\cs_generate_variant:Nn \seq_put_left:Nn { c , cV , cv , co , cx } -\cs_generate_variant:Nn \seq_gput_left:Nn { NV , Nv , No , Nx } -\cs_generate_variant:Nn \seq_gput_left:Nn { c , cV , cv , co , cx } +\cs_generate_variant:Nn \seq_put_left:Nn { NV , Nv , Ne , No , Nx } +\cs_generate_variant:Nn \seq_put_left:Nn { c , cV , cv , ce , co ,cx } +\cs_generate_variant:Nn \seq_gput_left:Nn { NV , Nv , Ne , No , Nx } +\cs_generate_variant:Nn \seq_gput_left:Nn { c , cV , cv , ce , co , cx } % \end{macrocode} % \end{macro} % \end{macro} @@ -1440,17 +1448,17 @@ % % \begin{macro} % { -% \seq_put_right:Nn, \seq_put_right:NV, \seq_put_right:Nv, +% \seq_put_right:Nn, \seq_put_right:NV, \seq_put_right:Nv, \seq_put_right:Ne, % \seq_put_right:No, \seq_put_right:Nx, -% \seq_put_right:cn, \seq_put_right:cV, \seq_put_right:cv, +% \seq_put_right:cn, \seq_put_right:cV, \seq_put_right:cv, \seq_put_right:cx, % \seq_put_right:co, \seq_put_right:cx % } % \UnitTested % \begin{macro} % { -% \seq_gput_right:Nn, \seq_gput_right:NV, \seq_gput_right:Nv, +% \seq_gput_right:Nn, \seq_gput_right:NV, \seq_gput_right:Nv, \seq_gput_right:Ne, % \seq_gput_right:No, \seq_gput_right:Nx, -% \seq_gput_right:cn, \seq_gput_right:cV, \seq_gput_right:cv, +% \seq_gput_right:cn, \seq_gput_right:cV, \seq_gput_right:cv, \seq_gput_right:ce, % \seq_gput_right:co, \seq_gput_right:cx % } % Since there is no trailing marker, adding an item to the right of a @@ -1460,10 +1468,10 @@ { \tl_put_right:Nn #1 { \@@_item:n {#2} } } \cs_new_protected:Npn \seq_gput_right:Nn #1#2 { \tl_gput_right:Nn #1 { \@@_item:n {#2} } } -\cs_generate_variant:Nn \seq_gput_right:Nn { NV , Nv , No , Nx } -\cs_generate_variant:Nn \seq_gput_right:Nn { c , cV , cv , co , cx } -\cs_generate_variant:Nn \seq_put_right:Nn { NV , Nv , No , Nx } -\cs_generate_variant:Nn \seq_put_right:Nn { c , cV , cv , co , cx } +\cs_generate_variant:Nn \seq_put_right:Nn { NV , Nv , Ne , No , Nx } +\cs_generate_variant:Nn \seq_put_right:Nn { c , cV , cv , ce , co , cx } +\cs_generate_variant:Nn \seq_gput_right:Nn { NV , Nv , Ne , No , Nx } +\cs_generate_variant:Nn \seq_gput_right:Nn { c , cV , cv , ce , co , cx } % \end{macrocode} % \end{macro} % \end{macro} @@ -1515,14 +1523,18 @@ % % \begin{macro} % { -% \seq_remove_all:Nn, \seq_remove_all:NV, \seq_remove_all:Nx, -% \seq_remove_all:cn, \seq_remove_all:cV, \seq_remove_all:cx +% \seq_remove_all:Nn, \seq_remove_all:NV, \seq_remove_all:Ne, +% \seq_remove_all:Nx, +% \seq_remove_all:cn, \seq_remove_all:cV, \seq_remove_all:ce +% \seq_remove_all:cx, % } % \UnitTested % \begin{macro} % { -% \seq_gremove_all:Nn, \seq_gremove_all:NV, \seq_gremove_all:Nx, -% \seq_gremove_all:cn, \seq_gremove_all:cV, \seq_gremove_all:cx +% \seq_gremove_all:Nn, \seq_gremove_all:NV, \seq_gremove_all:Ne, +% \seq_gremove_all:Nx, +% \seq_gremove_all:cn, \seq_gremove_all:cV, \seq_gremove_all:ce, +% \seq_gremove_all:Nx % } % \UnitTested % \begin{macro}{\@@_remove_all_aux:NNn} @@ -1541,9 +1553,9 @@ % \texttt{x}-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:Nx } + { \@@_remove_all_aux:NNn \__kernel_tl_set:Ne } \cs_new_protected:Npn \seq_gremove_all:Nn - { \@@_remove_all_aux:NNn \__kernel_tl_gset:Nx } + { \@@_remove_all_aux:NNn \__kernel_tl_gset:Ne } \cs_new_protected:Npn \@@_remove_all_aux:NNn #1#2#3 { \@@_push_item_def:n @@ -1564,8 +1576,10 @@ #1 #2 {#2} \@@_pop_item_def: } -\cs_generate_variant:Nn \seq_remove_all:Nn { NV , Nx , c , cV , cx } -\cs_generate_variant:Nn \seq_gremove_all:Nn { NV , Nx , c , cV , cx } +\cs_generate_variant:Nn \seq_remove_all:Nn { NV , Ne , c , cV , ce } +\cs_generate_variant:Nn \seq_remove_all:Nn { Nx , cx } +\cs_generate_variant:Nn \seq_gremove_all:Nn { NV , Ne , c , cV , ce } +\cs_generate_variant:Nn \seq_gremove_all:Nn { Nx , cx } % \end{macrocode} % \end{macro} % \end{macro} @@ -1585,15 +1599,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:Nx \use_i:nn } + { \@@_set_item:NnnNN #1 {#2} {#3} \__kernel_tl_set:Ne \use_i:nn } \cs_new_protected:Npn \seq_gset_item:Nnn #1#2#3 - { \@@_set_item:NnnNN #1 {#2} {#3} \__kernel_tl_gset:Nx \use_i:nn } + { \@@_set_item:NnnNN #1 {#2} {#3} \__kernel_tl_gset:Ne \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:Nx \use_ii:nn } + { \@@_set_item:NnnNN #1 {#2} {#3} \__kernel_tl_set:Ne \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:Nx \use_ii:nn } + { \@@_set_item:NnnNN #1 {#2} {#3} \__kernel_tl_gset:Ne \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} @@ -1629,7 +1643,7 @@ { #6 { - \msg_error:nnxxx { seq } { item-too-large } + \msg_error:nneee { seq } { item-too-large } { \token_to_str:N #3 } {#2} {#1} } { \prg_return_false: } @@ -1715,9 +1729,9 @@ % from the stack, and the memory consumption becomes linear. % \begin{macrocode} \cs_new_protected:Npn \seq_reverse:N - { \@@_reverse:NN \__kernel_tl_set:Nx } + { \@@_reverse:NN \__kernel_tl_set:Ne } \cs_new_protected:Npn \seq_greverse:N - { \@@_reverse:NN \__kernel_tl_gset:Nx } + { \@@_reverse:NN \__kernel_tl_gset:Ne } \cs_new_protected:Npn \@@_reverse:NN #1 #2 { \cs_set_eq:NN \@@_tmp:w \@@_item:n @@ -1780,7 +1794,7 @@ { \int_compare:nNnTF { \seq_count:N #2 } > \c_max_register_int { - \msg_error:nnx { seq } { shuffle-too-large } + \msg_error:nne { seq } { shuffle-too-large } { \token_to_str:N #2 } } { @@ -1793,7 +1807,7 @@ \seq_gclear:N \g_@@_internal_seq \int_step_inline:nn \l_@@_internal_a_int { - \seq_gput_right:Nx \g_@@_internal_seq + \seq_gput_right:Ne \g_@@_internal_seq { \tex_the:D \tex_toks:D ##1 } } \group_end: @@ -1820,8 +1834,10 @@ % % \begin{macro}[TF] % { -% \seq_if_in:Nn, \seq_if_in:NV, \seq_if_in:Nv, \seq_if_in:No, \seq_if_in:Nx, -% \seq_if_in:cn, \seq_if_in:cV, \seq_if_in:cv, \seq_if_in:co, \seq_if_in:cx +% \seq_if_in:Nn, \seq_if_in:NV, \seq_if_in:Nv, \seq_if_in:Ne, +% \seq_if_in:No, \seq_if_in:Nx, +% \seq_if_in:cn, \seq_if_in:cV, \seq_if_in:cv,\seq_if_in:ce, +% \seq_if_in:co, \seq_if_in:cx % } % \UnitTested % \begin{macro}{\@@_if_in:} @@ -1854,7 +1870,7 @@ \cs_new:Npn \@@_if_in: { \prg_break:n { \group_end: \prg_return_true: } } \prg_generate_conditional_variant:Nnn \seq_if_in:Nn - { NV , Nv , No , Nx , c , cV , cv , co , cx } { T , F , TF } + { NV , Nv , Ne , No , Nx , c , cV , cv , ce , co , cx } { T , F , TF } % \end{macrocode} % \end{macro} % \end{macro} @@ -1896,7 +1912,7 @@ % \begin{macrocode} \cs_new_protected:Npn \seq_get_left:NN #1#2 { - \__kernel_tl_set:Nx #2 + \__kernel_tl_set:Ne #2 { \exp_after:wN \@@_get_left:wnw #1 \@@_item:n { \q_no_value } \s_@@_stop @@ -1948,7 +1964,7 @@ % \begin{macrocode} \cs_new_protected:Npn \seq_get_right:NN #1#2 { - \__kernel_tl_set:Nx #2 + \__kernel_tl_set:Ne #2 { \exp_after:wN \use_i_ii:nnn \exp_after:wN \@@_get_right_loop:nw @@ -1989,9 +2005,9 @@ % finally stops the loop. % \begin{macrocode} \cs_new_protected:Npn \seq_pop_right:NN - { \@@_pop:NNNN \@@_pop_right:NNN \__kernel_tl_set:Nx } + { \@@_pop:NNNN \@@_pop_right:NNN \__kernel_tl_set:Ne } \cs_new_protected:Npn \seq_gpop_right:NN - { \@@_pop:NNNN \@@_pop_right:NNN \__kernel_tl_gset:Nx } + { \@@_pop:NNNN \@@_pop_right:NNN \__kernel_tl_gset:Ne } \cs_new_protected:Npn \@@_pop_right:NNN #1#2#3 { \cs_set_eq:NN \@@_tmp:w \@@_item:n @@ -2003,7 +2019,7 @@ #2 { \if_false: { \fi: } - \__kernel_tl_set:Nx #3 + \__kernel_tl_set:Ne #3 } { } \use_none:nn \cs_set_eq:NN \@@_item:n \@@_tmp:w @@ -2051,10 +2067,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:Nx #1 #2 } + { \@@_pop_TF:NNNN \@@_pop_right:NNN \__kernel_tl_set:Ne #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:Nx #1 #2 } + { \@@_pop_TF:NNNN \@@_pop_right:NNN \__kernel_tl_gset:Ne #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 } @@ -2174,7 +2190,7 @@ % \end{macro} % \end{macro} % -% \begin{macro}{\@@_push_item_def:n, \@@_push_item_def:x} +% \begin{macro}{\@@_push_item_def:n, \@@_push_item_def:e} % \begin{macro}{\@@_push_item_def:} % \begin{macro}{\@@_pop_item_def:} % The definition of \cs{@@_item:n} needs to be saved and restored at @@ -2186,10 +2202,10 @@ \@@_push_item_def: \cs_gset:Npn \@@_item:n ##1 } -\cs_new_protected:Npn \@@_push_item_def:x +\cs_new_protected:Npn \@@_push_item_def:e { \@@_push_item_def: - \cs_gset:Npx \@@_item:n ##1 + \cs_gset:Npe \@@_item:n ##1 } \cs_new_protected:Npn \@@_push_item_def: { @@ -2269,7 +2285,7 @@ % \begin{macrocode} \cs_new_protected:Npn \seq_map_variable:NNn #1#2#3 { - \@@_push_item_def:x + \@@_push_item_def:e { \tl_set:Nn \exp_not:N #2 {##1} \exp_not:n {#3} @@ -2380,9 +2396,9 @@ % semantics. % \begin{macrocode} \cs_new_protected:Npn \seq_set_map_x:NNn - { \@@_set_map_x:NNNn \__kernel_tl_set:Nx } + { \@@_set_map_x:NNNn \__kernel_tl_set:Ne } \cs_new_protected:Npn \seq_gset_map_x:NNn - { \@@_set_map_x:NNNn \__kernel_tl_gset:Nx } + { \@@_set_map_x:NNNn \__kernel_tl_gset:Ne } \cs_new_protected:Npn \@@_set_map_x:NNNn #1#2#3#4 { \@@_push_item_def:n { \exp_not:N \@@_item:n {#4} } @@ -2399,9 +2415,9 @@ % <inline function>. % \begin{macrocode} \cs_new_protected:Npn \seq_set_map:NNn - { \@@_set_map:NNNn \__kernel_tl_set:Nx } + { \@@_set_map:NNNn \__kernel_tl_set:Ne } \cs_new_protected:Npn \seq_gset_map:NNn - { \@@_set_map:NNNn \__kernel_tl_gset:Nx } + { \@@_set_map:NNNn \__kernel_tl_gset:Ne } \cs_new_protected:Npn \@@_set_map:NNNn #1#2#3#4 { \@@_push_item_def:n { \exp_not:n { \@@_item:n {#4} } } @@ -2507,37 +2523,27 @@ % The same functions as for sequences, but with the correct naming. % % \begin{macro}{ -% \seq_push:Nn, \seq_push:NV, \seq_push:Nv, \seq_push:No, \seq_push:Nx, -% \seq_push:cn, \seq_push:cV, \seq_push:cV, \seq_push:co, \seq_push:cx +% \seq_push:Nn, \seq_push:NV, \seq_push:Nv, \seq_push:Ne, +% \seq_push:No, \seq_push:Nx, +% \seq_push:cn, \seq_push:cV, \seq_push:cv, \seq_push:ce, +% \seq_push:co, \seq_push:cx % } % \UnitTested % \begin{macro}{ -% \seq_gpush:Nn, \seq_gpush:NV, \seq_gpush:Nv, \seq_gpush:No, \seq_gpush:Nx, -% \seq_gpush:cn, \seq_gpush:cV, \seq_gpush:cv, \seq_gpush:co, \seq_gpush:cx +% \seq_gpush:Nn, \seq_gpush:NV, \seq_gpush:Nv, \seq_gpush:Ne, +% \seq_gpush:No, \seq_gpush:Nx, +% \seq_gpush:cn, \seq_gpush:cV, \seq_gpush:cv, \seq_gpush:ce, +% \seq_gpush:co, \seq_gpush:cx % } % \UnitTested % Pushing to a sequence is the same as adding on the left. % \begin{macrocode} -\cs_new_eq:NN \seq_push:Nn \seq_put_left:Nn -\cs_new_eq:NN \seq_push:NV \seq_put_left:NV -\cs_new_eq:NN \seq_push:Nv \seq_put_left:Nv -\cs_new_eq:NN \seq_push:No \seq_put_left:No -\cs_new_eq:NN \seq_push:Nx \seq_put_left:Nx -\cs_new_eq:NN \seq_push:cn \seq_put_left:cn -\cs_new_eq:NN \seq_push:cV \seq_put_left:cV -\cs_new_eq:NN \seq_push:cv \seq_put_left:cv -\cs_new_eq:NN \seq_push:co \seq_put_left:co -\cs_new_eq:NN \seq_push:cx \seq_put_left:cx +\cs_new_eq:NN \seq_push:Nn \seq_put_left:Nn +\cs_generate_variant:Nn \seq_push:Nn { NV , Nv , Ne , c , cV , cv , ce } +\cs_generate_variant:Nn \seq_push:Nn { No , Nx , co , cx } \cs_new_eq:NN \seq_gpush:Nn \seq_gput_left:Nn -\cs_new_eq:NN \seq_gpush:NV \seq_gput_left:NV -\cs_new_eq:NN \seq_gpush:Nv \seq_gput_left:Nv -\cs_new_eq:NN \seq_gpush:No \seq_gput_left:No -\cs_new_eq:NN \seq_gpush:Nx \seq_gput_left:Nx -\cs_new_eq:NN \seq_gpush:cn \seq_gput_left:cn -\cs_new_eq:NN \seq_gpush:cV \seq_gput_left:cV -\cs_new_eq:NN \seq_gpush:cv \seq_gput_left:cv -\cs_new_eq:NN \seq_gpush:co \seq_gput_left:co -\cs_new_eq:NN \seq_gpush:cx \seq_gput_left:cx +\cs_generate_variant:Nn \seq_gpush:Nn { NV , Nv , Ne , c , cV , cv , ce } +\cs_generate_variant:Nn \seq_gpush:Nn { No , Nx , co , cx } % \end{macrocode} % \end{macro} % \end{macro} @@ -2585,9 +2591,9 @@ % \UnitTested % Apply the general \cs{__kernel_chk_tl_type:NnnT}. % \begin{macrocode} -\cs_new_protected:Npn \seq_show:N { \@@_show:NN \msg_show:nnxxxx } +\cs_new_protected:Npn \seq_show:N { \@@_show:NN \msg_show:nneeee } \cs_generate_variant:Nn \seq_show:N { c } -\cs_new_protected:Npn \seq_log:N { \@@_show:NN \msg_log:nnxxxx } +\cs_new_protected:Npn \seq_log:N { \@@_show:NN \msg_log:nneeee } \cs_generate_variant:Nn \seq_log:N { c } \cs_new_protected:Npn \@@_show:NN #1#2 { diff --git a/macros/latex/contrib/l3kernel/l3skip.dtx b/macros/latex/contrib/l3kernel/l3skip.dtx index 7ce22afb7e..0371b7ecad 100644 --- a/macros/latex/contrib/l3kernel/l3skip.dtx +++ b/macros/latex/contrib/l3kernel/l3skip.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % @@ -189,7 +189,7 @@ % between two integers, with all distances converted to scaled points. % Thus % \begin{verbatim} -% \tl_set:Nx \l_my_tl { \dim_ratio:nn { 5 pt } { 10 pt } } +% \tl_set:Ne \l_my_tl { \dim_ratio:nn { 5 pt } { 10 pt } } % \tl_show:N \l_my_tl % \end{verbatim} % displays |327680/655360| on the terminal. @@ -1654,7 +1654,7 @@ { \int_gincr:N \g__kernel_prg_map_int \exp_args:NNc \@@_step:NNnnnn - \cs_gset_protected:Npx + \cs_gset_protected:Npe { @@_map_ \int_use:N \g__kernel_prg_map_int :w } {#1}{#2}{#3} { @@ -1733,10 +1733,10 @@ \exp_after:wN \@@_to_decimal:w \dim_use:N \@@_eval:w #1 \@@_eval_end: } -\use:x +\use:e { \cs_new:Npn \exp_not:N \@@_to_decimal:w - ##1 . ##2 \tl_to_str:n { pt } + #1 . #2 \tl_to_str:n { pt } } { \int_compare:nNnTF {#2} > \c_zero_int diff --git a/macros/latex/contrib/l3kernel/l3sort.dtx b/macros/latex/contrib/l3kernel/l3sort.dtx index b92eddbb35..6837e7fb0e 100644 --- a/macros/latex/contrib/l3kernel/l3sort.dtx +++ b/macros/latex/contrib/l3kernel/l3sort.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % @@ -124,8 +124,8 @@ % \begin{variable}{\g_@@_internal_seq, \g_@@_internal_tl} % Sorting happens in a group; the result is stored in those global % variables before being copied outside the group to the proper -% places. For seq and tl this is more efficient than using \cs{use:x} -% (or some \cs{exp_args:NNNx}) to smuggle the definition outside the +% places. For seq and tl this is more efficient than using \cs{use:e} +% (or some \cs{exp_args:NNNe}) to smuggle the definition outside the % group since \TeX{} does not need to re-read tokens. For clist we % don't gain anything since the result is converted from seq to clist % anyways. @@ -376,7 +376,7 @@ { \group_begin: \@@_main:NNNn \tl_map_inline:Nn \tl_map_break:n #2 {#3} - \__kernel_tl_gset:Nx \g_@@_internal_tl + \__kernel_tl_gset:Ne \g_@@_internal_tl { \@@_tl_toks:w \l_@@_min_int ; } \group_end: #1 #2 \g_@@_internal_tl @@ -432,7 +432,7 @@ \int_step_inline:nnn \l_@@_min_int { \l_@@_top_int - 1 } { - \seq_gput_right:Nx \g_@@_internal_seq + \seq_gput_right:Ne \g_@@_internal_seq { \tex_the:D \tex_toks:D ##1 } } \group_end: @@ -591,14 +591,14 @@ \cs_new_protected:Npn \@@_return_mark:w #1 \s_@@_mark { } \cs_new_protected:Npn \@@_return_none_error: { - \msg_error:nnxx { sort } { return-none } + \msg_error:nnee { sort } { return-none } { \tex_the:D \tex_toks:D \l_@@_A_int } { \tex_the:D \tex_toks:D \l_@@_C_int } \@@_return_same:w \@@_return_none_error: } \cs_new_protected:Npn \@@_return_two_error: { - \msg_error:nnxx { sort } { return-two } + \msg_error:nnee { sort } { return-two } { \tex_the:D \tex_toks:D \l_@@_A_int } { \tex_the:D \tex_toks:D \l_@@_C_int } } @@ -1026,7 +1026,7 @@ { \cs_set_eq:NN \toksdef \@@_disabled_toksdef:n } \cs_new_protected:Npn \@@_disabled_toksdef:n #1 { - \msg_error:nnx { sort } { toksdef } + \msg_error:nne { sort } { toksdef } { \token_to_str:N #1 } \@@_error: \tex_toksdef:D #1 @@ -1050,7 +1050,7 @@ \cs_new_protected:Npn \@@_too_long_error:NNw #1#2 \fi: { \fi: - \msg_error:nnxxx { sort } { too-large } + \msg_error:nneee { sort } { too-large } { \token_to_str:N #2 } { \int_eval:n { \l_@@_true_max_int - \l_@@_min_int } } { \int_eval:n { \l_@@_top_int - \l_@@_min_int } } diff --git a/macros/latex/contrib/l3kernel/l3str-convert.dtx b/macros/latex/contrib/l3kernel/l3str-convert.dtx index 6c0b2145e2..f4bfaf2c2c 100644 --- a/macros/latex/contrib/l3kernel/l3str-convert.dtx +++ b/macros/latex/contrib/l3kernel/l3str-convert.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % @@ -468,12 +468,12 @@ % an empty result for the input $-1$. % \begin{macrocode} \group_begin: - \__kernel_tl_set:Nx \l_@@_internal_tl { \tl_to_str:n { 0123456789ABCDEF } } + \__kernel_tl_set:Ne \l_@@_internal_tl { \tl_to_str:n { 0123456789ABCDEF } } \tl_map_inline:Nn \l_@@_internal_tl { \tl_map_inline:Nn \l_@@_internal_tl { - \tl_const:cx { c_@@_byte_ \int_eval:n {"#1##1} _tl } + \tl_const:ce { c_@@_byte_ \int_eval:n {"#1##1} _tl } { \char_generate:nn { "#1##1 } { 12 } #1 ##1 } } } @@ -554,7 +554,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_convert_gmap:N #1 { - \__kernel_tl_gset:Nx \g_@@_result_tl + \__kernel_tl_gset:Ne \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:Nx \g_@@_result_tl + \__kernel_tl_gset:Ne \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:nnx} -% \begin{macro}{\@@_if_flag_no_error:nnx} +% \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,16 +608,16 @@ % 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:nnx} into \cs{@@_if_flag_no_error:nnx} +% \cs{@@_if_flag_error:nne} into \cs{@@_if_flag_no_error:nne} % locally. % \begin{macrocode} -\cs_new_protected:Npn \@@_if_flag_error:nnx #1 +\cs_new_protected:Npn \@@_if_flag_error:nne #1 { \flag_if_raised:nTF {#1} - { \msg_error:nnx { str } } + { \msg_error:nne { str } } { \use_none:nn } } -\cs_new_protected:Npn \@@_if_flag_no_error:nnx #1#2#3 +\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} @@ -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:nnx} 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:nnx \@@_if_flag_no_error:nnx } + { \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:nnx \@@_if_flag_no_error:nnx } + { \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:Nx \g_@@_result_tl { \__kernel_str_to_other_fast:n {#4} } + \__kernel_tl_gset:Ne \g_@@_result_tl { \__kernel_str_to_other_fast:n {#4} } \exp_after:wN \@@_convert:wwwnn \tl_to_str:n {#5} /// \s_@@_stop { decode } { unescape } @@ -758,7 +758,7 @@ { \if_meaning:w #1 #5 \tl_if_empty:nF {#3} - { \msg_error:nnx { str } { native-escaping } {#3} } + { \msg_error:nne { str } { native-escaping } {#3} } #1 \else: #4 #2 #1 @@ -808,7 +808,7 @@ { \cs_if_exist:cF { @@_convert_#2_#3: } { - \exp_args:Nx \@@_convert:nnnn + \exp_args:Ne \@@_convert:nnnn { \@@_convert_lowercase_alphanum:n {#3} } {#1} {#2} {#3} } @@ -830,7 +830,7 @@ } { \tl_clear:N \l_@@_internal_tl - \msg_error:nnxx { str } { unknown-#2 } {#4} {#1} + \msg_error:nnee { str } { unknown-#2 } {#4} {#1} } } \cs_if_exist:cF { @@_convert_#3_#1: } @@ -936,9 +936,9 @@ \cs_new_protected:Npn \@@_convert_unescape_: { \flag_clear:n { str_byte } - \__kernel_tl_gset:Nx \g_@@_result_tl + \__kernel_tl_gset:Ne \g_@@_result_tl { \exp_args:No \@@_filter_bytes:n \g_@@_result_tl } - \@@_if_flag_error:nnx { str_byte } { non-byte } { bytes } + \@@_if_flag_error:nne { str_byte } { non-byte } { bytes } } } { \cs_new_protected:Npn \@@_convert_unescape_: { } } @@ -997,7 +997,7 @@ { \flag_clear:n { str_error } \@@_convert_gmap_internal:N \@@_encode_native_char:n - \@@_if_flag_error:nnx { str_error } + \@@_if_flag_error:nne { str_error } { native-overflow } { } } \cs_new:Npn \@@_encode_native_char:n #1 @@ -1032,7 +1032,7 @@ \cs_new_protected:Npn \@@_convert_decode_clist: { \clist_gset:No \g_@@_result_tl \g_@@_result_tl - \__kernel_tl_gset:Nx \g_@@_result_tl + \__kernel_tl_gset:Ne \g_@@_result_tl { \exp_args:No \clist_map_function:nN \g_@@_result_tl \@@_decode_clist_char:n @@ -1055,7 +1055,7 @@ \cs_new_protected:Npn \@@_convert_encode_clist: { \@@_convert_gmap_internal:N \@@_encode_clist_char:n - \__kernel_tl_gset:Nx \g_@@_result_tl { \tl_tail:N \g_@@_result_tl } + \__kernel_tl_gset:Ne \g_@@_result_tl { \tl_tail:N \g_@@_result_tl } } \cs_new:Npn \@@_encode_clist_char:n #1 { , #1 } % \end{macrocode} @@ -1179,14 +1179,14 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_convert_decode_eight_bit:n #1 { - \cs_set:Npx \@@_tmp:w + \cs_set:Npe \@@_tmp:w { \exp_not:N \@@_decode_eight_bit_aux:Nn \exp_not:c { g_@@_decode_#1_intarray } } \flag_clear:n { str_error } \@@_convert_gmap:N \@@_tmp:w - \@@_if_flag_error:nnx { str_error } { decode-8-bit } {#1} + \@@_if_flag_error:nne { str_error } { decode-8-bit } {#1} } \cs_new:Npn \@@_decode_eight_bit_aux:Nn #1#2 { @@ -1222,7 +1222,7 @@ \int_new:N \l_@@_modulo_int \cs_new_protected:Npn \@@_convert_encode_eight_bit:n #1 { - \cs_set:Npx \@@_tmp:w + \cs_set:Npe \@@_tmp:w { \exp_not:N \@@_encode_eight_bit_aux:NNn \exp_not:c { g_@@_encode_#1_intarray } @@ -1230,7 +1230,7 @@ } \flag_clear:n { str_error } \@@_convert_gmap_internal:N \@@_tmp:w - \@@_if_flag_error:nnx { str_error } { encode-8-bit } {#1} + \@@_if_flag_error:nne { str_error } { encode-8-bit } {#1} } \cs_new:Npn \@@_encode_eight_bit_aux:NNn #1#2#3 { @@ -1349,7 +1349,7 @@ \group_begin: \flag_clear:n { str_error } \int_set:Nn \tex_escapechar:D { 92 } - \__kernel_tl_gset:Nx \g_@@_result_tl + \__kernel_tl_gset:Ne \g_@@_result_tl { \@@_output_byte:w " \exp_last_unbraced:Nf \@@_unescape_hex_auxi:N @@ -1358,7 +1358,7 @@ \prg_break_point: \@@_output_end: } - \@@_if_flag_error:nnx { str_error } { unescape-hex } { } + \@@_if_flag_error:nne { str_error } { unescape-hex } { } \group_end: } \cs_new:Npn \@@_unescape_hex_auxi:N #1 @@ -1428,14 +1428,14 @@ \flag_clear:n { str_byte } \flag_clear:n { str_error } \int_set:Nn \tex_escapechar:D { 92 } - \__kernel_tl_gset:Nx \g_@@_result_tl + \__kernel_tl_gset:Ne \g_@@_result_tl { \exp_after:wN #3 \g_@@_result_tl #1 ? { ? \prg_break: } \prg_break_point: } - \@@_if_flag_error:nnx { str_byte } { non-byte } { #2 } - \@@_if_flag_error:nnx { str_error } { unescape-#2 } { } + \@@_if_flag_error:nne { str_byte } { non-byte } { #2 } + \@@_if_flag_error:nne { str_error } { unescape-#2 } { } \group_end: } \cs_new:Npn #3 ##1#1##2##3 @@ -1514,20 +1514,20 @@ \flag_clear:n { str_byte } \flag_clear:n { str_error } \int_set:Nn \tex_escapechar:D { 92 } - \__kernel_tl_gset:Nx \g_@@_result_tl + \__kernel_tl_gset:Ne \g_@@_result_tl { \exp_after:wN \@@_unescape_string_newlines:wN \g_@@_result_tl \prg_break: ^^M ? \prg_break_point: } - \__kernel_tl_gset:Nx \g_@@_result_tl + \__kernel_tl_gset:Ne \g_@@_result_tl { \exp_after:wN \@@_unescape_string_loop:wNNN \g_@@_result_tl #1 ?? { ? \prg_break: } \prg_break_point: } - \@@_if_flag_error:nnx { str_byte } { non-byte } { string } - \@@_if_flag_error:nnx { str_error } { unescape-string } { } + \@@_if_flag_error:nne { str_byte } { non-byte } { string } + \@@_if_flag_error:nne { str_error } { unescape-string } { } \group_end: } } @@ -1664,7 +1664,7 @@ % (and including) \texttt{del}, are converted to octal. One backslash % is added before each parenthesis and backslash. % \begin{macrocode} -\str_const:Nx \c_@@_escape_string_str +\str_const:Ne \c_@@_escape_string_str { \c_backslash_str ( ) } \cs_new_protected:Npn \@@_convert_escape_string: { \@@_convert_gmap:N \@@_escape_string_char:N } @@ -1973,13 +1973,13 @@ \flag_clear:n { str_extra } \flag_clear:n { str_overlong } \flag_clear:n { str_overflow } - \__kernel_tl_gset:Nx \g_@@_result_tl + \__kernel_tl_gset:Ne \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:nnx { str_error } { utf8-decode } { } + \@@_if_flag_error:nne { str_error } { utf8-decode } { } } \cs_new:Npn \@@_decode_utf_viii_start:N #1 { @@ -2109,7 +2109,7 @@ \cs_new_protected:cpn { @@_convert_encode_utf16: } { \@@_encode_utf_xvi_aux:N \@@_output_byte_pair_be:n - \tl_gput_left:Nx \g_@@_result_tl { ^^fe ^^ff } + \tl_gput_left:Ne \g_@@_result_tl { ^^fe ^^ff } } \cs_new_protected:cpn { @@_convert_encode_utf16be: } { \@@_encode_utf_xvi_aux:N \@@_output_byte_pair_be:n } @@ -2120,7 +2120,7 @@ \flag_clear:n { str_error } \cs_set_eq:NN \@@_tmp:w #1 \@@_convert_gmap_internal:N \@@_encode_utf_xvi_char:n - \@@_if_flag_error:nnx { str_error } { utf16-encode } { } + \@@_if_flag_error:nne { str_error } { utf16-encode } { } } \cs_new:Npn \@@_encode_utf_xvi_char:n #1 { @@ -2263,13 +2263,13 @@ \flag_clear:n { str_extra } \flag_clear:n { str_end } \cs_set:Npn \@@_tmp:w ##1 ##2 { ` ## #1 } - \__kernel_tl_gset:Nx \g_@@_result_tl + \__kernel_tl_gset:Ne \g_@@_result_tl { \exp_after:wN \@@_decode_utf_xvi_pair:NN #2 \q_@@_nil \q_@@_nil \prg_break_point: } - \@@_if_flag_error:nnx { str_error } { utf16-decode } { } + \@@_if_flag_error:nne { str_error } { utf16-decode } { } } % \end{macrocode} % \end{macro} @@ -2422,7 +2422,7 @@ \cs_new_protected:cpn { @@_convert_encode_utf32: } { \@@_convert_gmap_internal:N \@@_encode_utf_xxxii_be:n - \tl_gput_left:Nx \g_@@_result_tl { ^^00 ^^00 ^^fe ^^ff } + \tl_gput_left:Ne \g_@@_result_tl { ^^00 ^^00 ^^fe ^^ff } } \cs_new_protected:cpn { @@_convert_encode_utf32be: } { \@@_convert_gmap_internal:N \@@_encode_utf_xxxii_be:n } @@ -2551,13 +2551,13 @@ \flag_clear:n { str_end } \flag_clear:n { str_error } \cs_set:Npn \@@_tmp:w ##1 ##2 { ` ## #1 } - \__kernel_tl_gset:Nx \g_@@_result_tl + \__kernel_tl_gset:Ne \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:nnx { str_error } { utf32-decode } { } + \@@_if_flag_error:nne { str_error } { utf32-decode } { } } \cs_new:Npn \@@_decode_utf_xxxii_loop:NNNN #1#2#3#4 { @@ -2639,7 +2639,7 @@ } \cs_new:Npn \@@_convert_pdfname_bytes_aux:n #1 { \@@_convert_pdfname_bytes_aux:nnnn #1 } - \cs_new:Npx \@@_convert_pdfname_bytes_aux:nnnn #1#2#3#4 + \cs_new:Npe \@@_convert_pdfname_bytes_aux:nnnn #1#2#3#4 { \c_hash_str \exp_not:N \@@_output_hexadecimal:n {#1} \c_hash_str \exp_not:N \@@_output_hexadecimal:n {#2} diff --git a/macros/latex/contrib/l3kernel/l3str.dtx b/macros/latex/contrib/l3kernel/l3str.dtx index c2498436cb..300a779bd1 100644 --- a/macros/latex/contrib/l3kernel/l3str.dtx +++ b/macros/latex/contrib/l3kernel/l3str.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % @@ -108,8 +108,8 @@ % % \begin{function}[added = 2015-09-18, updated = 2018-07-28] % { -% \str_const:Nn, \str_const:NV, \str_const:Nx, -% \str_const:cn, \str_const:cV, \str_const:cx +% \str_const:Nn, \str_const:NV, \str_const:Ne, +% \str_const:cn, \str_const:cV, \str_const:ce % } % \begin{syntax} % \cs{str_const:Nn} \meta{str~var} \Arg{token list} @@ -178,10 +178,10 @@ % % \begin{function}[added = 2015-09-18, updated = 2018-07-28] % { -% \str_set:Nn, \str_set:NV, \str_set:Nx, -% \str_set:cn, \str_set:cV, \str_set:cx, -% \str_gset:Nn, \str_gset:NV, \str_gset:Nx, -% \str_gset:cn, \str_gset:cV, \str_gset:cx +% \str_set:Nn, \str_set:NV, \str_set:Ne, +% \str_set:cn, \str_set:cV, \str_set:ce, +% \str_gset:Nn, \str_gset:NV, \str_gset:Ne, +% \str_gset:cn, \str_gset:cV, \str_gset:ce % } % \begin{syntax} % \cs{str_set:Nn} \meta{str var} \Arg{token list} @@ -192,10 +192,10 @@ % % \begin{function}[added = 2015-09-18, updated = 2018-07-28] % { -% \str_put_left:Nn, \str_put_left:NV, \str_put_left:Nx, -% \str_put_left:cn, \str_put_left:cV, \str_put_left:cx, -% \str_gput_left:Nn, \str_gput_left:NV, \str_gput_left:Nx, -% \str_gput_left:cn, \str_gput_left:cV, \str_gput_left:cx +% \str_put_left:Nn, \str_put_left:NV, \str_put_left:Ne, +% \str_put_left:cn, \str_put_left:cV, \str_put_left:ce, +% \str_gput_left:Nn, \str_gput_left:NV, \str_gput_left:Ne, +% \str_gput_left:cn, \str_gput_left:cV, \str_gput_left:ce % } % \begin{syntax} % \cs{str_put_left:Nn} \meta{str var} \Arg{token list} @@ -207,10 +207,10 @@ % % \begin{function}[added = 2015-09-18, updated = 2018-07-28] % { -% \str_put_right:Nn, \str_put_right:NV, \str_put_right:Nx, -% \str_put_right:cn, \str_put_right:cV, \str_put_right:cx, -% \str_gput_right:Nn, \str_gput_right:NV, \str_gput_right:Nx, -% \str_gput_right:cn, \str_gput_right:cV, \str_gput_right:cx +% \str_put_right:Nn, \str_put_right:NV, \str_put_right:Ne, +% \str_put_right:cn, \str_put_right:cV, \str_put_right:Ne, +% \str_gput_right:Nn, \str_gput_right:NV, \str_gput_right:Ne, +% \str_gput_right:cn, \str_gput_right:cV, \str_gput_right:ce % } % \begin{syntax} % \cs{str_put_right:Nn} \meta{str var} \Arg{token list} @@ -595,18 +595,18 @@ % at positions $s$ for $s\le0$ or $s>l$. % For instance, % \begin{verbatim} -% \iow_term:x { \str_range:nnn { abcdef } { 2 } { 5 } } -% \iow_term:x { \str_range:nnn { abcdef } { -4 } { -1 } } -% \iow_term:x { \str_range:nnn { abcdef } { -2 } { -1 } } -% \iow_term:x { \str_range:nnn { abcdef } { 0 } { -1 } } +% \iow_term:e { \str_range:nnn { abcdef } { 2 } { 5 } } +% \iow_term:e { \str_range:nnn { abcdef } { -4 } { -1 } } +% \iow_term:e { \str_range:nnn { abcdef } { -2 } { -1 } } +% \iow_term:e { \str_range:nnn { abcdef } { 0 } { -1 } } % \end{verbatim} % prints \texttt{bcde}, \texttt{cdef}, \texttt{ef}, and an empty % line to the terminal. The \meta{start index} must always be smaller than % or equal to the \meta{end index}: if this is not the case then no output % is generated. Thus % \begin{verbatim} -% \iow_term:x { \str_range:nnn { abcdef } { 5 } { 2 } } -% \iow_term:x { \str_range:nnn { abcdef } { -1 } { -4 } } +% \iow_term:e { \str_range:nnn { abcdef } { 5 } { 2 } } +% \iow_term:e { \str_range:nnn { abcdef } { -1 } { -4 } } % \end{verbatim} % both yield empty strings. % \end{function} @@ -617,25 +617,25 @@ % The behavior of \cs{str_range_ignore_spaces:nnn} is similar, but spaces % are removed before starting the job. The input % \begin{verbatim} -% \iow_term:x { \str_range:nnn { abcdefg } { 2 } { 5 } } -% \iow_term:x { \str_range:nnn { abcdefg } { 2 } { -3 } } -% \iow_term:x { \str_range:nnn { abcdefg } { -6 } { 5 } } -% \iow_term:x { \str_range:nnn { abcdefg } { -6 } { -3 } } -% -% \iow_term:x { \str_range:nnn { abc~efg } { 2 } { 5 } } -% \iow_term:x { \str_range:nnn { abc~efg } { 2 } { -3 } } -% \iow_term:x { \str_range:nnn { abc~efg } { -6 } { 5 } } -% \iow_term:x { \str_range:nnn { abc~efg } { -6 } { -3 } } -% -% \iow_term:x { \str_range_ignore_spaces:nnn { abcdefg } { 2 } { 5 } } -% \iow_term:x { \str_range_ignore_spaces:nnn { abcdefg } { 2 } { -3 } } -% \iow_term:x { \str_range_ignore_spaces:nnn { abcdefg } { -6 } { 5 } } -% \iow_term:x { \str_range_ignore_spaces:nnn { abcdefg } { -6 } { -3 } } -% -% \iow_term:x { \str_range_ignore_spaces:nnn { abcd~efg } { 2 } { 5 } } -% \iow_term:x { \str_range_ignore_spaces:nnn { abcd~efg } { 2 } { -3 } } -% \iow_term:x { \str_range_ignore_spaces:nnn { abcd~efg } { -6 } { 5 } } -% \iow_term:x { \str_range_ignore_spaces:nnn { abcd~efg } { -6 } { -3 } } +% \iow_term:e { \str_range:nnn { abcdefg } { 2 } { 5 } } +% \iow_term:e { \str_range:nnn { abcdefg } { 2 } { -3 } } +% \iow_term:e { \str_range:nnn { abcdefg } { -6 } { 5 } } +% \iow_term:e { \str_range:nnn { abcdefg } { -6 } { -3 } } +% +% \iow_term:e { \str_range:nnn { abc~efg } { 2 } { 5 } } +% \iow_term:e { \str_range:nnn { abc~efg } { 2 } { -3 } } +% \iow_term:e { \str_range:nnn { abc~efg } { -6 } { 5 } } +% \iow_term:e { \str_range:nnn { abc~efg } { -6 } { -3 } } +% +% \iow_term:e { \str_range_ignore_spaces:nnn { abcdefg } { 2 } { 5 } } +% \iow_term:e { \str_range_ignore_spaces:nnn { abcdefg } { 2 } { -3 } } +% \iow_term:e { \str_range_ignore_spaces:nnn { abcdefg } { -6 } { 5 } } +% \iow_term:e { \str_range_ignore_spaces:nnn { abcdefg } { -6 } { -3 } } +% +% \iow_term:e { \str_range_ignore_spaces:nnn { abcd~efg } { 2 } { 5 } } +% \iow_term:e { \str_range_ignore_spaces:nnn { abcd~efg } { 2 } { -3 } } +% \iow_term:e { \str_range_ignore_spaces:nnn { abcd~efg } { -6 } { 5 } } +% \iow_term:e { \str_range_ignore_spaces:nnn { abcd~efg } { -6 } { -3 } } % \end{verbatim} % will print four instances of |bcde|, four instances of |bc e| and eight % instances of |bcde|. @@ -973,20 +973,20 @@ % % \begin{macro} % { -% \str_set:Nn, \str_set:NV, \str_set:Nx, -% \str_set:cn, \str_set:cV, \str_set:cx, -% \str_gset:Nn, \str_gset:NV, \str_gset:Nx, -% \str_gset:cn, \str_gset:cV, \str_gset:cx, -% \str_const:Nn, \str_const:NV, \str_const:Nx, -% \str_const:cn, \str_const:cV, \str_const:cx, -% \str_put_left:Nn, \str_put_left:NV, \str_put_left:Nx, -% \str_put_left:cn, \str_put_left:cV, \str_put_left:cx, -% \str_gput_left:Nn, \str_gput_left:NV, \str_gput_left:Nx, -% \str_gput_left:cn, \str_gput_left:cV, \str_gput_left:cx, -% \str_put_right:Nn, \str_put_right:NV, \str_put_right:Nx, -% \str_put_right:cn, \str_put_right:cV, \str_put_right:cx, -% \str_gput_right:Nn, \str_gput_right:NV, \str_gput_right:Nx, -% \str_gput_right:cn, \str_gput_right:cV, \str_gput_right:cx +% \str_set:Nn, \str_set:NV, \str_set:Ne, \str_set:Nx, +% \str_set:cn, \str_set:cV, \str_set:ce, \str_set:cx, +% \str_gset:Nn, \str_gset:NV, \str_gset:Ne, \str_gset:Nx, +% \str_gset:cn, \str_gset:cV, \str_gset:ce, \str_gset:cx, +% \str_const:Nn, \str_const:NV, \str_const:Ne, \str_const:Nx, +% \str_const:cn, \str_const:cV, \str_const:ce, \str_const:cx, +% \str_put_left:Nn, \str_put_left:NV, \str_put_left:Ne, \str_put_left:Nx, +% \str_put_left:cn, \str_put_left:cV, \str_put_left:ce, \str_put_left:cx, +% \str_gput_left:Nn, \str_gput_left:NV, \str_gput_left:Ne, \str_gput_left:Nx, +% \str_gput_left:cn, \str_gput_left:cV, \str_gput_left:ce, \str_gput_left:cx, +% \str_put_right:Nn, \str_put_right:NV, \str_put_right:Ne, \str_put_right:Nx, +% \str_put_right:cn, \str_put_right:cV, \str_put_right:ce, \str_put_right:cx, +% \str_gput_right:Nn, \str_gput_right:NV, \str_gput_right:Ne, \str_gput_right:Nx, +% \str_gput_right:cn, \str_gput_right:cV, \str_gput_right:ce, \str_gput_right:cx % } % Simply convert the token list inputs to \meta{strings}. % \begin{macrocode} @@ -995,12 +995,13 @@ { \tl_if_blank:nF {#1} { - \cs_new_protected:cpx { str_ #1 :Nn } ##1##2 + \cs_new_protected:cpe { str_ #1 :Nn } ##1##2 { - \exp_not:c { tl_ #1 :Nx } ##1 + \exp_not:c { tl_ #1 :Ne } ##1 { \exp_not:N \tl_to_str:n {##2} } } - \cs_generate_variant:cn { str_ #1 :Nn } { NV , Nx , cn , cV , cx } + \cs_generate_variant:cn { str_ #1 :Nn } + { NV , Ne , Nx , cn , cV , ce , cx } \@@_tmp:n } } @@ -1041,13 +1042,13 @@ % hide in braces. % \begin{macrocode} \cs_new_protected:Npn \str_replace_once:Nnn - { \@@_replace:NNNnn \prg_do_nothing: \__kernel_tl_set:Nx } + { \@@_replace:NNNnn \prg_do_nothing: \__kernel_tl_set:Ne } \cs_new_protected:Npn \str_greplace_once:Nnn - { \@@_replace:NNNnn \prg_do_nothing: \__kernel_tl_gset:Nx } + { \@@_replace:NNNnn \prg_do_nothing: \__kernel_tl_gset:Ne } \cs_new_protected:Npn \str_replace_all:Nnn - { \@@_replace:NNNnn \@@_replace_next:w \__kernel_tl_set:Nx } + { \@@_replace:NNNnn \@@_replace_next:w \__kernel_tl_set:Ne } \cs_new_protected:Npn \str_greplace_all:Nnn - { \@@_replace:NNNnn \@@_replace_next:w \__kernel_tl_gset:Nx } + { \@@_replace:NNNnn \@@_replace_next:w \__kernel_tl_gset:Ne } \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 } @@ -1056,10 +1057,10 @@ { \tl_if_empty:nTF {#4} { - \msg_error:nnx { kernel } { empty-search-pattern } {#5} + \msg_error:nne { kernel } { empty-search-pattern } {#5} } { - \use:x + \use:e { \exp_not:n { \@@_replace_aux:NNNnnn #1 #2 #3 } { \tl_to_str:N #3 } @@ -1215,7 +1216,7 @@ % \begin{macrocode} \prg_new_protected_conditional:Npnn \str_if_in:Nn #1#2 { T , F , TF } { - \use:x + \use:e { \tl_if_in:nnTF { \tl_to_str:N #1 } { \tl_to_str:n {#2} } } { \prg_return_true: } { \prg_return_false: } } @@ -1223,7 +1224,7 @@ { c } { T , F , TF } \prg_new_protected_conditional:Npnn \str_if_in:nn #1#2 { T , F , TF } { - \use:x + \use:e { \tl_if_in:nnTF { \tl_to_str:n {#1} } { \tl_to_str:n {#2} } } { \prg_return_true: } { \prg_return_false: } } @@ -1369,7 +1370,7 @@ \int_gincr:N \g__kernel_prg_map_int \cs_gset_protected:cpn { @@_map_ \int_use:N \g__kernel_prg_map_int :w } ##1 {#2} - \use:x + \use:e { \exp_not:N \@@_map_inline:NN \exp_not:c { @@_map_ \int_use:N \g__kernel_prg_map_int :w } @@ -1390,7 +1391,7 @@ } \cs_new_protected:Npn \str_map_variable:nNn #1#2#3 { - \use:x + \use:e { \exp_not:n { \@@_map_variable:NnN #2 {#3} } \__kernel_str_to_other_fast:n {#1} @@ -1992,7 +1993,7 @@ \cs_new:Npn \@@_change_case_codepoint:nN #1#2 { \@@_change_case_char:fnn { \int_eval:n {`#2} } {#1} {#2} } \else: - \cs_new:Npx \@@_change_case_codepoint:nN #1#2 + \cs_new:Npe \@@_change_case_codepoint:nN #1#2 { \exp_not:N \int_compare:nNnTF {`#2} > { "80 } { @@ -2121,19 +2122,19 @@ % For all of those strings, use \cs{cs_to_str:N} to get characters with % the correct category code without worries % \begin{macrocode} -\str_const:Nx \c_ampersand_str { \cs_to_str:N \& } -\str_const:Nx \c_atsign_str { \cs_to_str:N \@ } -\str_const:Nx \c_backslash_str { \cs_to_str:N \\ } -\str_const:Nx \c_left_brace_str { \cs_to_str:N \{ } -\str_const:Nx \c_right_brace_str { \cs_to_str:N \} } -\str_const:Nx \c_circumflex_str { \cs_to_str:N \^ } -\str_const:Nx \c_colon_str { \cs_to_str:N \: } -\str_const:Nx \c_dollar_str { \cs_to_str:N \$ } -\str_const:Nx \c_hash_str { \cs_to_str:N \# } -\str_const:Nx \c_percent_str { \cs_to_str:N \% } -\str_const:Nx \c_tilde_str { \cs_to_str:N \~ } -\str_const:Nx \c_underscore_str { \cs_to_str:N \_ } -\str_const:Nx \c_zero_str { 0 } +\str_const:Ne \c_ampersand_str { \cs_to_str:N \& } +\str_const:Ne \c_atsign_str { \cs_to_str:N \@ } +\str_const:Ne \c_backslash_str { \cs_to_str:N \\ } +\str_const:Ne \c_left_brace_str { \cs_to_str:N \{ } +\str_const:Ne \c_right_brace_str { \cs_to_str:N \} } +\str_const:Ne \c_circumflex_str { \cs_to_str:N \^ } +\str_const:Ne \c_colon_str { \cs_to_str:N \: } +\str_const:Ne \c_dollar_str { \cs_to_str:N \$ } +\str_const:Ne \c_hash_str { \cs_to_str:N \# } +\str_const:Ne \c_percent_str { \cs_to_str:N \% } +\str_const:Ne \c_tilde_str { \cs_to_str:N \~ } +\str_const:Ne \c_underscore_str { \cs_to_str:N \_ } +\str_const:Ne \c_zero_str { 0 } % \end{macrocode} % \end{variable} % diff --git a/macros/latex/contrib/l3kernel/l3styleguide.pdf b/macros/latex/contrib/l3kernel/l3styleguide.pdf Binary files differindex c3025741c6..16d307e028 100644 --- a/macros/latex/contrib/l3kernel/l3styleguide.pdf +++ b/macros/latex/contrib/l3kernel/l3styleguide.pdf diff --git a/macros/latex/contrib/l3kernel/l3styleguide.tex b/macros/latex/contrib/l3kernel/l3styleguide.tex index d241392fb9..29c2f76864 100644 --- a/macros/latex/contrib/l3kernel/l3styleguide.tex +++ b/macros/latex/contrib/l3kernel/l3styleguide.tex @@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN. {latex-team@latex-project.org}% }% } -\date{Released 2023-08-29} +\date{Released 2023-10-10} \begin{document} diff --git a/macros/latex/contrib/l3kernel/l3syntax-changes.pdf b/macros/latex/contrib/l3kernel/l3syntax-changes.pdf Binary files differindex ebc9bcab2a..5c4fe8ad1d 100644 --- a/macros/latex/contrib/l3kernel/l3syntax-changes.pdf +++ b/macros/latex/contrib/l3kernel/l3syntax-changes.pdf diff --git a/macros/latex/contrib/l3kernel/l3syntax-changes.tex b/macros/latex/contrib/l3kernel/l3syntax-changes.tex index 42e1b4c263..dbb6d858b4 100644 --- a/macros/latex/contrib/l3kernel/l3syntax-changes.tex +++ b/macros/latex/contrib/l3kernel/l3syntax-changes.tex @@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN. {latex-team@latex-project.org}% }% } -\date{Released 2023-08-29} +\date{Released 2023-10-10} \newcommand{\TF}{\textit{(TF)}} diff --git a/macros/latex/contrib/l3kernel/l3sys.dtx b/macros/latex/contrib/l3kernel/l3sys.dtx index 5717e60e73..5e57590767 100644 --- a/macros/latex/contrib/l3kernel/l3sys.dtx +++ b/macros/latex/contrib/l3kernel/l3sys.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % @@ -148,7 +148,7 @@ % where the |u| part is only present for \upTeX{}. % \end{variable} % -% \begin{function}[added = 2020-09-24, EXP]{\sys_timer:} +% \begin{function}[added = 2021-05-12, EXP]{\sys_timer:} % \begin{syntax} % \cs{sys_timer:} % \end{syntax} @@ -159,6 +159,14 @@ % scaled seconds ($2^{-16}$ seconds). % \end{function} % +% \begin{function}[added = 2021-05-12, EXP, pTF]{\sys_if_timer_exist:} +% \begin{syntax} +% \cs{sys_if_timer_exist_p:} +% \cs{sys_if_timer_exist:TF} \Arg{true code} \Arg{false code} +% \end{syntax} +% Tests whether current engine has timer support. +% \end{function} +% % \section{Output format} % % \begin{function}[added = 2015-09-19, EXP, pTF] @@ -249,8 +257,8 @@ % \cs{q_no_value} in the non-branching version. % Note that quote characters (|"|) \emph{cannot} be used inside the % \meta{shell command}. The \cs{sys_get_shell:nnNTF} conditional -% inserts the \texttt{true code} if the shell is available and no quote is -% detected, and the \texttt{false code} otherwise. +% inserts the \meta{true code} if the shell is available and no quote is +% detected, and the \meta{false code} otherwise. % \end{function} % % \begin{variable}[added = 2017-05-27]{\c_sys_shell_escape_int} @@ -294,14 +302,16 @@ % shell escape is enabled use \cs{sys_if_shell:}. % \end{function} % -% \begin{function}[added = 2017-05-27]{\sys_shell_now:n, \sys_shell_now:x} +% \begin{function}[added = 2017-05-27] +% {\sys_shell_now:n, \sys_shell_now:e} % \begin{syntax} % \cs{sys_shell_now:n} \Arg{tokens} % \end{syntax} % Execute \meta{tokens} through shell escape immediately. % \end{function} % -% \begin{function}[added = 2017-05-27]{\sys_shell_shipout:n, \sys_shell_shipout:x} +% \begin{function}[added = 2017-05-27] +% {\sys_shell_shipout:n, \sys_shell_shipout:e} % \begin{syntax} % \cs{sys_shell_shipout:n} \Arg{tokens} % \end{syntax} @@ -411,7 +421,7 @@ % Set up the engine tests on the basis exactly one test should be true. % Mainly a case of looking for the appropriate marker primitive. % \begin{macrocode} -\str_const:Nx \c_sys_engine_str +\str_const:Ne \c_sys_engine_str { \cs_if_exist:NT \tex_luatexversion:D { luatex } \cs_if_exist:NT \tex_pdftexversion:D { pdftex } @@ -448,7 +458,7 @@ % \begin{macrocode} \group_begin: \cs_set_eq:NN \lua_now:e \tex_directlua:D - \str_const:Nx \c_sys_engine_exec_str + \str_const:Ne \c_sys_engine_exec_str { \sys_if_engine_pdftex:T { pdf } \sys_if_engine_xetex:T { xe } @@ -466,7 +476,7 @@ tex } \group_end: -\str_const:Nx \c_sys_engine_format_str +\str_const:Ne \c_sys_engine_format_str { \cs_if_exist:NTF \fmtname { @@ -505,7 +515,7 @@ % Various different engines, various different ways to extract the % data! % \begin{macrocode} -\str_const:Nx \c_sys_engine_version_str +\str_const:Ne \c_sys_engine_version_str { \str_case:on \c_sys_engine_str { @@ -594,7 +604,7 @@ \tl_if_blank:nF {#1} { \tl_gset:Nn \g_@@_backend_tl {#1} } \@@_load_backend_check:N \g_@@_backend_tl - \str_const:Nx \c_sys_backend_str { \g_@@_backend_tl } + \str_const:Ne \c_sys_backend_str { \g_@@_backend_tl } \__kernel_sys_configuration_load:n { l3backend- \c_sys_backend_str } } @@ -610,7 +620,7 @@ { xetex } { } } { - \msg_error:nnxx { sys } { wrong-backend } + \msg_error:nnee { sys } { wrong-backend } #1 { xetex } \tl_gset:Nn #1 { xetex } } @@ -629,7 +639,7 @@ { \str_if_eq_p:Vn #1 { luatex } } { \str_if_eq_p:Vn #1 { pdftex } } { - \msg_error:nnxx { sys } { wrong-backend } + \msg_error:nnee { sys } { wrong-backend } #1 { \sys_if_engine_luatex:TF { luatex } { pdftex } } \sys_if_engine_luatex:TF { \tl_gset:Nn #1 { luatex } } @@ -645,7 +655,7 @@ { dvisvgm } { } } { - \msg_error:nnxx { sys } { wrong-backend } + \msg_error:nnee { sys } { wrong-backend } #1 { dvips } \tl_gset:Nn #1 { dvips } } @@ -697,7 +707,7 @@ % \begin{variable}{\c_@@_marker_tl} % The same idea as the marker for rescanning token lists. % \begin{macrocode} -\tl_const:Nx \c_@@_marker_tl { : \token_to_str:N : } +\tl_const:Ne \c_@@_marker_tl { : \token_to_str:N : } % \end{macrocode} % \end{variable} % @@ -721,7 +731,7 @@ { \tl_if_in:nnTF {#1} { " } { - \msg_error:nnx + \msg_error:nne { kernel } { quote-in-shell } {#1} \prg_return_false: } @@ -759,7 +769,7 @@ % \end{macrocode} % \end{variable} % -% \begin{macro}{\sys_shell_now:n} +% \begin{macro}{\sys_shell_now:n, \sys_shell_now:e, \sys_shell_now:x} % \begin{macro}{\@@_shell_now:e} % Execute commands through shell escape immediately. % @@ -797,13 +807,13 @@ do \cs_new_protected:Npn \sys_shell_now:n #1 { \iow_now:Nn \c_@@_shell_stream_int {#1} } } -\cs_generate_variant:Nn \sys_shell_now:n { x } +\cs_generate_variant:Nn \sys_shell_now:n { e, x } %</tex> % \end{macrocode} % \end{macro} % \end{macro} % -% \begin{macro}{\sys_shell_shipout:n} +% \begin{macro}{\sys_shell_shipout:n, \sys_shell_shipout:e, \sys_shell_shipout:x} % \begin{macro}{\@@_shell_shipout:e} % Execute commands through shell escape at shipout. % @@ -843,7 +853,7 @@ end \cs_new_protected:Npn \sys_shell_shipout:n #1 { \iow_shipout:Nn \c_@@_shell_stream_int {#1} } } -\cs_generate_variant:Nn \sys_shell_shipout:n { x } +\cs_generate_variant:Nn \sys_shell_shipout:n { e , x } % \end{macrocode} % \end{macro} % \end{macro} @@ -940,7 +950,7 @@ end % \begin{macrocode} \@@_everyjob:n { - \str_const:Nx \c_sys_timestamp_str + \str_const:Ne \c_sys_timestamp_str { \cs_if_exist:NTF \tex_directlua:D { \tex_directlua:D { tex.print(pdf.getcreationdate()) } } @@ -1101,7 +1111,7 @@ end % \begin{macrocode} \@@_finalise:n { - \str_const:Nx \c_sys_output_str + \str_const:Ne \c_sys_output_str { \int_compare:nNnTF { \cs_if_exist_use:NF \tex_pdfoutput:D { 0 } } > { 0 } @@ -1126,7 +1136,7 @@ end \tl_new:N \g_@@_backend_tl \@@_finalise:n { - \__kernel_tl_gset:Nx \g_@@_backend_tl + \__kernel_tl_gset:Ne \g_@@_backend_tl { \sys_if_engine_xetex:TF { xetex } diff --git a/macros/latex/contrib/l3kernel/l3term-glossary.pdf b/macros/latex/contrib/l3kernel/l3term-glossary.pdf Binary files differindex c34ddb6bd8..ebe1f75c91 100644 --- a/macros/latex/contrib/l3kernel/l3term-glossary.pdf +++ b/macros/latex/contrib/l3kernel/l3term-glossary.pdf diff --git a/macros/latex/contrib/l3kernel/l3term-glossary.tex b/macros/latex/contrib/l3kernel/l3term-glossary.tex index e0a5780cb8..bd166834ac 100644 --- a/macros/latex/contrib/l3kernel/l3term-glossary.tex +++ b/macros/latex/contrib/l3kernel/l3term-glossary.tex @@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN. {latex-team@latex-project.org}% }% } -\date{Released 2023-08-29} +\date{Released 2023-10-10} \newcommand{\TF}{\textit{(TF)}} diff --git a/macros/latex/contrib/l3kernel/l3text-case.dtx b/macros/latex/contrib/l3kernel/l3text-case.dtx index 07a79e2bb0..0e20a797f0 100644 --- a/macros/latex/contrib/l3kernel/l3text-case.dtx +++ b/macros/latex/contrib/l3kernel/l3text-case.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % @@ -243,15 +243,15 @@ } \cs_new:Npn \@@_change_case_auxi:nnn #1#2#3 { \exp_args:No \@@_change_case_BCP:nnn { \tl_to_str:n {#3} } {#1} {#2} } -\cs_new:Npx \@@_change_case_BCP:nnn #1#2#3 +\cs_new:Npe \@@_change_case_BCP:nnn #1#2#3 { \exp_not:N \@@_change_case_BCP:nnw {#2} {#3} #1 \tl_to_str:n { -x- -x- } \exp_not:N \q_@@_stop } -\use:x +\use:e { \cs_new:Npn \exp_not:N \@@_change_case_BCP:nnw - ##1##2##3 \tl_to_str:n { -x- } ##4 \tl_to_str:n { -x- } ##5 + #1#2#3 \tl_to_str:n { -x- } #4 \tl_to_str:n { -x- } #5 \exp_not:N \q_@@_stop } { \@@_change_case_BCP:nnnnw {#1} {#2} {#4} {#3} #3 - - \q_@@_stop } @@ -353,9 +353,9 @@ } \@@_change_case_break:w } -\use:x +\use:e { - \cs_new:Npn \exp_not:N \@@_change_case_space:nnw ##1##2 \c_space_tl + \cs_new:Npn \exp_not:N \@@_change_case_space:nnw #1#2 \c_space_tl } { \@@_change_case_store:n { ~ } @@ -427,9 +427,9 @@ \@@_change_case_store:n { {#4} } \@@_change_case_math_loop:nnNw {#1} {#2} #3 } -\use:x +\use:e { - \cs_new:Npn \exp_not:N \@@_change_case_math_space:nnNw ##1##2##3 + \cs_new:Npn \exp_not:N \@@_change_case_math_space:nnNw #1#2#3 \c_space_tl } { diff --git a/macros/latex/contrib/l3kernel/l3text-map.dtx b/macros/latex/contrib/l3kernel/l3text-map.dtx index b2372d446f..8b3ac6098c 100644 --- a/macros/latex/contrib/l3kernel/l3text-map.dtx +++ b/macros/latex/contrib/l3kernel/l3text-map.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % @@ -168,8 +168,8 @@ } \@@_map_loop:Nnw #1 { } } -\use:x - { \cs_new:Npn \exp_not:N \@@_map_space:Nnw ##1##2 \c_space_tl } +\use:e + { \cs_new:Npn \exp_not:N \@@_map_space:Nnw #1#2 \c_space_tl } { \@@_map_output:Nn #1 {#2} #1 { ~ } diff --git a/macros/latex/contrib/l3kernel/l3text-purify.dtx b/macros/latex/contrib/l3kernel/l3text-purify.dtx index 35d180d042..075b370737 100644 --- a/macros/latex/contrib/l3kernel/l3text-purify.dtx +++ b/macros/latex/contrib/l3kernel/l3text-purify.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % @@ -349,7 +349,7 @@ % \begin{macro} % { % \text_declare_purify_equivalent:Nn, -% \text_declare_purify_equivalent:Nx +% \text_declare_purify_equivalent:Ne % } % \begin{macrocode} \cs_new_protected:Npn \text_declare_purify_equivalent:Nn #1#2 @@ -357,7 +357,7 @@ \tl_clear_new:c { l_@@_purify_ \token_to_str:N #1 _tl } \tl_set:cn { l_@@_purify_ \token_to_str:N #1 _tl } {#2} } -\cs_generate_variant:Nn \text_declare_purify_equivalent:Nn { Nx } +\cs_generate_variant:Nn \text_declare_purify_equivalent:Nn { Ne } % \end{macrocode} % \end{macro} % @@ -436,7 +436,7 @@ \text_declare_purify_equivalent:Nn \\ { } \tl_map_inline:nn { \{ \} \# \$ \% \_ } - { \text_declare_purify_equivalent:Nx #1 { \cs_to_str:N #1 } } + { \text_declare_purify_equivalent:Ne #1 { \cs_to_str:N #1 } } % \end{macrocode} % Cross-referencing. % \begin{macrocode} @@ -449,7 +449,7 @@ \use:n { \group_end: - \text_declare_purify_equivalent:Nx ~ { \c_space_tl } + \text_declare_purify_equivalent:Ne ~ { \c_space_tl } } \text_declare_purify_equivalent:Nn \nobreakspace { ~ } \text_declare_purify_equivalent:Nn \ { ~ } @@ -471,7 +471,7 @@ \cs_set_protected:Npn \@@_loop:Nn #1#2 { \quark_if_recursion_tail_stop:N #1 - \text_declare_purify_equivalent:Nx #1 + \text_declare_purify_equivalent:Ne #1 { \codepoint_generate:nn {"#2} { \char_value_catcode:n {"#2} } @@ -535,7 +535,7 @@ \cs_set_protected:Npn \@@_loop:Nn #1#2 { \quark_if_recursion_tail_stop:N #1 - \tl_const:cx { c_@@_purify_ \token_to_str:N #1 _tl } + \tl_const:ce { c_@@_purify_ \token_to_str:N #1 _tl } { \codepoint_generate:nn {"#2} { \char_value_catcode:n { "#2 } } } \@@_loop:Nn } @@ -569,7 +569,7 @@ \cs_set_protected:Npn \@@_loop:NNn #1#2#3 { \quark_if_recursion_tail_stop:N #1 - \tl_const:cx + \tl_const:ce { c_@@_purify_ \token_to_str:N #1 _ \token_to_str:N #2 _tl } { \codepoint_generate:nn {"#3} { \char_value_catcode:n { "#3 } } } \@@_loop:NNn diff --git a/macros/latex/contrib/l3kernel/l3text.dtx b/macros/latex/contrib/l3kernel/l3text.dtx index 016c5579a1..8df534cc84 100644 --- a/macros/latex/contrib/l3kernel/l3text.dtx +++ b/macros/latex/contrib/l3kernel/l3text.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % @@ -268,7 +268,7 @@ % \begin{function}[added = 2020-03-05] % { % \text_declare_purify_equivalent:Nn , -% \text_declare_purify_equivalent:Nx +% \text_declare_purify_equivalent:Ne % } % \begin{syntax} % \cs{text_declare_purify_equivalent:Nn} \meta{cmd} \Arg{replacement} @@ -673,7 +673,7 @@ \cs_new:Npn \@@_codepoint_process:nN #1#2 { #1 {#2} } } { - \cs_new:Npx \@@_codepoint_process:nN #1#2 + \cs_new:Npe \@@_codepoint_process:nN #1#2 { \exp_not:N \int_compare:nNnTF {`#2} > { "80 } { @@ -742,7 +742,7 @@ #2 {#3} \prg_return_true: \prg_return_false: } - \cs_new:Npx \@@_codepoint_from_chars:Nw #1 + \cs_new:Npe \@@_codepoint_from_chars:Nw #1 { \exp_not:N \if_int_compare:w `#1 > "80 \exp_not:N \exp_stop_f: \sys_if_engine_pdftex:TF @@ -817,7 +817,7 @@ % applied to \cs{cite}. % \begin{macrocode} \tl_new:N \l_text_case_exclude_arg_tl -\tl_set:Nx \l_text_case_exclude_arg_tl +\tl_set:Ne \l_text_case_exclude_arg_tl { \exp_not:n { \begin \cite \end \label \ref } \exp_not:c { cite ~ } @@ -1230,7 +1230,7 @@ % token. There is also the case of a straight \tn{@protected@testopt} to % cover. % \begin{macrocode} -\cs_new:Npx \@@_expand_cs:N #1 +\cs_new:Npe \@@_expand_cs:N #1 { \exp_not:N \str_if_eq:nnTF {#1} { \exp_not:N \protect } { \exp_not:N \@@_expand_protect:w } diff --git a/macros/latex/contrib/l3kernel/l3tl-analysis.dtx b/macros/latex/contrib/l3kernel/l3tl-analysis.dtx index 385b3db8ac..9cadf04e87 100644 --- a/macros/latex/contrib/l3kernel/l3tl-analysis.dtx +++ b/macros/latex/contrib/l3kernel/l3tl-analysis.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % @@ -233,7 +233,7 @@ % \begin{macrocode} \group_begin: \char_set_active_eq:NN \ \scan_stop: -\tl_const:Nx \c_@@_peek_catcodes_tl +\tl_const:Ne \c_@@_peek_catcodes_tl { \char_generate:nn { 32 } { 3 } 3 \char_generate:nn { 32 } { 4 } 4 @@ -773,7 +773,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_analysis_b:n #1 { - \__kernel_tl_gset:Nx \g_@@_analysis_result_tl + \__kernel_tl_gset:Ne \g_@@_analysis_result_tl { \@@_analysis_b_loop:w 0; #1 \prg_break_point: @@ -837,7 +837,7 @@ % in the input stream, and call \cs{@@_analysis_b_normals:ww} % with its first argument decremented. % \begin{macrocode} -\cs_new:Npx \@@_analysis_b_char:Nn #1#2 +\cs_new:Npe \@@_analysis_b_char:Nn #1#2 { \exp_not:N \if_meaning:w #2 \exp_not:N \tex_undefined:D \token_to_str:N D \exp_not:N \else: @@ -1004,9 +1004,9 @@ % as \cs{tl_show:N} by simply calling that function. % \begin{macrocode} \cs_new_protected:Npn \tl_analysis_show:N - { \@@_analysis_show:NNN \msg_show:nnxxxx \tl_show:N } + { \@@_analysis_show:NNN \msg_show:nneeee \tl_show:N } \cs_new_protected:Npn \tl_analysis_log:N - { \@@_analysis_show:NNN \msg_log:nnxxxx \tl_log:N } + { \@@_analysis_show:NNN \msg_log:nneeee \tl_log:N } \cs_new_protected:Npn \@@_analysis_show:NNN #1#2#3 { \tl_if_exist:NTF #3 @@ -1024,9 +1024,9 @@ % No existence test needed here. % \begin{macrocode} \cs_new_protected:Npn \tl_analysis_show:n - { \@@_analysis_show:Nn \msg_show:nnxxxx } + { \@@_analysis_show:Nn \msg_show:nneeee } \cs_new_protected:Npn \tl_analysis_log:n - { \@@_analysis_show:Nn \msg_log:nnxxxx } + { \@@_analysis_show:Nn \msg_log:nneeee } \cs_new_protected:Npn \@@_analysis_show:Nn #1#2 { \@@_analysis:n {#2} @@ -1234,7 +1234,7 @@ \cs_new_protected:Npn \@@_peek_analysis_loop:NNn #1#2#3 { \group_begin: - \tl_set:Nx \l_@@_peek_code_tl + \tl_set:Ne \l_@@_peek_code_tl { \exp_not:c { @@_analysis_map_ \int_use:N \g__kernel_prg_map_int :nnN } @@ -1266,8 +1266,8 @@ % \tn{outer} macros, hence the need for \cs{exp_after:wN} and % \cs{exp_not:N} in the code above, which allows the next function to % safely grab the token as an argument. We run some code that is -% expanded using the primitive \cs{cs_set_nopar:Npx} rather than -% \cs{tl_set:Nx} to avoid grabbing it as an argument as |#1| may be +% expanded using the primitive \cs{cs_set_nopar:Npe} rather than +% \cs{tl_set:Ne} to avoid grabbing it as an argument as |#1| may be % \tn{outer}. To allow~|#1| as an argument of the user's function % (stored in \cs{l_@@_peek_code_tl}), we set it equal to % \cs{scan_stop:}, but we do it at the last minute because |#1| @@ -1293,7 +1293,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_peek_analysis_exp:N #1 { - \cs_set_nopar:Npx \l_@@_peek_code_tl + \cs_set_nopar:Npe \l_@@_peek_code_tl { \tex_let:D \exp_not:N #1 \scan_stop: \exp_not:o \l_@@_peek_code_tl @@ -1315,7 +1315,7 @@ } \l_@@_peek_code_tl } -\cs_new:Npx \@@_peek_analysis_exp_active:N #1 +\cs_new:Npe \@@_peek_analysis_exp_active:N #1 { { \exp_not:N \int_value:w `#1 } \token_to_str:N D } % \end{macrocode} % For normal non-expandable tokens we must distinguish characters @@ -1366,7 +1366,7 @@ % \begin{macrocode} \group_begin: \char_set_active_eq:NN \ \scan_stop: -\cs_new_protected:Npx \@@_peek_analysis_char:N #1 +\cs_new_protected:Npe \@@_peek_analysis_char:N #1 { \cs_set_eq:NN \char_generate:nn { 32 } { 13 } @@ -1374,7 +1374,7 @@ \tex_lccode:D `#1 = 32 \exp_stop_f: \tex_lowercase:D { - \tl_put_right:Nx \exp_not:N \l_@@_peek_code_tl + \tl_put_right:Ne \exp_not:N \l_@@_peek_code_tl { \exp_not:n { \@@_analysis_b_char:Nn \use_none:n } {#1} } } \exp_not:n @@ -1501,7 +1501,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_peek_analysis_active_str:n #1 { - \tl_put_right:Nx \l_@@_peek_code_tl + \tl_put_right:Ne \l_@@_peek_code_tl { { \char_generate:nn { `#1 } { 13 } } { \int_value:w `#1 } @@ -1521,7 +1521,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_peek_analysis_explicit:n #1 { - \tl_put_right:Nx \l_@@_peek_code_tl + \tl_put_right:Ne \l_@@_peek_code_tl { \if_meaning:w \l_peek_token \c_space_token { ~ } { 32 } \token_to_str:N A @@ -1601,7 +1601,7 @@ \cs_new_protected:Npn \@@_peek_analysis_collect_end:NNN #1#2#3 { #1 #2 - \tl_put_right:Nx \l_@@_peek_code_tl + \tl_put_right:Ne \l_@@_peek_code_tl { { \exp_not:N \exp_not:n { \exp_not:c { \l_@@_internal_a_tl } } } { -1 } @@ -1619,7 +1619,7 @@ % and its meaning are too long to fit in one line % of the terminal, the end is replaced by this token list. % \begin{macrocode} -\tl_const:Nx \c_@@_analysis_show_etc_str % ( +\tl_const:Ne \c_@@_analysis_show_etc_str % ( { \token_to_str:N \ETC.) } % \end{macrocode} % \end{variable} diff --git a/macros/latex/contrib/l3kernel/l3tl.dtx b/macros/latex/contrib/l3kernel/l3tl.dtx index 06226fd7ba..e606c3c558 100644 --- a/macros/latex/contrib/l3kernel/l3tl.dtx +++ b/macros/latex/contrib/l3kernel/l3tl.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % @@ -97,7 +97,11 @@ % \meta{tl~var} is initially empty. % \end{function} % -% \begin{function}{\tl_const:Nn, \tl_const:Nx, \tl_const:cn, \tl_const:cx} +% \begin{function} +% { +% \tl_const:Nn, \tl_const:Ne, +% \tl_const:cn, \tl_const:ce +% } % \begin{syntax} % \cs{tl_const:Nn} \meta{tl~var} \Arg{token list} % \end{syntax} @@ -161,12 +165,12 @@ % % \begin{function} % { -% \tl_set:Nn, \tl_set:NV, \tl_set:Nv, \tl_set:No, \tl_set:Ne, \tl_set:Nf, \tl_set:Nx, -% \tl_set:cn, \tl_set:cV, \tl_set:cv, \tl_set:co, \tl_set:ce, \tl_set:cf, \tl_set:cx, +% \tl_set:Nn, \tl_set:NV, \tl_set:Nv, \tl_set:No, \tl_set:Ne, \tl_set:Nf, +% \tl_set:cn, \tl_set:cV, \tl_set:cv, \tl_set:co, \tl_set:ce, \tl_set:cf, % \tl_gset:Nn, \tl_gset:NV, \tl_gset:Nv, -% \tl_gset:No, \tl_gset:Ne, \tl_gset:Nf, \tl_gset:Nx, +% \tl_gset:No, \tl_gset:Ne, \tl_gset:Nf, % \tl_gset:cn, \tl_gset:cV, \tl_gset:cv, -% \tl_gset:co, \tl_gset:ce, \tl_gset:cf, \tl_gset:cx +% \tl_gset:co, \tl_gset:ce, \tl_gset:cf % } % \begin{syntax} % \cs{tl_set:Nn} \meta{tl~var} \Arg{tokens} @@ -177,10 +181,14 @@ % % \begin{function} % { -% \tl_put_left:Nn, \tl_put_left:NV, \tl_put_left:Nv, \tl_put_left:No, \tl_put_left:Nx, -% \tl_put_left:cn, \tl_put_left:cV, \tl_put_left:cv, \tl_put_left:co, \tl_put_left:cx, -% \tl_gput_left:Nn, \tl_gput_left:NV, \tl_gput_left:Nv, \tl_gput_left:No, \tl_gput_left:Nx, -% \tl_gput_left:cn, \tl_gput_left:cV, \tl_gput_left:cv, \tl_gput_left:co, \tl_gput_left:cx +% \tl_put_left:Nn, \tl_put_left:NV, \tl_put_left:Nv, \tl_put_left:Ne, +% \tl_put_left:No, +% \tl_put_left:cn, \tl_put_left:cV, \tl_put_left:cv, \tl_put_left:ce, +% \tl_put_left:co, +% \tl_gput_left:Nn, \tl_gput_left:NV, \tl_gput_left:Nv, \tl_gput_left:Ne, +% \tl_gput_left:No, +% \tl_gput_left:cn, \tl_gput_left:cV, \tl_gput_left:cv, \tl_gput_left:ce +% \tl_gput_left:co % } % \begin{syntax} % \cs{tl_put_left:Nn} \meta{tl~var} \Arg{tokens} @@ -191,10 +199,14 @@ % % \begin{function} % { -% \tl_put_right:Nn, \tl_put_right:NV, \tl_put_right:Nv, \tl_put_right:No, \tl_put_right:Nx, -% \tl_put_right:cn, \tl_put_right:cV, \tl_put_right:cv, \tl_put_right:co, \tl_put_right:cx, -% \tl_gput_right:Nn, \tl_gput_right:NV, \tl_gput_right:Nv, \tl_gput_right:No, \tl_gput_right:Nx, -% \tl_gput_right:cn, \tl_gput_right:cV, \tl_gput_right:cv, \tl_gput_right:co, \tl_gput_right:cx +% \tl_put_right:Nn, \tl_put_right:NV, \tl_put_right:Nv, \tl_put_right:Ne, +% \tl_put_right:No, +% \tl_put_right:cn, \tl_put_right:cV, \tl_put_right:cv, \tl_put_right:ce, +% \tl_put_right:co, +% \tl_gput_right:Nn, \tl_gput_right:NV, \tl_gput_right:Nv, \tl_gput_right:Ne, +% \tl_gput_right:No, +% \tl_gput_right:cn, \tl_gput_right:cV, \tl_gput_right:cv, \tl_gput_right:ce +% \tl_gput_right:co % } % \begin{syntax} % \cs{tl_put_right:Nn} \meta{tl~var} \Arg{tokens} @@ -249,7 +261,7 @@ % contain and the category codes of those characters). Thus for example % \begin{verbatim} % \tl_set:Nn \l_tmpa_tl { abc } -% \tl_set:Nx \l_tmpb_tl { \tl_to_str:n { abc } } +% \tl_set:Ne \l_tmpb_tl { \tl_to_str:n { abc } } % \tl_if_eq:NNTF \l_tmpa_tl \l_tmpb_tl { true } { false } % \end{verbatim} % yields \texttt{false}. @@ -269,7 +281,10 @@ % \end{function} % % \begin{function}[TF] -% {\tl_if_eq:nn, \tl_if_eq:Vn, \tl_if_eq:nV, \tl_if_eq:xn, \tl_if_eq:nx} +% { +% \tl_if_eq:nn, \tl_if_eq:nV, \tl_if_eq:ne, \tl_if_eq:Vn, \tl_if_eq:en, +% \tl_if_eq:ee +% } % \begin{syntax} % \cs{tl_if_eq:nnTF} \Arg{token list_1} \Arg{token list_2} \Arg{true code} \Arg{false code} % \end{syntax} @@ -594,7 +609,11 @@ % \end{function} % % \begin{function}[added = 2011-07-09, updated = 2012-06-25, EXP] -% {\tl_trim_spaces:n, \tl_trim_spaces:o} +% { +% \tl_trim_spaces:n, \tl_trim_spaces:V, \tl_trim_spaces:v, +% \tl_trim_spaces:e, +% \tl_trim_spaces:o +% } % \begin{syntax} % \cs{tl_trim_spaces:n} \Arg{token list} % \end{syntax} @@ -646,7 +665,7 @@ % \end{texnote} % \end{function} % -% \begin{function}[updated = 2015-08-07]{\tl_show:n, \tl_show:x} +% \begin{function}[updated = 2015-08-07]{\tl_show:n, \tl_show:e} % \begin{syntax} % \cs{tl_show:n} \Arg{token list} % \end{syntax} @@ -665,7 +684,8 @@ % \cs{tl_show:N} which displays the result in the terminal. % \end{function} % -% \begin{function}[added = 2014-08-22, updated = 2015-08-07]{\tl_log:n, \tl_log:x} +% \begin{function}[added = 2014-08-22, updated = 2015-08-07] +% {\tl_log:n, \tl_log:e, \tl_log:x} % \begin{syntax} % \cs{tl_log:n} \Arg{token list} % \end{syntax} @@ -997,17 +1017,17 @@ % \end{verbatim} % Here are some more interesting examples. The calls % \begin{verbatim} -% \iow_term:x { \tl_range:nnn { abcd{e{}}fg } { 2 } { 5 } } -% \iow_term:x { \tl_range:nnn { abcd{e{}}fg } { 2 } { -3 } } -% \iow_term:x { \tl_range:nnn { abcd{e{}}fg } { -6 } { 5 } } -% \iow_term:x { \tl_range:nnn { abcd{e{}}fg } { -6 } { -3 } } +% \iow_term:e { \tl_range:nnn { abcd{e{}}fg } { 2 } { 5 } } +% \iow_term:e { \tl_range:nnn { abcd{e{}}fg } { 2 } { -3 } } +% \iow_term:e { \tl_range:nnn { abcd{e{}}fg } { -6 } { 5 } } +% \iow_term:e { \tl_range:nnn { abcd{e{}}fg } { -6 } { -3 } } % \end{verbatim} % are all equivalent and will print |bcd{e{}}| on the terminal; similarly % \begin{verbatim} -% \iow_term:x { \tl_range:nnn { abcd~{e{}}fg } { 2 } { 5 } } -% \iow_term:x { \tl_range:nnn { abcd~{e{}}fg } { 2 } { -3 } } -% \iow_term:x { \tl_range:nnn { abcd~{e{}}fg } { -6 } { 5 } } -% \iow_term:x { \tl_range:nnn { abcd~{e{}}fg } { -6 } { -3 } } +% \iow_term:e { \tl_range:nnn { abcd~{e{}}fg } { 2 } { 5 } } +% \iow_term:e { \tl_range:nnn { abcd~{e{}}fg } { 2 } { -3 } } +% \iow_term:e { \tl_range:nnn { abcd~{e{}}fg } { -6 } { 5 } } +% \iow_term:e { \tl_range:nnn { abcd~{e{}}fg } { -6 } { -3 } } % \end{verbatim} % are all equivalent and will print |bcd {e{}}| on the % terminal (note the space in the middle). To the contrary, @@ -1074,13 +1094,13 @@ % \begin{function}[updated = 2011-08-11] % { % \tl_replace_once:Nnn, \tl_replace_once:NVn, \tl_replace_once:NnV, -% \tl_replace_once:Nxn, \tl_replace_once:Nnx, \tl_replace_once:Nxx, +% \tl_replace_once:Nen, \tl_replace_once:Nne, \tl_replace_once:Nee, % \tl_replace_once:cnn, \tl_replace_once:cVn, \tl_replace_once:cnV, -% \tl_replace_once:cxn, \tl_replace_once:cnx, \tl_replace_once:cxx, -% \tl_greplace_once:Nnn, \tl_greplace_once:NVn, \tl_rgeplace_once:NnV, -% \tl_greplace_once:Nxn, \tl_greplace_once:Nnx, \tl_greplace_once:Nxx, +% \tl_replace_once:cen, \tl_replace_once:cne, \tl_replace_once:cee, +% \tl_greplace_once:Nnn, \tl_greplace_once:NVn, \tl_greplace_once:NnV, +% \tl_greplace_once:Nen, \tl_greplace_once:Nne, \tl_greplace_once:Nee, % \tl_greplace_once:cnn, \tl_greplace_once:cVn, \tl_greplace_once:cnV, -% \tl_greplace_once:cxn, \tl_greplace_once:cnx, \tl_greplace_once:cxx +% \tl_greplace_once:cen, \tl_greplace_once:cne, \tl_greplace_once:cee % } % \begin{syntax} % \cs{tl_replace_once:Nnn} \meta{tl~var} \Arg{old tokens} \Arg{new tokens} @@ -1094,14 +1114,14 @@ % % \begin{function}[updated = 2011-08-11] % { -% \tl_replace_all:Nnn, \tl_replace_all:NVn, \tl_replace_all:NnV, -% \tl_replace_all:Nxn, \tl_replace_all:Nnx, \tl_replace_all:Nxx, -% \tl_replace_all:cnn, \tl_replace_all:cVn, \tl_replace_all:cnV, -% \tl_replace_all:cxn, \tl_replace_all:cnx, \tl_replace_all:cxx, -% \tl_greplace_all:Nnn, \tl_greplace_all:NVn, \tl_greplace_all:cnV, -% \tl_greplace_all:Nxn, \tl_greplace_all:Nnx, \tl_greplace_all:Nxx, -% \tl_greplace_all:cnn, \tl_greplace_all:cVn, \tl_greplace_all:cnV, -% \tl_greplace_all:cxn, \tl_greplace_all:cnx, \tl_greplace_all:cxx +% \tl_replace_all:Nnn, \tl_replace_all:NVn, \tl_replace_all:NnV, +% \tl_replace_all:Nen, \tl_replace_all:Nne, \tl_replace_all:Nee, +% \tl_replace_all:cnn, \tl_replace_all:cVn, \tl_replace_all:cnV, +% \tl_replace_all:cen, \tl_replace_all:cne, \tl_replace_all:cee, +% \tl_greplace_all:Nnn, \tl_greplace_all:NVn, \tl_greplace_all:NnV, +% \tl_greplace_all:Nen, \tl_greplace_all:Nne, \tl_greplace_all:Nee, +% \tl_greplace_all:cnn, \tl_greplace_all:cVn, \tl_greplace_all:cnV, +% \tl_greplace_all:cen, \tl_greplace_all:cne, \tl_greplace_all:cee % } % \begin{syntax} % \cs{tl_replace_all:Nnn} \meta{tl~var} \Arg{old tokens} \Arg{new tokens} @@ -1119,10 +1139,10 @@ % % \begin{function}[updated = 2011-08-11] % { -% \tl_remove_once:Nn, \tl_remove_once:NV, \tl_remove_once:Nx, -% \tl_remove_once:cn, \tl_remove_once:cV, \tl_remove_once:cx, -% \tl_gremove_once:Nn, \tl_gremove_once:NV, \tl_gremove_once:Nx -% \tl_gremove_once:cn, \tl_gremove_once:cV, \tl_gremove_once:cx +% \tl_remove_once:Nn, \tl_remove_once:NV, \tl_remove_once:Ne, +% \tl_remove_once:cn, \tl_remove_once:cV, \tl_remove_once:ce, +% \tl_gremove_once:Nn, \tl_gremove_once:NV, \tl_gremove_once:Ne, +% \tl_gremove_once:cn, \tl_gremove_once:cV, \tl_gremove_once:ce % } % \begin{syntax} % \cs{tl_remove_once:Nn} \meta{tl~var} \Arg{tokens} @@ -1135,10 +1155,10 @@ % % \begin{function}[updated = 2011-08-11] % { -% \tl_remove_all:Nn, \tl_remove_all:NV, \tl_remove_all:Nx, -% \tl_remove_all:cn, \tl_remove_all:cV, \tl_remove_all:cx, -% \tl_gremove_all:Nn, \tl_gremove_all:NV, \tl_gremove_all:Nx -% \tl_gremove_all:cn, \tl_gremove_all:cV, \tl_gremove_all:cx +% \tl_remove_all:Nn, \tl_remove_all:NV, \tl_remove_all:Ne, +% \tl_remove_all:cn, \tl_remove_all:cV, \tl_remove_all:ce, +% \tl_gremove_all:Nn, \tl_gremove_all:NV, \tl_gremove_all:Ne, +% \tl_gremove_all:cn, \tl_gremove_all:cV, \tl_gremove_all:ce, % } % \begin{syntax} % \cs{tl_remove_all:Nn} \meta{tl~var} \Arg{tokens} @@ -1169,10 +1189,14 @@ % % \begin{function}[updated = 2015-08-11] % { -% \tl_set_rescan:Nnn, \tl_set_rescan:NnV, \tl_set_rescan:Nno, \tl_set_rescan:Nnx, -% \tl_set_rescan:cnn, \tl_set_rescan:cnV, \tl_set_rescan:cno, \tl_set_rescan:cnx, -% \tl_gset_rescan:Nnn, \tl_gset_rescan:NnV, \tl_gset_rescan:Nno, \tl_gset_rescan:Nnx, -% \tl_gset_rescan:cnn, \tl_gset_rescan:cnV, \tl_gset_rescan:cno, \tl_gset_rescan:cnx +% \tl_set_rescan:Nnn, \tl_set_rescan:NnV, \tl_set_rescan:Nne, +% \tl_set_rescan:Nno, +% \tl_set_rescan:cnn, \tl_set_rescan:cnV, \tl_set_rescan:cne, +% \tl_set_rescan:cno, +% \tl_gset_rescan:Nnn, \tl_gset_rescan:NnV, \tl_gset_rescan:Nne, +% \tl_gset_rescan:Nno, +% \tl_gset_rescan:cnn, \tl_gset_rescan:cnV, \tl_gset_rescan:cne, +% \tl_gset_rescan:cno, % } % \begin{syntax} % \cs{tl_set_rescan:Nnn} \meta{tl~var} \Arg{setup} \Arg{tokens} @@ -1300,12 +1324,12 @@ % % \subsection{Functions} % -% \begin{macro}{\__kernel_tl_set:Nx,\__kernel_tl_gset:Nx} +% \begin{macro}{\__kernel_tl_set:Ne,\__kernel_tl_gset:Ne} % These two are supplied to get better performance for macros which would -% otherwise use \cs{tl_set:Nx} or \cs{tl_gset:Nx} internally. +% otherwise use \cs{tl_set:Ne} or \cs{tl_gset:Ne} internally. % \begin{macrocode} -\cs_new_eq:NN \__kernel_tl_set:Nx \cs_set_nopar:Npx -\cs_new_eq:NN \__kernel_tl_gset:Nx \cs_gset_nopar:Npx +\cs_new_eq:NN \__kernel_tl_set:Ne \cs_set_nopar:Npe +\cs_new_eq:NN \__kernel_tl_gset:Ne \cs_gset_nopar:Npe % \end{macrocode} % \end{macro} % @@ -1322,23 +1346,22 @@ % \end{macrocode} % \end{macro} % -% \begin{macro}{\tl_const:Nn, \tl_const:Nx, \tl_const:cn, \tl_const:cx} -% Constants are also easy to generate. They use \cs{cs_gset_nopar:Npx} instead -% of \cs{__kernel_tl_gset:Nx} so that the correct scope checking is applied if +% \begin{macro} +% { +% \tl_const:Nn, \tl_const:Ne, \tl_const:Nx, +% \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 is applied if % \pkg{l3debug} is used. % \begin{macrocode} \cs_new_protected:Npn \tl_const:Nn #1#2 { \__kernel_chk_if_free_cs:N #1 - \cs_gset_nopar:Npx #1 { \__kernel_exp_not:w {#2} } - } -\cs_new_protected:Npn \tl_const:Nx #1#2 - { - \__kernel_chk_if_free_cs:N #1 - \cs_gset_nopar:Npx #1 {#2} + \cs_gset_nopar:Npe #1 { \__kernel_exp_not:w {#2} } } -\cs_generate_variant:Nn \tl_const:Nn { c } -\cs_generate_variant:Nn \tl_const:Nx { c } +\cs_generate_variant:Nn \tl_const:Nn { Ne , c , ce } +\cs_generate_variant:Nn \tl_const:Nn { Nx , cx } % \end{macrocode} % \end{macro} % @@ -1396,7 +1419,7 @@ % \begin{macrocode} \cs_new_protected:Npn \tl_concat:NNN #1#2#3 { - \__kernel_tl_set:Nx #1 + \__kernel_tl_set:Ne #1 { \__kernel_exp_not:w \exp_after:wN {#2} \__kernel_exp_not:w \exp_after:wN {#3} @@ -1404,7 +1427,7 @@ } \cs_new_protected:Npn \tl_gconcat:NNN #1#2#3 { - \__kernel_tl_gset:Nx #1 + \__kernel_tl_gset:Ne #1 { \__kernel_exp_not:w \exp_after:wN {#2} \__kernel_exp_not:w \exp_after:wN {#3} @@ -1439,7 +1462,7 @@ % \begin{macrocode} \group_begin: \tex_catcode:D `- = 11 ~ -\tl_const:Nx \c_novalue_tl { - NoValue \token_to_str:N - } +\tl_const:Ne \c_novalue_tl { - NoValue \token_to_str:N - } \group_end: % \end{macrocode} % \end{variable} @@ -1471,173 +1494,203 @@ % by hand as it is used quite a lot. % \begin{macrocode} \cs_new_protected:Npn \tl_set:Nn #1#2 - { \__kernel_tl_set:Nx #1 { \__kernel_exp_not:w {#2} } } + { \__kernel_tl_set:Ne #1 { \__kernel_exp_not:w {#2} } } \cs_new_protected:Npn \tl_set:No #1#2 - { \__kernel_tl_set:Nx #1 { \__kernel_exp_not:w \exp_after:wN {#2} } } -\cs_new_protected:Npn \tl_set:Nx #1#2 - { \__kernel_tl_set:Nx #1 {#2} } + { \__kernel_tl_set:Ne #1 { \__kernel_exp_not:w \exp_after:wN {#2} } } \cs_new_protected:Npn \tl_gset:Nn #1#2 - { \__kernel_tl_gset:Nx #1 { \__kernel_exp_not:w {#2} } } + { \__kernel_tl_gset:Ne #1 { \__kernel_exp_not:w {#2} } } \cs_new_protected:Npn \tl_gset:No #1#2 - { \__kernel_tl_gset:Nx #1 { \__kernel_exp_not:w \exp_after:wN {#2} } } -\cs_new_protected:Npn \tl_gset:Nx #1#2 - { \__kernel_tl_gset:Nx #1 {#2} } + { \__kernel_tl_gset:Ne #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:Nx { c } \cs_generate_variant:Nn \tl_set:No { c } +\cs_generate_variant:Nn \tl_set:Nn { Nx , cx } \cs_generate_variant:Nn \tl_gset:Nn { NV , Nv , Ne , Nf } \cs_generate_variant:Nn \tl_gset:Nn { c, cV , cv , ce , cf } -\cs_generate_variant:Nn \tl_gset:Nx { c } \cs_generate_variant:Nn \tl_gset:No { c } +\cs_generate_variant:Nn \tl_gset:Nn { Nx , cx } % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro} % { -% \tl_put_left:Nn, \tl_put_left:NV, \tl_put_left:Nv, \tl_put_left:No, \tl_put_left:Nx, -% \tl_put_left:cn, \tl_put_left:cV, \tl_put_left:cv, \tl_put_left:co, \tl_put_left:cx +% \tl_put_left:Nn, \tl_put_left:NV, \tl_put_left:Nv, \tl_put_left:Ne, +% \tl_put_left:No, \tl_put_left:Nx, +% \tl_put_left:cn, \tl_put_left:cV, \tl_put_left:cv, \tl_put_left:ce, +% \tl_put_left:co, \tl_put_left:cx % } % \begin{macro} % { -% \tl_gput_left:Nn, \tl_gput_left:NV, \tl_gput_left:Nv, \tl_gput_left:No, \tl_gput_left:Nx, -% \tl_gput_left:cn, \tl_gput_left:cV, \tl_gput_left:cv, \tl_gput_left:co, \tl_gput_left:cx +% \tl_gput_left:Nn, \tl_gput_left:NV, \tl_gput_left:Nv, \tl_gput_left:Ne, +% \tl_gput_left:No, \tl_gput_left:Nx, +% \tl_gput_left:cn, \tl_gput_left:cV, \tl_gput_left:cv, \tl_gput_left:ce, +% \tl_gput_left:co, \tl_gput_left:cx % } % Adding to the left is done directly to gain a little performance. % \begin{macrocode} \cs_new_protected:Npn \tl_put_left:Nn #1#2 { - \__kernel_tl_set:Nx #1 + \__kernel_tl_set:Ne #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:Nx #1 + \__kernel_tl_set:Ne #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:Nx #1 + \__kernel_tl_set:Ne #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_exp_not:w \tex_expanded:D { {#2} } + \__kernel_exp_not:w \exp_after:wN {#1} + } + } \cs_new_protected:Npn \tl_put_left:No #1#2 { - \__kernel_tl_set:Nx #1 + \__kernel_tl_set:Ne #1 { \__kernel_exp_not:w \exp_after:wN {#2} \__kernel_exp_not:w \exp_after:wN {#1} } } -\cs_new_protected:Npn \tl_put_left:Nx #1#2 - { \__kernel_tl_set:Nx #1 { #2 \__kernel_exp_not:w \exp_after:wN {#1} } } \cs_new_protected:Npn \tl_gput_left:Nn #1#2 { - \__kernel_tl_gset:Nx #1 + \__kernel_tl_gset:Ne #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:Nx #1 + \__kernel_tl_gset:Ne #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:Nx #1 + \__kernel_tl_gset:Ne #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_exp_not:w \tex_expanded:D { {#2} } + \__kernel_exp_not:w \exp_after:wN {#1} + } + } \cs_new_protected:Npn \tl_gput_left:No #1#2 { - \__kernel_tl_gset:Nx #1 + \__kernel_tl_gset:Ne #1 { \__kernel_exp_not:w \exp_after:wN {#2} \__kernel_exp_not:w \exp_after:wN {#1} } } -\cs_new_protected:Npn \tl_gput_left:Nx #1#2 - { \__kernel_tl_gset:Nx #1 { #2 \__kernel_exp_not:w \exp_after:wN {#1} } } \cs_generate_variant:Nn \tl_put_left:Nn { c } \cs_generate_variant:Nn \tl_put_left:NV { c } \cs_generate_variant:Nn \tl_put_left:Nv { c } +\cs_generate_variant:Nn \tl_put_left:Ne { c } \cs_generate_variant:Nn \tl_put_left:No { c } -\cs_generate_variant:Nn \tl_put_left:Nx { c } +\cs_generate_variant:Nn \tl_put_left:Nn { Nx, cx } \cs_generate_variant:Nn \tl_gput_left:Nn { c } \cs_generate_variant:Nn \tl_gput_left:NV { c } -\cs_generate_variant:Nn \tl_gput_left:NV { c } +\cs_generate_variant:Nn \tl_gput_left:Nv { c } +\cs_generate_variant:Nn \tl_gput_left:Ne { c } \cs_generate_variant:Nn \tl_gput_left:No { c } -\cs_generate_variant:Nn \tl_gput_left:Nx { c } +\cs_generate_variant:Nn \tl_gput_left:Nn { Nx , cx } % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro} % { -% \tl_put_right:Nn, \tl_put_right:NV, \tl_put_right:Nv, \tl_put_right:No, \tl_put_right:Nx, -% \tl_put_right:cn, \tl_put_right:cV, \tl_put_right:cv, \tl_put_right:co, \tl_put_right:cx +% \tl_put_right:Nn, \tl_put_right:NV, \tl_put_right:Nv, \tl_put_right:Ne, +% \tl_put_right:No, \tl_put_right:Nx, +% \tl_put_right:cn, \tl_put_right:cV, \tl_put_right:cv, \tl_put_right:ce, +% \tl_put_right:co, \tl_put_right:cx % } % \begin{macro} % { -% \tl_gput_right:Nn, \tl_gput_right:NV, \tl_gput_right:Nv, \tl_gput_right:No, -% \tl_gput_right:Nx, -% \tl_gput_right:cn, \tl_gput_right:cV, \tl_gput_right:cv, \tl_gput_right:co, -% \tl_gput_right:cx +% \tl_gput_right:Nn, \tl_gput_right:NV, \tl_gput_right:Nv, \tl_gput_right:Ne, +% \tl_gput_right:No, \tl_gput_right:Nx, +% \tl_gput_right:cn, \tl_gput_right:cV, \tl_gput_right:cv, \tl_gput_right:ce, +% \tl_gput_right:co, \tl_gput_right:cx % } % The same on the right. % \begin{macrocode} \cs_new_protected:Npn \tl_put_right:Nn #1#2 - { \__kernel_tl_set:Nx #1 { \__kernel_exp_not:w \exp_after:wN { #1 #2 } } } + { \__kernel_tl_set:Ne #1 { \__kernel_exp_not:w \exp_after:wN { #1 #2 } } } \cs_new_protected:Npn \tl_put_right:NV #1#2 { - \__kernel_tl_set:Nx #1 + \__kernel_tl_set:Ne #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:Nx #1 + \__kernel_tl_set:Ne #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_exp_not:w \exp_after:wN {#1} + \__kernel_exp_not:w \tex_expanded:D { {#2} } + } + } \cs_new_protected:Npn \tl_put_right:No #1#2 { - \__kernel_tl_set:Nx #1 + \__kernel_tl_set:Ne #1 { \__kernel_exp_not:w \exp_after:wN {#1} \__kernel_exp_not:w \exp_after:wN {#2} } } -\cs_new_protected:Npn \tl_put_right:Nx #1#2 - { \__kernel_tl_set:Nx #1 { \__kernel_exp_not:w \exp_after:wN {#1} #2 } } \cs_new_protected:Npn \tl_gput_right:Nn #1#2 - { \__kernel_tl_gset:Nx #1 { \__kernel_exp_not:w \exp_after:wN { #1 #2 } } } + { \__kernel_tl_gset:Ne #1 { \__kernel_exp_not:w \exp_after:wN { #1 #2 } } } \cs_new_protected:Npn \tl_gput_right:NV #1#2 { - \__kernel_tl_gset:Nx #1 + \__kernel_tl_gset:Ne #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:Nx #1 + \__kernel_tl_gset:Ne #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_exp_not:w \exp_after:wN {#1} + \__kernel_exp_not:w \tex_expanded:D { {#2} } + } + } \cs_new_protected:Npn \tl_gput_right:No #1#2 { - \__kernel_tl_gset:Nx #1 + \__kernel_tl_gset:Ne #1 { \__kernel_exp_not:w \exp_after:wN {#1} \__kernel_exp_not:w \exp_after:wN {#2} } } -\cs_new_protected:Npn \tl_gput_right:Nx #1#2 - { \__kernel_tl_gset:Nx #1 { \__kernel_exp_not:w \exp_after:wN {#1} #2 } } \cs_generate_variant:Nn \tl_put_right:Nn { c } \cs_generate_variant:Nn \tl_put_right:NV { c } \cs_generate_variant:Nn \tl_put_right:Nv { c } +\cs_generate_variant:Nn \tl_put_right:Ne { c } \cs_generate_variant:Nn \tl_put_right:No { c } -\cs_generate_variant:Nn \tl_put_right:Nx { c } +\cs_generate_variant:Nn \tl_put_right:Nn { Nx , cx } \cs_generate_variant:Nn \tl_gput_right:Nn { c } \cs_generate_variant:Nn \tl_gput_right:NV { c } \cs_generate_variant:Nn \tl_gput_right:Nv { c } +\cs_generate_variant:Nn \tl_gput_right:Ne { c } \cs_generate_variant:Nn \tl_gput_right:No { c } -\cs_generate_variant:Nn \tl_gput_right:Nx { c } +\cs_generate_variant:Nn \tl_gput_right:Nn { Nx, cx } % \end{macrocode} % \end{macro} % \end{macro} @@ -1679,19 +1732,23 @@ % codes: it cannot appear in the tokens being rescanned since all % colons have the same category code. % \begin{macrocode} -\tl_const:Nx \c_@@_rescan_marker_tl { : \token_to_str:N : } +\tl_const:Ne \c_@@_rescan_marker_tl { : \token_to_str:N : } % \end{macrocode} % \end{variable} % % \begin{macro} % { -% \tl_set_rescan:Nnn, \tl_set_rescan:NnV, \tl_set_rescan:Nno, \tl_set_rescan:Nnx, -% \tl_set_rescan:cnn, \tl_set_rescan:cnV, \tl_set_rescan:cno, \tl_set_rescan:cnx +% \tl_set_rescan:Nnn, \tl_set_rescan:NnV, \tl_set_rescan:Nne, +% \tl_set_rescan:Nno, \tl_set_rescan:Nnx, +% \tl_set_rescan:cnn, \tl_set_rescan:cnV, \tl_set_rescan:cne, +% \tl_set_rescan:cno, \tl_set_rescan:cnx, % } % \begin{macro} % { -% \tl_gset_rescan:Nnn, \tl_gset_rescan:NnV, \tl_gset_rescan:Nno, \tl_gset_rescan:Nnx, -% \tl_gset_rescan:cnn, \tl_gset_rescan:cnV, \tl_gset_rescan:cno, \tl_gset_rescan:cnx +% \tl_gset_rescan:Nnn, \tl_gset_rescan:NnV, \tl_gset_rescan:Nne, +% \tl_gset_rescan:Nno, \tl_gset_rescan:Nnx, +% \tl_gset_rescan:cnn, \tl_gset_rescan:cnV, \tl_gset_rescan:cne, +% \tl_gset_rescan:cno, \tl_gset_rescan:cnx % } % \begin{macro}{\tl_rescan:nn, \tl_rescan:nV} % \begin{macro}{\@@_rescan_aux:} @@ -1790,10 +1847,10 @@ \group_end: #1 #2 {#3} } -\cs_generate_variant:Nn \tl_set_rescan:Nnn { NnV , Nno , Nnx } -\cs_generate_variant:Nn \tl_set_rescan:Nnn { c , cnV , cno , cnx } -\cs_generate_variant:Nn \tl_gset_rescan:Nnn { NnV , Nno , Nnx } -\cs_generate_variant:Nn \tl_gset_rescan:Nnn { c , cnV , cno , cnx } +\cs_generate_variant:Nn \tl_set_rescan:Nnn { NnV , Nne , c , cnV , cne } +\cs_generate_variant:Nn \tl_set_rescan:Nnn { Nno , Nnx , cno , cnx } +\cs_generate_variant:Nn \tl_gset_rescan:Nnn { NnV , Nne , c , cnV , cne } +\cs_generate_variant:Nn \tl_gset_rescan:Nnn { Nno , Nnx , cno , cnx } % \end{macrocode} % \end{macro} % \end{macro} @@ -1913,59 +1970,75 @@ % % \begin{macro} % { -% \tl_replace_all:Nnn, \tl_replace_all:NVn, \tl_replace_all:NnV, -% \tl_replace_all:Nxn, \tl_replace_all:Nnx, \tl_replace_all:Nxx, -% \tl_replace_all:cnn, \tl_replace_all:cVn, \tl_replace_all:cnV, -% \tl_replace_all:cxn, \tl_replace_all:cnx, \tl_replace_all:cxx +% \tl_replace_once:Nnn, \tl_replace_once:NVn, \tl_replace_once:NnV, +% \tl_replace_once:Nen, \tl_replace_once:Nne, \tl_replace_once:Nee, +% \tl_replace_once:Nxn, \tl_replace_once:Nnx, \tl_replace_once:Nxx, +% \tl_replace_once:cnn, \tl_replace_once:cVn, \tl_replace_once:cnV, +% \tl_replace_once:cen, \tl_replace_once:cne, \tl_replace_once:cee, +% \tl_replace_once:cxn, \tl_replace_once:cnx, \tl_replace_once:cxx % } % \begin{macro} % { -% \tl_greplace_all:Nnn, \tl_greplace_all:NVn, \tl_greplace_all:NnV, -% \tl_greplace_all:Nxn, \tl_greplace_all:Nnx, \tl_greplace_all:Nxx, -% \tl_greplace_all:cnn, \tl_greplace_all:cVn, \tl_greplace_all:cnV, -% \tl_greplace_all:cxn, \tl_greplace_all:cnx, \tl_greplace_all:cxx +% \tl_greplace_once:Nnn, \tl_greplace_once:NVn, \tl_greplace_once:NnV, +% \tl_greplace_once:Nen, \tl_greplace_once:Nne, \tl_greplace_once:Nee, +% \tl_greplace_once:Nxn, \tl_greplace_once:Nnx, \tl_greplace_once:Nxx, +% \tl_greplace_once:cnn, \tl_greplace_once:cVn, \tl_greplace_once:cnV, +% \tl_greplace_once:cen, \tl_greplace_once:cne, \tl_greplace_once:cee, +% \tl_greplace_once:cxn, \tl_greplace_once:cnx, \tl_greplace_once:cxx % } % \begin{macro} % { -% \tl_replace_once:Nnn, \tl_replace_once:NVn, \tl_replace_once:NnV, -% \tl_replace_once:Nxn, \tl_replace_once:Nnx, \tl_replace_once:Nxx, -% \tl_replace_once:cnn, \tl_replace_once:cVn, \tl_replace_once:cnV, -% \tl_replace_once:cxn, \tl_replace_once:cnx, \tl_replace_once:cxx +% \tl_replace_all:Nnn, \tl_replace_all:NVn, \tl_replace_all:NnV, +% \tl_replace_all:Nen, \tl_replace_all:Nne, \tl_replace_all:Nee, +% \tl_replace_all:Nxn, \tl_replace_all:Nnx, \tl_replace_all:Nxx, +% \tl_replace_all:cnn, \tl_replace_all:cVn, \tl_replace_all:cnV, +% \tl_replace_all:cen, \tl_replace_all:cne, \tl_replace_all:cee, +% \tl_replace_all:cxn, \tl_replace_all:cnx, \tl_replace_all:cxx % } % \begin{macro} % { -% \tl_greplace_once:Nnn, \tl_greplace_once:NVn, \tl_replace_once:NnV, -% \tl_greplace_once:Nxn, \tl_greplace_once:Nnx, \tl_greplace_once:Nxx, -% \tl_greplace_once:cnn, \tl_greplace_once:cVn, \tl_replace_once:cnV, -% \tl_greplace_once:cxn, \tl_greplace_once:cnx, \tl_greplace_once:cxx +% \tl_greplace_all:Nnn, \tl_greplace_all:NVn, \tl_greplace_all:NnV, +% \tl_greplace_all:Nen, \tl_greplace_all:Nne, \tl_greplace_all:Nee, +% \tl_greplace_all:Nxn, \tl_greplace_all:Nnx, \tl_greplace_all:Nxx, +% \tl_greplace_all:cnn, \tl_greplace_all:cVn, \tl_greplace_all:cnV, +% \tl_greplace_all:cen, \tl_greplace_all:cne, \tl_greplace_all:cee, +% \tl_greplace_all:cxn, \tl_greplace_all:cnx, \tl_greplace_all:cxx % } % All of the \texttt{replace} functions call \cs{@@_replace:NnNNNnn} % with appropriate arguments. The first two arguments are explained % later. The next controls whether the replacement function calls % itself (\cs{@@_replace_next:w}) or stops (\cs{@@_replace_wrap:w}) -% after the first replacement. Next comes an \texttt{x}-type -% assignment function \cs{tl_set:Nx} or \cs{tl_gset:Nx} for local or +% after the first replacement. Next comes an \texttt{e}-type +% assignment function \cs{tl_set:Ne} or \cs{tl_gset:Ne} for local or % global replacements. Finally, the three arguments \meta{tl~var} % \Arg{pattern} \Arg{replacement} provided by the user. When % describing the auxiliary functions below, we denote the contents of % 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:Nx } + { \@@_replace:NnNNNnn \q_@@_mark ? \@@_replace_wrap:w \__kernel_tl_set:Ne } \cs_new_protected:Npn \tl_greplace_once:Nnn - { \@@_replace:NnNNNnn \q_@@_mark ? \@@_replace_wrap:w \__kernel_tl_gset:Nx } + { \@@_replace:NnNNNnn \q_@@_mark ? \@@_replace_wrap:w \__kernel_tl_gset:Ne } \cs_new_protected:Npn \tl_replace_all:Nnn - { \@@_replace:NnNNNnn \q_@@_mark ? \@@_replace_next:w \__kernel_tl_set:Nx } + { \@@_replace:NnNNNnn \q_@@_mark ? \@@_replace_next:w \__kernel_tl_set:Ne } \cs_new_protected:Npn \tl_greplace_all:Nnn - { \@@_replace:NnNNNnn \q_@@_mark ? \@@_replace_next:w \__kernel_tl_gset:Nx } + { \@@_replace:NnNNNnn \q_@@_mark ? \@@_replace_next:w \__kernel_tl_gset:Ne } +\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 - { NV , NnV , Nx , Nnx , Nxx , c , cV , cnV , cx , cnx , cxx } + { Nx , Nnx , Nxx , cxn , cnx , cxx } \cs_generate_variant:Nn \tl_greplace_once:Nnn - { NV , NnV , Nx , Nnx , Nxx , c , cV , cnV , cx , cnx , cxx } + { NnV , Nne , NV , Ne , Nee , c , cnV , cne , cV , ce , cee } +\cs_generate_variant:Nn \tl_greplace_once:Nnn + { Nx , Nnx , Nxx , cxn , cnx , cxx } +\cs_generate_variant:Nn \tl_replace_all:Nnn + { NnV , Nne , NV , Ne , Nee , c , cnV , cne , cV , ce , cee } \cs_generate_variant:Nn \tl_replace_all:Nnn - { NV , NnV , Nx , Nnx , Nxx , c , cV , cnV , cx , cnx , cxx } + { Nx , Nnx , Nxx , cxn , cnx , cxx } \cs_generate_variant:Nn \tl_greplace_all:Nnn - { NV , NnV , Nx , Nnx , Nxx , c , cV , cnV , cx , cnx , cxx } + { NnV , Nne , NV , Ne , Nee , c , cnV , cne , cV , ce , cee } +\cs_generate_variant:Nn \tl_greplace_all:Nnn + { Nx , Nnx , Nxx , cxn , cnx , cxx } % \end{macrocode} % \end{macro} % \end{macro} @@ -2046,7 +2119,7 @@ { \tl_if_empty:nTF {#6} { - \msg_error:nnx { kernel } { empty-search-pattern } + \msg_error:nne { kernel } { empty-search-pattern } { \tl_to_str:n {#7} } } { @@ -2124,7 +2197,7 @@ \group_align_safe_begin: \cs_set:Npn \@@_replace_wrap:w ##1 #1 ##2 { \__kernel_exp_not:w \exp_after:wN { \use_none:nn ##1 } ##2 } - \cs_set:Npx \@@_replace_next:w ##1 #5 + \cs_set:Npe \@@_replace_next:w ##1 #5 { \exp_not:N \@@_replace_wrap:w ##1 \exp_not:n { #1 } @@ -2152,13 +2225,13 @@ % % \begin{macro} % { -% \tl_remove_once:Nn, \tl_remove_once:NV, \tl_remove_once:Nx, -% \tl_remove_once:cn, \tl_remove_once:cV, \tl_remove_once:cx +% \tl_remove_once:Nn, \tl_remove_once:NV, \tl_remove_once:Ne, +% \tl_remove_once:cn, \tl_remove_once:cV, \tl_remove_once:ce % } % \begin{macro} % { -% \tl_gremove_once:Nn, \tl_gremove_once:NV, \tl_gremove_once:Nx, -% \tl_gremove_once:cn, \tl_gremove_once:cV, \tl_gremove_once:cx +% \tl_gremove_once:Nn, \tl_gremove_once:NV, +% \tl_gremove_once:cn, \tl_gremove_once:cV, % } % Removal is just a special case of replacement. % \begin{macrocode} @@ -2166,21 +2239,25 @@ { \tl_replace_once:Nnn #1 {#2} { } } \cs_new_protected:Npn \tl_gremove_once:Nn #1#2 { \tl_greplace_once:Nnn #1 {#2} { } } -\cs_generate_variant:Nn \tl_remove_once:Nn { NV , Nx , c , cV , cx } -\cs_generate_variant:Nn \tl_gremove_once:Nn { NV , Nx , c , cV , cx } +\cs_generate_variant:Nn \tl_remove_once:Nn { NV , Ne , c , cV , ce } +\cs_generate_variant:Nn \tl_gremove_once:Nn { NV , Ne , c , cV , ce } % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro} % { -% \tl_remove_all:Nn, \tl_remove_all:NV, \tl_remove_all:Nx, -% \tl_remove_all:cn, \tl_remove_all:cV, \tl_remove_all:cx +% \tl_remove_all:Nn, \tl_remove_all:NV, \tl_remove_all:Ne, +% \tl_remove_all:Nx, +% \tl_remove_all:cn, \tl_remove_all:cV, \tl_remove_all:ce, +% \tl_remove_all:cx, % } % \begin{macro} % { -% \tl_gremove_all:Nn, \tl_gremove_all:NV, \tl_gremove_all:Nx, -% \tl_gremove_all:cn, \tl_gremove_all:cV, \tl_gremove_all:cx +% \tl_gremove_all:Nn, \tl_gremove_all:NV, \tl_gremove_all:Ne, +% \tl_gremove_all:Nx, +% \tl_gremove_all:cn, \tl_gremove_all:cV, \tl_gremove_all:ce, +% \tl_gremove_all:cx, % } % Removal is just a special case of replacement. % \begin{macrocode} @@ -2188,8 +2265,10 @@ { \tl_replace_all:Nnn #1 {#2} { } } \cs_new_protected:Npn \tl_gremove_all:Nn #1#2 { \tl_greplace_all:Nnn #1 {#2} { } } -\cs_generate_variant:Nn \tl_remove_all:Nn { NV , Nx , c , cV , cx } -\cs_generate_variant:Nn \tl_gremove_all:Nn { NV , Nx , c , cV , cx } +\cs_generate_variant:Nn \tl_remove_all:Nn { NV , Ne , c , cV , ce } +\cs_generate_variant:Nn \tl_remove_all:Nn { Nx , cx } +\cs_generate_variant:Nn \tl_gremove_all:Nn { NV , Ne , c , cV , ce } +\cs_generate_variant:Nn \tl_gremove_all:Nn { Nx , cx } % \end{macrocode} % \end{macro} % \end{macro} @@ -2328,7 +2407,12 @@ % \end{macrocode} % \end{macro} % -% \begin{macro}[TF]{\tl_if_eq:nn, \tl_if_eq:Vn, \tl_if_eq:nV, \tl_if_eq:xn, \tl_if_eq:nx} +% \begin{macro}[TF] +% { +% \tl_if_eq:nn, \tl_if_eq:nV, \tl_if_eq:ne, \tl_if_eq:Vn, \tl_if_eq:en, +% \tl_if_eq:ee, +% \tl_if_eq:xn, \tl_if_eq:nx, \tl_if_eq:xx, +% } % A simple store and compare routine. % \begin{macrocode} \prg_new_protected_conditional:Npnn \tl_if_eq:nn #1#2 { T , F , TF } @@ -2344,7 +2428,9 @@ \prg_return_false: \fi: } -\prg_generate_conditional_variant:Nnn \tl_if_eq:nn { V , nV , x , nx } { TF , T , F } +\prg_generate_conditional_variant:Nnn \tl_if_eq:nn + { nV , ne , nx , e , ee , x , xx } + { TF , T , F } % \end{macrocode} % \end{macro} % @@ -2423,13 +2509,14 @@ % \end{macro} % \end{macro} % -% \begin{macro}[EXP,pTF]{\tl_if_single:N} +% \begin{macro}[EXP,pTF]{\tl_if_single:N, \tl_if_single:c} % Expand the token list and feed it to \cs{tl_if_single:nTF}. % \begin{macrocode} \cs_new:Npn \tl_if_single_p:N { \exp_args:No \tl_if_single_p:n } \cs_new:Npn \tl_if_single:NT { \exp_args:No \tl_if_single:nT } \cs_new:Npn \tl_if_single:NF { \exp_args:No \tl_if_single:nF } \cs_new:Npn \tl_if_single:NTF { \exp_args:No \tl_if_single:nTF } +\prg_generate_conditional_variant:Nnn \tl_if_single:N {c} { p , T , F , TF } % \end{macrocode} % \end{macro} % @@ -2751,7 +2838,12 @@ % \end{macro} % \end{macro} % -% \begin{macro}{\tl_trim_spaces:n, \tl_trim_spaces:o} +% \begin{macro} +% { +% \tl_trim_spaces:n, \tl_trim_spaces:V, \tl_trim_spaces:v, +% \tl_trim_spaces:e, +% \tl_trim_spaces:o, +% } % \begin{macro}{\tl_trim_spaces_apply:nN, \tl_trim_spaces_apply:oN} % \begin{macro} % { @@ -2774,14 +2866,14 @@ { \@@_trim_mark: #1 } { \__kernel_exp_not:w \exp_after:wN } } -\cs_generate_variant:Nn \tl_trim_spaces:n { o } +\cs_generate_variant:Nn \tl_trim_spaces:n { V , v , e , o } \cs_new:Npn \tl_trim_spaces_apply:nN #1#2 { \@@_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:Nx #1 { \exp_args:No \tl_trim_spaces:n {#1} } } + { \__kernel_tl_set:Ne #1 { \exp_args:No \tl_trim_spaces:n {#1} } } \cs_new_protected:Npn \tl_gtrim_spaces:N #1 - { \__kernel_tl_gset:Nx #1 { \exp_args:No \tl_trim_spaces:n {#1} } } + { \__kernel_tl_gset:Ne #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} @@ -3237,7 +3329,7 @@ % or with a space, making sure that % \cs{@@_act_space:wwNNN} gobbles the space. % \begin{macrocode} -\exp_args:Nnx \use:n { \cs_new:Npn \@@_act_loop:w #1 \s_@@_act_stop } +\exp_args:Nne \use:n { \cs_new:Npn \@@_act_loop:w #1 \s_@@_act_stop } { \exp_not:o { \@@_act_if_head_is_space:nTF {#1} } \exp_not:N \@@_act_space:wwNNN @@ -3346,9 +3438,9 @@ % which stops the \texttt{f}-expansion. % \begin{macrocode} \cs_new_protected:Npn \tl_reverse:N #1 - { \__kernel_tl_set:Nx #1 { \exp_args:No \tl_reverse:n { #1 } } } + { \__kernel_tl_set:Ne #1 { \exp_args:No \tl_reverse:n { #1 } } } \cs_new_protected:Npn \tl_greverse:N #1 - { \__kernel_tl_gset:Nx #1 { \exp_args:No \tl_reverse:n { #1 } } } + { \__kernel_tl_gset:Ne #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} @@ -3563,7 +3655,7 @@ { \token_to_str:N #2 = \__kernel_exp_not:w \exp_after:wN {#2} } } { - \msg_error:nnxxx { kernel } { bad-type } + \msg_error:nneee { kernel } { bad-type } { \token_to_str:N #2 } { \token_to_meaning:N #2 } { tl } } } @@ -3571,7 +3663,7 @@ % \end{macrocode} % \end{macro} % -% \begin{macro}{\tl_show:n, \tl_show:x, \@@_show:n} +% \begin{macro}{\tl_show:n, \tl_show:e, \tl_show:x, \@@_show:n} % \begin{macro}[EXP]{\@@_show:w} % Many |show| functions are based on \cs{tl_show:n}. % The argument of \cs{tl_show:n} is line-wrapped using @@ -3591,7 +3683,7 @@ % \begin{macrocode} \cs_new_protected:Npn \tl_show:n #1 { \iow_wrap:nnnN { >~ \tl_to_str:n {#1} . } { } { } \@@_show:n } -\cs_generate_variant:Nn \tl_show:n { x } +\cs_generate_variant:Nn \tl_show:n { e , x } \cs_new_protected:Npn \@@_show:n #1 { \tl_set:Nf \l_@@_internal_a_tl { \@@_show:w #1 \s_@@_stop } @@ -3609,13 +3701,13 @@ % \end{macro} % \end{macro} % -% \begin{macro}{\tl_log:n, \tl_log:x} +% \begin{macro}{\tl_log:n, \tl_log:e, \tl_log:x} % Logging is much easier, simply line-wrap. The |>~| and trailing % period is there to match the output of \cs{tl_show:n}. % \begin{macrocode} \cs_new_protected:Npn \tl_log:n #1 { \iow_wrap:nnnN { > ~ \tl_to_str:n {#1} . } { } { } \iow_log:n } -\cs_generate_variant:Nn \tl_log:n { x } +\cs_generate_variant:Nn \tl_log:n { e , x } % \end{macrocode} % \end{macro} % @@ -3635,17 +3727,17 @@ \exp_args:Nf \tl_if_empty:nTF { \cs_prefix_spec:N #1 \cs_parameter_spec:N #1 } { - \tl_set:Nx \l_@@_internal_a_tl {#3} + \tl_set:Ne \l_@@_internal_a_tl {#3} \tl_if_eq:NNTF #1 \l_@@_internal_a_tl {#4} { - \msg_error:nnxxxx { kernel } { bad-type } + \msg_error:nneeee { kernel } { bad-type } { \token_to_str:N #1 } { \tl_to_str:N #1 } {#2} { \tl_to_str:N \l_@@_internal_a_tl } } } { - \msg_error:nnxxx { kernel } { bad-type } + \msg_error:nneee { kernel } { bad-type } { \token_to_str:N #1 } { \token_to_meaning:N #1 } {#2} } } diff --git a/macros/latex/contrib/l3kernel/l3token.dtx b/macros/latex/contrib/l3kernel/l3token.dtx index ce274f9583..aedde78098 100644 --- a/macros/latex/contrib/l3kernel/l3token.dtx +++ b/macros/latex/contrib/l3kernel/l3token.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % @@ -1490,7 +1490,7 @@ \char_set_lccode:nn { `\^^@ } { ##1 } \tex_lowercase:D { \group_end: #2 ^^@ } } - \cs_new_protected:cpx { #1 :NN } ##1 + \cs_new_protected:cpe { #1 :NN } ##1 { \exp_not:c { #1 : nN } { `##1 } } } \@@_tmp:nN { char_set_active_eq } \cs_set_eq:NN @@ -1614,7 +1614,7 @@ \char_set_catcode_math_superscript:n { 0 } \tl_put_right:Nn \l_@@_tmp_tl { ^^@ \exp_not:N \or: } \char_set_catcode_parameter:n { 0 } - \tl_put_right:Nn \l_@@_tmp_tl { ^^@^^@ \exp_not:N \or: } + \tl_put_right:Nn \l_@@_tmp_tl { ^^@ \exp_not:N \or: } \tl_put_right:Nn \l_@@_tmp_tl { { \if_false: } \fi: \exp_not:N \or: } \char_set_catcode_alignment:n { 0 } \tl_put_right:Nn \l_@@_tmp_tl { ^^@ \exp_not:N \or: } @@ -1627,16 +1627,16 @@ % \end{macrocode} % Convert the above temporary list into a series of constant token % lists, one for each character code, using \cs{tex_lowercase:D} to -% convert |^^@| in each case. The \texttt{x}-type expansion ensures +% convert |^^@| in each case. The \texttt{e}-type expansion ensures % that \cs{tex_lowercase:D} receives the contents of the token list. % \begin{macrocode} \cs_set_protected:Npn \@@_tmp:n #1 { \char_set_lccode:nn { 0 } {#1} \char_set_lccode:nn { 32 } {#1} - \exp_args:Nx \tex_lowercase:D + \exp_args:Ne \tex_lowercase:D { - \tl_const:Nx + \tl_const:Ne \exp_not:c { c_@@_ \@@_int_to_roman:w #1 _tl } { \exp_not:o \l_@@_tmp_tl } } @@ -1848,7 +1848,7 @@ % \begin{macro}{\c_catcode_other_space_tl} % Create a space with category code $12$: an \enquote{other} space. % \begin{macrocode} -\tl_const:Nx \c_catcode_other_space_tl { \char_generate:nn { `\ } { 12 } } +\tl_const:Ne \c_catcode_other_space_tl { \char_generate:nn { `\ } { 12 } } % \end{macrocode} % \end{macro} % @@ -2127,17 +2127,17 @@ % detokenized. % % \begin{macrocode} -\use:x +\use:e { - \prg_new_conditional:Npnn \exp_not:N \token_if_macro:N ##1 + \prg_new_conditional:Npnn \exp_not:N \token_if_macro:N #1 { p , T , F , TF } { \exp_not:N \exp_after:wN \exp_not:N \@@_if_macro_p:w - \exp_not:N \token_to_meaning:N ##1 \tl_to_str:n { ma : } + \exp_not:N \token_to_meaning:N #1 \tl_to_str:n { ma : } \s_@@_stop } \cs_new:Npn \exp_not:N \@@_if_macro_p:w - ##1 \tl_to_str:n { ma } ##2 \c_colon_str ##3 \s_@@_stop + #1 \tl_to_str:n { ma } #2 \c_colon_str #3 \s_@@_stop } { \str_if_eq:nnTF { #2 } { cro } @@ -2208,11 +2208,11 @@ \group_begin: \cs_set_protected:Npn \@@_tmp:w #1 { - \use:x + \use:e { \cs_new:Npn \exp_not:c { @@_delimit_by_ #1 :w } - ####1 \tl_to_str:n {#1} ####2 \s_@@_stop - { ####1 \tl_to_str:n {#1} } + ##1 \tl_to_str:n {#1} ##2 \s_@@_stop + { ##1 \tl_to_str:n {#1} } } } \@@_tmp:w { char" } @@ -2283,17 +2283,17 @@ \group_begin: \cs_set_protected:Npn \@@_tmp:w #1#2#3 { - \use:x + \use:e { - \prg_new_conditional:Npnn \exp_not:c { token_if_ #1 :N } ####1 + \prg_new_conditional:Npnn \exp_not:c { token_if_ #1 :N } ##1 { p , T , F , TF } { \cs_if_exist:cT { tex_ #2 :D } { - \exp_not:N \if_meaning:w ####1 \exp_not:c { tex_ #2 :D } + \exp_not:N \if_meaning:w ##1 \exp_not:c { tex_ #2 :D } \exp_not:N \prg_return_false: \exp_not:N \else: - \exp_not:N \if_meaning:w ####1 \exp_not:c { tex_ #2 def:D } + \exp_not:N \if_meaning:w ##1 \exp_not:c { tex_ #2 def:D } \exp_not:N \prg_return_false: \exp_not:N \else: } @@ -2301,7 +2301,7 @@ { \exp_not:N \exp_after:wN \exp_not:c { @@_delimit_by_ #2 :w } - \exp_not:N \token_to_meaning:N ####1 + \exp_not:N \token_to_meaning:N ##1 ? \tl_to_str:n {#2} \s_@@_stop } { \exp_not:n {#3} } @@ -2464,26 +2464,26 @@ end } { \tex_chardef:D \c_@@_A_int = `A ~ % - \use:x + \use:e { - \prg_new_conditional:Npnn \exp_not:N \token_if_primitive:N ##1 + \prg_new_conditional:Npnn \exp_not:N \token_if_primitive:N #1 { p , T , F , TF } { - \exp_not:N \token_if_macro:NTF ##1 + \exp_not:N \token_if_macro:NTF #1 \exp_not:N \prg_return_false: { \exp_not:N \exp_after:wN \exp_not:N \@@_if_primitive:NNw - \exp_not:N \token_to_meaning:N ##1 - \tl_to_str:n { : : : } \s_@@_stop ##1 + \exp_not:N \token_to_meaning:N #1 + \tl_to_str:n { : : : } \s_@@_stop #1 } } \cs_new:Npn \exp_not:N \@@_if_primitive:NNw - ##1##2 ##3 \c_colon_str ##4 \s_@@_stop + #1#2 #3 \c_colon_str #4 \s_@@_stop { \exp_not:N \tl_if_empty:oTF - { \exp_not:N \@@_if_primitive_space:w ##3 ~ } + { \exp_not:N \@@_if_primitive_space:w #3 ~ } { - \exp_not:N \@@_if_primitive_loop:N ##3 + \exp_not:N \@@_if_primitive_loop:N #3 \c_colon_str \s_@@_stop } { \exp_not:N \@@_if_primitive_nullfont:N } @@ -2694,7 +2694,7 @@ end % \begin{macrocode} \cs_new_protected:Npn \peek_remove_spaces:n #1 { - \cs_set:Npx \@@_false:w { \exp_not:n {#1} } + \cs_set:Npe \@@_false:w { \exp_not:n {#1} } \group_align_safe_begin: \cs_set:Npn \@@_true_aux:w { \peek_after:Nw \@@_remove_spaces: } \@@_true_aux:w @@ -2723,7 +2723,7 @@ end \cs_new_protected:Npn \peek_remove_filler:n #1 { \cs_set:Npn \@@_true_aux:w { \@@_remove_filler:w } - \cs_set:Npx \@@_false:w + \cs_set:Npe \@@_false:w { \exp_not:N \group_align_safe_end: \exp_not:n {#1} @@ -2786,13 +2786,13 @@ end \group_align_safe_begin: \cs_set_eq:NN \l_@@_search_token #3 \tl_set:Nn \l_@@_search_tl {#3} - \cs_set:Npx \@@_true_aux:w + \cs_set:Npe \@@_true_aux:w { \exp_not:N \group_align_safe_end: \exp_not:n {#4} } \cs_set_eq:NN \@@_true:w #1 - \cs_set:Npx \@@_false:w + \cs_set:Npe \@@_false:w { \exp_not:N \group_align_safe_end: \exp_not:n {#5} @@ -2928,7 +2928,7 @@ end { \tl_map_inline:nn { { TF } { T } { F } } { - \cs_new_protected:cpx { peek_ #1 ##1 :N ####1 } + \cs_new_protected:cpe { peek_ #1 ##1 :N ####1 } { \exp_not:c { @@_token ##1 _generic:NN ####1 } \exp_not:c { @@_execute_branches_ #1 : } diff --git a/macros/latex/contrib/l3kernel/l3unicode.dtx b/macros/latex/contrib/l3kernel/l3unicode.dtx index f79fc63e5a..2161e0963e 100644 --- a/macros/latex/contrib/l3kernel/l3unicode.dtx +++ b/macros/latex/contrib/l3kernel/l3unicode.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % @@ -549,7 +549,7 @@ } \cs_set_protected:Npn \@@_data_auxii:w #1 ; #2 ~ #3 \q_stop { - \tl_const:cx + \tl_const:ce { c_@@_nfd_ \codepoint_str_generate:n {"#1} _tl } { {"#2} @@ -607,11 +607,11 @@ \@@_add:nn { lowercase } {#5} \int_compare:nNnF {#4} = { \@@_data_offset:nn {#1} {#6} } { - \tl_const:cx + \tl_const:ce { c_@@_titlecase_ \codepoint_str_generate:n {"#1} _tl } { {"#6} { } { } } } - \tl_set:Nx \l_@@_next_codepoint_fint_tl + \tl_set:Ne \l_@@_next_codepoint_fint_tl { \int_eval:n { "#1 + 1 } } } \cs_set_protected:Npn \@@_add:nn #1#2 @@ -626,7 +626,7 @@ % The general category for unassigned characters is \texttt{Cn}, so we % find the correct value once and then use that. % \begin{macrocode} - \cs_set_protected:Npx \@@_data_auxv:nnnnw #1#2#3#4#5 Last> #6 \q_stop + \cs_set_protected:Npe \@@_data_auxv:nnnnw #1#2#3#4#5 Last> #6 \q_stop { \exp_not:N \tl_if_blank:nTF {#6} { @@ -679,7 +679,7 @@ \int_compare:nNnF { \int_div_truncate:nn { #2 - #1 } \c_@@_block_size_int } = 0 { - \tl_set:cx { l_@@_ #3 _block_clist } + \tl_set:ce { l_@@_ #3 _block_clist } { \exp_args:NNe \use:nn \use_none:n { \prg_replicate:nn { \c_@@_block_size_int } { , #4 } } @@ -689,7 +689,7 @@ } \prg_replicate:nn { \int_mod:nn { #2 - #1 } \c_@@_block_size_int } - { \clist_put_right:cx { l_@@_ #3 _block_clist } {#4} } + { \clist_put_right:ce { l_@@_ #3 _block_clist } {#4} } } % \end{macrocode} % To allow rapid comparison, each completed block is stored locally as a @@ -716,12 +716,12 @@ \tl_use:c { l_@@_ #1 _block_tl } _clist } { l_@@_ #1 _block_clist } - \tl_set:cx { l_@@_ #1 _block_tl } + \tl_set:ce { l_@@_ #1 _block_tl } { \int_eval:n { \tl_use:c { l_@@_ #1 _block_tl } + 1 } } } \prg_replicate:nn {#2} { - \tl_set:cx { l_@@_ #1 _pos_tl } + \tl_set:ce { l_@@_ #1 _pos_tl } { \int_eval:n { \tl_use:c { l_@@_ #1 _pos_tl } + 1 } } \exp_args:Nc \__kernel_intarray_gset:Nnn { g_@@_ #1 _index_intarray } @@ -846,7 +846,7 @@ \reverse_if:N \if_int_compare:w \int_eval:n { \__kernel_codepoint_data:nn { lowercase } {"#1} + "#1 } = "#3 ~ - \tl_const:cx + \tl_const:ce { c_@@_casefold_ \codepoint_str_generate:n {"#1} _tl } { {"#3} { } { } } \fi: @@ -862,7 +862,7 @@ % \begin{macrocode} \cs_set_protected:Npn \@@_data_auxii:w #1 ~ #2 ~ #3 ~ #4 \q_stop { - \tl_const:cx { c_@@_casefold_ \codepoint_str_generate:n {"#1} _tl } + \tl_const:ce { c_@@_casefold_ \codepoint_str_generate:n {"#1} _tl } { {"#2} {"#3} @@ -895,7 +895,7 @@ { \tl_if_empty:nF {#4} { - \tl_const:cx { c_@@_ #2 case_ \codepoint_str_generate:n {"#1} _tl } + \tl_const:ce { c_@@_ #2 case_ \codepoint_str_generate:n {"#1} _tl } { {"#3} {"#4} @@ -994,7 +994,7 @@ { \str_if_empty:NF \l_@@_tmpb_str { - \clist_const:cx { c_@@_grapheme_ \l_@@_tmpb_str _clist } + \clist_const:ce { c_@@_grapheme_ \l_@@_tmpb_str _clist } { \exp_after:wN \use_none:n \l_@@_tmpa_str } \cs_set_nopar:Npn \l_@@_tmpa_str { } } @@ -1004,7 +1004,7 @@ } \cs_set_protected:Npn \@@_data_auxii:w #1 .. #2 .. #3 \q_stop { - \cs_set_nopar:Npx \l_@@_tmpa_str + \cs_set_nopar:Npe \l_@@_tmpa_str { \l_@@_tmpa_str , \tl_trim_spaces:n {#1} .. \tl_trim_spaces:n {#2} diff --git a/macros/latex/contrib/l3kernel/source3.pdf b/macros/latex/contrib/l3kernel/source3.pdf Binary files differindex 458c832be3..a89fb20da4 100644 --- a/macros/latex/contrib/l3kernel/source3.pdf +++ b/macros/latex/contrib/l3kernel/source3.pdf diff --git a/macros/latex/contrib/l3kernel/source3.tex b/macros/latex/contrib/l3kernel/source3.tex index ee6efdcc7a..bd89e29524 100644 --- a/macros/latex/contrib/l3kernel/source3.tex +++ b/macros/latex/contrib/l3kernel/source3.tex @@ -40,6 +40,10 @@ for those people who are interested. %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% \documentclass[kernel]{l3doc} + +\newif\ifinterface +\interfacefalse + \listfiles \begin{document} @@ -53,7 +57,7 @@ for those people who are interested. {latex-team@latex-project.org}% }% } -\date{Released 2023-08-29} +\date{Released 2023-10-10} \pagenumbering{roman} \maketitle diff --git a/macros/latex/contrib/l3kernel/source3body.tex b/macros/latex/contrib/l3kernel/source3body.tex index cddbdac6e2..34573d3d64 100644 --- a/macros/latex/contrib/l3kernel/source3body.tex +++ b/macros/latex/contrib/l3kernel/source3body.tex @@ -44,8 +44,16 @@ for those people who are interested. \setlength\parskip{\baselineskip} \noindent +\ifinterface This is the reference documentation for the \pkg{expl3} -programming environment. The \pkg{expl3} modules set up an experimental +programming environment; see the matching \pkg{source3} PDF +for the typeset sources. +\else +This is the typset sources for the \pkg{expl3} +programming environment; see the matching \pkg{interface3} PDF +for the API reference manual. +\fi +The \pkg{expl3} modules set up a naming scheme for \LaTeX{} commands, which allow the \LaTeX{} programmer to systematically name functions and variables, and specify the argument types of functions. diff --git a/macros/latex/contrib/l3packages/CHANGELOG.md b/macros/latex/contrib/l3packages/CHANGELOG.md index de080e8d41..05001a0e8f 100644 --- a/macros/latex/contrib/l3packages/CHANGELOG.md +++ b/macros/latex/contrib/l3packages/CHANGELOG.md @@ -7,8 +7,14 @@ this project uses date-based 'snapshot' version identifiers. ## [Unreleased] +## [2023-10-10] + +### Changed +- Track `expl3` changes + ## [2023-08-29] +### Added - Re-add `\GetDocumentCommandArgSpec`, etc., to `xparse` stub ## [2023-02-02] @@ -231,7 +237,8 @@ this project uses date-based 'snapshot' version identifiers. - Switch to ISO date format - Improve cross-module use of internal functions -[Unreleased]: https://github.com/latex3/latex3/compare/2023-08-29...HEAD +[Unreleased]: https://github.com/latex3/latex3/compare/2023-10-10...HEAD +[2023-10-10]: https://github.com/latex3/latex3/compare/2023-08-29...2023-10-10 [2023-08-29]: https://github.com/latex3/latex3/compare/2023-02-02...2023-08-29 [2023-02-02]: https://github.com/latex3/latex3/compare/2023-02-01...2023-02-02 [2023-02-01]: https://github.com/latex3/latex3/compare/2023-01-16...2023-02-01 diff --git a/macros/latex/contrib/l3packages/README.md b/macros/latex/contrib/l3packages/README.md index e1f195b332..d3ecea7028 100644 --- a/macros/latex/contrib/l3packages/README.md +++ b/macros/latex/contrib/l3packages/README.md @@ -1,7 +1,7 @@ LaTeX3 High-Level Concepts ========================== -Release 2023-08-29 +Release 2023-10-10 Overview -------- @@ -20,13 +20,13 @@ updated at the same time. Currently included in the CTAN release of `l3packages` are the following bundles: -* `l3keys2e` +* `l3keys2e` (deprecated in favor of updated LaTeX kernel methods) * `xfp` (from 2022-06-01 part of the LaTeX format) -* `xfrac` -* `xparse` +* `xfrac` +* `xparse` (deprecated in favor of elements move to the LaTeX kernel) * `xtemplate` -`l3keys2e` +`l3keys2e` (deprecated) ---------- The `l3keys2e` package allows keys defined using `l3keys` to be used as package diff --git a/macros/latex/contrib/l3packages/l3keys2e.dtx b/macros/latex/contrib/l3packages/l3keys2e.dtx index 13fd652eaa..376cb136ac 100644 --- a/macros/latex/contrib/l3packages/l3keys2e.dtx +++ b/macros/latex/contrib/l3packages/l3keys2e.dtx @@ -62,7 +62,7 @@ % }^^A % } % -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % @@ -154,7 +154,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3keys2e}{2023-08-29}{} +\ProvidesExplPackage{l3keys2e}{2023-10-10}{} {LaTeX2e option processing using LaTeX3 keys} % \end{macrocode} % @@ -206,7 +206,7 @@ { unknown .code:n = { - \msg_error:nnxx { keyvalue } { option-unknown } + \msg_error:nnee { keyvalue } { option-unknown } { \l_keys_key_str } { \@currname } } } @@ -264,7 +264,7 @@ { \clist_map_inline:cn { opt@ \@currname . \@currext } { - \keys_if_exist:nxTF {#1} { \@@_latexe_remove_equals:n {##1} } + \keys_if_exist:neTF {#1} { \@@_latexe_remove_equals:n {##1} } { \clist_put_right:Nn \l_@@_latexe_options_clist {##1} } { \clist_put_right:Nn \@unusedoptionlist {##1} } } @@ -284,7 +284,7 @@ { \clist_map_inline:Nn \@classoptionslist { - \keys_if_exist:nxT {#1} { \@@_latexe_remove_equals:n {##1} } + \keys_if_exist:neT {#1} { \@@_latexe_remove_equals:n {##1} } { \clist_put_right:Nn \l_@@_latexe_options_clist {##1} \clist_remove_all:Nn \@unusedoptionlist {##1} diff --git a/macros/latex/contrib/l3packages/l3keys2e.pdf b/macros/latex/contrib/l3packages/l3keys2e.pdf Binary files differindex 754439a4ca..cfef37deff 100644 --- a/macros/latex/contrib/l3packages/l3keys2e.pdf +++ b/macros/latex/contrib/l3packages/l3keys2e.pdf diff --git a/macros/latex/contrib/l3packages/xfp.dtx b/macros/latex/contrib/l3packages/xfp.dtx index 44fccd9271..2c3a5bf732 100644 --- a/macros/latex/contrib/l3packages/xfp.dtx +++ b/macros/latex/contrib/l3packages/xfp.dtx @@ -63,7 +63,7 @@ % }^^A % } % -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % @@ -171,7 +171,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{xfp}{2023-08-29}{} +\ProvidesExplPackage{xfp}{2023-10-10}{} {L3 Floating point unit} % \end{macrocode} % diff --git a/macros/latex/contrib/l3packages/xfp.pdf b/macros/latex/contrib/l3packages/xfp.pdf Binary files differindex be5ed0387f..aa5b6c0293 100644 --- a/macros/latex/contrib/l3packages/xfp.pdf +++ b/macros/latex/contrib/l3packages/xfp.pdf diff --git a/macros/latex/contrib/l3packages/xfrac.dtx b/macros/latex/contrib/l3packages/xfrac.dtx index 70981e871a..6bce5f93ee 100644 --- a/macros/latex/contrib/l3packages/xfrac.dtx +++ b/macros/latex/contrib/l3packages/xfrac.dtx @@ -65,7 +65,7 @@ % }^^A % } % -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % @@ -535,7 +535,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{xfrac}{2023-08-29}{} +\ProvidesExplPackage{xfrac}{2023-10-10}{} {L3 Experimental split-level fractions} % \end{macrocode} % @@ -784,11 +784,11 @@ \mode_if_math:TF { \cs_set_eq:NN \@@_text_or_math:n \text - \cs_set:Npx \@@_denominator_font_change: + \cs_set:Npe \@@_denominator_font_change: { \tex_fam:D \l_@@_denominator_font_tl } - \cs_set:Npx \@@_numerator_font_change: + \cs_set:Npe \@@_numerator_font_change: { \tex_fam:D \l_@@_numerator_font_tl } - \cs_set:Npx \@@_slash_symbol_font_change: + \cs_set:Npe \@@_slash_symbol_font_change: { \tex_fam:D \l_@@_slash_symbol_font_tl } } { diff --git a/macros/latex/contrib/l3packages/xfrac.pdf b/macros/latex/contrib/l3packages/xfrac.pdf Binary files differindex 7b124a040f..61a472a901 100644 --- a/macros/latex/contrib/l3packages/xfrac.pdf +++ b/macros/latex/contrib/l3packages/xfrac.pdf diff --git a/macros/latex/contrib/l3packages/xparse.dtx b/macros/latex/contrib/l3packages/xparse.dtx index 72a31e6871..ba98987d7f 100644 --- a/macros/latex/contrib/l3packages/xparse.dtx +++ b/macros/latex/contrib/l3packages/xparse.dtx @@ -67,7 +67,7 @@ % }^^A % } % -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % @@ -1064,7 +1064,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{xparse}{2023-08-29}{} +\ProvidesExplPackage{xparse}{2023-10-10}{} {L3 Experimental document command parser} % \end{macrocode} % @@ -1091,7 +1091,7 @@ { \msg_redirect_module:nnn {#1} { info } { none } } \cs_new_protected:Npn \@@_unknown_argument_type_error:n ##1 { - \msg_error:nnxx {#1} { unknown-argument-type } + \msg_error:nnee {#1} { unknown-argument-type } { \@@_environment_or_command: } { \tl_to_str:n {##1} } } } @@ -1126,7 +1126,7 @@ % These argument types are aliases of more general ones, for example % with the default argument |-NoValue-|. % \begin{macrocode} -\cs_new_protected:Npx \@@_normalize_type_g:w +\cs_new_protected:Npe \@@_normalize_type_g:w { \exp_not:N \@@_normalize_type_G:w { \exp_not:V \c_novalue_tl } } % \end{macrocode} % \end{macro} @@ -1399,7 +1399,7 @@ \cs_gset_protected:Npn \@@_get_arg_spec_error:n #1 { \bool_set_true:N \l_@@_environment_bool - \str_set:Nx \l_@@_environment_str {#1} + \str_set:Ne \l_@@_environment_str {#1} \@@_get_arg_spec_error_aux:n { \cs_if_exist:cTF { \l_@@_environment_str } } } @@ -1407,11 +1407,11 @@ { #1 { - \msg_error:nnx { cmd } { non-xparse } + \msg_error:nne { cmd } { non-xparse } { \@@_environment_or_command: } } { - \msg_error:nnx { cmd } { unknown } + \msg_error:nne { cmd } { unknown } { \@@_environment_or_command: } } } @@ -1427,7 +1427,7 @@ { \__kernel_cmd_if_xparse:NTF #1 { - \tl_set:Nx \ArgumentSpecification { \tl_item:Nn #1 { 2 } } + \tl_set:Ne \ArgumentSpecification { \tl_item:Nn #1 { 2 } } #2 } {#3} diff --git a/macros/latex/contrib/l3packages/xparse.pdf b/macros/latex/contrib/l3packages/xparse.pdf Binary files differindex dffaa1ae59..483370f2fc 100644 --- a/macros/latex/contrib/l3packages/xparse.pdf +++ b/macros/latex/contrib/l3packages/xparse.pdf diff --git a/macros/latex/contrib/l3packages/xtemplate.dtx b/macros/latex/contrib/l3packages/xtemplate.dtx index 8386be5d98..5080d94b0f 100644 --- a/macros/latex/contrib/l3packages/xtemplate.dtx +++ b/macros/latex/contrib/l3packages/xtemplate.dtx @@ -63,7 +63,7 @@ % }^^A % } % -% \date{Released 2023-08-29} +% \date{Released 2023-10-10} % % \maketitle % @@ -711,15 +711,10 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{xtemplate}{2023-08-29}{} +\ProvidesExplPackage{xtemplate}{2023-10-10}{} {L3 Experimental prototype document functions} % \end{macrocode} % -% \begin{macrocode} -\cs_generate_variant:Nn \keys_define:nn { nx } -\cs_generate_variant:Nn \tl_trim_spaces:n { e } -% \end{macrocode} -% % \subsection{Variables and constants} % % \begin{variable}{\c_@@_code_root_tl} @@ -943,7 +938,7 @@ \int_compare:nNnTF {#2} = \l_@@_tmp_tl {#3} { - \msg_error:nnxxx { xtemplate } + \msg_error:nneee { xtemplate } { argument-number-mismatch } {#1} { \l_@@_tmp_tl } {#2} } } @@ -959,7 +954,7 @@ \cs_if_exist:cTF { \c_@@_code_root_tl #1 / #2 } {#3} { - \msg_error:nnxx { xtemplate } { no-template-code } + \msg_error:nnee { xtemplate } { no-template-code } {#1} {#2} } } @@ -976,7 +971,7 @@ { \cs_if_exist:cTF { @@_store_value_ #1 :n } {#2} - { \msg_error:nnx { xtemplate } { unknown-keytype } {#1} } + { \msg_error:nne { xtemplate } { unknown-keytype } {#1} } } \cs_generate_variant:Nn \@@_execute_if_keytype_exist:nT { o } % \end{macrocode} @@ -990,7 +985,7 @@ { \prop_if_in:NnTF \g_@@_object_type_prop {#1} {#2} - { \msg_error:nnx { xtemplate } { unknown-object-type } {#1} } + { \msg_error:nne { xtemplate } { unknown-object-type } {#1} } } % \end{macrocode} % \end{macro} @@ -1005,7 +1000,7 @@ \cs_if_exist:cTF { \c_@@_keytypes_root_tl #1 / #2 } {#3} { - \msg_error:nnxx { xtemplate } { unknown-template } + \msg_error:nnee { xtemplate } { unknown-template } {#1} {#2} } } @@ -1191,13 +1186,13 @@ \int_set:Nn \l_@@_tmp_int {#2} \int_compare:nTF { 0 <= \l_@@_tmp_int <= 9 } { - \msg_info:nnxx { xtemplate } { declare-object-type } - {#1} { \exp_not:V \l_@@_tmp_int } + \msg_info:nnnV { xtemplate } { declare-object-type } + {#1} \l_@@_tmp_int \prop_gput:NnV \g_@@_object_type_prop {#1} \l_@@_tmp_int } { - \msg_error:nnxx { xtemplate } { bad-number-of-arguments } + \msg_error:nnee { xtemplate } { bad-number-of-arguments } {#1} { \exp_not:V \l_@@_tmp_int } } } @@ -1266,7 +1261,7 @@ \seq_if_in:NoTF \l_@@_key_order_seq \l_@@_key_name_tl { - \msg_error:nnx { xtemplate } + \msg_error:nne { xtemplate } { duplicate-key-interface } { \l_@@_key_name_tl } } @@ -1281,7 +1276,7 @@ { \tl_if_empty:NT \l_@@_keytype_arg_tl { - \msg_error:nnx { xtemplate } + \msg_error:nne { xtemplate } { keytype-requires-argument } {#1} \bool_set_true:N \l_@@_error_bool \seq_map_break: @@ -1290,7 +1285,7 @@ } \cs_new:Npn \@@_parse_keys_elt_aux: { - \tl_set:Nx \l_@@_tmp_tl + \tl_set:Ne \l_@@_tmp_tl { \l_@@_keytype_tl \tl_if_empty:NF \l_@@_keytype_arg_tl @@ -1331,7 +1326,7 @@ % that, the standard delimited argument method is used to separate the % two parts. % \begin{macrocode} -\cs_new_protected:Npx \@@_split_keytype:n #1 +\cs_new_protected:Npe \@@_split_keytype:n #1 { \exp_not:N \bool_set_false:N \exp_not:N \l_@@_error_bool \tl_set:Nn \exp_not:N \l_@@_tmp_tl {#1} @@ -1347,32 +1342,32 @@ } { \exp_not:N \bool_set_true:N \exp_not:N \l_@@_error_bool - \msg_error:nnx { xtemplate } { missing-keytype } {#1} + \msg_error:nne { xtemplate } { missing-keytype } {#1} } } -\use:x +\use:e { \cs_new_protected:Npn \exp_not:N \@@_split_keytype_aux:w - ##1 \token_to_str:N : ##2 \s_@@_stop + #1 \token_to_str:N : #2 \s_@@_stop { - \tl_put_right:Nx \exp_not:N \l_@@_key_name_tl + \tl_put_right:Ne \exp_not:N \l_@@_key_name_tl { \exp_not:N \tl_trim_spaces:e - { \exp_not:N \tl_to_str:n {##1} } + { \exp_not:N \tl_to_str:n {#1} } } - \tl_if_in:nnTF {##2} { \token_to_str:N : } + \tl_if_in:nnTF {#2} { \token_to_str:N : } { \tl_put_right:Nn \exp_not:N \l_@@_key_name_tl { \token_to_str:N : } - \exp_not:N \@@_split_keytype_aux:w ##2 \s_@@_stop + \exp_not:N \@@_split_keytype_aux:w #2 \s_@@_stop } { \exp_not:N \tl_if_empty:NTF \exp_not:N \l_@@_key_name_tl { - \msg_error:nnx { xtemplate } { empty-key-name } - { \token_to_str:N : ##2 } + \msg_error:nne { xtemplate } { empty-key-name } + { \token_to_str:N : #2 } } - { \exp_not:N \@@_split_keytype_arg:n {##2} } + { \exp_not:N \@@_split_keytype_arg:n {#2} } } } } @@ -1395,7 +1390,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_split_keytype_arg:n #1 { - \tl_set:Nx \l_@@_keytype_tl { \tl_trim_spaces:n {#1} } + \tl_set:Ne \l_@@_keytype_tl { \tl_trim_spaces:n {#1} } \tl_clear:N \l_@@_keytype_arg_tl \cs_set_protected:Npn \@@_split_keytype_arg_aux:n ##1 { @@ -1406,11 +1401,11 @@ { \tl_if_blank:nT {####1} { - \tl_set:Nx \l_@@_keytype_tl + \tl_set:Ne \l_@@_keytype_tl { \tl_trim_spaces:n {##1} } \tl_if_blank:nF {####2} { - \tl_set:Nx \l_@@_keytype_arg_tl + \tl_set:Ne \l_@@_keytype_arg_tl { \use:n ####2 } } \seq_map_break: @@ -1548,7 +1543,7 @@ \@@_store_restrictions:n { #1 / #2 } \prop_map_inline:Nn \l_@@_keytypes_prop { - \msg_error:nnxxx { xtemplate } { key-not-implemented } + \msg_error:nneee { xtemplate } { key-not-implemented } {##1} {#2} {#1} } } @@ -1560,7 +1555,7 @@ % this is an error function. % \begin{macrocode} \cs_new_protected:Npn \@@_parse_vars_elt:n #1 - { \msg_error:nnx { xtemplate } { key-no-variable } {#1} } + { \msg_error:nne { xtemplate } { key-no-variable } {#1} } % \end{macrocode} % \end{macro} % @@ -1572,7 +1567,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_parse_vars_elt:nnn #1#2#3 { - \tl_set:Nx \l_@@_key_name_tl + \tl_set:Ne \l_@@_key_name_tl { \tl_trim_spaces:e { \tl_to_str:n {#2} } } \prop_get:NoNTF \l_@@_keytypes_prop @@ -1583,7 +1578,7 @@ \@@_parse_vars_elt_aux:nn {#1} {#3} \prop_remove:NV \l_@@_keytypes_prop \l_@@_key_name_tl } - { \msg_error:nnx { xtemplate } { unknown-key } {#2} } + { \msg_error:nne { xtemplate } { unknown-key } {#2} } } % \end{macrocode} % \end{macro} @@ -1606,7 +1601,7 @@ { \tl_if_blank:nTF {#2} { - \exp_args:Nnnx \@@_parse_vars_elt_aux:nnn + \exp_args:Nnne \@@_parse_vars_elt_aux:nnn {#1} { global } { \tl_trim_spaces:n {#3} } } { \msg_error:nnn { xtemplate } { bad-variable } { #2 global #3 } } @@ -1630,7 +1625,7 @@ \exp_not:c { cs_ \str_if_eq:nnT {#1} { global } { g } set:Npn } { \exp_not:o \l_@@_keytype_arg_tl } - {####1} + {##1} } } \prop_put:Non \l_@@_vars_prop @@ -1644,7 +1639,7 @@ { \exp_not:c { cs_ \str_if_eq:nnT {#1} { global } { g } set:Npn } - \exp_not:N #3 { \UseInstance {####1} } + \exp_not:N #3 { \UseInstance {##1} } } } \prop_put:Non \l_@@_vars_prop @@ -1665,12 +1660,12 @@ \prop_put:Non \l_@@_vars_prop \l_@@_key_name_tl {#2#3} } - { \msg_error:nnx { xtemplate } { bad-variable } { #2#3 } } + { \msg_error:nne { xtemplate } { bad-variable } { #2#3 } } } } \cs_new_protected:Npn \@@_parse_vars_elt_key:nn #1#2 { - \keys_define:nx { template / #1 } + \keys_define:ne { template / #1 } { \l_@@_key_name_tl #2 } } % \end{macrocode} @@ -1708,7 +1703,7 @@ { \clist_set:No \l_@@_tmp_clist { \l_@@_keytype_arg_tl } \prop_put:Non \l_@@_vars_prop \l_@@_key_name_tl { } - \keys_define:nx { template / #1 } { \l_@@_key_name_tl .choice: } + \keys_define:ne { template / #1 } { \l_@@_key_name_tl .choice: } \keyval_parse:nnn { \@@_implement_choice_elt:n } { \@@_implement_choice_elt:nnn {#1} } @@ -1720,7 +1715,7 @@ { \clist_map_inline:Nn \l_@@_tmp_clist { - \msg_error:nnx { xtemplate } { choice-not-implemented } + \msg_error:nne { xtemplate } { choice-not-implemented } {##1} } } @@ -1731,11 +1726,11 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_implement_choices_default: { - \tl_set:Nx \l_@@_tmp_tl + \tl_set:Ne \l_@@_tmp_tl { \l_@@_key_name_tl \c_space_tl \l_@@_tmp_tl } \prop_if_in:NoF \l_@@_vars_prop \l_@@_tmp_tl { - \tl_set:Nx \l_@@_tmp_tl + \tl_set:Ne \l_@@_tmp_tl { \l_@@_key_name_tl \c_space_tl \l_@@_tmp_tl } \prop_if_in:NoF \l_@@_vars_prop \l_@@_tmp_tl { @@ -1744,7 +1739,7 @@ \@@_split_keytype_arg:o \l_@@_tmp_tl \prop_get:NoN \l_@@_values_prop \l_@@_key_name_tl \l_@@_tmp_tl - \msg_error:nnxxx { xtemplate } { unknown-default-choice } + \msg_error:nneee { xtemplate } { unknown-default-choice } { \l_@@_key_name_tl } { \l_@@_key_name_tl } { \l_@@_keytype_arg_tl } } @@ -1772,7 +1767,7 @@ \prop_get:NoN \l_@@_keytypes_prop \l_@@_key_name_tl \l_@@_tmp_tl \@@_split_keytype_arg:o \l_@@_tmp_tl - \msg_error:nnxxx { xtemplate } { unknown-choice } + \msg_error:nneee { xtemplate } { unknown-choice } { \l_@@_key_name_tl } {#2} { \l_@@_keytype_arg_tl } } @@ -1787,7 +1782,7 @@ \prop_get:NoN \l_@@_keytypes_prop \l_@@_key_name_tl \l_@@_tmp_tl \@@_split_keytype_arg:o \l_@@_tmp_tl - \msg_error:nnxxx { xtemplate } { unknown-choice } + \msg_error:nneee { xtemplate } { unknown-choice } { \l_@@_key_name_tl } {#2} { \l_@@_keytype_arg_tl } } @@ -1795,15 +1790,15 @@ } \cs_new_protected:Npn \@@_implement_choice_elt_aux:nnn #1#2#3 { - \keys_define:nx { template / #1 } + \keys_define:ne { template / #1 } { \l_@@_key_name_tl / #2 .code:n = { \exp_not:n {#3} } } - \tl_set:Nx \l_@@_tmp_tl + \tl_set:Ne \l_@@_tmp_tl { \l_@@_key_name_tl \c_space_tl #2 } \prop_put:Non \l_@@_vars_prop \l_@@_tmp_tl {#3} } \cs_new_protected:Npn \@@_implement_choice_elt:n #1 { - \msg_error:nnxxx { xtemplate } { choice-requires-code } + \msg_error:nneee { xtemplate } { choice-requires-code } { \l_@@_key_name_tl } {#1} } % \end{macrocode} @@ -1886,7 +1881,7 @@ \cs_new_protected:Npn \@@_parse_values_elt:n #1 { \bool_set_true:N \l_@@_error_bool - \msg_error:nnx { xtemplate } { key-no-value } {#1} + \msg_error:nne { xtemplate } { key-no-value } {#1} } % \end{macrocode} % \end{macro} @@ -1900,7 +1895,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_parse_values_elt:nn #1#2 { - \tl_set:Nx \l_@@_key_name_tl + \tl_set:Ne \l_@@_key_name_tl { \tl_trim_spaces:e { \tl_to_str:n {#1} } } \prop_get:NoNTF \l_@@_keytypes_prop \l_@@_key_name_tl \l_@@_tmp_tl @@ -1914,7 +1909,7 @@ { \@@_parse_values_elt_aux:n {#2} } } { - \msg_error:nnx { xtemplate } { unknown-key } + \msg_error:nne { xtemplate } { unknown-key } { \l_@@_key_name_tl } } } @@ -1978,7 +1973,7 @@ \prop_put:Nnn \l_@@_values_prop { from~template } {#2} \@@_store_values:n { #1 / #3 / #4 } \@@_convert_to_assignments: - \cs_set_protected:cpx { \c_@@_instances_root_tl #1 / #3 / #4 } + \cs_set_protected:cpe { \c_@@_instances_root_tl #1 / #3 / #4 } { \exp_not:N \@@_assignments_push:n { \exp_not:o \l_@@_assignments_tl } @@ -2009,7 +2004,7 @@ { \c_@@_instances_root_tl #1 / #2 / #3 } } { - \msg_error:nnxx { xtemplate } { unknown-instance } + \msg_error:nnee { xtemplate } { unknown-instance } {#1} {#3} } } @@ -2035,7 +2030,7 @@ {#2} {#3} {#4} } { - \msg_error:nnxx { xtemplate } { unknown-instance } + \msg_error:nnee { xtemplate } { unknown-instance } {#1} {#3} } } @@ -2094,7 +2089,7 @@ \tl_set:Nn \l_@@_key_name_tl {#1} \use:c { @@_assign_ \l_@@_keytype_tl : } } - { \msg_error:nnx { xtemplate } { unknown-attribute } {#1} } + { \msg_error:nne { xtemplate } { unknown-attribute } {#1} } } } \cs_generate_variant:Nn \@@_convert_to_assignments_aux:nn { no } @@ -2170,7 +2165,7 @@ \@@_if_key_value:oTF \l_@@_value_tl { \@@_key_to_value: - \tl_put_right:Nx \l_@@_assignments_tl + \tl_put_right:Ne \l_@@_assignments_tl { \exp_not:c { #1 _eq:NN } \exp_not:o \l_@@_var_tl @@ -2178,7 +2173,7 @@ } } { - \tl_put_right:Nx \l_@@_assignments_tl + \tl_put_right:Ne \l_@@_assignments_tl { \exp_not:c { #1 _ \l_@@_value_tl :N } \exp_not:o \l_@@_var_tl @@ -2197,16 +2192,16 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_assign_choice: { - \@@_assign_choice_aux:xF + \@@_assign_choice_aux:eF { \l_@@_key_name_tl \c_space_tl \l_@@_value_tl } { - \@@_assign_choice_aux:xF + \@@_assign_choice_aux:eF { \l_@@_key_name_tl \c_space_tl unknown } { \prop_get:NoN \l_@@_keytypes_prop \l_@@_key_name_tl \l_@@_tmp_tl \@@_split_keytype_arg:o \l_@@_tmp_tl - \msg_error:nnxxx { xtemplate } { unknown-choice } + \msg_error:nneee { xtemplate } { unknown-choice } { \l_@@_key_name_tl } { \l_@@_value_tl } { \l_@@_keytype_arg_tl } } @@ -2220,7 +2215,7 @@ \l_@@_tmp_tl { \tl_put_right:No \l_@@_assignments_tl \l_@@_tmp_tl } } -\cs_generate_variant:Nn \@@_assign_choice_aux:nF { x } +\cs_generate_variant:Nn \@@_assign_choice_aux:nF { e } % \end{macrocode} % \end{macro} % \end{macro} @@ -2237,7 +2232,7 @@ } \cs_new_protected:Npn \@@_assign_function_aux:N #1 { - \tl_put_right:Nx \l_@@_assignments_tl + \tl_put_right:Ne \l_@@_assignments_tl { \cs_generate_from_arg_count:NNnn \exp_not:o \l_@@_var_tl @@ -2264,7 +2259,7 @@ } \cs_new_protected:Npn \@@_assign_instance_aux:N #1 { - \tl_put_right:Nx \l_@@_assignments_tl + \tl_put_right:Ne \l_@@_assignments_tl { \exp_not:N #1 \exp_not:o \l_@@_var_tl { @@ -2340,14 +2335,14 @@ \@@_if_key_value:oTF \l_@@_value_tl { \@@_key_to_value: - \tl_put_right:Nx \l_@@_assignments_tl + \tl_put_right:Ne \l_@@_assignments_tl { #1 \exp_not:o \l_@@_var_tl \exp_not:o \l_@@_value_tl } } { - \tl_put_right:Nx \l_@@_assignments_tl + \tl_put_right:Ne \l_@@_assignments_tl { #2 \exp_not:o \l_@@_var_tl { \exp_not:o \l_@@_value_tl } @@ -2379,7 +2374,7 @@ { \@@_if_key_value:oT \l_@@_value_tl { \@@_key_to_value: } - \tl_put_right:Nx \l_@@_assignments_tl + \tl_put_right:Ne \l_@@_assignments_tl { #1 \exp_not:o \l_@@_var_tl { \exp_not:o \l_@@_value_tl } @@ -2403,7 +2398,7 @@ { \exp_after:wN \@@_key_to_value_auxi:w \l_@@_value_tl } \cs_new_protected:Npn \@@_key_to_value_auxi:w \KeyValue #1 { - \tl_set:Nx \l_@@_tmp_tl { \tl_trim_spaces:e { \tl_to_str:n {#1} } } + \tl_set:Ne \l_@@_tmp_tl { \tl_trim_spaces:e { \tl_to_str:n {#1} } } \prop_get:NoNTF \l_@@_vars_prop \l_@@_tmp_tl @@ -2413,7 +2408,7 @@ \s_@@_mark global \q_@@_nil \s_@@_stop } { - \msg_error:nnx { xtemplate } { unknown-attribute } + \msg_error:nne { xtemplate } { unknown-attribute } { \l_@@_tmp_tl } } } @@ -2450,7 +2445,7 @@ { \str_if_eq:nnTF {#1} {#3} { \@@_use_template:nnn {#3} {#4} {#5} } - { \msg_error:nnxx { xtemplate } { type-mismatch } {#1} {#3} } + { \msg_error:nnee { xtemplate } { type-mismatch } {#1} {#3} } } \cs_new_protected:Npn \@@_use_instance_aux:nn #1#2 { @@ -2468,7 +2463,7 @@ \@@_if_instance_exist:nnnTF {#1} { } {#2} { \use:c { \c_@@_instances_root_tl #1 / / #2 } } { - \msg_error:nnxx { xtemplate } { unknown-instance } + \msg_error:nnee { xtemplate } { unknown-instance } {#1} {#2} } } @@ -2570,7 +2565,7 @@ } \cs_new_protected:Npn \@@_show:Nnnn #1#2#3#4 { - \msg_show:nnxxxx { xtemplate } { show-attribute } + \msg_show:nneeee { xtemplate } { show-attribute } { \tl_to_str:n {#2} } { \tl_to_str:n {#3} } { \tl_to_str:n {#4} } @@ -2589,7 +2584,7 @@ \@@_if_instance_exist:nnnT {#1} {#2} {#3} { \@@_recover_values:n { #1 / #2 / #3 } - \msg_show:nnxxxx { xtemplate } { show-values } + \msg_show:nneeee { xtemplate } { show-values } { \tl_to_str:n {#1} } { \tl_to_str:n {#2} } { \tl_to_str:n {#3} } diff --git a/macros/latex/contrib/l3packages/xtemplate.pdf b/macros/latex/contrib/l3packages/xtemplate.pdf Binary files differindex 31258f27de..57ab72b148 100644 --- a/macros/latex/contrib/l3packages/xtemplate.pdf +++ b/macros/latex/contrib/l3packages/xtemplate.pdf diff --git a/macros/latex/contrib/non-decimal-units/README.md b/macros/latex/contrib/non-decimal-units/README.md index fb4f75a2c0..e5e9eb728c 100644 --- a/macros/latex/contrib/non-decimal-units/README.md +++ b/macros/latex/contrib/non-decimal-units/README.md @@ -5,9 +5,9 @@ Macros for displaying and manipulating historical non-decimal units. See [non-decimal-units.pdf](docs/non-decimal-units.pdf) for the documentation. -Contents last updated 2023-09-27. +Contents last updated 2023-10-10. -<!-- Package available via CTAN at https://www.ctan.org/pkg/non-decimal-units --> +Package available via CTAN at https://www.ctan.org/pkg/non-decimal-units License: CC-BY-SA 4.0 Author: Mikkel Eide Eriksen <mikkel.eriksen@gmail.com> diff --git a/macros/latex/contrib/non-decimal-units/docs/non-decimal-units.pdf b/macros/latex/contrib/non-decimal-units/docs/non-decimal-units.pdf Binary files differindex 60e5b7acd8..19b21b0375 100644 --- a/macros/latex/contrib/non-decimal-units/docs/non-decimal-units.pdf +++ b/macros/latex/contrib/non-decimal-units/docs/non-decimal-units.pdf diff --git a/macros/latex/contrib/non-decimal-units/docs/non-decimal-units.preamble.sty b/macros/latex/contrib/non-decimal-units/docs/non-decimal-units.preamble.sty new file mode 100644 index 0000000000..977d02cbf5 --- /dev/null +++ b/macros/latex/contrib/non-decimal-units/docs/non-decimal-units.preamble.sty @@ -0,0 +1,106 @@ +\usepackage{makeidx} +\makeindex + +\usepackage{needspace} + +\usepackage{csquotes} +\usepackage[english]{babel} +\usepackage[ + backend=biber, + urldate=long, + date=long, +]{biblatex} +\addbibresource{non-decimal-units.bib} + +\usepackage{enumitem} +\usepackage[ + hidelinks, +]{hyperref} + +\usepackage{tcolorbox} +\tcbuselibrary{documentation} +\tcbuselibrary{minted} +\tcbuselibrary{breakable} + +\definecolor{DarkDefinition}{rgb}{0.392,0.392,0.942} + +\tcbset{ + listing engine=minted, + color definition=DarkDefinition, + floatplacement=h, + index colorize=true, + doc head={ + interior style={ + fill, + color=blue!10, + }, + boxsep=2pt, + after skip=0pt, + nobeforeafter, + }, + doc raster={ + raster after skip=0pt, + }, + before doc body={ + \begin{tcolorbox}[ + colback=blue!5, + colframe=blue!5, + arc=0pt, + outer arc=0pt, + before skip=0pt, + nobeforeafter, + ] + }, + after doc body={\end{tcolorbox}}, +} + +\AtBeginEnvironment{tcb@manual@entry}{% + \needspace{4\baselineskip}% +} + +\newtcbinputlisting{\unitlisting}[2]{% + listing file = {../latex/non-decimal-units.#1.tex}, + title = Listing of units loaded with the \docAuxKey{#1} option, + listing only, + breakable, + minted options={fontsize=\small}, + docexample, +} + +\setlist[description]{ + leftmargin=5em, + rightmargin=\leftmargin, + itemindent=\labelwidth, + align=right, + font=\docAuxKey, + noitemsep, +} + +\usepackage{fnpct} + +\usepackage{tabularray} +\UseTblrLibrary{booktabs} + +\usepackage{cleveref} + +\RequirePackage[autolanguage]{numprint} + +\usepackage[ + danish, +]{non-decimal-units} + +\RequirePackage{fontspec} +\newfontfamily\mufifont{Palemonas MUFI} + +\RequirePackage[ + MUFI, + fonts={ + MUFI=\mufifont, + }, +]{unicode-alphabets} + +\nduKeys{% + units/mark/symbol=\mufi{markflour}, + units/skilling/symbol=\mufi{schillgerm}, + units/penning/symbol=\mufi{20B0}, +}
\ No newline at end of file diff --git a/macros/latex/contrib/non-decimal-units/docs/non-decimal-units.tex b/macros/latex/contrib/non-decimal-units/docs/non-decimal-units.tex index d5490aa021..866efed85a 100644 --- a/macros/latex/contrib/non-decimal-units/docs/non-decimal-units.tex +++ b/macros/latex/contrib/non-decimal-units/docs/non-decimal-units.tex @@ -1,15 +1,19 @@ % !TEX TS-program = LuaLaTeX-shell-escape -\documentclass{article} +\documentclass[ + a4paper, + margin=4cm +]{article} \usepackage{non-decimal-units.preamble} \title{Non-Decimal Units for \LaTeX} \author{Mikkel Eide Eriksen\\\href{mailto:mikkel.eriksen@gmail.com}{\texttt{mikkel.eriksen@gmail.com}}} -\nduset{ +\nduKeys{ set aligned for environment=tabular, - aliases/danish rigsdaler, - restrict segment depth=2, + tabularray column type=U, + unit depth=skilling, + unit separator={~}, } \begin{document} @@ -18,7 +22,7 @@ \section{Preface} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -Many historical unit systems were non-decimal. For example, the Danish rigsdaler\footnote{\url{https://en.wikipedia.org/wiki/Danish_rigsdaler}} --- where 1 \nduName{danish rigsdaler}{0} consists of \nduFactor{danish rigsdaler}{1}~\nduName{danish rigsdaler}{1}, each again consisting of \nduFactor{danish rigsdaler}{2}~\nduName{danish rigsdaler}{2} for a total of 96 \nduName{danish rigsdaler}{2} per \nduName{danish rigsdaler}{0} --- was used from 1625 to 1875, when currency was decimalised to the current system of 1 krone = 100 øre. +Many historical unit systems were non-decimal. For example, the Danish rigsdaler\footnote{\url{https://en.wikipedia.org/wiki/Danish_rigsdaler}} --- where 1 rigsdaler consists of 16~mark, each again consisting of 16~skilling for a total of 96 skilling per rigsdaler --- was used from 1625 to 1875, when currency was decimalised to the current system of 1 krone = 100 øre. % https://en.wikipedia.org/wiki/Non-decimal_currency @@ -30,7 +34,7 @@ This package enables creation and configuration of such units to facilitate thei In order to do this, values are divided into \emph{segments}, which are separated by decimal points: for example, the historical Danish monetary value \nduValue{danish rigsdaler}{1.2.3} is entered as \texttt{1.2.3}, which the code then formats appropriately. -Issues can be reported at \url{https://github.com/mikkelee/latex-units/issues} but keep in mind I am not very experienced with \LaTeX ;) +Issues can be reported at \url{https://github.com/mikkelee/latex-units/issues}. \clearpage \section{Configuration} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% @@ -45,16 +49,16 @@ Where \meta{options} may contain one or more of the following unit systems. See \begin{description} \item[british] Currencies -\item[danish] Currencies and areas +\item[danish] Currencies, areas, and weights \item[german] Currencies \end{description} -Alternately, one may configure new units via \refCom{nduNewUnit}. +Alternately, one may configure new units via \refCom{nduNewBaseUnit} and \refCom{nduNewUnitGroup}. \end{docCommand} \begin{docCommand} - {nduset} + {nduKeys} {\marg{options}} Can be used to set options globally (in the preamble) or locally (in a group). See further documentation for possible keys/values. @@ -70,18 +74,18 @@ The central macro is \docAuxCommand*{nduValue}. It formats values for display an \begin{docCommand} {nduValue} - {\marg{unit name}\oarg{options}\marg{value}} + {\marg{unit group}\oarg{options}\marg{value}} -Formats \meta{value} according to the setup configured for the \meta{unit name}, as well as any provided \meta{options}. The number of decimal points and the values between them determine how many and which segments are displayed. +Formats \meta{value} according to the setup configured for the \meta{unit group}, as well as any provided \meta{options}. -Empty segments are skipped, unless the \refKey{replace nil with} key is set. +If no special configuration is made, the number of decimal points and the values between them determine how many and which units are displayed. For example, empty values are skipped unless the \refKey{replace nil with} key is set. \begin{dispExample*}{ title=Example usage: \docAuxCommand*{nduValue} macro } \nduValue{danish rigsdaler}{1.2.3}\\ -\nduValue{danish rigsdaler}{1..}\\ -\nduValue{danish rigsdaler}{.2.}\\ +\nduValue{danish rigsdaler}{1}\\ +\nduValue{danish rigsdaler}{.2}\\ \nduValue{danish rigsdaler}{..3}\\ \end{dispExample*} \end{docCommand} @@ -90,38 +94,56 @@ Empty segments are skipped, unless the \refKey{replace nil with} key is set. \subsubsection{Options} \begin{docKeys}[ - doc name = show, + doc name = display, ]{ { - doc parameter = {=values}, + doc parameter = {=values only}, }, { - doc parameter = {=values and symbols}, - doc description = initially \texttt{values and symbols}, + doc parameter = {=formatted}, + doc description = initially \texttt{formatted}, }, { - doc parameter = {=symbols}, + doc parameter = {=symbols only}, + }, + { + doc parameter = {=numprint}, }, } -Changes which information is included in the expansion. + Changes which information is included in the expansion. -Because only those segments with a value will be included, \docAuxKey*{show}=\docValue*{symbols} can be used to list the segment units (though if only one or two is needed, it may be preferable to use \refCom{nduSymbol}). + Because only present values will be included, \docAuxKey*{display}=\docValue*{symbols only} can be used to list the segment units (though it may be preferable to use \refCom{nduHeader} or \refCom{nduSymbol}). \begin{dispExample} \nduValue{danish hartkorn} - [show=symbols] + [display=symbols only] {0.0.0.0.0} \nduValue{danish hartkorn} - [show=symbols] + [display=values only] {0.0...} \end{dispExample} + + Finally, it is possible to use the \href{https://ctan.org/pkg/numprint}{numprint} package to format numbers, especially useful for larger values. Note that this may be counter to the formatting of some units (eg. British pounds), in which case one may prefer the \docAuxKey{use numprint} key instead. + +\begin{dispExample} +\nduValue{danish rigsdaler} + [display=numprint] + {1000} +\end{dispExample} \end{docKeys} -See also \cref{units:new} for further discussion on possible options. +\begin{docKey} + {format} + {=\marg{...}} + {initially \docAuxCommand*{VALUE}\docAuxCommand*{nobreakspace}\docAuxCommand*{SYMBOL}} + + Sets how a given base unit should be formatted for display. + + The placeholders \docAuxCommand*{VALUE} and \docAuxCommand*{SYMBOL} will be substituted when the value is typeset. +\end{docKey} -\clearpage \begin{docKeys} [] { @@ -140,156 +162,117 @@ The key \docAuxKey*{replace nil with} replaces nil (empty) segments with a custo The key \docAuxKey*{treat zero as nil} replaces 0 with nothing, which in turn means that setting both will replace both zero and nil with the custom string. -These keys also apply in non-tabular contexts, but are probably most useful here. - -\begin{dispExample*}{ - title=Example usage: \docAuxKey*{replace nil with} key -} -\begingroup -\nduset{ - treat zero as nil, - replace nil with=---, -} -\begin{tabular}{r r} - \toprule - & \nduHeader{danish rigsdaler} \\ - \midrule - a & \nduValue{danish rigsdaler}{1.2.3} \\ - b & \nduValue{danish rigsdaler}{100.0.0} \\ - c & \nduValue{danish rigsdaler}{.1.} \\ - \bottomrule -\end{tabular} -\endgroup -\end{dispExample*} \end{docKeys} +\begin{docKey} + {unit depth} + {=\meta{unit name}} + {initially no restriction} + + When calculating or displaying a value, only the segments up to and including \meta{unit name} will be considered. + + In this document, the depth has been globally set to \texttt{skilling}, but older historical sub-units can be included by locally setting the depth to eg. \texttt{hvid} (or indeed not restricting it globally). + + If the \meta{unit name} is not present in the current unit group, it has no effect. + +\begin{dispExample} +\nduValue{danish rigsdaler} + [unit depth=skilling] + {1.2.3.4.5} -\clearpage -\subsection{Tabular Data} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -In order to align values in a tabular context, the \docAuxKey*{aligned} key causes \docAuxCommand{nduValue} to wrap each segment in a cell of equal width, using \docAuxCommand*{makebox}. - -Additionally, the \docAuxCommand*{nduHeader} macro provides a convenient header showing the unit symbols. - -All segments will be included in the headers and cells, whether they contain a value or not. If no value is provided for the segment, and no nil replacement is specified with the \refKey{replace nil with} key, the cell will be empty. - -\begin{docCommand} - {nduHeader} - {\marg{unit name}\oarg{options}} - Formats the unit symbols in boxes suitable for a header. See \cpageref{units:new} for configuration of symbols. -\end{docCommand} - -\clearpage -\subsubsection{Options} - -\begin{docKeys} - [] - { - { - doc name = aligned, - doc description = {initially not set}, - }, - { - doc name = set aligned for environment, - doc description = {initially set for \texttt{tabular}}, - }, - } +\nduValue{danish rigsdaler} + [unit depth=penning] + {1.2.3.4.5} +\end{dispExample} +\end{docKey} - Setting \docAuxKey*{aligned} will format the presently displayed header in aligned boxes, desirable in tabular contexts. +\begin{docKey} + {unit separator} + {=\meta{...}} + {initially \docAuxCommand*{nobreakspace}} + + When displaying a value, this string will be inserted between each segment. - Additionally, the \docAuxKey*{set aligned for environment} key can be set to an environment name, causing \docAuxKey*{aligned} to automatically be set aligned for those enviroments, using \docAuxCommand*{AtBeginEnvironment}. It can be set multiple times, once for each required environment. +\begin{dispExample} +\nduValue{danish hartkorn}[ + display=values only, + unit separator=. + ] + {1.2.3.4} -\begin{dispExample*}{ - title=Example usage: \docAuxCommand*{nduHeader} and \docAuxCommand*{nduValue} macros with \docAuxKey*{aligned} key. -} -\begingroup -\begin{tabular}{r r} - \toprule - & \nduHeader{danish rigsdaler} \\ - \midrule - a & \nduValue{danish rigsdaler}{1.2.3} \\ - b & \nduValue{danish rigsdaler}{100..} \\ - c & \nduValue{danish rigsdaler}{.1.} \\ - \bottomrule -\end{tabular} -\endgroup -\end{dispExample*} +\nduValue{danish rigsdaler} + [unit separator={---}] + {1.2.3} +\end{dispExample} -\end{docKeys} +\end{docKey} \begin{docKey} - {cell width} - {=\meta{length}} - {initially \texttt{5em}} - -Changes the width of each segment. + {use numprint} + {} + {not set initially} + + When displaying a value, use the \href{https://ctan.org/pkg/numprint}{numprint} package, including when using the \docAuxKey{format} key. You can of course also configure the numprint settings, either in a group or locally. -\begin{dispExample*}{ - title=Example usage: \docAuxKey*{cell width} key -} +\begin{dispExample} \begingroup -\nduset{ - cell width=3em, -} -\begin{tabular}{r r} - \toprule - & \nduHeader{danish rigsdaler} \\ - \midrule - a & \nduValue{danish rigsdaler}{1.2.3} \\ - b & \nduValue{danish rigsdaler}{100..} \\ - c & \nduValue{danish rigsdaler}{.1.} \\ - \bottomrule -\end{tabular} +\selectlanguage{ngerman} +\nduValue{danish rigsdaler} + [use numprint] + {1000.0} \endgroup -\end{dispExample*} +\end{dispExample} + \end{docKey} \clearpage -\subsection{Arithmetical Operations} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -Basic arithmetic functions can be used to build a result for display. Internally, this is done by converting the value to a representation, which is the total number of the smallest usable unit, eg. \nduValue{danish rigsdaler}{1.2.3} is 131 \nduName{danish rigsdaler}{2}. +\section{Arithmetical Operations} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -Results can be gathered in two ways, either manually via the \docAuxCommand*{nduMath} macro, or automatically via the \docAuxKey{add to variable} and \docAuxKey{subtract from variable} keys, the latter being especially suitable in tabular contexts. - -\begin{docCommands}[]{ - { - doc name = nduMath, - doc parameter = \marg{unit name}\oarg{options}\marg{variable}\marg{operator}\marg{value} - }, - { - doc name = nduResult, - doc parameter = \marg{unit name}\oarg{options}\marg{variable} - } -} +Basic arithmetic functions can be used to build a result for display. This is done by converting the value to an internal representation and storing it in a global variable. The first time a variable is used, it is assumed that the value is 0. -The first arguments of \docAuxCommand*{nduMath} are identical to those of the \refCom{nduValue} macro. In addition, it has \meta{variable} and \meta{operator} (one of \texttt{+ - * /}) arguments. The first time a variable is used, it is assumed that the value is 0. The given value is then converted to its internal representation and stored in the variable. The command does not expand to any output. +Results can be gathered in two ways, either manually via the \docAuxCommand*{nduMath} macro, or automatically via the \docAuxKey{add to variable} and \docAuxKey{subtract from variable} keys, the latter two being especially suitable in tabular contexts. -Note that mixing units in the same variable is not currently supported, and will likely give incorrect results. +\begin{docCommand} + {nduMath} + {\marg{unit name}\oarg{options}\marg{variable}\marg{operator}\marg{value}} -The \docAuxCommand*{nduResult} macro takes a stored \meta{variable} and formats it for display in the same way as \refCom{nduValue}. + The first arguments of \docAuxCommand*{nduMath} are identical to those of the \refCom{nduValue} macro. In addition, it has \meta{variable} and \meta{operator} (one of \texttt{+ - * /}) arguments. The command does not expand to any output. -Both may be further configured via the \meta{options} in the same way as the other macros. + Note that mixing unit groups in the same variable is not currently supported, and will likely give incorrect results. \begin{dispExample*}{ - title=Example usage: \docAuxCommand*{nduMath} and \docAuxCommand*{nduResult} macros + title=Example usage: \docAuxCommand*{nduMath} macro } \nduMath{danish rigsdaler}{example 1}{+}{0.0.10} \nduMath{danish rigsdaler}{example 1}{+}{..8} \nduMath{danish rigsdaler}{example 1}{+}{0.2} \nduMath{danish rigsdaler}{example 1}{+}{0.5.1} -\nduResult{danish rigsdaler}{example 1} % = 1.2.3 +% there is no output, the result 1.2.3 +% will be seen in the following example. \end{dispExample*} +\end{docCommand} + +\begin{docCommand} + {nduResult} + {\marg{unit name}\oarg{options}\marg{variable}} + + The \docAuxCommand*{nduResult} macro takes a stored \meta{variable} and formats it via \meta{options} for display in the same way as \refCom{nduValue}. + \begin{dispExample*}{ title=Example usage: \docAuxCommand*{nduResult} macro } -\nduHeader{danish rigsdaler}\\ -\nduResult{danish rigsdaler}[aligned]{example 1} +\nduResult{danish rigsdaler}{example 1} % = 1.2.3 + +And let's add an additional 15 skilling: +\nduMath{danish rigsdaler}{example 1}{+}{0.0.15} +\nduResult{danish rigsdaler}{example 1} % = 1.3.2 \end{dispExample*} -\end{docCommands} + +\end{docCommand} \clearpage -\subsubsection{Options} +\subsection{Options for Arithmetical Operations} \begin{docKeys} [ @@ -304,14 +287,13 @@ Both may be further configured via the \meta{options} in the same way as the oth }, } -Setting either of these keys will cause all uses of \docAuxCommand*{nduValue} in the current group to be added to or subtracted from the variable with the given name. +Setting either of these keys will cause all uses of \docAuxCommand*{nduValue} in the current group to be added to or subtracted from the variable with the given name. It can of course also be set on individual invocations of the command. \begin{dispExample*}{ title=Example usage: \docAuxKey*{add to variable} key } \begingroup -\nduset{ - cell width=3em, +\nduKeys{ replace nil with=---, add to variable=example 2 } @@ -321,22 +303,12 @@ Setting either of these keys will cause all uses of \docAuxCommand*{nduValue} in \midrule a & \nduValue{danish rigsdaler}{1.2.3} \\ b & \nduValue{danish rigsdaler}{100.1.} \\ - \bottomrule + \midrule total & \nduResult{danish rigsdaler}{example 2} \\ % = 101.3.3 + \bottomrule \end{tabular} \endgroup \end{dispExample*} - -Results are global and remain accessible outside the group: -\begin{dispExample} -\nduResult{danish rigsdaler}{example 2} -\end{dispExample} - -Adding an additional 15 \nduName{danish rigsdaler}{2} to the existing result gives: -\begin{dispExample} -\nduMath{danish rigsdaler}{example 2}{+}{0.0.15} -\nduResult{danish rigsdaler}{example 2} % = 101.4.2 -\end{dispExample} \end{docKeys} \begin{docKey} @@ -349,38 +321,151 @@ Reformats an amount, which is useful for quick conversions. \begin{dispExample*}{ title=Example usage: \docAuxKey*{normalize} key } -100 \nduName{danish rigsdaler}{2} equal +100 skilling equal \nduValue{danish rigsdaler}[normalize]{..100} % 1.0.4 \end{dispExample*} \end{docKey} +\clearpage +\section{Tabular Data} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\section{Accessing Information About Units} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +There are a couple of ways to display values in tabular context, centered around explicitly or implicitly setting the \docAuxKey{aligned} key, which causes \docAuxCommand{nduValue} to wrap each segment in a cell of configurable width. + +Additionally, all segments will be included in headers and cells, whether they contain a value or not (provided \docAuxKey{unit depth} allows it). If no value is provided for the segment, and no nil replacement is specified with the \refKey{replace nil with} key, the cell will be empty. \begin{docCommand} - {nduName} - {\marg{unit name}\marg{segment}} - Expands to the name of the the given segment of the unit. - - Set by \refKey{segment:name}. + {nduHeader} + {\marg{unit name}\oarg{options}} + Convenient header showing the unit symbols. See \cpageref{units:new} for configuration of symbols. \end{docCommand} +\subsection{Options for Tabular Data} + +\begin{docKey} + {aligned} + {} + {initially not set} + +Causes each value to be wrapped in right-aligned cells of configurable width. +\end{docKey} + +\begin{docKey} + {cell widths} + {=\meta{length}} + {initially \texttt{3em}} + +Changes the width of each cell. One may supply a bracketed comma-separated list of widths. If the list is shorter than the number of base units in the group, the last width will be repeated. See page \pageref{example:table:widths} for example. +\end{docKey} + +\begin{docKeys} + [] + { + { + doc name = set aligned for environment, + doc parameter = {=\meta{name}}, + doc description = {initially not set}, + }, + { + doc name = tabularray column type, + doc parameter = {=\meta{letter}}, + doc description = {initially not set}, + }, + } + + The \docAuxKey{set aligned for environment} key can be set to an environment name, causing \docAuxKey*{aligned} to automatically be set for those enviroments, using \docAuxCommand*{AtBeginEnvironment}. It can be set multiple times, once for each required environment. See page \pageref{example:table:environment} for example. + + The \docAuxKey{tabularray column type} key can be used to create a column type, which automatically wraps the column contents in \docAuxCommand{nduValue}. The column type takes two arguments, a unit group and a set of key values for further configuration. Additionally, the special values \texttt{HEADER}, \texttt{RESULT}, and \texttt{SKIP} will respectively use \docAuxCommand{nduHeader}, \docAuxCommand{nduResult}, and skip the cell. See page \pageref{example:table:tabularray} for example\footnote{Thanks to Yukai Chou for help with \href{https://github.com/lvjr/tabularray}{tabularray} integration.}. + +\end{docKeys} + +\begin{dispExample*}{ + title=Example of tabular data using \docAuxKey{set aligned for environment}, + label=example:table:environment +} +\begingroup +\nduKeys{ +% has been set in this document's preamble: +% set aligned for environment=tabular, + treat zero as nil, + replace nil with=---, +} +\begin{tabular}{r r} + \toprule + & \nduHeader{danish rigsdaler} \\ + \midrule + a & \nduValue{danish rigsdaler}{1.2.3} \\ + b & \nduValue{danish rigsdaler}{100.0.0} \\ + c & \nduValue{danish rigsdaler}{.1.} \\ + \bottomrule +\end{tabular} +\endgroup +\end{dispExample*} + +\begin{dispExample*}{ + title=Example usage: \docAuxKey*{cell widths} key, + label=example:table:widths +} +\begingroup +\nduKeys{ + cell widths={5em, 1.5em}, +} +\begin{tabular}{r r} + \toprule + & \nduHeader{danish rigsdaler} \\ + \midrule + a & \nduValue{danish rigsdaler}{1.2.3} \\ + b & \nduValue{danish rigsdaler}{100..} \\ + c & \nduValue{danish rigsdaler}{.1.} \\ + \bottomrule +\end{tabular} +\endgroup +\end{dispExample*} + +\begin{dispExample*}{ + title=Example of tabular data using \docAuxKey{tabularray column type}, + label=example:table:tabularray +} +\begingroup +% has been set in this document's preamble: +% tabularray column type=U +\begin{tblr}{ + r + U{danish rigsdaler}{add to variable=table result 1}| + U{danish rigsdaler}{add to variable=table result 2} +} + \toprule + & HEADER & HEADER\\ + \midrule + a & 1.2.3 & ..15 \\ + b & 100.0.0 & ..10 \\ + c & .1. & ..2 \\ + \midrule + total & RESULT & RESULT \\ + \bottomrule +\end{tblr} +\endgroup +\end{dispExample*} + +\clearpage +\section{Accessing Information About Units} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + \begin{docCommand} {nduSymbol} - {\marg{unit name}\marg{segment}} - Expands to the symbol of the the given segment of the unit. + {\marg{unit name}} + Expands to the symbol of the given base unit. - Set by \refKey{segment:symbol}. + Set by \refKey{units:symbol}. \end{docCommand} \begin{docCommand} {nduFactor} - {\marg{unit name}\marg{segment}} - Expands to the conversion factor of the the given segment of the unit, ie. how many of the underlying segment the given segment consists of. + {\marg{unit name}\marg{unit name}} + Expands to the conversion between two base units. + Set by \refKey{units:factor}. \begin{dispExample} -That is, 1 \nduName{danish rigsdaler}{0} consists of -\nduFactor{danish rigsdaler}{1} \nduName{danish rigsdaler}{1}. +That is, 1 \nduSymbol{rigsdaler} consists of +\nduFactor{rigsdaler}{skilling} \nduSymbol{skilling}. \end{dispExample} \end{docCommand} @@ -391,156 +476,66 @@ That is, 1 \nduName{danish rigsdaler}{0} consists of If the included units are not suitable, more can be created. Pull requests are also welcome at \url{https://github.com/mikkelee/latex-units}. \begin{docCommand} - {nduNewUnit} + {nduNewBaseUnit} {\marg{unit name}\marg{key/value pairs}} -Units can have up to 7 segments, numbered \meta{0-6}. The left-most segment, that is, the \emph{top} or \emph{root} segment, is numbered \texttt{0}. - -The numeral part of the below key paths \docAuxKey*{segment 0/} can be any integer up to \texttt{6}, ie. \docAuxKey*{segment 6/}. The internal number of segments is determined by how many name keys are created. - -See below for available settings. +Creates a new base unit. It must contain at least a \docAuxKey{symbol}, but a \docAuxKey{factor} is also required for the math functions (see below). \end{docCommand} \begin{docCommand} - {nduNewMacro} - {\marg{unit name}\oarg{key/value pairs}\marg{control sequence}} + {nduNewUnitGroup} + {\marg{unit name}\oarg{key/value pairs}\marg{ordered base units}\oarg{control sequence}} - It is possible to create shortcut macros for commonly used \meta{unit name}s with optional overriding options. + In order for the math functions to work, every base unit in the group must have a conversion path to the right-most base unit, eg. if a unit group consists of base units \texttt{A, B, C}, there must be defined factors for \texttt{B\rightarrow C} and either \texttt{A\rightarrow C} or \texttt{A\rightarrow B}; if only the latter is configured, an attempt to calculate and cache it will be made internally. - These macros take the same arguments as the full \refCom{nduValue} macro, except without the first argument (ie. the name of the unit). + It is possible to create shortcut macros for commonly used unit groups with optional overriding options. These macros take the same arguments as the full \refCom{nduValue} macro, except without the first argument (ie. the name of the unit). + + Including several sub units may make the math results awkward, as the algorithm is greedy. \begin{dispExample} -\nduNewMacro{rigsdaler.mark.skilling} - [unit groups/rigsdaler.mark.skilling/segment 0/symbol={R\textsuperscript{dl}}] - {myRdl} -\myRdl{1.2.3} +\nduNewUnitGroup{my sletdaler} + [units/sletdaler/symbol={Sletd.}] + {sletdaler, ort, skilling} + [\mySldl] +\mySldl{1.2.3} \end{dispExample} \end{docCommand} -%\begin{docCommand} -% {nduCommonSymbols} -% {\marg{key/value pairs}} -% -% It is possible to configure commonly used symbols using the form \texttt{\meta{name}=\meta{symbol}}. These will be used as fallbacks if no specific symbol is configured for a segment via \refKey{segment:symbol}. -% -%\end{docCommand} -% -%\begin{docCommand} -% {nduCommonFactors} -% {\marg{key/value pairs}} -% -% Not currently implemented. -% -%\end{docCommand} - \clearpage -\subsubsection{Options} - -\begin{docKey} - {segment separator} - {=\meta{...}} - {initially \texttt{\~{}}} - - When displaying a value, this string will be inserted between each segment. - -\begin{dispExample} -\nduValue{danish hartkorn}[ - show=values, - segment separator=. - ] - {1.2.3.4} - -\nduValue{danish rigsdaler} - [segment separator={---}] - {1.2.3} -\end{dispExample} - -\end{docKey} - -\begin{docKey} - {restrict segment depth} - {=\meta{integer}} - {initially no restriction} - - When calculating or displaying a value, only the segments up to and including \meta{integer} will be considered. - - In this document, the depth has been globally set to \texttt{2} for \docAuxKey*{danish rigsdaler}, but the older historical sub-unit \nduName{danish rigsdaler}{3} can be included by locally setting the depth to \texttt{3} (or indeed not restricting it globally). - -\begin{dispExample} -\nduValue{danish rigsdaler} - [restrict segment depth=3] - {1.2.3.4} -\end{dispExample} -\end{docKey} - -\begin{docKey} - [] - [doc label=segment:name] - {segment \meta{n}/name} - {=\meta{name}} - {no default, initially undefined} - - Gives the proper name of the segment's unit. Used internally to determine how many segments the unit contains. - - Can be accessed with by \refCom{nduName}. -\end{docKey} +\subsection{Options For Base Units} \begin{docKey} [] - [doc label=segment:symbol] - {segment \meta{n}/symbol} + [doc label=units:symbol] + {units/\meta{unit name}/symbol} {=\meta{symbol}} - {no default, initially undefined} + {} - Configures a symbol displaying the unit. This is used in \docAuxCommand{nduHeader} and is also available via \docAuxCommand{nduSym} when defining the \refKey{segment:display} (see below). - - If none is configured, an attempt to look up a common symbol by its name is made. These can be configured with \refCom{nduCommonSymbols}. + Configures a symbol displaying the unit. This is used in \docAuxCommand{nduValue}, \docAuxCommand{nduHeader}, and is also available via \docAuxCommand*{SYMBOL} when defining the \refKey{units:format} (see also \refKey{}). \end{docKey} -\begin{docKeys} - [ - doc parameter = {=\meta{...}}, - ] - { - { - doc name = {segment \meta{n}/prefix}, - doc label = segment:prefix, - doc description = {initially set to \texttt{\{\}}}, - }, - { - doc name = {segment \meta{n}/suffix}, - doc label = segment:suffix, - doc description = {initially set to \texttt{\{~\docAuxCommand*{nduSym}\}}}, - }, - } - - When displaying a value, segments will be wrapped between the \meta{prefix} and \meta{suffix}. - - The macro \docAuxCommand{nduSym} is available here to show the symbol configured for the segment. -\end{docKeys} - \begin{docKey} [] - [doc label=segment:display] - {segment \meta{n}/display} - {=\marg{prefix}\marg{suffix}} + [doc label=units:format] + {units/\meta{unit name}/format} + {=\marg{...}} {} - Sets both \refKey{segment:prefix} and \refKey{segment:suffix} at the same time. + Sets how a given base unit should be formatted for display. If none is given, the general top-level \docAuxKey{format} key is used. \end{docKey} \begin{docKey} [] - [doc label=segment:factor] - {segment \meta{n}/factor} - {=\meta{integer}} - {no default, initially undefined} + [doc label=units:factor] + {units/\meta{unit name}/factor} + {=\meta{integer} \meta{unit name}} + {} - The conversion factor of a segment is how many of the underlying segment the given segment consists of. + The conversion factor of a unit is how many of an underlying unit the given unit consists of. This can be specified multiple times. - This is used in the math macros, in order to calculate the correct segment values. + This is used by the math macros and keys to calculate the sums and products. Can be accessed via \refCom{nduFactor}. \end{docKey} @@ -549,39 +544,22 @@ These keys can of course also be set temporarily in \refCom{nduValue} \begin{dispExample} \nduValue{danish rigsdaler} - [segment 1/symbol=Mk.] + [units/mark/symbol=Mk.] {.9.} \nduValue{danish rigsdaler} - [segment 0/display={}{~Rigsdaler og}] + [units/rigsdaler/format={\VALUE~Rigsdaler og}] {1.2.3} \nduValue{danish rigsdaler}[ - segment separator={---}, - segment 0/display={(}{)}, - segment 1/display={[}{]}, - segment 2/display={\{}{\}}, + unit separator={---}, + units/rigsdaler/format={(\VALUE)}, + units/mark/format={[\VALUE]}, + units/skilling/format={\{\VALUE\}}, ] {1.2.3} \end{dispExample} -\begin{docKey} - {create macro named} - {=\meta{control sequence}} - {no default, initially empty} - - Units may provide a default shortcut macro, for example the \docValue*{danish rigsdaler} unit configures \docAuxCommand*{rdl}. - - This is done via \refCom{nduNewMacro} which describes the arguments of the resulting macros. - -\begin{dispExample*}{ - sidebyside, - righthand width=1.75cm, -} -\rdl{2.3.} -\end{dispExample*} -\end{docKey} - \clearpage \section{Included Units} %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% diff --git a/macros/latex/contrib/non-decimal-units/latex/non-decimal-units.british.tex b/macros/latex/contrib/non-decimal-units/latex/non-decimal-units.british.tex index 28c849f641..968742b8f9 100644 --- a/macros/latex/contrib/non-decimal-units/latex/non-decimal-units.british.tex +++ b/macros/latex/contrib/non-decimal-units/latex/non-decimal-units.british.tex @@ -2,26 +2,27 @@ % https://en.wikipedia.org/wiki/£sd -\nduBaseUnits{% - pound sterling={% - symbol=£, - display={\nduSym}{}, - }, - shilling={% - symbol=s, - factor=20 per pound sterling, - display={}{\nduSym}, - }, - penny={% - symbol=d, - factor=12 per shilling, - display={}{\nduSym}, - }, +\nduNewBaseUnit { pound~sterling } { + symbol = { £ } , + factor = { 20~shilling } , + format = { \SYMBOL\VALUE } , } -\nduAliases{% - british pound sterling lsd={% - units=pound sterling.shilling.penny, - segment separator={. }, - }, +\nduNewBaseUnit { shilling } { + symbol = { s } , + factor = { 12~penny } , + format = { \VALUE\SYMBOL } , +} + +\nduNewBaseUnit { penny } { + symbol = { d } , + format = { \VALUE\SYMBOL } , +} + +\nduNewUnitGroup { british~pound~sterling~lsd } [ + unit~separator = {.~} , +] { + pound~sterling , + shilling , + penny } diff --git a/macros/latex/contrib/non-decimal-units/latex/non-decimal-units.danish.tex b/macros/latex/contrib/non-decimal-units/latex/non-decimal-units.danish.tex index 0ac75c3587..a57fd8d402 100644 --- a/macros/latex/contrib/non-decimal-units/latex/non-decimal-units.danish.tex +++ b/macros/latex/contrib/non-decimal-units/latex/non-decimal-units.danish.tex @@ -1,122 +1,128 @@ %%% CURRENCY %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\nduBaseUnits{% - rigsbankdaler={% - symbol=Rbd., - }, - rigsdaler={% - symbol=Rdl., - }, - sletdaler={% - symbol=Sldl., - }, - speciedaler={% - symbol=Spdl., - }, - ort={symbol=Ort,factor=4 per rigsdaler}, - mark={% - symbol=Mk., - factor=6 per rigsdaler, - factor=4 per sletdaler, - }, - skilling={% - symbol=Sk., - factor=16 per mark, - factor=24 per ort, - factor=84 per speciedaler, - factor=96 per rigsbankdaler, - }, - hvid={% - symbol=Hvid, - factor=3 per skilling, - }, - penning={% - symbol=Pg., - factor=4 per hvid, - factor=12 per skilling, - }, -} - -\nduAliases{% - danish rigsbankdaler={% - units=rigsbankdaler.skilling, - macro={rbd}{% - normalize, - treat zero as nil - }, - }, - danish rigsdaler={% - units=rigsdaler.mark.skilling.penning, - macro={rdl}{% - normalize, - treat zero as nil - }, - }, - danish sletdaler={% - units=sletdaler.mark.skilling.penning, - macro={sldl}{% - normalize, - treat zero as nil - }, - }, +\nduNewBaseUnit { rigsdaler } { + symbol = { Rdl. } , + factor = { 6~mark } , } +\nduNewBaseUnit { rigsbankdaler } { + symbol = { Rbdl. } , + symbol = { 96~skilling } , +} + +\nduNewBaseUnit { rigsdaler specie } { + symbol = { Rds. } , + symbol = { 192~skilling } , +} + +\nduNewBaseUnit { speciedaler } { + symbol = { Spdl. } , + factor = { 84~skilling } , +} + +\nduNewBaseUnit { sletdaler } { + symbol = { Sldl. } , + factor = { 4~mark } , +} + +\nduNewBaseUnit { ort } { + symbol = { O. } , + factor = { 24~skilling } , +} + +\nduNewBaseUnit { mark } { + symbol = { Mk. } , + factor = { 16~skilling } , +} + +\nduNewBaseUnit { skilling } { + symbol = { Sk. } , + factor = { 3~hvid } , +} + +\nduNewBaseUnit { hvid } { + symbol = { Hv. } , + factor = { 4~penning } , +} + +\nduNewBaseUnit { penning } { + symbol = { P. } , +} + +\nduNewUnitGroup { danish~rigsdaler } { + rigsdaler , + mark , + skilling , + hvid , + penning +}[\rdl] + +\nduNewUnitGroup { danish~sletdaler } { + sletdaler , + mark , + skilling , + hvid , + penning +}[\sldl] + +\nduNewUnitGroup { danish~rigsbankdaler } { + rigsbankdaler , + skilling +}[\rbdl] + +\nduNewUnitGroup { danish~speciedaler } { + speciedaler , + skilling +}[\spdl] %%%% AREA %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\nduBaseUnits{% - tønde={% - symbol=Td., - }, - skæppe={% - symbol=Skp., - factor=8 per tønde, - }, - fjerdingkar={% - symbol=Fjk., - factor=4 per skæppe, - }, - album={% - symbol=Alb., - factor=3 per fjerdingkar, - }, - penning/factor=4 per album, % penning symbols defined under currency -} - -\nduAliases{% - danish hartkorn={% - units=tønde.skæppe.fjerdingkar.album.penning, - macro={hartkorn}{% - normalize, - treat zero as nil - }, - }, +\nduNewBaseUnit { tønde } { + symbol = { Td. } , + factor = { 8~skæppe } , +} + +\nduNewBaseUnit { skæppe } { + symbol = { Sk. } , + factor = { 4~fjerdingkar } , +} + +\nduNewBaseUnit { fjerdingkar } { + symbol = { Fj. } , + factor = { 3~album } , +} + +\nduNewBaseUnit { album } { + symbol = { Alb. } , + factor = { 4~penning } , } +\nduNewUnitGroup { danish~hartkorn } { + tønde, + skæppe, + fjerdingkar, + album, + penning +}[\hartkorn] %%%% WEIGHT %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\nduBaseUnits{% - skippund={% - symbol=Spd., - }, - lispund={% - symbol=Lpd., - factor=20 per skippund, - }, - skaalpund={% - symbol=Pd., - factor=16 per lispund, - }, -} - -\nduAliases{% - danish pund={% - units=skippund.lispund.skaalpund, - macro={pund}{% - normalize, - treat zero as nil - }, - }, +\nduNewBaseUnit { skippund } { + symbol = { Spd. } , + factor = { 20~lispund } , +} + +\nduNewBaseUnit { lispund } { + symbol = { Lpd. } , + factor = { 16~skålpund } , +} + +\nduNewBaseUnit { skålpund } { + symbol = { Pd. } , } +\nduNewUnitGroup { danish~pund } { + skippund, + lispund, + skålpund +} diff --git a/macros/latex/contrib/non-decimal-units/latex/non-decimal-units.german.tex b/macros/latex/contrib/non-decimal-units/latex/non-decimal-units.german.tex index 912ee0d428..cde4d7e873 100644 --- a/macros/latex/contrib/non-decimal-units/latex/non-decimal-units.german.tex +++ b/macros/latex/contrib/non-decimal-units/latex/non-decimal-units.german.tex @@ -1,21 +1,21 @@ %%% CURRENCY %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% -\nduBaseUnits{% - reichsthaler={% - symbol=Rthl., % \mufi{reichtalold} - }, - groschen={% - symbol=Gr., % \mufi{grosch} - factor=30 per reichsthaler, - }, - pfennig={% - symbol=Pf., % \mufi{20B0} - factor=12 per groschen, - }, +\nduNewBaseUnit { reichsthaler } { + symbol = { Rthl. } , + factor = { 30~groschen } , } -\nduAliases{% - german reichsthaler={% - units=reichsthaler.groschen.pfennig, - }, +\nduNewBaseUnit { groschen } { + symbol = { Gr. } , + factor = { 12~pfennig } , } + +\nduNewBaseUnit { pfennig } { + symbol = { Pf. } , +} + +\nduNewUnitGroup { german~reichsthaler } { + reichsthaler , + groschen , + pfennig +}
\ No newline at end of file diff --git a/macros/latex/contrib/non-decimal-units/latex/non-decimal-units.sty b/macros/latex/contrib/non-decimal-units/latex/non-decimal-units.sty index 0444991aee..5358a0acdb 100644 --- a/macros/latex/contrib/non-decimal-units/latex/non-decimal-units.sty +++ b/macros/latex/contrib/non-decimal-units/latex/non-decimal-units.sty @@ -1,598 +1,798 @@ -\ProvidesPackage{non-decimal-units}[2023/09/27 Macros for displaying and manipulating historical non-decimal units] +\RequirePackage{expl3} +\ProvidesExplPackage{non-decimal-units}{2023/10/10}{1.0}{Macros for displaying and manipulating historical non-decimal units} % License: CC-BY-SA 4.0 % Author: Mikkel Eide Eriksen <mikkel.eriksen@gmail.com> -\RequirePackage{pgfkeys} -\RequirePackage{pgfopts} -\RequirePackage{bigintcalc} - -\RequirePackage{etoolbox} -\RequirePackage{ifthen} - %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\pgfkeys{/handlers/.store in cs/.code=\pgfkeysalso{% - \pgfkeyscurrentpath/.code=\csdef{#1}{##1}}% -} - -\def\nduset{\pgfqkeys{/ndu}} - -\newif\ifndushowvalues -\newif\ifndushowaffixes -\newif\ifndutreatzeroasnil -\newif\ifndualigned -\ndushowvaluestrue -\ndushowaffixestrue -\newif\ifndunormalize - -\newcounter{autorepr} - -\gdef\ndu@nextdelim{}% -\gdef\ndu@delim{}% - -\nduset{% - base units/.is family, - base units/.unknown/.code={% - \expandafter\nduBuildBaseUnitKeys\expandafter{\pgfkeyscurrentname}{#1}% - }, - unit groups/.is family, - unit groups/.unknown/.code={% - \expandafter\nduBuildUnitGroupKeys\expandafter{\pgfkeyscurrentname}% - }, - aliases/.is family, - aliases/.unknown/.code={% - \expandafter\nduBuildAliasKeys\expandafter{\pgfkeyscurrentname}{#1}% - }, - show/.is choice, - show/values/.code={\ndushowvaluestrue\ndushowaffixesfalse}, - show/values and symbols/.code={\ndushowvaluestrue\ndushowaffixestrue}, - show/symbols/.code={\ndushowvaluesfalse\ndushowaffixestrue}, - show=values and symbols, - cell width/.initial=5em, - add to variable/.code={% - \csdef{ndu@current@variable}{#1}% - \csdef{ndu@current@operator}{+}% - }, - subtract from variable/.code={% - \csdef{ndu@current@variable}{#1}% - \csdef{ndu@current@operator}{-}% - }, - replace nil with/.store in cs=ndu@nil@replacement, - treat zero as nil/.is if=ndutreatzeroasnil, - treat zero as nil=false, - normalize/.is if=ndunormalize, - normalize=false, - segment separator/.initial={~}, - aligned/.is if=ndualigned, - aligned=false, - set aligned for environment/.code={% - \AtBeginEnvironment{#1}{\nduset{aligned}}% - }, -} - -\newcommand\nduBuildBaseUnitKeys[2]{% - \nduset{% - base units/#1/.is family,base units/#1, - symbol/.initial={#1}, - factor/.style args={##1 per ##2}{% - /ndu/base units/##2/factors/#1/.initial=##1, - }, - prefix/.initial={}, - suffix/.initial={~\nduSym}, - display/.style 2 args={% - prefix={##1}, - suffix={##2}, - }, - #2, - }% -} - -\newcommand\nduBaseUnits[1]{% - \nduset{% - base units,#1, - }% -} - -\newcommand\nduBuildUnitGroupKeys[1]{% called by .unknown handler - \nduset{% - unit groups/#1/.search also={/ndu}, - unit groups/#1/.is family,unit groups/#1, - segment separator/.link=/ndu/segment separator, - segment depth/.initial=-1, - update segment depth/.code={% - \ifnum##1>\pgfkeysvalueof{/ndu/unit groups/#1/segment depth}% - \nduset{% - unit groups/#1/segment depth=##1, - }% - \fi% - }, - restrict segment depth/.link=/ndu/unit groups/#1/segment depth, - }% - \nduBuildSegments{#1}{#1}% -} - -\newcommand\nduUnitGroups[1]{% - \nduset{% - unit groups,#1, - }% -} - -\newcommand\nduBuildAliasKeys[2]{% called by .unknown handler - \nduset{% - aliases/#1/.is family,aliases/#1, - units/.code={% - % create unit group and set search path - \pgfkeys{% - /ndu/unit groups/##1, - /ndu/aliases/#1/.search also={/ndu/unit groups/##1}, - /ndu/aliases/#1/unit group/.initial=##1, - }% - }, - macro/.code 2 args={% - \nduNewMacro{#1}[##2]{##1}% - }, - #2, - }% -} - -\newcommand\nduAliases[1]{% - \nduset{% - aliases,#1, - }% -} - -\NewDocumentCommand\nduBuildSegments{ m > { \SplitArgument { 6 } { . } } m }{% - \nduBuildSegments@internal{#1}#2% -} - -\newcommand\nduBuildSegments@internal[8]{% - \nduNewUnit@segment{#1}{0}{#2}{#1}% - \nduNewUnit@segment{#1}{1}{#3}{#2}% - \nduNewUnit@segment{#1}{2}{#4}{#3}% - \nduNewUnit@segment{#1}{3}{#5}{#4}% - \nduNewUnit@segment{#1}{4}{#6}{#5}% - \nduNewUnit@segment{#1}{5}{#7}{#6}% - \nduNewUnit@segment{#1}{6}{#8}{#7}% -} - -\newcommand\nduNewUnit@segment[4]{% - \IfValueT{#3}{% - \nduset{ - unit groups/#1/segment #2/.is family,unit groups/#1/segment #2, - name/.initial=#3, - symbol/.link=/ndu/base units/#3/symbol, - prefix/.link=/ndu/base units/#3/prefix, - suffix/.link=/ndu/base units/#3/suffix, - display/.style 2 args={% - segment #2/prefix={##1}, % why is the segment needed here ??? - segment #2/suffix={##2}, - }, - factor/.link=/ndu/base units/#4/factors/#3, - }% - \nduset{% - unit groups/#1/update segment depth=#2, - }% - }% -} - -\NewDocumentCommand\nduNewMacro{ m O{} m }{% - \expandafter\NewDocumentCommand\csname#3\endcsname { O{} m } {% - \begingroup% - \nduset{unit groups/#1,#2}% - \nduValue{#1}[##1]{##2}% - \endgroup% - }% +% Key setup +% + +\keys_define:nn { non-decimal-units } +{ + % nil/zero + replace~nil~with .tl_set:N = \l_ndu_replace_nil_with_tl , + treat~zero~as~nil .bool_set:N = \l_ndu_treat_zero_as_nil_bool , + treat~zero~as~nil .default:n = true , + + % formatting + unit~separator .tl_set:N = \l_ndu_unit_separator_tl , + unit~separator .default:n = { \nobreakspace } , + default~format .tl_set:N = \l_ndu_default_format_tl , + default~format .default:n = { \VALUE\nobreakspace\SYMBOL } , + display .choice: , + display .choices:nn = + { values~only, symbols~only, formatted, numprint } + { \tl_set_eq:NN \l_ndu_display_choice_tl \l_keys_choice_tl } , + display .default:n = { formatted } , + unit~depth .tl_set:N = \l_ndu_unit_depth_tl , + use~numprint .bool_set:N = \l_ndu_use_numprint_bool , + use~numprint .default:n = true , + + % tabular alignment + aligned .bool_set:N = \l_ndu_aligned_bool , + aligned .default:n = true , + cell~widths .code:n = { + \seq_set_from_clist:Nn \l_ndu_cell_widths_seq {#1} + } , + cell~widths .default:n = 3em , + + % math + normalize .bool_set:N = \l_ndu_normalize_bool , + normalize .default:n = true , + current~variable .tl_set:N = \l_ndu_current_variable_tl , + current~operator .tl_set:N = \l_ndu_current_operator_tl , + add~to~variable .meta:n = { + current~variable = {#1} , + current~operator = {+} + } , + subtract~from~variable .meta:n = { + current~variable = {#1} , + current~operator = {-} + } , + + % environments + set~aligned~for~environment .code = { + \AtBeginEnvironment{#1}{\nduKeys{aligned}} + } , +} + +\NewDocumentCommand { \nduKeys } { m } { + \keys_set:nn { non-decimal-units } { #1 } +} + +% set some defaults +\keys_set:nn { non-decimal-units } { + unit~separator, + default~format, + display, + cell~widths, } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Errors +% -\newcommand\nduName[2]{% - \pgfkeysifdefined{/ndu/unit groups/\nduAliasOrGroup{#1}/segment #2/name}{% - \pgfkeysvalueof{/ndu/unit groups/\nduAliasOrGroup{#1}/segment #2/name}% - }{% - \PackageError{non-decimal-units}{No name defined for "\nduAliasOrGroup{#1}" segment #2}{}% - \nduNameMissing% - }% -} - -\newcommand\nduSymbol[2]{% - \pgfkeysifdefined{/ndu/unit groups/\nduAliasOrGroup{#1}/segment #2/symbol}{% - \pgfkeysvalueof{/ndu/unit groups/\nduAliasOrGroup{#1}/segment #2/symbol}% - }{% - \PackageError{non-decimal-units}{No symbol defined for "\nduAliasOrGroup{#1}" segment #2 (\nduName{#1}{#2})}{}% - \nduSymbolMissing% - }% -} - -\newcommand\nduPrefix[2]{% - \pgfkeysifdefined{/ndu/unit groups/\nduAliasOrGroup{#1}/segment #2/prefix}{% - \gdef\nduSym{\nduSymbol{\nduAliasOrGroup{#1}}{#2}}% - \pgfkeysvalueof{/ndu/unit groups/\nduAliasOrGroup{#1}/segment #2/prefix}% - }{% - \PackageError{non-decimal-units}{No prefix defined for "\nduAliasOrGroup{#1}" segment #2 (\nduName{#1}{#2})}{}% - \nduPrefixMissing% - }% -} - -\newcommand\nduSuffix[2]{% - \pgfkeysifdefined{/ndu/unit groups/\nduAliasOrGroup{#1}/segment #2/suffix}{% - \gdef\nduSym{\nduSymbol{\nduAliasOrGroup{#1}}{#2}}% - \pgfkeysvalueof{/ndu/unit groups/\nduAliasOrGroup{#1}/segment #2/suffix}% - }{% - \PackageError{non-decimal-units}{No suffix defined for "\nduAliasOrGroup{#1}" segment #2 (\nduName{#1}{#2})}{}% - \nduSuffixMissing% - }% -} - -\newcommand\nduFactor[2]{% - \pgfkeysifdefined{/ndu/unit groups/\nduAliasOrGroup{#1}/segment #2/factor}{% - \pgfkeysvalueof{/ndu/unit groups/\nduAliasOrGroup{#1}/segment #2/factor}% - }{% - % Having a PackageError here breaks bigintcalc. - \nduFactorMissing@#1@#2% - }% -} - -\newcommand\ifnduFactorDefined[4]{% - \pgfkeysifdefined{/ndu/base units/\nduName{#1}{\the\numexpr#2-1\relax}/factors/\nduName{#1}{#2}}{% - #3% - }{% - #4% - }% -} - -\newcommand\nduNamedFactor[2]{% - \pgfkeysifdefined{/ndu/base units/\nduAliasOrGroup{#1}/factors/#2}{% - \pgfkeysvalueof{/ndu/base units/\nduAliasOrGroup{#1}/factors/#2}% - }{% - % Having a PackageError here breaks bigintcalc. - \nduFactorMissing@#1@#2% - }% -} - -\newcommand\nduSegmentDepth[1]{% - \pgfkeysifdefined{/ndu/unit groups/\nduAliasOrGroup{#1}/restrict segment depth}{% - \pgfkeysvalueof{/ndu/unit groups/\nduAliasOrGroup{#1}/restrict segment depth}% - }{% - \pgfkeysvalueof{/ndu/unit groups/\nduAliasOrGroup{#1}/segment depth}% - }% -} - -\newcommand\nduAliasOrGroup[1]{% - \pgfkeysifdefined{/ndu/aliases/#1/unit group}{% - \pgfkeysvalueof{/ndu/aliases/#1/unit group}% - }{% - #1% - }% -} +\msg_new:nnnn +{ non-decimal-units } { missing-base-unit } +{ No ~ base ~ unit ~ exists ~ named ~ #1 } +{ You ~ will ~ need ~ to ~ add ~ it ~ with ~ nduNewBaseUnit. } +% -%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\msg_new:nnnn +{ non-decimal-units } { missing-unit-group } +{ No ~ unit ~ group ~ exists ~ named ~ #1 } +{ You ~ will ~ need ~ to ~ add ~ it ~ with ~ nduNewUnitGroup. } -\newcommand\ndu@if@depth@at@least[3]{% - \ifnum#2>\nduSegmentDepth{#1}% - \relax% - \else% - #3% - \fi% -} - -\newcommand\ndu@nil@helper[4]{% - \IfValueTF{#1}{% - \ifblank{#1}{% - \ifcsvoid{ndu@nil@replacement}{}{#2\ndu@nil@replacement{}#4}% - }{% - \ifndutreatzeroasnil% - \expandafter\ifnum#1=0 - \ifcsvoid{ndu@nil@replacement}{}{#2\csuse{ndu@nil@replacement}#4}% - \else% - #2#3#4% - \fi% - \else% - #2#3#4% - \fi% - }% - }{% - \ifcsvoid{ndu@nil@replacement}{}{#2\csuse{ndu@nil@replacement}#4}% - }% -} +\msg_new:nnnn +{ non-decimal-units } { missing-factor } +{ No ~ conversion ~ factor ~ exists ~ between ~ #1 ~ and ~ #2 } +{ You ~ will ~ need ~ to ~ add ~ it ~ when ~ creating ~ the ~ base ~ unit ~ or ~ via ~ nduKeys. } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\NewDocumentCommand\nduValue{ m O{} m }{% - \nduValue@unitgroup{\nduAliasOrGroup{#1}}[#2]{#3}% -} - -\NewDocumentCommand\nduValue@unitgroup{ m O{} m }{% - % #1 = unit group - % #2 = options - % #3 = values joined by . - \nduset{unit groups/#1}% - \begingroup% - \nduset{unit groups/#1,#2}% - \ifndualigned% - \nduAlignedValue@entry{#1}{#3}% - \else% - \nduFormatValue@entry{#1}{#3}% - \fi% - \endgroup% - \ifcsvoid{ndu@current@variable}{}{% - \nduMath{#1}{\ndu@current@variable}{\ndu@current@operator}{#3}% - }% +% Unit setup +% + +\NewDocumentCommand { \nduNewBaseUnit } { m m } { + \prop_clear_new:c { l_ndu_factors_#1_prop } + \keys_define:nn { non-decimal-units / units / #1 } { + factor .code = { + \regex_extract_once:nnN { (\d+)\ (\D+) } { ##1 } \l_tmpa_seq + \prop_put:cxx { l_ndu_factors_#1_prop } { \seq_item:Nn \l_tmpa_seq 3 } { \seq_item:Nn \l_tmpa_seq 2 } + } , + symbol .tl_set:c = { l_ndu_symbol_#1_tl } , + format .tl_set:c = { l_ndu_format_#1_tl } , + } + \keys_set:nn { non-decimal-units / units / #1 } { #2 } +} + +\NewDocumentCommand { \nduNewUnitGroup } { m o m o } +{ + \seq_set_from_clist:cn { l_ndu_group_#1_seq } {#3} + + % set base unit to rightmost item + \seq_get_right:cN { l_ndu_group_#1_seq } \l_tmpa_tl + \tl_set_eq:cN { l_ndu_base_unit_#1_tl } \l_tmpa_tl + + % store keys for unit group + \tl_clear_new:c { l_ndu_options_#1_tl } + \IfValueT {#2} { + \tl_set:cn { l_ndu_options_#1_tl } {#2} + } + + % optionally create macro + \IfValueT {#4} { + \NewDocumentCommand { #4 } { O{} m } { + \group_begin: + \IfValueTF {#2} { + \nduValue{#1}[#2,##1]{##2} + } + { + \nduValue{#1}[##1]{##2} + } + \group_end: + } + } } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\newcommand\nduFormatSegment[3]{% - % #1 = unit group - % #2 = segment - % #3 = value - %\csshow{nduSym}% - \ndu@nil@helper{#3}{% - \ndu@delim% - \ifndushowaffixes\nduPrefix{#1}{#2}\fi% - \edef\ndu@delim{\ndu@nextdelim}% - }{% - \ifndushowvalues#3\fi% - }{% - \ifndushowaffixes\nduSuffix{#1}{#2}\fi% - }% -} - -\newcommand\nduFormatValue@helper[3]{% - \ndu@if@depth@at@least{#1}{#2}{% - \nduFormatSegment{#1}{#2}{#3}% - }% -} - -\newcommand\nduFormatValue@internal[8]{% - % #1 = unit group - % #2-8 = values - \edef\ndu@nextdelim{\pgfkeysvalueof{/ndu/unit groups/#1/segment separator}}% - \edef\ndu@delim{}% - \nduFormatValue@helper{#1}{0}{#2}% - \nduFormatValue@helper{#1}{1}{#3}% - \nduFormatValue@helper{#1}{2}{#4}% - \nduFormatValue@helper{#1}{3}{#5}% - \nduFormatValue@helper{#1}{4}{#6}% - \nduFormatValue@helper{#1}{5}{#7}% - \nduFormatValue@helper{#1}{6}{#8}% -} - -\NewDocumentCommand\nduFormatValue@entry{ m > { \SplitArgument { 6 } { . } } m }{% - % #1 = unit group - % #2 = values joined by . - \ifndunormalize% - \stepcounter{autorepr}% - \nduConvertToRepr@internal{#1}{autorepr\arabic{autorepr}}#2% - \nduResult{#1}{autorepr\arabic{autorepr}}% - \else% - \nduFormatValue@internal{#1}#2% - \fi% +% Conversion factor initialization and access +% + +\cs_new_protected:Nn \ndu_get_factor:Nnn +{ + % parameters + % #1: output result (int) + % #2: from unit (tl) + % #3: to unit (tl) + \tl_if_exist:cF { l_ndu_factors_#2_prop } + { + \msg_error:nnn { non-decimal-units } { missing-base-unit } { #2 } + } + \tl_if_exist:cF { l_ndu_factors_#3_prop } + { + \msg_error:nnn { non-decimal-units } { missing-base-unit } { #3 } + } + \str_if_eq:nnTF {#2} {#3} + { + \int_set:Nn #1 { 1 } + } + { + \prop_if_in:cnTF { l_ndu_factors_#2_prop } { #3 } + { + \prop_get:cnN { l_ndu_factors_#2_prop } { #3 } \l_tmpa_tl + \int_set:Nn #1 { \l_tmpa_tl } + }{ + \int_zero_new:N \l__ndu_factor_product_int + \prop_map_inline:cn { l_ndu_factors_#2_prop } { + \str_if_eq:nnF {#3} {##1} + { + \int_zero_new:N \l__ndu_sub_factor_int + \ndu_get_factor:Nnn \l__ndu_sub_factor_int { ##1 } { #3 } + \int_set:Nn \l__ndu_factor_product_int { ##2 * \l__ndu_sub_factor_int } + \int_set:Nn #1 { \l__ndu_factor_product_int } + \prop_put:cnx { l_ndu_factors_#2_prop } { #3 } { \int_use:N \l__ndu_factor_product_int } + } + } + } + } +} +\cs_generate_variant:Nn \ndu_get_factor:Nnn { + NnV, + NVV +} + +% ndu_super_factors (call from nduNewUnitGroup) + +\NewDocumentCommand \nduFactor { m m } { + \ndu_get_factor:Nnn \l_tmpa_int { #1 } { #2 } + \int_use:N \l_tmpa_int } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\newcommand*{\ndu@minwidthbox}[2]{% - \makebox[{\ifdim#1<\width\width\else#1\fi}][r]{% - #2% - }% -} - -\newcommand\nduAlignedHeader@helper[2]{% - \ndu@if@depth@at@least{#1}{#2}{\ndu@minwidthbox{\pgfkeysvalueof{/ndu/cell width}}{% - \nduSymbol{#1}{#2}% - }}% +% Converting from/to representation +% + +\cs_new_protected:Nn \ndu_repr_to_seq:NNNNN +{ + % parameters + % #1: output result (seq) + % #2: unit group (seq) + % #3: base unit (tl) + % #4: value (int) + % #5: unit (tl) + \seq_clear:N #1 + + \int_zero_new:N \l__ndu_remainder_int + + % initial value * base factor + \ndu_get_factor:NVV \l_tmpa_int { #5 } { #3 } + \int_set:Nn \l__ndu_remainder_int { #4 * \l_tmpa_int } + + % for unit in units: + \seq_map_inline:Nn #2 + { + \int_zero_new:N \l__ndu_factor_int + \int_zero_new:N \l__ndu_sum_int + + \ndu_get_factor:NnV \l__ndu_factor_int { ##1 } { #3 } + + % while (remainder >= factor_to_base): + \int_while_do:nn {\l__ndu_remainder_int >= \l__ndu_factor_int} { + % remainder -= factor_to_base + \int_sub:Nn \l__ndu_remainder_int \l__ndu_factor_int + % result[i] += 1 + \int_incr:N \l__ndu_sum_int + } + \seq_put_right:Nx #1 {\int_use:N \l__ndu_sum_int} + + % stop when we hit the desired unit depth + \str_if_eq:NNT {##1} {#5} { + \seq_map_break: + } + } +} +\cs_generate_variant:Nn \ndu_repr_to_seq:NNNNN { + NccNc, + Ncccc +} + +\cs_new_protected:Nn \ndu_repr_to_seq:NnN +{ + % parameters + % #1: output result (int) + % #2: unit group name (tl) + % #3: value (int) + \ndu_repr_to_seq:NccNc + #1 + { l_ndu_group_#2_seq } + { l_ndu_base_unit_#2_tl } + #3 + { l_ndu_base_unit_#2_tl } + +} +\cs_generate_variant:Nn \ndu_repr_to_seq:NnN { + Nnc +} + + +\cs_new_protected:Nn \ndu_seq_to_repr:NNNN +{ + % parameters + % #1: output result (int) + % #2: unit group (seq) + % #3: base unit (tl) + % #4: input (seq) + \int_zero:N #1 + + \seq_map_indexed_inline:Nn #2 + { + \tl_set:Nx \l__ndu_value_tl { \seq_item:Nn #4 {##1} } + \tl_if_blank:VF \l__ndu_value_tl { + \ndu_get_factor:NnV \l_tmpa_int { ##2 } { #3 } + \int_add:Nn #1 { \l__ndu_value_tl * \l_tmpa_int } + } + } +} +\cs_generate_variant:Nn \ndu_seq_to_repr:NNNN { + NccN +} + +\cs_new_protected:Nn \ndu_seq_to_repr:NnN +{ + % parameters + % #1: output result (seq) + % #2: unit group name (tl) + % #3: values (seq) + \ndu_seq_to_repr:NccN + #1 + { l_ndu_group_#2_seq } + { l_ndu_base_unit_#2_tl } + #3 +} +\cs_generate_variant:Nn \ndu_seq_to_repr:NnN { + Nnc } -\newcommand\nduAlignedValue@helper[3]{% - \ndu@if@depth@at@least{#1}{#2}{\ndu@minwidthbox{\pgfkeysvalueof{/ndu/cell width}}{\nduFormatSegment{#1}{#2}{#3}}}% -} - -\newcommand\nduAlignedValue@internal[8]{% - % #1 = unit group - % #2-8 = values - \nduAlignedValue@helper{#1}{0}{#2}% - \nduAlignedValue@helper{#1}{1}{#3}% - \nduAlignedValue@helper{#1}{2}{#4}% - \nduAlignedValue@helper{#1}{3}{#5}% - \nduAlignedValue@helper{#1}{4}{#6}% - \nduAlignedValue@helper{#1}{5}{#7}% - \nduAlignedValue@helper{#1}{6}{#8}% -} - -\NewDocumentCommand\nduHeader{ m O{} }{% - \nduHeader@unitgroup{\nduAliasOrGroup{#1}}[#2]% -} - -\NewDocumentCommand\nduHeader@unitgroup{ m O{} }{% - \nduset{unit groups/#1}% - \begingroup% - \nduset{unit groups/#1,#2}% - \nduAlignedHeader@helper{#1}{0}% - \nduAlignedHeader@helper{#1}{1}% - \nduAlignedHeader@helper{#1}{2}% - \nduAlignedHeader@helper{#1}{3}% - \nduAlignedHeader@helper{#1}{4}% - \nduAlignedHeader@helper{#1}{5}% - \nduAlignedHeader@helper{#1}{6}% - \endgroup% -} - -\NewDocumentCommand\nduAlignedValue@entry{ m > { \SplitArgument { 6 } { . } } m }{% - % #1 = unit group - % #2 = values joined by . - \begingroup% - \nduset{show=values}% - \ifndunormalize% - \stepcounter{autorepr}% - \nduConvertToRepr@internal{#1}{autorepr\arabic{autorepr}}#2% - \nduResult{#1}[aligned]{autorepr\arabic{autorepr}}% - \else% - \nduAlignedValue@internal{#1}#2% - \fi% - \endgroup% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Formatting values +% + +\prg_new_protected_conditional:Nnn \ndu_if_not_nil_or_zero:Nn {T,TF} +{ + % parameters + % #1: output result (tl) + % #2: value (tl) + % returns T if value should be output, otherwise F + + \tl_if_blank:nTF {#2} + { + % only output something if we are replacing nil + \tl_if_empty:NTF {\l_ndu_replace_nil_with_tl} + { + \prg_return_false: + } + { + \tl_set_eq:NN #1 \l_ndu_replace_nil_with_tl + \prg_return_true: + } + } + { + \bool_if:nTF { + \l_ndu_treat_zero_as_nil_bool && + \int_compare_p:n { #2 = 0 } + } { + % only output something if we are replacing nil + \tl_if_empty:NTF {\l_ndu_replace_nil_with_tl} + { + \prg_return_false: + } + { + \tl_set_eq:NN #1 \l_ndu_replace_nil_with_tl + \prg_return_true: + } + } + { + % else output directly + \tl_set:Nx #1 { #2 } + \prg_return_true: + } + } +} +\prg_generate_conditional_variant:Nnn \ndu_if_not_nil_or_zero:Nn +{ + Nx +} +{ + T,TF +} + +% placeholder tokens for \ndu_format_display_helper +\tl_new:N \VALUE +\tl_new:N \SYMBOL + +\tl_const:Nn \c__ndu_values_only_tl { values~only } +\tl_const:Nn \c__ndu_symbols_only_tl { symbols~only } +\tl_const:Nn \c__ndu_formatted_tl { formatted } +\tl_const:Nn \c__ndu_numprint_tl { numprint } + +\cs_new_protected:Nn \ndu__numprint_helper:nn +{ + \numprint[#1]{#2} +} + +\cs_new_protected:Nn \ndu_format_display_helper:Nnnn +{ + % parameters + % #1: output result (tl) + % #2: format (tl) + % #3: symbol (tl) + % #4: value (int) + \tl_case:Nn \l_ndu_display_choice_tl { + \c__ndu_symbols_only_tl { + \tl_set:Nn #1 { #3 } + } + \c__ndu_values_only_tl { + \tl_set:Nn #1 { + \bool_if:NTF \l_ndu_use_numprint_bool + { \ndu__numprint_helper:nn {} {#4} } + { #4 } + } + } + \c__ndu_formatted_tl { + \tl_set:Nn #1 { #2 } + \tl_replace_all:Nnn #1 { \SYMBOL } { #3 } + \tl_replace_all:Nnn #1 { \VALUE } { + \bool_if:NTF \l_ndu_use_numprint_bool + { \ndu__numprint_helper:nn {} {#4} } + { #4 } + } + } + \c__ndu_numprint_tl { + \tl_set:Nn #1 { \ndu__numprint_helper:nn {#3} {#4} } + } + } +} +\cs_generate_variant:Nn \ndu_format_display_helper:Nnnn { + NVVn, + NVVx +} + +\cs_new_protected:Nn \ndu_format_values:NNNN +{ + % parameters + % #1: output result (tl) + % #2: unit group (seq) + % #3: values (seq) + % #4: separator (tl) + \seq_clear:N #1 + \seq_clear_new:N \l__ndu_formatted_segments_seq + + \seq_map_indexed_inline:Nn #3 + { + \tl_clear_new:N \l__ndu_formatted_segment + \tl_clear_new:N \l__ndu_symbol_tl + \tl_set:Nx \l__ndu_symbol_tl { \tl_use:c { l_ndu_symbol_ \seq_item:Nn #2 {##1} _tl } } + + \tl_clear_new:N \l__ndu_format_tl + \tl_if_empty:cTF { l_ndu_format_ \seq_item:Nn #2 {##1} _tl } + { + \tl_set_eq:NN \l__ndu_format_tl \l_ndu_default_format_tl + } + { + \tl_set_eq:Nc \l__ndu_format_tl { l_ndu_format_ \seq_item:Nn #2 {##1} _tl } + } + + \ndu_if_not_nil_or_zero:NnT \l_tmpa_tl { ##2 } + { + \ndu_format_display_helper:NVVx + \l__ndu_formatted_segment + \l__ndu_format_tl + \l__ndu_symbol_tl + { \l_tmpa_tl } + \seq_put_right:Nx \l__ndu_formatted_segments_seq \l__ndu_formatted_segment + } + + % stop when we hit the desired unit depth + \tl_set:Nx \l__ndu_unit_tl { \seq_item:Nn #2 {##1} } + \tl_if_eq:NNT \l__ndu_unit_tl \l_ndu_unit_depth_tl + { + \seq_map_break: + } + } + \tl_set:Nn #1 { \seq_use:Nn {\l__ndu_formatted_segments_seq} {#4} } +} +\cs_generate_variant:Nn \ndu_format_values:NNNN { + NcNN +} + + +\prg_new_protected_conditional:Nnn \ndu_if_valid_dim:n {F} +{ + % adapted from https://tex.stackexchange.com/questions/498976/testing-for-a-length + \regex_match:nnTF + { \A [+\-]? ((\d+(\.\d*)?)|(\.\d+)) \s* (pt|pc|in|bp|cm|mm|dd|cc|sp|ex|em) \Z} + { #1 } % test string + { \prg_return_true: } + { \prg_return_false: } +} +\prg_generate_conditional_variant:Nnn \ndu_if_valid_dim:n +{ + V +} +{ + F +} + + +\cs_new_protected:Nn \ndu_make_box:Nnn +{ + % parameter + % #1: output result (box) + % #2: contents (tl) + % #3: box index + \box_clear_new:N #1 + \dim_zero_new:N \l__ndu_cell_width_dim + \tl_set:Nx \l_tmpa_tl { \seq_item:Nn \l_ndu_cell_widths_seq { #3 } } + \ndu_if_valid_dim:VF \l_tmpa_tl + { + \seq_get_right:NN \l_ndu_cell_widths_seq \l_tmpa_tl + } + \dim_set:Nn \l__ndu_cell_width_dim { \l_tmpa_tl } + \hbox_set_to_wd:Nnn #1 { \l__ndu_cell_width_dim } { #2 } +} +\cs_generate_variant:Nn \ndu_make_box:Nnn { + cnn +} + + +\cs_new_protected:Nn \ndu_format_values_aligned:NNN +{ + % parameters + % #1: output result (tl) + % #2: unit group (seq) + % #3: values (seq) + \tl_set:Nn #1 { \leavevmode } + + \seq_map_indexed_inline:Nn #2 + { + \tl_clear_new:N \l__ndu_value_tl + \ndu_if_not_nil_or_zero:NxTF \l__ndu_value_tl { \seq_item:Nn #3 ##1 } + { + \ndu_make_box:cnn + { l__ndu_cell_ \int_to_alph:n {##1} _box } + { \hfill \tl_use:N \l__ndu_value_tl } + { ##1 } + } + { + \ndu_make_box:cnn + { l__ndu_cell_ \int_to_alph:n {##1} _box } + { \hfill } + { ##1 } + } + + \tl_put_right:Nx #1 { \box_use:c { l__ndu_cell_ \int_to_alph:n {##1} _box } } + + % stop when we hit the desired unit depth + \tl_if_eq:NnT \l_ndu_unit_depth_tl {##2} + { + \seq_map_break: + } + } +} +\cs_generate_variant:Nn \ndu_format_values_aligned:NNN { + NcN } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% - -\newcommand\ndu@val@or@zero[1]{% - \IfValueTF{#1}{% - \ifblank{#1}{% - 0% - }{% - #1% - }% - }{% - 0% - }% -} - -\newcommand\nduConvertToRepr@helper[4]{% - % convert from overlying unit and add value - % #1 = unit group - % #2 = repr name - % #3 = segment - % #4 = value - \ndu@if@depth@at@least{#1}{#3}{% - \ifnum#3=0% - % no conversion at top level - \else% - \ifnduFactorDefined{#1}{#3}{% - %\show#3% - \csxdef{ndu@repr@#2}{\bigintcalcMul{\csuse{ndu@repr@#2}}{\nduFactor{#1}{#3}}}% - }{% - % there is no factor to the overlying unit - % instead attempt to skip ahead to the underlying unit? - \PackageError{non-decimal-units}{Cannot convert to representation because there is no conversion factor from \nduName{#1}{\the\numexpr#3-1\relax} to \nduName{#1}{#3}}{}% - }% - \fi% - \csxdef{ndu@repr@#2}{\bigintcalcAdd{\csuse{ndu@repr@#2}}{\ndu@val@or@zero{#4}}}% - \csxdef{ndu@repr@#2@unit}{\nduName{#1}{#3}}% - }% -} - -\newcommand\nduConvertToRepr@internal[9]{% - % #1 = unit group - % #2 = repr name - % #3-9 = values - \csdef{ndu@repr@#2}{0}% - \nduConvertToRepr@helper{#1}{#2}{0}{#3}% - \nduConvertToRepr@helper{#1}{#2}{1}{#4}% - \nduConvertToRepr@helper{#1}{#2}{2}{#5}% - \nduConvertToRepr@helper{#1}{#2}{3}{#6}% - \nduConvertToRepr@helper{#1}{#2}{4}{#7}% - \nduConvertToRepr@helper{#1}{#2}{5}{#8}% - \nduConvertToRepr@helper{#1}{#2}{6}{#9}% -} - -\NewDocumentCommand\nduConvertToRepr{ m O{} m > { \SplitArgument { 6 } { . } } m }{% - \nduset{unit groups/#1,#2}% - \nduConvertToRepr@internal{#1}{#3}#4% -} - -\newcommand\nduFormatRepr@helper[3]{% - % V = mod(R, F) - % R = div(R - V, F) - % #1 = unit group - % #2 = repr name - % #3 = segment (F) - \ndu@if@depth@at@least{#1}{#3}{% - \ifnum#3=0% - \csxdef{ndu@repr@#2@result@#3}{\csuse{ndu@repr@#2}}% - \else% - \ifnduFactorDefined{#1}{#3}{% - \csxdef{ndu@repr@#2@result@#3}{\bigintcalcMod{\csuse{ndu@repr@#2}}{\nduFactor{#1}{#3}}}% - \csxdef{ndu@repr@#2}{\bigintcalcDiv{\bigintcalcSub{\csuse{ndu@repr@#2}}{\csuse{ndu@repr@#2@result@#3}}}{\nduFactor{#1}{#3}}}% - }{% - % there is no factor to the underlying unit - % instead attempt to skip ahead to the overlying unit? - \PackageError{non-decimal-units}{Cannot convert from representation because there is no conversion factor from \nduName{#1}{\the\numexpr#3-1\relax} to \nduName{#1}{#3}}{}% - }% - \fi% - }% -} - -\NewDocumentCommand\nduResult{ m O{} m }{% - \nduResult@unitgroup{\nduAliasOrGroup{#1}}[#2]{#3}% -} - -\NewDocumentCommand\nduResult@unitgroup{ m O{} m }{% - % #1 = unit group - % #2 = options - % #3 = repr name - \nduset{unit groups/#1}% - \csdef{ndu@repr@tmp #3}{\csuse{ndu@repr@#3}}% - \nduFormatRepr@helper{#1}{tmp #3}{6}% - \nduFormatRepr@helper{#1}{tmp #3}{5}% - \nduFormatRepr@helper{#1}{tmp #3}{4}% - \nduFormatRepr@helper{#1}{tmp #3}{3}% - \nduFormatRepr@helper{#1}{tmp #3}{2}% - \nduFormatRepr@helper{#1}{tmp #3}{1}% - \nduFormatRepr@helper{#1}{tmp #3}{0}% - \edef\ndu@nextdelim{\pgfkeysvalueof{/ndu/unit groups/#1/segment separator}}% - \edef\ndu@delim{}% - \begingroup% - \nduset{unit groups/#1,#2}% - \ifndualigned% - \nduset{show=values}% - \nduAlignedValue@helper{#1}{0}{\csuse{ndu@repr@tmp #3@result@0}}% - \nduAlignedValue@helper{#1}{1}{\csuse{ndu@repr@tmp #3@result@1}}% - \nduAlignedValue@helper{#1}{2}{\csuse{ndu@repr@tmp #3@result@2}}% - \nduAlignedValue@helper{#1}{3}{\csuse{ndu@repr@tmp #3@result@3}}% - \nduAlignedValue@helper{#1}{4}{\csuse{ndu@repr@tmp #3@result@4}}% - \nduAlignedValue@helper{#1}{5}{\csuse{ndu@repr@tmp #3@result@4}}% - \nduAlignedValue@helper{#1}{6}{\csuse{ndu@repr@tmp #3@result@4}}% - \else% - \nduFormatValue@helper{#1}{0}{\csuse{ndu@repr@tmp #3@result@0}}% - \nduFormatValue@helper{#1}{1}{\csuse{ndu@repr@tmp #3@result@1}}% - \nduFormatValue@helper{#1}{2}{\csuse{ndu@repr@tmp #3@result@2}}% - \nduFormatValue@helper{#1}{3}{\csuse{ndu@repr@tmp #3@result@3}}% - \nduFormatValue@helper{#1}{4}{\csuse{ndu@repr@tmp #3@result@4}}% - \nduFormatValue@helper{#1}{5}{\csuse{ndu@repr@tmp #3@result@4}}% - \nduFormatValue@helper{#1}{6}{\csuse{ndu@repr@tmp #3@result@4}}% - \fi% - \endgroup% -} - -\newcommand\nduMath[4]{% - \nduMath@unitgroup{\nduAliasOrGroup{#1}}{#2}{#3}{#4}% -} - -\newcommand\nduMath@unitgroup[4]{% - % #1 = unit group - % #2 = repr name - % #3 = operator - % #4 = value - \nduset{unit groups/#1}% - \ifcsvoid{ndu@repr@#2}{\csxdef{ndu@repr@#2}{0}}{}% - \ifthenelse{\equal{#3}{+}}{% - \nduConvertToRepr{#1}{tmp #2}{#4}% - \csxdef{ndu@repr@#2}{\bigintcalcAdd{\csuse{ndu@repr@#2}}{\csuse{ndu@repr@tmp #2}}}% - }{% - \ifthenelse{\equal{#3}{-}}{% - \nduConvertToRepr{#1}{tmp #2}{#4}% - \csxdef{ndu@repr@#2}{\bigintcalcSub{\csuse{ndu@repr@#2}}{\csuse{ndu@repr@tmp #2}}}% - }{% - \ifthenelse{\equal{#3}{*}}{% - \csxdef{ndu@repr@#2}{\bigintcalcMul{\csuse{ndu@repr@#2}}{#4}}% - }{% - \ifthenelse{\equal{#3}{/}}{% - \csxdef{ndu@repr@#2}{\bigintcalcDiv{\csuse{ndu@repr@#2}}{#4}}% - }{% - \PackageError{non-decimal-units}{Unrecognized math operator: #3}{Only + - * / are allowed.}% - }% - }% - }% - }% +% User commands +% + + +\cs_new_protected:Nn \ndu_set_options:nn +{ + % set keys for unit group + \tl_if_eq:cnF { l_ndu_options_#1_tl } { \c_novalue_tl } + { + \keys_set:nv { non-decimal-units } { l_ndu_options_#1_tl } + } + + % set keys provided by command + \IfValueT {#2} { \keys_set:nn { non-decimal-units } { #2 } } +} + +\NewDocumentCommand \nduValue { m o m } { + \tl_if_exist:cF { l_ndu_group_#1_seq } + { + \msg_error:nnn { non-decimal-units } { missing-unit-group } { #1 } + } + \group_begin: + \ndu_set_options:nn {#1} {#2} + + \tl_clear_new:N \l__ndu_result_tl + \int_zero_new:N \l__ndu_normalized_int + \seq_set_split:Nnn \l_tmpa_seq { . } {#3} + + % should we normalize the input? + \bool_if:nT \l_ndu_normalize_bool + { + \ndu_seq_to_repr:NnN + \l__ndu_normalized_int + { #1 } + \l_tmpa_seq + \ndu_repr_to_seq:NnN + \l_tmpa_seq + { #1 } + \l__ndu_normalized_int + } + + % are we outputting aligned cells? + \bool_if:NTF \l_ndu_aligned_bool + { + \ndu_format_values_aligned:NcN + \l__ndu_result_tl + { l_ndu_group_#1_seq } + \l_tmpa_seq + } + { + \ndu_format_values:NcNN + \l__ndu_result_tl + { l_ndu_group_#1_seq } + \l_tmpa_seq + \l_ndu_unit_separator_tl + } + + % should we do any math? + \tl_if_empty:NF \l_ndu_current_variable_tl + { + \nduMath{#1}[#2]{\l_ndu_current_variable_tl}{\l_ndu_current_operator_tl}{#3} + } + + % output + \tl_use:N \l__ndu_result_tl + \group_end: +} + +\tl_const:Nn \c__ndu_plus_tl { + } +\tl_const:Nn \c__ndu_minus_tl { - } + +\NewDocumentCommand \nduMath { m o m m m } { + \tl_if_exist:cF { l_ndu_group_#1_seq } + { + \msg_error:nnn { non-decimal-units } { missing-unit-group } { #1 } + } + \group_begin: + \ndu_set_options:nn {#1} {#2} + + \int_if_exist:cF { g_ndu_variable_#3_int } { + \int_zero_new:c { g_ndu_variable_#3_int } + } + + \int_zero_new:N \l__ndu_operand_int + + \bool_if:nTF + { + % TODO hacky, but works + \str_if_eq_p:nV {#4} \c__ndu_plus_tl || + \str_if_eq_p:nV {#4} \c__ndu_minus_tl || + \tl_if_eq_p:NN {#4} \c__ndu_plus_tl || + \tl_if_eq_p:NN {#4} \c__ndu_minus_tl + } + { + % plus or minus means we use the representation of the provided value + \seq_set_split:Nnn \l_tmpa_seq { . } { #5 } + \ndu_seq_to_repr:NnN + \l__ndu_operand_int + { #1 } + \l_tmpa_seq + } + { + % otherwise (multiplication/division) we use the number provided directly + \int_set:Nn \l__ndu_operand_int { #5 } + } + + \int_gset:cn { g_ndu_variable_#3_int } { + \int_use:c { g_ndu_variable_#3_int } + #4 + \l__ndu_operand_int + } + \group_end: +} + +\NewDocumentCommand \nduResult { m o m } { + \tl_if_exist:cF { l_ndu_group_#1_seq } + { + \msg_error:nnn { non-decimal-units } { missing-unit-group } { #1 } + } + \group_begin: + \ndu_set_options:nn {#1} {#2} + + \int_if_exist:cF { g_ndu_variable_#3_int } { + \int_zero_new:c { g_ndu_variable_#3_int } + } + + \tl_clear_new:N \l__ndu_result_tl + + \ndu_repr_to_seq:Nnc + \l_tmpa_seq + { #1 } + { g_ndu_variable_#3_int } + + % are we outputting aligned cells? + \bool_if:NTF \l_ndu_aligned_bool + { + \ndu_format_values_aligned:NcN + \l__ndu_result_tl + { l_ndu_group_#1_seq } + \l_tmpa_seq + } + { + \ndu_format_values:NcNN + \l__ndu_result_tl + { l_ndu_group_#1_seq } + \l_tmpa_seq + \l_ndu_unit_separator_tl + } + + % output + \tl_use:N \l__ndu_result_tl + \group_end: +} + +\NewDocumentCommand \nduHeader { m o } { + \tl_if_exist:cF { l_ndu_group_#1_seq } + { + \msg_error:nnn { non-decimal-units } { missing-unit-group } { #1 } + } + \group_begin: + \ndu_set_options:nn {#1} {#2} + \tl_set:Nn \l__ndu_result_tl { \leavevmode } + + % build boxes + \seq_set_eq:Nc \l_tmpa_seq { l_ndu_group_#1_seq } + \seq_map_indexed_inline:Nn \l_tmpa_seq + { + \ndu_make_box:cnn + { l__ndu_cell_ \int_to_alph:n {##1} _box } + { \hfill \tl_use:c { l_ndu_symbol_ ##2 _tl } } + { ##1 } + \tl_put_right:Nn \l__ndu_result_tl { \box_use:c { l__ndu_cell_ \int_to_alph:n {##1} _box } } + + % stop when we hit the desired unit depth + \tl_if_eq:NnT \l_ndu_unit_depth_tl {##2} + { + \seq_map_break: + } + } + + % output + \tl_use:N \l__ndu_result_tl + \group_end: +} + +\NewDocumentCommand \nduSymbol { m } { + \tl_use:c { l_ndu_symbol_#1_tl } } %%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Column type for tabularray +% + +% TODO: using the font key is pretty hacky... +% need to ask if theres a better option +% https://github.com/lvjr/tabularray/issues + +\keys_define:nn { non-decimal-units } +{ + tabularray~column~type .code = { + \NewColumnType {#1}[2] { Q[r, cmd=\ndu_tblr_cell:nnn {##1} {##2}] } + } , +} + +\tl_clear_new:N \l__ndu_tblr_column_type_tl + +\tl_const:Nn \c__ndu_HEADER_tl { HEADER } +\tl_const:Nn \c__ndu_RESULT_tl { RESULT } +\tl_const:Nn \c__ndu_SKIP_tl { SKIP } + +\cs_new_protected:Nn \ndu_tblr_cell:nnn +{ + \keys_set:nn { non-decimal-units } { + aligned, + #2 + } + \tl_set:Nn \l_tmpa_tl {#3} + \tl_case:NnF \l_tmpa_tl { + \c__ndu_HEADER_tl { + \nduHeader + { #1 } + } + \c__ndu_RESULT_tl { + \nduResult + { #1 } + { \l_ndu_current_variable_tl } + } + \c__ndu_SKIP_tl { + % nothing + } + } + { + % format value if no special token was hit + % do math only once per tblr cell + % Will https://github.com/lvjr/tabularray/issues/179 introduce + % elenganter solution? + \cs_if_exist:cTF { \ndu__tblr_cell_get_csname: } + % or use a specific bool, e.g., \ndu__do_math_bool + { \tl_clear:N \l_ndu_current_variable_tl } + { \cs_gset:cpn { \ndu__tblr_cell_get_csname: } {} } + \nduValue + { #1 } + { #3 } + } +} + +% a csname distinct per tblr table, per cell +\cs_new:Npn \ndu__tblr_cell_get_csname: + { + ndu__tblr_ \int_use:N \g__tblr_table_count_int + _cell_ \int_use:N \c@rownum _ \int_use:N \c@colnum + : + } -\nduset{ - options/.cd, - british/.code={\input{non-decimal-units.british}}, - danish/.code={\input{non-decimal-units.danish}}, -} - -\ProcessPgfPackageOptions{/ndu/options} +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% Setup +% + +\keys_define:nn { non-decimal-units / options } +{ + british .code:n = { \input{non-decimal-units.british} } , + danish .code:n = { \input{non-decimal-units.danish} } , + german .code:n = { \input{non-decimal-units.german} } , +} + +\IfFormatAtLeastTF { 2022-06-01 } { + \ProcessKeyOptions [ non-decimal-units / options ] +}{ + \RequirePackage { l3keys2e } + \ProcessKeysOptions { non-decimal-units / options } +}
\ No newline at end of file diff --git a/macros/latex/contrib/pdfmanagement-testphase/CHANGELOG.md b/macros/latex/contrib/pdfmanagement-testphase/CHANGELOG.md index a507ced869..5474986109 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/CHANGELOG.md +++ b/macros/latex/contrib/pdfmanagement-testphase/CHANGELOG.md @@ -5,7 +5,17 @@ first release 0.95a, 2021-02-23 will be documented in this file. The format is based on [Keep a Changelog](https://keepachangelog.com/en/1.0.0/), this project uses date-based 'snapshot' version identifiers. + +## [2023-10-09] +Version: 2023-10-09, 0.96a + +### Changed + - prepare for kernel switch to e-types + - use properties instead of l3ref-tmp.sty if format is new enough + - improve xcolor firstaid patch + ## [2023-08-29] +Version: 2023-08-29, 0.95z ### Changed - a SOURCE_DATE_EPOCH setting is honored. This requires a l3backend version from XXXX diff --git a/macros/latex/contrib/pdfmanagement-testphase/README.md b/macros/latex/contrib/pdfmanagement-testphase/README.md index f512b294d6..770ec9e2b5 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/README.md +++ b/macros/latex/contrib/pdfmanagement-testphase/README.md @@ -1,6 +1,6 @@ # LaTeX PDF management testphase bundle -Version: 0.95z, 2023-08-29 +Version: 0.96a, 2023-10-09 This package is used during a test phase to load the new PDF management code of LaTeX. diff --git a/macros/latex/contrib/pdfmanagement-testphase/color-ltx.sty b/macros/latex/contrib/pdfmanagement-testphase/color-ltx.sty index ff7305d34b..b04fa5aa9b 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/color-ltx.sty +++ b/macros/latex/contrib/pdfmanagement-testphase/color-ltx.sty @@ -24,7 +24,7 @@ %% This file has the LPPL maintenance status "maintained". %% \NeedsTeXFormat{LaTeX2e}[1995/12/01] -\ProvidesPackage{color-ltx}[2023-08-29 v0.95z +\ProvidesPackage{color-ltx}[2023-10-09 v0.96a Standard LaTeX Color (patched for l3color, part of pdfmanagement-testphase, original version 2022/01/06 v1.3d) (DPC)] \edef\Gin@codes{% \catcode`\noexpand\^^A\the\catcode`\^^A\relax diff --git a/macros/latex/contrib/pdfmanagement-testphase/colorspace-patches-tmp-ltx.sty b/macros/latex/contrib/pdfmanagement-testphase/colorspace-patches-tmp-ltx.sty index fc7f93841b..6af2ce080f 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/colorspace-patches-tmp-ltx.sty +++ b/macros/latex/contrib/pdfmanagement-testphase/colorspace-patches-tmp-ltx.sty @@ -19,7 +19,7 @@ % % for those people who are interested. \NeedsTeXFormat{LaTeX2e}[2020/10/01] -\ProvidesExplPackage{colorspace-patches-tmp-ltx}{2023-08-29}{0.95z} +\ProvidesExplPackage{colorspace-patches-tmp-ltx}{2023-10-09}{0.96a} {temporay patches to for the colorspace package to test pdfresource management ... UF} % colorspace can define more models, that l3color can't yet handle. diff --git a/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.dtx b/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.dtx index 4d68f49b6d..dc722effbe 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.dtx @@ -82,7 +82,7 @@ % }^^A % } % -% \date{Version 0.95z, released 2023-08-29} +% \date{Version 0.96a, released 2023-10-09} % % \maketitle % \begin{documentation} @@ -912,9 +912,9 @@ %^^A %% \l_@@_dest_box %^^A %% %^^A %% References (ref) -%^^A %% *\@@_ref_label:nn -%^^A %% *\@@_ref_if_exist:nn -%^^A %% *\@@_ref_check:nn +%^^A %% *\@@_property_record:nn +%^^A %% *\@@_property_if_recorded:nn +%^^A %% *\@@_property_ref_undefined_warn:nn, %^^A %% % helps to display key list messages %^^A %% \@@_clist_display:n %^^A %% @@ -956,7 +956,7 @@ %<@@=hyp> % \end{macrocode} % \begin{macrocode} -\ProvidesFile{hgeneric-testphase.def}[2023-08-29 v0.95z % +\ProvidesFile{hgeneric-testphase.def}[2023-10-09 v0.96a % generic Hyperref driver for the LaTeX PDF management testphase bundle] \RequirePackage{etoolbox} %why? @@ -1157,6 +1157,7 @@ % \begin{macrocode} \cs_generate_variant:Nn\pdf_destination:nn {nf} \cs_generate_variant:Nn\pdf_object_ref:n {e} +\cs_generate_variant:Nn\pdf_pageobject_ref:n {e} % \end{macrocode} % \section{Overwriting/providing commands from hyperref} % \pkg{hyperref} checks driver version, we need to suppress this during the development @@ -1534,57 +1535,85 @@ % \end{macrocode} % % \section{Reference and label commands} -% The code uses the l3ref-tmp package which +% The code uses in older LaTeX the l3ref-tmp package which % must have been loaded as pdfmanagement is a requirement. -% The commands use after the module prefix always |_ref|. -% -% At first a label command which add the space commands from LaTeX: +% In newer LaTeX it uses the in-built property module. +% % \begin{macro} % { -% \@@_ref_label:nn, -% \@@_ref_if_exist:nn, -% \@@_ref_check:nn, -% \@@_ref_value:nn +% \@@_property_record:nn, +% \@@_property_if_recorded:nn, +% \@@_property_ref_undefined_warn:nn, +% \@@_property_ref:nn % } % \begin{macrocode} % -\cs_new_protected:Npn \@@_ref_label:nn #1 #2 %label/attributes +\cs_if_exist:NTF \property_new:nnnn { - \@bsphack - \ref_label:nn{#1}{#2} - \@esphack - } -\cs_generate_variant:Nn \@@_ref_label:nn {en} % \end{macrocode} -% This provides a condition which tests if a label/attribute combination is known -% \begin{macrocode} -\prg_new_eq_conditional:NNn \@@_ref_if_exist:nn \ref_if_exist:nn { p , T , F, TF } -\prg_generate_conditional_variant:Nnn \@@_ref_if_exist:nn {en} { p , T , F, TF } +% At first a label command which adds the space commands from LaTeX: +% \begin{macrocode} + \cs_new_protected:Npn \@@_property_record:nn #1 #2 %label/attributes + { + \@bsphack + \property_record:nn{#1}{#2} + \@esphack + } % \end{macrocode} -% This checks if the label/attribute is known and issues a warning if not. +% This provides a conditional which tests if a label/property combination is known +% \begin{macrocode} + \prg_new_eq_conditional:NNn + \@@_property_if_recorded:nn \property_if_recorded:nn { T } +% \end{macrocode} +% This checks if the label/property is known and issues a warning if not. % It then also triggers the standard rerun message. +% \begin{macrocode} + \cs_new_eq:NN \@@_property_ref_undefined_warn:nn \property_ref_undefined_warn:nn +% \end{macrocode} +% +% \begin{macrocode} + \cs_new_eq:NN \@@_property_ref:nn \property_ref:nn + } +% \end{macrocode} +% and now the same with the older l3ref-tmp. +% This can go once LaTeX has been released. % \begin{macrocode} -\cs_new_protected:Npn \@@_ref_check:nn #1 #2 %label/attribute { - \@@_ref_if_exist:nnF {#1}{#2} + \cs_new_protected:Npn \@@_property_record:nn #1 #2 %label/attributes + { + \@bsphack + \ref_label:nn{#1}{#2} + \@esphack + } + + \prg_new_eq_conditional:NNn \@@_property_if_recorded:nn \ref_if_exist:nn { T } + + \cs_new_protected:Npn \@@_property_ref_undefined_warn:nn #1 #2 %label/attribute { - \protect\G@refundefinedtrue - \@latex@warning + \@@_property_if_recorded:nnF {#1}{#2} { - Reference~'\tl_to_str:n {#1}'~with~attribute~'\tl_to_str:n {#2}'~ - on~page~\thepage~\space undefined + \protect\G@refundefinedtrue + \@latex@warning + { + Reference~'\tl_to_str:n {#1}'~with~attribute~'\tl_to_str:n {#2}'~ + on~page~\thepage~\space undefined + } } } + + \cs_new:Npn \@@_property_ref:nn #1 #2 + { + \ref_value:nn{#1}{#2} + } } -\cs_generate_variant:Nn \@@_ref_check:nn {en} % \end{macrocode} -% This retrieves a value, it is a simple wrapper around the \cs{ref_value:nn} +% At last we generate a few variants. We use ee-variants as they already exist +% in the module and once this is there it can go here. % \begin{macrocode} -\cs_new:Npn \@@_ref_value:nn #1 #2 - { - \ref_value:nn{#1}{#2} - } -\cs_generate_variant:Nn \@@_ref_value:nn {en} +\cs_generate_variant:Nn \@@_property_record:nn {ee} +\prg_generate_conditional_variant:Nnn \@@_property_if_recorded:nn {ee} { T } +\cs_generate_variant:Nn \@@_property_ref_undefined_warn:nn {ee} +\cs_generate_variant:Nn \@@_property_ref:nn {ee} % \end{macrocode} % \end{macro} % \section{Variables} @@ -4356,16 +4385,16 @@ %\zref@labelbyprops{HyAnn@\the\HyAnn@Count}{abspage}% %\zref@labelbylist {HyAnn@\the\HyAnn@Count} {l3pdf} %\zref@refused{HyAnn@\the\HyAnn@Count}% - \@@_ref_label:en {HyAnn@\the\HyAnn@Count}{abspage} - \@@_ref_check:en {HyAnn@\the\HyAnn@Count}{abspage} + \@@_property_record:ee {HyAnn@\the\HyAnn@Count}{abspage} + \@@_property_ref_undefined_warn:ee {HyAnn@\the\HyAnn@Count}{abspage} }% \def\Fld@pageobjref { - \@@_ref_if_exist:enT {HyAnn@\the\HyAnn@Count}{abspage} + \@@_property_if_recorded:eeT {HyAnn@\the\HyAnn@Count}{abspage} { - /P~\pdf_pageobject_ref:n + /P~\pdf_pageobject_ref:e { - \@@_ref_value:en{HyAnn@\the\HyAnn@Count}{abspage} + \@@_property_ref:ee{HyAnn@\the\HyAnn@Count}{abspage} } } } diff --git a/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.pdf b/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.pdf Binary files differindex c640c4c15c..d830ce140a 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.dtx index ebf9ede282..e378716818 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.dtx @@ -45,7 +45,7 @@ % }^^A % } % -% \date{Version 0.95z, released 2023-08-29} +% \date{Version 0.96a, released 2023-10-09} % % \maketitle % @@ -56,30 +56,47 @@ % \begin{macrocode} %<drivers>\ProvidesExplFile %<*dvipdfmx> - {l3backend-testphase-dvipdfmx.def}{2023-08-29}{} + {l3backend-testphase-dvipdfmx.def}{2023-10-09}{} {LaTeX~PDF~management~testphase~bundle~backend~support: dvipdfmx} %</dvipdfmx> %<*dvips> - {l3backend-testphase-dvips.def}{2023-08-29}{} + {l3backend-testphase-dvips.def}{2023-10-09}{} {LaTeX~PDF~management~testphase~bundle~backend~support: dvips} %</dvips> %<*dvisvgm> - {l3backend-testphase-dvisvgm.def}{2023-08-29}{} + {l3backend-testphase-dvisvgm.def}{2023-10-09}{} {LaTeX~PDF~management~testphase~bundle~backend~support: dvisvgm} %</dvisvgm> %<*luatex> - {l3backend-testphase-luatex.def}{2023-08-29}{} + {l3backend-testphase-luatex.def}{2023-10-09}{} {LaTeX~PDF~management~testphase~bundle~backend~support: PDF output (LuaTeX)} %</luatex> %<*pdftex> - {l3backend-testphase-pdftex.def}{2023-08-29}{} + {l3backend-testphase-pdftex.def}{2023-10-09}{} {LaTeX~PDF~management~testphase~bundle~backend~support: PDF output (pdfTeX)} %</pdftex> %<*xdvipdfmx> - {l3backend-testphase-xetex.def}{2023-08-29}{} + {l3backend-testphase-xetex.def}{2023-10-09}{} {LaTeX~PDF~management~testphase~bundle~backend~support: XeTeX} %</xdvipdfmx> % \end{macrocode} +% \subsection{Variants} +% We need to generate temporarly a few e-types variants of kernel backend commands. +% These can be removed once the kernel provides them. +% \begin{macrocode} +%<@@=pdf> +%<*luatex|pdftex> +\cs_generate_variant:Nn \__kernel_backend_literal_page:n { e } +%</luatex|pdftex> +%<*dvipdfmx|xdvipdfmx> +\cs_generate_variant:Nn \__kernel_backend_literal:n { e } +\cs_generate_variant:Nn \@@_backend:n { e } +%</dvipdfmx|xdvipdfmx> +%<*dvips> +\cs_generate_variant:Nn \__kernel_backend_postscript:n { e } +\cs_generate_variant:Nn \@@_backend_pdfmark:n { e } +%</dvips> +% \end{macrocode} % \subsection{Support for delayed literal and special} % Starting with TeXlive 2023 the engines support a \texttt{shipout} keyword % for \cs{pdfliteral} and \cs{special}. When used the argument is not expanded @@ -153,33 +170,54 @@ % This uses the temporary l3ref-tmp.sty. It will % will be replaced by kernel code later. % It is only needed to get a reference for the absolute page counter. -% This uses the counter from the -% new lthooks/ltshipout package. +% This uses the counter from the new lthooks/ltshipout package. % \begin{macrocode} -%<@@=pdf> %<*drivers> +% \end{macrocode} +% l3ref-tmp is loaded until all files in latex-lab and tagpdf has been +% cleared: +% \begin{macrocode} \RequirePackage{l3ref-tmp} -\cs_generate_variant:Nn \ref_label:nn {en} -\cs_generate_variant:Nn \ref_value:nn {en} -\cs_new_protected:Npn \@@_backend_ref_label:nn #1 #2 - { - \@bsphack - \ref_label:nn{#1}{abspage} - \@esphack - } -\cs_new:Npn \@@_backend_ref_value:nn #1 #2 - { - \ref_value:nn{#1}{#2} - } -\cs_generate_variant:Nn \@@_backend_ref_label:nn {en} -\cs_generate_variant:Nn \@@_backend_ref_value:nn {en} +% \end{macrocode} +% +% \begin{macrocode} +\cs_if_exist:NTF \property_new:nnnn + { + \cs_new_protected:Npn \@@_backend_record_abspage:n #1 + { + \@bsphack + \property_record:nn{#1}{abspage} + \@esphack + } + \cs_new:Npn \@@_backend_ref_abspage:n #1 + { + \property_ref:nn{#1}{abspage} + } + + } + { + \cs_new_protected:Npn \@@_backend_record_abspage:n #1 + %% \@@_backend_ref_label:nn #1 #2 + { + \@bsphack + \ref_label:nn{#1}{abspage} + \@esphack + } + \cs_new:Npn \@@_backend_ref_abspage:n #1 + %% \@@_backend_ref_value:nn #1 #2 + { + \ref_value:nn{#1}{abspage} + } + } +\cs_generate_variant:Nn \@@_backend_record_abspage:n {e} +\cs_generate_variant:Nn \@@_backend_ref_abspage:n {e} %</drivers> % \end{macrocode} % avoid that destinations names are optimized with xelatex/dvipdfmx % see https://tug.org/pipermail/dvipdfmx/2019-May/000002.html % \begin{macrocode} -%<*dvipdfmx|xdvipdfmx> - \__kernel_backend_literal:x { dvipdfmx:config~C~ 0x0010 } +%<*dvipdfmx|xdvipdfmx> + \__kernel_backend_literal:n { dvipdfmx:config~C~ 0x0010 } %</dvipdfmx|xdvipdfmx> % \end{macrocode} % \begin{variable}{\g_@@_tmpa_prop, \l_@@_tmpa_tl, \l_@@_backend_tmpa_box } @@ -407,10 +445,10 @@ { %we need to know the page the resource should be added too. \int_gincr:N\g_@@_backend_resourceid_int - \@@_backend_ref_label:en { l3pdf\int_use:N\g_@@_backend_resourceid_int }{abspage} + \@@_backend_record_abspage:e { l3pdf\int_use:N\g_@@_backend_resourceid_int } \tl_set:Nx \l_@@_tmpa_tl { - \@@_backend_ref_value:en {l3pdf\int_use:N\g_@@_backend_resourceid_int}{abspage} + \@@_backend_ref_abspage:e {l3pdf\int_use:N\g_@@_backend_resourceid_int} } \pdfdict_if_exist:nF { g_@@_Core/backend_Page\l_@@_tmpa_tl} { @@ -433,7 +471,7 @@ \prop_gput:Nnn \g_@@_tmpa_prop { ##1 }{ ##2 } } } - \exp_args:Nx \@@_backend_Page_primitive:n + \@@_backend_Page_primitive:e { \prop_map_function:NN \g_@@_tmpa_prop \pdfdict_item:ne } @@ -544,7 +582,7 @@ %issues the values stored in the global prop with dvi \cs_new_protected:Npn \@@_backend_ThisPage_gpush:n #1 { - \exp_args:Nx \@@_backend_Page_primitive:n + \@@_backend_Page_primitive:e { \pdfdict_use:n { g_@@_Core/Page} } } %</dvipdfmx|xdvipdfmx> @@ -583,8 +621,8 @@ %issues the values stored in the global prop with dvi \cs_new_protected:Npn \@@_backend_ThisPage_gpush:n #1 { - \exp_args:Nx \@@_backend_Page_primitive:n - { \pdfdict_use:n { g_@@_Core/Page} } + \@@_backend_Page_primitive:e + { \pdfdict_use:n { g_@@_Core/Page} } } %</dvips> %<*dvisvgm> @@ -609,6 +647,9 @@ \cs_new_protected:Npn \@@_backend_ThisPage_gpush:n #1 {} %</dvisvgm> +%<*drivers> +\cs_generate_variant:Nn \@@_backend_Page_primitive:n { e } +%</drivers> % \end{macrocode} % \end{macro} % @@ -730,12 +771,11 @@ } \cs_new_protected:Npn \@@_backend_PageResources_gput:nnn #1 #2 #3 { - % this is not used for output, but there is a test if the resource is empty - \exp_args:Nnx - \prop_gput:cnn { \__kernel_pdfdict_name:n { g_@@_Core/Page/Resources/#1} } + % this is not used for output, but there is a test if the resource is empty + \prop_gput:cne { \__kernel_pdfdict_name:n { g_@@_Core/Page/Resources/#1} } { \str_convert_pdfname:n {#2} }{ #3 } %objects are not filled with \pdf_object_write as this is not additive! - \@@_backend:x + \@@_backend:e { put~\@@_backend_object_ref:n {@@/Page/Resources/#1}<</#2~#3>> } @@ -816,11 +856,11 @@ \cs_set_protected:Npn \@@_backend_bdcobject:nn #1 #2 % #1 eg. Span, #2: object name { - \@@_backend_pdfmark:x{/#1~\@@_backend_object_ref:n{#2}~/BDC} + \@@_backend_pdfmark:e{/#1~\@@_backend_object_ref:n{#2}~/BDC} } \cs_set_protected:Npn \@@_backend_bdcobject:n #1 % #1 eg. Span, { - \@@_backend_pdfmark:x{/#1~\@@_backend_object_last:~/BDC} + \@@_backend_pdfmark:e{/#1~\@@_backend_object_last:~/BDC} } \cs_set_protected:Npn \@@_backend_emc: { @@ -865,11 +905,11 @@ \cs_set_protected:Npn \@@_backend_bdcobject:nn #1 #2 % #1 eg. Span, #2: object name { \int_gincr:N \g_@@_backend_name_int - \__kernel_backend_literal:x + \__kernel_backend_literal:e { pdf:code~/#1/l3pdf\int_use:N\g_@@_backend_name_int\c_space_tl BDC } - \__kernel_backend_literal:x + \__kernel_backend_literal:e { pdf:put~@resources~ << @@ -884,11 +924,11 @@ \cs_set_protected:Npn \@@_backend_bdcobject:n #1 % #1 eg. Span { \int_gincr:N \g_@@_backend_name_int - \__kernel_backend_literal:x + \__kernel_backend_literal:e { pdf:code~/\exp_not:n{#1}/l3pdf\int_use:N\g_@@_backend_name_int\c_space_tl BDC } - \__kernel_backend_literal:x + \__kernel_backend_literal:e { pdf:put~@resources~ << @@ -945,7 +985,7 @@ { \prop_if_empty:cF { \__kernel_pdfdict_name:n { g_@@_Core/Page/Resources/##1} } { - \__kernel_backend_literal:x + \__kernel_backend_literal:e { pdf:put~@resources~ <</##1~\@@_backend_object_ref:n {@@/Page/Resources/##1}>> @@ -959,17 +999,17 @@ \cs_set_protected:Npn \@@_backend_bdcobject:nn #1 #2 % #1 eg. Span, #2: object name { \int_gincr:N \g_@@_backend_name_int - \exp_args:Nx\__kernel_backend_literal_page:n + \__kernel_backend_literal_page:e { /#1 ~ /l3pdf\int_use:N\g_@@_backend_name_int\c_space_tl BDC } \bool_if:NTF \l_@@_backend_xform_bool { - \exp_args:Nnx\pdfdict_gput:nnn + \pdfdict_gput:nee { g_@@_Core/Xform/Resources/Properties } { l3pdf\int_use:N\g_@@_backend_name_int } { \@@_backend_object_ref:n { #2 } } } { - \exp_args:Nx \tex_latelua:D + \exp_args:Ne \tex_latelua:D { ltx.pdf.Page_Resources_Properties_gput ( @@ -983,17 +1023,17 @@ \cs_set_protected:Npn \@@_backend_bdcobject:n #1% #1 eg. Span { \int_gincr:N \g_@@_backend_name_int - \exp_args:Nx\__kernel_backend_literal_page:n + \__kernel_backend_literal_page:e { /\exp_not:n{#1} ~ /l3pdf\int_use:N\g_@@_backend_name_int\c_space_tl BDC } \bool_if:NTF \l_@@_backend_xform_bool { - \exp_args:Nnx\pdfdict_gput:nnn %no handler needed + \pdfdict_gput:nee %no handler needed { g_@@_Core/Xform/Resources/Properties } { l3pdf\int_use:N\g_@@_backend_name_int } { \@@_backend_object_last: } } { - \exp_args:Nx \tex_latelua:D + \exp_args:Ne \tex_latelua:D { ltx.pdf.Page_Resources_Properties_gput ( @@ -1048,28 +1088,28 @@ \cs_set_protected:Npn \@@_backend_bdcobject:nn #1 #2 % #1 eg. Span, #2: object name { \int_gincr:N \g_@@_backend_name_int - \exp_args:Nx\__kernel_backend_literal_page:n + \__kernel_backend_literal_page:e { /#1 ~ /l3pdf\int_use:N\g_@@_backend_name_int\c_space_tl BDC } % code to set the property .... \int_gincr:N\g_@@_backend_resourceid_int \bool_if:NTF \l_@@_backend_xform_bool { - \exp_args:Nnxx\pdfdict_gput:nnn %no handler needed + \pdfdict_gput:nee %no handler needed { g_@@_Core/Xform/Resources/Properties } { l3pdf\int_use:N\g_@@_backend_resourceid_int } { \@@_backend_object_ref:n { #2 } } } { - \@@_backend_ref_label:en{l3pdf\int_use:N\g_@@_backend_resourceid_int}{abspage} + \@@_backend_record_abspage:e {l3pdf\int_use:N\g_@@_backend_resourceid_int} \tl_set:Nx \l_@@_tmpa_tl { - \@@_backend_ref_value:en{l3pdf\int_use:N\g_@@_backend_resourceid_int}{abspage} + \@@_backend_ref_abspage:e{l3pdf\int_use:N\g_@@_backend_resourceid_int} } \pdfdict_if_exist:nF { g_@@_Core/backend_Page\l_@@_tmpa_tl/Resources/Properties } { \pdfdict_new:n { g_@@_Core/backend_Page\l_@@_tmpa_tl/Resources/Properties } } - \exp_args:Nnxx\pdfdict_gput:nnn + \pdfdict_gput:nee { g_@@_Core/backend_Page\l_@@_tmpa_tl/Resources/Properties } { l3pdf\int_use:N\g_@@_backend_resourceid_int } { \@@_backend_object_ref:n{#2} } @@ -1078,28 +1118,28 @@ \cs_set_protected:Npn \@@_backend_bdcobject:n #1% #1 eg. Span { \int_gincr:N \g_@@_backend_name_int - \exp_args:Nx\__kernel_backend_literal_page:n + \__kernel_backend_literal_page:e { /\exp_not:n{#1} ~ /l3pdf\int_use:N\g_@@_backend_name_int\c_space_tl BDC } % code to set the property .... \int_gincr:N\g_@@_backend_resourceid_int \bool_if:NTF \l_@@_backend_xform_bool { - \exp_args:Nnxx\pdfdict_gput:nnn + \pdfdict_gput:nee { g_@@_Core/Xform/Resources/Properties } { l3pdf\int_use:N\g_@@_backend_resourceid_int } { \@@_backend_object_last: } } { - \@@_backend_ref_label:en{l3pdf\int_use:N\g_@@_backend_resourceid_int}{abspage} + \@@_backend_record_abspage:e{l3pdf\int_use:N\g_@@_backend_resourceid_int} \tl_set:Nx \l_@@_tmpa_tl { - \@@_backend_ref_value:en{l3pdf\int_use:N\g_@@_backend_resourceid_int}{abspage} + \@@_backend_ref_abspage:e{l3pdf\int_use:N\g_@@_backend_resourceid_int} } \pdfdict_if_exist:nF { g_@@_Core/backend_Page\l_@@_tmpa_tl/Resources/Properties } { \pdfdict_new:n { g_@@_Core/backend_Page\l_@@_tmpa_tl/Resources/Properties } } - \exp_args:Nnxx\pdfdict_gput:nnn + \pdfdict_gput:nee { g_@@_Core/backend_Page\l_@@_tmpa_tl/Resources/Properties } { l3pdf\int_use:N\g_@@_backend_resourceid_int } { \@@_backend_object_last: } @@ -1152,7 +1192,7 @@ \cs_new_protected:Npn \@@_backend_PageResources_gpush:n #1 { - \exp_args:NNx \tex_global:D \tex_pdfpageresources:D + \exp_args:NNe \tex_global:D \tex_pdfpageresources:D { \prop_if_exist:cT { \__kernel_pdfdict_name:n { g_@@_Core/backend_Page#1/Resources/Properties } } @@ -1205,7 +1245,7 @@ \cs_new_protected:Npn \@@_backend_Names_gpush:nn #1 #2 %#1 name of name tree, #2 array content { \pdf_object_unnamed_write:nn {dict} {/Names [#2] } - \@@_backend:x {put~@names~<</#1~\pdf_object_ref_last: >>} + \@@_backend:e {put~@names~<</#1~\pdf_object_ref_last: >>} } %</dvipdfmx|xdvipdfmx> @@ -1231,7 +1271,7 @@ %<*dvips> \cs_new_protected:Npn \@@_backend_NamesEmbeddedFiles_add:nn #1 #2 { - \@@_backend_pdfmark:x + \@@_backend_pdfmark:e { /Name~#1~ /FS~#2~ @@ -1506,7 +1546,7 @@ \hook_gput_next_code:nn {shipout/background} { \mode_leave_vertical: %needed, the xform disappears without it. - \@@_backend:x + \@@_backend:e { bxobj ~ \@@_backend_xform_ref:n { #1 } \c_space_tl width ~ \pdfxform_wd:n { #1 } @@ -1514,38 +1554,37 @@ \c_space_tl depth ~ \pdfxform_dp:n { #1 } } \box_use_drop:c { g_@@_backend_xform_#1_box } - \@@_backend:x {put ~ @resources ~<<#3>> } - \@@_backend:x + \@@_backend:e {put ~ @resources ~<<#3>> } + \@@_backend:e { put~ @resources ~ << /ExtGState~ \pdf_object_ref:n { @@/Page/Resources/ExtGState } >> } - \@@_backend:x + \@@_backend:e { put~ @resources ~ << /Pattern~ \pdf_object_ref:n { @@/Page/Resources/Pattern } >> } - \@@_backend:x + \@@_backend:e { put~ @resources ~ << /Shading~ \pdf_object_ref:n { @@/Page/Resources/Shading } >> } - \@@_backend:x + \@@_backend:e { put~ @resources ~ << /ColorSpace~ \pdf_object_ref:n { @@/Page/Resources/ColorSpace } >> - } - \exp_args:Nx - \@@_backend:x {exobj ~<<#2>>} + } + \@@_backend:e {exobj ~<<#2>>} } } @@ -1560,7 +1599,7 @@ { \hbox_set:Nn \l_@@_backend_tmpa_box { - \@@_backend:x + \@@_backend:e { uxobj~ \@@_backend_xform_ref:n { #1 } } @@ -1634,7 +1673,7 @@ %\box_scale:Nnn \l_@@_backend_tmpa_box {1} {-1} \hbox_set:Nn\l_@@_backend_tmpb_box { - \__kernel_backend_postscript:x + \__kernel_backend_postscript:e { gsave~currentpoint~ initclip~ % restore default clipping path (page device/whole page) @@ -1662,7 +1701,7 @@ } \str_if_eq:eeF{#1}{} { - \__kernel_backend_postscript:x + \__kernel_backend_postscript:e { product~(Ghostscript)~search~ { @@ -1689,7 +1728,7 @@ { \hbox_set:Nn \l_@@_backend_tmpa_box { - \__kernel_backend_postscript:x + \__kernel_backend_postscript:e { gsave~currentpoint~translate~1~-1~scale~ mark~{ pdf.obj \int_use:c{c__pdf_backend_xform_ \tl_to_str:n {#1} _int }}~ @@ -1805,7 +1844,7 @@ %<*xdvipdfmx|dvipdfmx> \cs_set_protected:Npn \@@_backend_structure_destination:nn #1#2 { - \@@_backend:x + \@@_backend:e { dest ~ ( \exp_not:n {#1} ) [ @@ -1831,7 +1870,7 @@ % \begin{macrocode} \exp_args:Ne \pdf_object_if_exist:nT { \l_pdf_current_structure_destination_tl } { - \@@_backend:x + \@@_backend:e { obj ~ @pdf.SDest.\exp_not:n{#1} [ @@ -1889,7 +1928,7 @@ % \begin{macrocode} \exp_args:Ne \pdf_object_if_exist:nT { \l_pdf_current_structure_destination_tl } { - \@@_backend:x + \@@_backend:e { obj ~ @pdf.SDest.\exp_not:n{#2} [ diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.pdf Binary files differindex 0149e6d72f..5abbe8a3f2 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/l3backend-testphase.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.dtx index b3076aaf26..a6384c182c 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.dtx @@ -48,7 +48,7 @@ % }^^A % } % -% \date{Version 0.95z, released 2023-08-29} +% \date{Version 0.96a, released 2023-10-09} % % \maketitle % \begin{documentation} @@ -432,7 +432,7 @@ % \begin{macrocode} %<@@=pdfannot> %<*header> -\ProvidesExplPackage{l3pdfannot}{2023-08-29}{0.95z} +\ProvidesExplPackage{l3pdfannot}{2023-10-09}{0.96a} {PDF-annotations} \RequirePackage{l3pdfdict} %</header> diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.pdf Binary files differindex bad7119c10..92ae61b635 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfannot.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.dtx index ed7406fe1c..d95382ad91 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.dtx @@ -49,7 +49,7 @@ % }^^A % } % -% \date{Version 0.95z, released 2023-08-29} +% \date{Version 0.96a, released 2023-10-09} % % \maketitle % \begin{documentation} @@ -101,7 +101,7 @@ % \end{function} % % \begin{function}[added = 2020-04-06] -% {\pdfdict_put:nnn, \pdfdict_gput:nnn} +% {\pdfdict_put:nnn, \pdfdict_gput:nnn,\pdfdict_gput:nee} % \begin{syntax} % \cs{pdfdict_put:nnn} \Arg{local dictionary} \Arg{name} \Arg{value} \\ % \cs{pdfdict_gput:nnn} \Arg{global dictionary} \Arg{name} \Arg{value} @@ -208,7 +208,7 @@ % \begin{macrocode} %<@@=pdfdict> %<*header> -\ProvidesExplPackage{l3pdfdict}{2023-08-29}{0.95z} +\ProvidesExplPackage{l3pdfdict}{2023-10-09}{0.96a} {Tools for PDF dictionaries (LaTeX PDF management testphase bundle)} %</header> % \end{macrocode} @@ -429,7 +429,7 @@ } \cs_set_eq:NN \pdfdict_put:nnn \@@_put:nnn -\cs_generate_variant:Nn \pdfdict_put:nnn {nnx,nno} +\cs_generate_variant:Nn \pdfdict_put:nnn {nnx,nno,nee} \cs_new_protected:Npn \@@_gput:nnn #1 #2 #3 %#1 global dict, #2 name, #3 value { @@ -450,7 +450,7 @@ } \cs_set_eq:NN \pdfdict_gput:nnn \@@_gput:nnn -\cs_generate_variant:Nn \pdfdict_gput:nnn {nnx,nno} +\cs_generate_variant:Nn \pdfdict_gput:nnn {nnx,nno,nee} % \end{macrocode} % \end{macro} % diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.pdf Binary files differindex d8bc405fbe..c580144fb5 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfdict.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.dtx index 0479ecdae5..09489fc8a1 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.dtx @@ -49,7 +49,7 @@ % }^^A % } % -% \date{Version 0.95z, released 2023-08-29} +% \date{Version 0.96a, released 2023-10-09} % % \maketitle % \begin{documentation} diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.pdf Binary files differindex be1e521cc0..46ae5b82f2 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-action.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.dtx index 9421dac34a..1a053e7180 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.dtx @@ -64,7 +64,7 @@ % }^^A % } % -% \date{Version 0.95z, released 2023-08-29} +% \date{Version 0.96a, released 2023-10-09} % % \maketitle % \begin{documentation} diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.pdf Binary files differindex 603d83c9f8..d6e06870ad 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-checkbox.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.dtx index 69858349ff..5b9993158f 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.dtx @@ -49,7 +49,7 @@ % }^^A % } % -% \date{Version 0.95z, released 2023-08-29} +% \date{Version 0.96a, released 2023-10-09} % % \maketitle % \begin{documentation} diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.pdf Binary files differindex f73e10a44d..c8c02c3dd7 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-choice.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.dtx index ad43c11bb5..7471de15f8 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.dtx @@ -55,7 +55,7 @@ % }^^A % } % -% \date{Version 0.95z, released 2023-08-29} +% \date{Version 0.96a, released 2023-10-09} % % \maketitle % \begin{documentation} diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.pdf Binary files differindex 908fe64652..c561ea10a5 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-pushbutton.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.dtx index b9737a39c1..8098d4684c 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.dtx @@ -83,7 +83,7 @@ % }^^A % } % -% \date{Version 0.95z, released 2023-08-29} +% \date{Version 0.96a, released 2023-10-09} % % \maketitle % \begin{documentation} @@ -669,15 +669,32 @@ % %\subsection{Creating the field} % We need to retrieve the index of the default through a -% label, so we need an ref attribute: +% label, so we need an ref attribute or with newer LaTeX +% a property: % % \begin{macrocode} -\ref_attribute_gset:nnnn {pdfradioindex}{0}{now} - { - \int_use:N\l_@@_radio_value_num_int - } -\cs_generate_variant:Nn \ref_label:nn {V} -\cs_generate_variant:Nn \ref_value:nn {V} +\cs_if_exist:NTF \property_new:nnnn + { + \property_new:nnnn {pdfradioindex}{now} + {0} + { + \int_use:N\l_@@_radio_value_num_int + } + \cs_new_eq:NN \@@_property_record:nn \property_record:nn + \cs_new_eq:NN \@@_property_ref:nn \property_ref:nn + } + { + \ref_attribute_gset:nnnn {pdfradioindex}{0}{now} + { + \int_use:N\l_@@_radio_value_num_int + } + \cs_new_eq:NN \@@_property_record:nn \ref_label:nn + \cs_new_eq:NN \@@_property_ref:nn \ref_value:nn + } + + \cs_generate_variant:Nn \@@_property_record:nn {V} + \cs_generate_variant:Nn \@@_property_ref:nn {V} + % \end{macrocode} % A field should be created if the name doesn't exist yet % \begin{macro}{\@@_radio_field:n} @@ -702,8 +719,8 @@ % \end{macrocode} % The default value is retrieved through a label: % \begin{macrocode} - \pdfdict_put:nnx { l_@@/field }{V} { /\ref_value:nn{#1}{pdfradioindex} } - \pdfdict_put:nnx { l_@@/field }{DV} { /\ref_value:nn{#1}{pdfradioindex} } + \pdfdict_put:nnx { l_@@/field }{V} { /\@@_property_ref:nn{#1}{pdfradioindex} } + \pdfdict_put:nnx { l_@@/field }{DV} { /\@@_property_ref:nn{#1}{pdfradioindex} } % \end{macrocode} % now we create the field and set it as parent for the following annotation. % \begin{macrocode} @@ -763,7 +780,7 @@ \tl_if_empty:NT\l_@@_fieldID_tl { \pdfdict_get:nnN {l_@@/field}{T}\l_@@_fieldID_tl - \tl_put_left:Nn \l_@@_fieldID_tl {@@/radio/} + \tl_put_left:Nn \l_@@_fieldID_tl {@pdffield/radio/} } % \end{macrocode} % If unison has been set for the field pass it on: @@ -801,8 +818,7 @@ } \bool_if:NT\l_@@_radio_default_bool { - \exp_args:Ne - \ref_label:nn{\l_@@_fieldID_tl}{pdfradioindex} + \@@_property_record:Vn\l_@@_fieldID_tl{pdfradioindex} } % \end{macrocode} @@ -810,9 +826,9 @@ % \begin{macrocode} \int_compare:nNnTF { \l_@@_radio_value_num_int } = { - \ref_value:Vn\l_@@_fieldID_tl{pdfradioindex} + \@@_property_ref:Vn\l_@@_fieldID_tl{pdfradioindex} } - { \pdfannot_dict_put:nnx {widget}{AS}{/\ref_value:Vn\l_@@_fieldID_tl{pdfradioindex}} } + { \pdfannot_dict_put:nnx {widget}{AS}{/\@@_property_ref:Vn\l_@@_fieldID_tl{pdfradioindex}} } { \pdfannot_dict_put:nnx {widget}{AS}{/Off} } % \end{macrocode} % Now we set the appearances, if no key has been use we take the default. diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.pdf Binary files differindex 8516331911..4b89a4d1d0 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-radiobutton.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.dtx index e8fe7cb11c..4ab1db01f8 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.dtx @@ -49,7 +49,7 @@ % }^^A % } % -% \date{Version 0.95z, released 2023-08-29} +% \date{Version 0.96a, released 2023-10-09} % % \maketitle % \begin{documentation} diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.pdf Binary files differindex 8b58cee341..491aff2815 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield-textfield.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.dtx index fa5e3dade4..1e1eb23f1e 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.dtx @@ -69,7 +69,7 @@ % }^^A % } % -% \date{Version 0.95z, released 2023-08-29} +% \date{Version 0.96a, released 2023-10-09} % % \maketitle % \begin{documentation} @@ -972,7 +972,7 @@ %<*package> %<@@=pdffield> \NeedsTeXFormat{LaTeX2e} -\ProvidesExplPackage{l3pdffield-testphase}{2023-08-29}{0.95z}% +\ProvidesExplPackage{l3pdffield-testphase}{2023-10-09}{0.96a}% {form fields} % \end{macrocode} % \subsection{hyperref specific command} diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.pdf Binary files differindex 370b92c1f4..c121fc5ebf 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffield.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.dtx index b55f0a3710..a98883d5c1 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.dtx @@ -49,7 +49,7 @@ % }^^A % } % -% \date{Version 0.95z, released 2023-08-29} +% \date{Version 0.96a, released 2023-10-09} % % \maketitle % \begin{documentation} @@ -398,7 +398,7 @@ % % \begin{macrocode} %<*header> -\ProvidesExplPackage{l3pdffile}{2023-08-29}{0.95z} +\ProvidesExplPackage{l3pdffile}{2023-10-09}{0.96a} {embedding and referencing files in PDF---LaTeX PDF management testphase bundle} \RequirePackage{l3pdftools} %temporarly!! %</header> diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.pdf Binary files differindex 61075ae365..dc868ba43c 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdffile.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.dtx index 377178a516..6081864cb6 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.dtx @@ -57,7 +57,7 @@ % }^^A % } % -% \date{Version 0.95z, released 2023-08-29} +% \date{Version 0.96a, released 2023-10-09} % % \maketitle % \begin{documentation} @@ -632,7 +632,7 @@ %<@@=pdfmanagement> %<*header> % -\ProvidesExplPackage{l3pdfmanagement}{2023-08-29}{0.95z} +\ProvidesExplPackage{l3pdfmanagement}{2023-10-09}{0.96a} {Management of core PDF dictionaries (LaTeX PDF management testphase bundle)} %</header> % \end{macrocode} diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.pdf Binary files differindex cf7efbed96..0f2871f660 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmanagement.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.dtx index cc9430e5e2..1f30c5badf 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.dtx @@ -49,7 +49,7 @@ % }^^A % } % -% \date{Version 0.95z, released 2023-08-29} +% \date{Version 0.96a, released 2023-10-09} % % \maketitle % \begin{documentation} @@ -566,7 +566,7 @@ % \begin{macrocode} %<@@=pdfmeta> %<*header> -\ProvidesExplPackage{l3pdfmeta}{2023-08-29}{0.95z} +\ProvidesExplPackage{l3pdfmeta}{2023-10-09}{0.96a} {PDF-Standards---LaTeX PDF management testphase bundle} %</header> % \end{macrocode} diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.pdf Binary files differindex 8cd52b4dbf..a0edffc232 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfmeta.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.dtx index c403d50ffc..6906727952 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.dtx @@ -49,7 +49,7 @@ % }^^A % } % -% \date{Version 0.95z, released 2023-08-29} +% \date{Version 0.96a, released 2023-10-09} % % \maketitle % \begin{documentation} @@ -231,7 +231,7 @@ % % \begin{macrocode} %<*header> -\ProvidesExplPackage{l3pdftools}{2023-08-29}{0.95z} +\ProvidesExplPackage{l3pdftools}{2023-10-09}{0.96a} {candidate commands for l3pdf---LaTeX PDF management testphase bundle} %</header> % \end{macrocode} diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.pdf Binary files differindex b08cd7c6ae..733d736ef7 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdftools.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.dtx b/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.dtx index bb3ae298cb..4df838e625 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.dtx @@ -48,7 +48,7 @@ % }^^A % } % -% \date{Version 0.95z, released 2023-08-29} +% \date{Version 0.96a, released 2023-10-09} % % \maketitle % \begin{documentation} @@ -132,7 +132,7 @@ % \begin{macrocode} %<@@=pdf> %<*header> -\ProvidesExplPackage{l3pdfxform}{2023-08-29}{0.95z} +\ProvidesExplPackage{l3pdfxform}{2023-10-09}{0.96a} {command to create xforms (beta)---LaTeX PDF management testphase bundle} %</header> % \end{macrocode} diff --git a/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.pdf b/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.pdf Binary files differindex 306c2f34e6..eec75e8d94 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/l3pdfxform.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.dtx b/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.dtx index 37dfc04cc2..96da24d648 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.dtx @@ -47,7 +47,7 @@ % }^^A % } % -% \date{Version 0.95z, released 2023-08-29} +% \date{Version 0.96a, released 2023-10-09} % % \maketitle % \begin{documentation} @@ -220,7 +220,7 @@ % \begin{macrocode} %<@@=pdfmanagement> %<*header> -\ProvidesExplPackage{ltdocinit}{2023-08-29}{0.95z} +\ProvidesExplPackage{ltdocinit}{2023-10-09}{0.96a} {Initialize document metadata} %</header> % \end{macrocode} diff --git a/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.pdf b/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.pdf Binary files differindex 63ad14c84e..692a6df4ac 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/ltdocinit.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.dtx b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.dtx index a64f84cc72..29fcf8bafa 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.dtx @@ -47,7 +47,7 @@ % }^^A % } % -% \date{Version 0.95z, released 2023-08-29} +% \date{Version 0.96a, released 2023-10-09} % % \maketitle % \begin{documentation} @@ -63,7 +63,7 @@ % |debug={firstaidoff={name1,name2,...},...}|. % \begin{macrocode} %<*package> -\ProvidesExplPackage{pdfmanagement-firstaid}{2023-08-29}{0.95z} +\ProvidesExplPackage{pdfmanagement-firstaid}{2023-10-09}{0.96a} {LaTeX PDF management testphase bundle / firstaid-patches} %<@@=pdfmanagement> @@ -155,6 +155,11 @@ package/xcolor/after } {\RequirePackage{xcolor-patches-tmp-ltx}} +% \end{macrocode} +% The patch must before color definitions are loaded, which will happen in +% hooks in a newer xcolor: +% \begin{macrocode} + \DeclareHookRule{package/xcolor/after}{pdfmanagement-firstaid}{before}{xcolor} } % \end{macrocode} % @@ -399,5 +404,6 @@ } %</package> % \end{macrocode}% +% % \end{documentation} % \PrintIndex diff --git a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.pdf b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.pdf Binary files differindex 1138f50d57..1bf780aa3b 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-firstaid.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.dtx b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.dtx index 6208eaa379..0fa1b2130b 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.dtx @@ -47,7 +47,7 @@ % }^^A % } % -% \date{Version 0.95z, released 2023-08-29} +% \date{Version 0.96a, released 2023-10-09} % % \maketitle % \begin{documentation} @@ -395,7 +395,7 @@ % \begin{macrocode} %<@@=pdf> %<*package> -\ProvidesExplPackage{pdfmanagement-testphase}{2023-08-29}{0.95z} +\ProvidesExplPackage{pdfmanagement-testphase}{2023-10-09}{0.96a} {LaTeX PDF management testphase bundle} \providecommand\IfFormatAtLeastTF{\@ifl@t@r\fmtversion} \IfFormatAtLeastTF{2020-10-01}{}{ @@ -423,7 +423,7 @@ % to allow to set it in the document. % \begin{macrocode} %<*header> -\ProvidesExplFile{pdfmanagement-testphase.ltx}{2023-08-29}{0.95z} +\ProvidesExplFile{pdfmanagement-testphase.ltx}{2023-10-09}{0.96a} {PDF~management~code~(testphase)} % \end{macrocode} % We define a boolean for the new delayed shipout. This is temporary. At some diff --git a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.pdf b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.pdf Binary files differindex f57b489f4e..d2898a3049 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.pdf +++ b/macros/latex/contrib/pdfmanagement-testphase/pdfmanagement-testphase.pdf diff --git a/macros/latex/contrib/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty b/macros/latex/contrib/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty index c5a9a8daeb..29074b3de4 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty +++ b/macros/latex/contrib/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty @@ -1,6 +1,6 @@ -%% LaTeX2e file `xcolor-patches.sty' +%% LaTeX2e file `xcolor-patches-tmp-ltx.sty' %% -\ProvidesPackage{xcolor-patches-tmp-ltx}[2023-08-29 v0.95z patch xcolor for l3color] +\ProvidesPackage{xcolor-patches-tmp-ltx}[2023-10-09 v0.96a patch xcolor for l3color] \@ifundefined{color_set:nn}{\RequirePackage{l3color}}{} \ExplSyntaxOn |