diff options
author | Karl Berry <karl@freefriends.org> | 2024-12-23 21:17:19 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2024-12-23 21:17:19 +0000 |
commit | d47c7642e6b8b75ee853aa88325bc1010f47c23a (patch) | |
tree | 398b499fd087b1f8ea4051095ea92b4197fbaba1 /Master/texmf-dist/source/latex/l3kernel | |
parent | 25947d6e5f8e8b1193e80605d4719147703d7124 (diff) |
l3kernel (23dec24)
git-svn-id: svn://tug.org/texlive/trunk@73194 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source/latex/l3kernel')
61 files changed, 568 insertions, 164 deletions
diff --git a/Master/texmf-dist/source/latex/l3kernel/expl3.dtx b/Master/texmf-dist/source/latex/l3kernel/expl3.dtx index 2d0a15de882..4662bdbe0b6 100644 --- a/Master/texmf-dist/source/latex/l3kernel/expl3.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/expl3.dtx @@ -24,7 +24,7 @@ % %<*driver|generic|package|2ekernel> %</driver|generic|package|2ekernel> -\def\ExplFileDate{2024-11-02}% +\def\ExplFileDate{2024-12-09}% %<*driver> \documentclass[full]{l3doc} \usepackage{graphicx} @@ -51,7 +51,7 @@ % }^^A % } % -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx b/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx index 934bffb39f1..728ac55c46a 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3bitset.dtx b/Master/texmf-dist/source/latex/l3kernel/l3bitset.dtx index 79a5a21b4d0..fa518d50d36 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3bitset.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3bitset.dtx @@ -42,7 +42,7 @@ % }^^A % } % -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % @@ -240,6 +240,16 @@ % implementation based on \cs{fp_eval:n} otherwise. % \end{function} % +% \begin{function}[EXP, added = 2024-11-12]{\bitset_use:N, \bitset_use:c} +% \begin{syntax} +% \cs{bitset_use:N} \meta{bitset var} +% \end{syntax} +% This leaves the current value of the bitset expressed as +% a binary (string) number in the input stream. +% If no bit has been set yet, the output is zero. This is +% functionally equivalent to \cs{bitset_to_bin:N}. +% \end{function} +% % \begin{function}[added = 2023-11-15] % {\bitset_show:N, \bitset_show:c} % \begin{syntax} @@ -524,6 +534,13 @@ % \end{macro} % \end{macro} % +% \begin{macro}{\bitset_use:N, \bitset_use:c} +% \begin{macrocode} +\cs_new_eq:NN \bitset_use:N \tl_use:N +\cs_generate_variant:Nn \bitset_use:N { c } +% \end{macrocode} +% \end{macro} +% % \begin{macro} % { % \bitset_item:Nn, \bitset_item:cn diff --git a/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx b/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx index 105304afe47..f7a7f3feab2 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3box.dtx b/Master/texmf-dist/source/latex/l3kernel/l3box.dtx index 64991049615..0170e91ff05 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3box.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3box.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3cctab.dtx b/Master/texmf-dist/source/latex/l3kernel/l3cctab.dtx index 53db15109b4..112f79e9ac4 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3cctab.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3cctab.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % @@ -866,8 +866,7 @@ \group_begin: \int_set:Nn \tex_endlinechar:D { 32 } \char_set_catcode_invalid:n { 0 } - \bool_lazy_or:nnTF - { \sys_if_engine_xetex_p: } { \sys_if_engine_luatex_p: } + \sys_if_engine_opentype:TF { \int_step_function:nN { 31 } \char_set_catcode_invalid:n } { \int_step_function:nN { 31 } \char_set_catcode_active:n } \int_step_function:nnN { 33 } { 64 } \char_set_catcode_other:n @@ -892,8 +891,7 @@ \char_set_catcode_group_end:n { 125 } % right brace \char_set_catcode_space:n { 126 } % tilde \char_set_catcode_invalid:n { 127 } % ^^? - \bool_lazy_or:nnF - { \sys_if_engine_xetex_p: } { \sys_if_engine_luatex_p: } + \sys_if_engine_opentype:F { \int_step_function:nnN { 128 } { 255 } \char_set_catcode_active:n } \@@_gset:n { \c_code_cctab } \group_end: diff --git a/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx b/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx index dc6caccf0d6..0ab53da5fc3 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % @@ -619,6 +619,22 @@ % \end{texnote} % \end{function} % +% \begin{function}[EXP, added = 2024-11-12]{\clist_use:N, \clist_use:c} +% \begin{syntax} +% \cs{clist_use:N} \meta{clist~var} +% \end{syntax} +% Places the contents of the \meta{clist~var} in the input stream, +% with a comma between each item. The result is exaclty the stored +% \meta{clist}, which will include braces around (for example) +% entries with retained spaces at the ends. +% \begin{texnote} +% The result is returned as-is, in the same way as \cs{tl_use:N} +% and \emph{without} protection from expansion, +% cf.~\cs{clist_use:Nnnnn}, etc. It is equivalent to \texttt{V}-type +% expansion of a \texttt{clist}. +% \end{texnote} +% \end{function} +% % \begin{function}[EXP, added = 2021-05-10]{\clist_use:nnnn, \clist_use:nn} % \begin{syntax} % \cs{clist_use:nnnn} \Arg{comma~list} \Arg{separator~between~two} \\ @@ -2008,6 +2024,13 @@ % \end{macro} % \end{macro} % +% \begin{macro}{\clist_use:N, \clist_use:c} +% \begin{macrocode} +\cs_new_eq:NN \clist_use:N \tl_use:N +\cs_generate_variant:Nn \clist_use:N { c } +% \end{macrocode} +% \end{macro} +% % \begin{macro} % { % \clist_use:nnnn, \clist_use:nn, \@@_use:Nw, diff --git a/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx b/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx index 7eda18d6e71..a50e5c48b40 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3color.dtx b/Master/texmf-dist/source/latex/l3kernel/l3color.dtx index 99c81e4980b..f8d42a40913 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3color.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3color.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3debug.dtx b/Master/texmf-dist/source/latex/l3kernel/l3debug.dtx index c3554aab6df..b44f39329ff 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3debug.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3debug.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % @@ -69,7 +69,7 @@ % % Standard file identification. % \begin{macrocode} -\ProvidesExplFile{l3debug.def}{2024-11-02}{}{L3 Debugging support} +\ProvidesExplFile{l3debug.def}{2024-12-09}{}{L3 Debugging support} % \end{macrocode} % % \begin{variable}{\s_@@_stop} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx b/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx index 87c7708eb8f..330237292be 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx b/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx index 1f7a29efa5d..5341bc93e53 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx @@ -71,7 +71,7 @@ and all files in that bundle must be distributed together. % This isn't included in the typeset documentation because it's a bit % ugly: %<*class> -\ProvidesExplClass{l3doc}{2024-11-02}{} +\ProvidesExplClass{l3doc}{2024-12-09}{} {L3 Experimental documentation class} %</class> % \fi @@ -84,7 +84,7 @@ and all files in that bundle must be distributed together. % require you to do updates, if the class changes.}} % % \author{\Team} -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % \maketitle % \tableofcontents % @@ -1531,8 +1531,7 @@ and all files in that bundle must be distributed together. % \begin{macrocode} \bool_if:NT \g_@@_lmodern_bool { - \bool_lazy_or:nnTF - { \sys_if_engine_luatex_p: }{ \sys_if_engine_xetex_p: } + \sys_if_engine_opentype:TF { \group_begin: \ttfamily @@ -3609,7 +3608,7 @@ and all files in that bundle must be distributed together. % \begin{macrocode} \newenvironment{TemplateInterfaceDescription}[1] { - \subsection{The~object~type~`#1'} + \subsection{The~template~type~`#1'} \begingroup \@beginparpenalty\@M \description @@ -3628,7 +3627,7 @@ and all files in that bundle must be distributed together. % \begin{macrocode} \newenvironment{TemplateDescription}[2] { - \subsection{The~template~`#2'~(object~type~#1)} + \subsection{The~template~`#2'~(template~type~#1)} \subsubsection*{Attributes:} \begingroup \@beginparpenalty\@M @@ -4717,7 +4716,7 @@ and all files in that bundle must be distributed together. % \begin{macrocode} \tl_const:Nn \Team { - The~\LaTeX3~Project\thanks + The~\LaTeX~Project~team\thanks {\url{https://www.latex-project.org/latex3/}} } % \end{macrocode} @@ -4731,7 +4730,7 @@ and all files in that bundle must be distributed together. } \author { - The~\LaTeX3~Project\thanks{E-mail:~ + The~\LaTeX~Project~team\thanks{E-mail:~ \href{mailto:latex-l@listserv.uni-heidelberg.de} {latex-l@listserv.uni-heidelberg.de}} } diff --git a/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx b/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx index fb69b714fb7..3f3458e4a8f 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx @@ -63,7 +63,7 @@ % }^^A % } % -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx b/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx index 3ca2c517b17..81ad6ef3b73 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3file.dtx b/Master/texmf-dist/source/latex/l3kernel/l3file.dtx index ceadf34dc06..4cf93f65f5e 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3file.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3file.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx b/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx index 7741a9b0dae..358c29b0b59 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx index 4fcaf718644..6f74942930f 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx @@ -42,7 +42,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % \maketitle % % \begin{documentation} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx index 807710de08b..ee7f02d8ff6 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx index 11c244aa1f3..cdb02dc1a58 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx @@ -42,7 +42,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx index 23f7a2213de..d810f49b701 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx index d65a147e158..ec74bf42fea 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx @@ -42,7 +42,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx index cedbc918881..ef7c829873e 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx @@ -42,7 +42,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-functions.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-functions.dtx index 444e8189fa3..e37c12fcd60 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-functions.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-functions.dtx @@ -42,7 +42,7 @@ % }^^A % } % -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx index baa08b4216f..28624561503 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx @@ -42,7 +42,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx index d272cadf117..85832288cb3 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx @@ -42,7 +42,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx index 91c3a20477f..c23b49afba8 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx @@ -42,7 +42,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx index a4202b4fead..b2df6a5309a 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-symbolic.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-symbolic.dtx index 0db79ef7751..a5c03d61b4b 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-symbolic.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-symbolic.dtx @@ -42,7 +42,7 @@ % }^^A % } % -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx index b300528ec5e..84760238bfb 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx @@ -42,7 +42,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % \maketitle % % \begin{documentation} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx index 46cad5c8f99..6a0af100a34 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx @@ -42,7 +42,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-types.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-types.dtx index 049a6eea826..e1456c153f6 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-types.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-types.dtx @@ -42,7 +42,7 @@ % }^^A % } % -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx index 0cbfd201532..09e46944f34 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx @@ -49,7 +49,7 @@ % }^^A % } % -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx index 52b91d1296d..93ea3d75f83 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3int.dtx b/Master/texmf-dist/source/latex/l3kernel/l3int.dtx index 9782fe452cd..9c6835bc76f 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3int.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3int.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % @@ -297,7 +297,7 @@ % \begin{function}[updated = 2011-10-22] % { % \int_set:Nn, \int_set:cn, \int_set:NV, \int_set:cV, -% \int_gset:Nn, \int_gset:cn, \int_gset:MV, \int_gset:cV +% \int_gset:Nn, \int_gset:cn, \int_gset:NV, \int_gset:cV % } % \begin{syntax} % \cs{int_set:Nn} \meta{integer} \Arg{int expr} @@ -307,6 +307,37 @@ % \cs{int_eval:n}). % \end{function} % +% \begin{function}[added = 2024-12-08] +% { +% \int_set_regex_count:Nnn, \int_set_regex_count:cnn, +% \int_set_regex_count:NNn, \int_set_regex_count:cNn, +% \int_gset_regex_count:Nnn, \int_gset_regex_count:cnn, +% \int_gset_regex_count:NNn, \int_gset_regex_count:cNn, +% } +% \begin{syntax} +% \cs{int_set_regex_count:Nnn} \meta{int var} \Arg{regex} \Arg{token list} +% \cs{int_set_regex_count:NNn} \meta{int var} \meta{regex~var} \Arg{token list} +% \end{syntax} +% Sets \meta{int var} equal to the number of times +% \meta{regular expression} appears in \meta{token list}. +% The search starts by finding the left-most longest match, +% respecting greedy and lazy (non-greedy) operators. Then the search +% starts again from the character following the last character +% of the previous match, until reaching the end of the token list. +% Infinite loops are prevented in the case where the regular expression +% can match an empty token list: then we count one match between each +% pair of characters. +% For instance, +% \begin{verbatim} +% \int_set_regex_count:Nnn \l_foo_int { (b+|c) } { abbababcbb } +% \end{verbatim} +% results in \cs[no-index]{l_foo_int} taking the value $5$. +% Theses are alternative names for \cs{regex_count:nnN} and friends, +% with arguments re-ordered for \meta{int~var} setting; +% see \pkg{l3regex} chapter for more details of the \meta{regex} +% format. +% \end{function} +% % \begin{function}[updated = 2011-10-22] % {\int_sub:Nn, \int_sub:cn, \int_gsub:Nn, \int_gsub:cn} % \begin{syntax} @@ -1495,6 +1526,45 @@ % \end{macro} % \end{macro} % +% \begin{macro} +% { +% \int_set_regex_count:Nnn, \int_set_regex_count:cnn, +% \int_gset_regex_count:Nnn, \int_gset_regex_count:cnn +% } +% \begin{macro} +% { +% \int_set_regex_count:NNn, \int_set_regex_count:cNn, +% \int_gset_regex_count:NNn, \int_set_gregex_count:cNn +% } +% \begin{macrocode} +\cs_new_protected:Npn \int_set_regex_count:Nnn #1#2#3 + { \regex_count:nnN {#2} {#3} #1 } +\cs_generate_variant:Nn \int_set_regex_count:Nnn { c } +\cs_new_protected:Npn \int_gset_regex_count:Nnn #1#2#3 + { + \group_begin: + \int_set_eq:NN \l_@@_internal_a_int #1 + \regex_count:nnN {#2} {#3} \l_@@_internal_a_int + \int_gset_eq:NN #1 \l_@@_internal_a_int + \group_end: + } +\cs_generate_variant:Nn \int_gset_regex_count:Nnn { c } +\cs_new_protected:Npn \int_set_regex_count:NNn #1#2#3 + { \regex_count:NnN #2 {#3} #1 } +\cs_generate_variant:Nn \int_set_regex_count:Nnn { c } +\cs_new_protected:Npn \int_gset_regex_count:NNn #1#2#3 + { + \group_begin: + \int_set_eq:NN \l_@@_internal_a_int #1 + \regex_count:NnN #2 {#3} \l_@@_internal_a_int + \int_gset_eq:NN #1 \l_@@_internal_a_int + \group_end: + } +\cs_generate_variant:Nn \int_gset_regex_count:NNn { c } +% \end{macrocode} +% \end{macro} +% \end{macro} +% % \subsection{Using integers} % % \begin{macro}{\int_use:N, \int_use:c} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx b/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx index 9a9a5d64e8f..0c7a5d3343b 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx b/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx index 2678f3f965a..d176fd5cb49 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx b/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx index c9220d72797..5228a9c19ea 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % @@ -921,7 +921,7 @@ % The correct list is returned by nested calls. % \end{function} % -% \section{Digesting keys} +% \section{Precompiling keys} % % \begin{function}[added = 2022-03-09]{\keys_precompile:nnN} % \begin{syntax} @@ -931,6 +931,14 @@ % resulting code for those which set variables or functions into the % \meta{tl~var}. Thus this function \enquote{precompiles} the keyval list into % a set of results which can be applied rapidly. +% +% It is important to note that when precompiling keys, no expansion of variables +% takes place. This means that any key setting which simply stores variable names, +% rather than variable values, will not work correctly. Most notably, any +% key setting which uses \cs{l_keys_key_str}, \cs{l_keys_path_str} or +% \cs{l_keys_value_tl} will yield unpredictable outcomes. As such, keys +% intended to be precompiled should fully expand any values at the point of +% setting. % \end{function} % % \section{Utility functions for keys} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx b/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx index b76516d1b05..d8c66993a12 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx b/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx index d7a6058a153..e9cabf83ed6 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx b/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx index 68058724e8d..14b90a24da6 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3names.dtx b/Master/texmf-dist/source/latex/l3kernel/l3names.dtx index 95aeafe4a68..1ace7919a76 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3names.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3names.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3pdf.dtx b/Master/texmf-dist/source/latex/l3kernel/l3pdf.dtx index 624fd083261..63517d8640d 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3pdf.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3pdf.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx b/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx index c4f2ab1fa02..2ab7c0a0659 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % @@ -79,41 +79,28 @@ % \begin{function}[updated = 2022-11-01] % { % \prg_new_conditional:Npnn, \prg_set_conditional:Npnn, \prg_gset_conditional:Npnn, -% \prg_new_conditional:Nnn, \prg_set_conditional:Nnn, \prg_gset_conditional:Nnn +% \prg_new_protected_conditional:Npnn, \prg_set_protected_conditional:Npnn, \prg_gset_protected_conditional:Npnn, +% \prg_new_conditional:Nnn, \prg_set_conditional:Nnn, \prg_gset_conditional:Nnn, +% \prg_new_protected_conditional:Nnn, \prg_set_protected_conditional:Nnn, \prg_gset_protected_conditional:Nnn % } % \begin{syntax} % \cs{prg_new_conditional:Npnn} \cs[no-index]{\meta{name}:\meta{arg spec}} \meta{parameters} \Arg{conditions} \Arg{code} \\ % \cs{prg_new_conditional:Nnn} \cs[no-index]{\meta{name}:\meta{arg spec}} \Arg{conditions} \Arg{code} % \end{syntax} % These functions create a family of conditionals using the same -% \Arg{code} to perform the test created. Those conditionals are -% expandable if \meta{code} is. The \texttt{new} versions check +% \meta{code} to perform the test created. Those non-protected +% conditionals are expandable if \meta{code} is. +% The \texttt{new} versions check % for existing definitions and perform assignments globally % (\emph{cf.}~\cs{cs_new:Npn}) whereas the \texttt{set} versions do no % check and perform assignments locally (\emph{cf.}~\cs{cs_set:Npn}). % The conditionals created are dependent on the comma-separated list -% of \meta{conditions}, which should be one or more of \texttt{p}, -% \texttt{T}, \texttt{F} and \texttt{TF}. -% \end{function} -% -% \begin{function}[updated = 2012-02-06] -% { -% \prg_new_protected_conditional:Npnn, \prg_set_protected_conditional:Npnn, \prg_gset_protected_conditional:Npnn, -% \prg_new_protected_conditional:Nnn, \prg_set_protected_conditional:Nnn, \prg_gset_protected_conditional:Nnn -% } -% \begin{syntax} -% \cs{prg_new_protected_conditional:Npnn} \cs[no-index]{\meta{name}:\meta{arg spec}} \meta{parameters} \Arg{conditions} \Arg{code} \\ -% \cs{prg_new_protected_conditional:Nnn} \cs[no-index]{\meta{name}:\meta{arg spec}} \Arg{conditions} \Arg{code} -% \end{syntax} -% These functions create a family of protected conditionals using the -% same \Arg{code} to perform the test created. The \meta{code} does -% not need to be expandable. The \texttt{new} version check for -% existing definitions and perform assignments globally -% (\emph{cf.}~\cs{cs_new:Npn}) whereas the \texttt{set} version do -% not (\emph{cf.}~\cs{cs_set:Npn}). The conditionals created are -% depended on the comma-separated list of \meta{conditions}, which -% should be one or more of \texttt{T}, \texttt{F} and \texttt{TF} (not -% \texttt{p}). +% of \meta{conditions}, which should be one or more of +% \texttt{T}, \texttt{F} and \texttt{TF}, and for non-protected conditionals +% \texttt{p}. +% For public conditionals, a full set of forms should be provided: +% this contrasts with strictly internal conditionals, where only the +% required subset need be defined. % \end{function} % % The conditionals are defined by \cs{prg_new_conditional:Npnn} and @@ -182,7 +169,7 @@ % \prg_gset_eq_conditional:NNn % } % \begin{syntax} -% \cs{prg_new_eq_conditional:NNn} \cs[no-index]{\meta{name_1}:\meta{arg spec_1}} \cs[no-index]{\meta{name_2}:\meta{arg spec_2}} \Arg{conditions} +% \cs{prg_new_eq_conditional:NNn} \cs[no-index]{\meta{name_1}:\meta{arg spec}} \cs[no-index]{\meta{name_2}:\meta{arg spec}} \Arg{conditions} % \end{syntax} % These functions copy a family of conditionals. The \texttt{new} version % checks for existing definitions (\emph{cf.}~\cs{cs_new_eq:NN}) whereas diff --git a/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx b/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx index 47cd52320c6..4f13ed32d41 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % @@ -1724,7 +1724,7 @@ \exp_after:wN { \tl_to_str:n {#2} } } } - { \exp_after:wN \@@_get_linked:w #1 {#2} \use:n { } { } } + { \exp_after:wN \@@_get_linked:w #1 {#2} \exp_not:n { } { } } } \cs_new:Npn \@@_item:nnn #1#2#3 { diff --git a/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx b/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx index 5c6b0ca2d41..4bc8b55ebb3 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx b/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx index 1fa9f71f08b..f3342527518 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % @@ -541,7 +541,7 @@ % \begin{syntax} % \cs{regex_set:Nn} \meta{regex~var} \Arg{regex} % \end{syntax} -% Stores a compiled version of the \meta{regular expression} in the +% Stores a compiled version of the \meta{regex} in the % \meta{regex~var}. The assignment is local for \cs{regex_set:Nn} and % global for \cs{regex_gset:Nn}. For instance, this function can be % used as @@ -557,7 +557,7 @@ % \end{syntax} % Creates a new constant \meta{regex~var} or raises an error if the name % is already taken. The value of the \meta{regex~var} is set -% globally to the compiled version of the \meta{regular expression}. +% globally to the compiled version of the \meta{regex}. % \end{function} % % \begin{function}[added = 2021-04-26, updated = 2021-04-29] @@ -595,7 +595,7 @@ % \begin{syntax} % \cs{regex_match:nnTF} \Arg{regex} \Arg{token list} \Arg{true code} \Arg{false code} % \end{syntax} -% Tests whether the \meta{regular expression} matches any part +% Tests whether the \meta{regex} matches any part % of the \meta{token list}. For instance, % \begin{verbatim} % \regex_match:nnTF { b [cde]* } { abecdcx } { TRUE } { FALSE } @@ -614,7 +614,7 @@ % \end{syntax} % Sets \meta{int var} within the current \TeX{} group level % equal to the number of times -% \meta{regular expression} appears in \meta{token list}. +% \meta{regex} appears in \meta{token list}. % The search starts by finding the left-most longest match, % respecting greedy and lazy (non-greedy) operators. Then the search % starts again from the character following the last character @@ -673,7 +673,7 @@ % \cs{regex_extract_once:nnN} \Arg{regex} \Arg{token list} \meta{seq~var} % \cs{regex_extract_once:nnNTF} \Arg{regex} \Arg{token list} \meta{seq~var} \Arg{true code} \Arg{false code} % \end{syntax} -% Finds the first match of the \meta{regular expression} in the +% Finds the first match of the \meta{regex} in the % \meta{token list}. If it exists, the match is stored as the first % item of the \meta{seq~var}, and further items are the contents of % capturing groups, in the order of their opening parenthesis. The @@ -707,7 +707,7 @@ % \cs{regex_extract_all:nnN} \Arg{regex} \Arg{token list} \meta{seq~var} % \cs{regex_extract_all:nnNTF} \Arg{regex} \Arg{token list} \meta{seq~var} \Arg{true code} \Arg{false code} % \end{syntax} -% Finds all matches of the \meta{regular expression} +% Finds all matches of the \meta{regex} % in the \meta{token list}, and stores all the submatch information % in a single sequence (concatenating the results of % multiple \cs{regex_extract_once:nnN} calls). @@ -731,15 +731,15 @@ % \regex_split:NnN, \regex_split:NVN, % } % \begin{syntax} -% \cs{regex_split:nnN} \Arg{regular expression} \Arg{token list} \meta{seq~var} -% \cs{regex_split:nnNTF} \Arg{regular expression} \Arg{token list} \meta{seq~var} \Arg{true code} \Arg{false code} +% \cs{regex_split:nnN} \Arg{regex} \Arg{token list} \meta{seq~var} +% \cs{regex_split:nnNTF} \Arg{regex} \Arg{token list} \meta{seq~var} \Arg{true code} \Arg{false code} % \end{syntax} % Splits the \meta{token list} into a sequence of parts, delimited by -% matches of the \meta{regular expression}. If the \meta{regular expression} +% matches of the \meta{regex}. If the \meta{regex} % has capturing groups, then the token lists that they match are stored as % items of the sequence as well. The assignment to \meta{seq~var} is local. % If no match is found the resulting \meta{seq~var} has the -% \meta{token list} as its sole item. If the \meta{regular expression} +% \meta{token list} as its sole item. If the \meta{regex} % matches the empty token list, then the \meta{token list} is split % into single tokens. % The testing versions insert the \meta{true code} into the input @@ -763,10 +763,10 @@ % \regex_replace_once:NnN,\regex_replace_once:NVN % } % \begin{syntax} -% \cs{regex_replace_once:nnN} \Arg{regular expression} \Arg{replacement} \meta{tl~var} -% \cs{regex_replace_once:nnNTF} \Arg{regular expression} \Arg{replacement} \meta{tl~var} \Arg{true code} \Arg{false code} +% \cs{regex_replace_once:nnN} \Arg{regex} \Arg{replacement} \meta{tl~var} +% \cs{regex_replace_once:nnNTF} \Arg{regex} \Arg{replacement} \meta{tl~var} \Arg{true code} \Arg{false code} % \end{syntax} -% Searches for the \meta{regular expression} in the contents of the +% Searches for the \meta{regex} in the contents of the % \meta{tl~var} and replaces the first match with the % \meta{replacement}. In the \meta{replacement}, % |\0| represents the full match, |\1| represent the contents of the @@ -780,10 +780,10 @@ % \regex_replace_all:NnN,\regex_replace_all:NVN % } % \begin{syntax} -% \cs{regex_replace_all:nnN} \Arg{regular expression} \Arg{replacement} \meta{tl~var} -% \cs{regex_replace_all:nnNTF} \Arg{regular expression} \Arg{replacement} \meta{tl~var} \Arg{true code} \Arg{false code} +% \cs{regex_replace_all:nnN} \Arg{regex} \Arg{replacement} \meta{tl~var} +% \cs{regex_replace_all:nnNTF} \Arg{regex} \Arg{replacement} \meta{tl~var} \Arg{true code} \Arg{false code} % \end{syntax} -% Replaces all occurrences of the \meta{regular expression} in the +% Replaces all occurrences of the \meta{regex} in the % contents of the \meta{tl~var} % by the \meta{replacement}, where |\0| represents % the full match, |\1| represent the contents of the first capturing diff --git a/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx b/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx index 120081197be..d9aa396570f 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % @@ -189,6 +189,81 @@ % \end{texnote} % \end{function} % +% \begin{function}[added = 2024-12-08] +% { +% \seq_set_regex_extract_once:Nnn, \seq_set_regex_extract_once:cnn, +% \seq_set_regex_extract_once:NNn, \seq_set_regex_extract_once:cNn, +% \seq_gset_regex_extract_once:Nnn, \seq_gset_regex_extract_once:cnn, +% \seq_gset_regex_extract_once:NNn, \seq_gset_regex_extract_once:cNn, +% } +% \begin{syntax} +% \cs{seq_set_regex_extract_once:Nnn} \meta{seq~var} \Arg{regex} \Arg{token list} +% \cs{seq_set_regex_extract_once:NNn} \meta{seq~var} \meta{regex~var} \Arg{token list} +% \end{syntax} +% Finds the first match of the \meta{regex} in the +% \meta{token list}. If it exists, the match is stored as the first +% item of the \meta{seq~var}, and further items are the contents of +% capturing groups, in the order of their opening parenthesis. +% If there is no match, the \meta{seq~var} is cleared. +% Theses are alternative names for \cs{regex_extract_once:nnN} and friends, +% with arguments re-ordered for \meta{seq~var} setting; +% see \pkg{l3regex} chapter for more details of the \meta{regex} +% format. +% \end{function} +% +% \begin{function}[added = 2024-12-08] +% { +% \seq_set_regex_extract_all:Nnn, \seq_set_regex_extract_all:cnn, +% \seq_set_regex_extract_all:NNn, \seq_set_regex_extract_all:cNn, +% \seq_gset_regex_extract_all:Nnn, \seq_gset_regex_extract_all:cnn, +% \seq_gset_regex_extract_all:NNn, \seq_gset_regex_extract_all:cNn, +% } +% \begin{syntax} +% \cs{seq_set_regex_extract_all:Nnn} \meta{seq~var} \Arg{regex} \Arg{token list} +% \cs{seq_set_regex_extract_all:NNn} \meta{seq~var} \meta{regex~var} \Arg{token list} +% \end{syntax} +% Finds all matches of the \meta{regex} in the +% \meta{token list}, and stores all the submatch information +% in a single sequence (concatenating the results of +% multiple \cs{seq_set_regex_extract_all:Nnn} calls). +% If there is no match, the \meta{seq~var} is cleared. +% Theses are alternative names for \cs{regex_extract_all:nnN} and friends, +% with arguments re-ordered for \meta{seq~var} setting; +% see \pkg{l3regex} chapter for more details of the \meta{regex} +% format. +% \end{function} +% +% \begin{function}[added = 2024-12-08] +% { +% \seq_set_regex_split:Nnn, \seq_set_regex_split:cnn, +% \seq_set_regex_split:NNn, \seq_set_regex_split:cNn, +% \seq_gset_regex_split:Nnn, \seq_gset_regex_split:cnn, +% \seq_gset_regex_split:NNn, \seq_gset_regex_split:cNn, +% } +% \begin{syntax} +% \cs{seq_set_regex_split:Nnn} \meta{seq~var} \Arg{regex} \Arg{token list} +% \cs{seq_set_regex_split:NNn} \meta{seq~var} \meta{regex~var} \Arg{token list} +% \end{syntax} +% Splits the \meta{token list} into a sequence of parts, delimited by +% matches of the \meta{regular expression}. If the \meta{regular expression} +% has capturing groups, then the token lists that they match are stored as +% items of the sequence as well. +% If no match is found the resulting \meta{seq~var} has the +% \meta{token list} as its sole item. If the \meta{regular expression} +% matches the empty token list, then the \meta{token list} is split +% into single tokens. +% For example, after +% \begin{verbatim} +% \seq_set_regex_split:Nnn \l_path_seq { / } { the/path/for/this/file.tex } +% \end{verbatim} +% the sequence |\l_path_seq| contains the items |{the}|, |{path}|, +% |{for}|, |{this}|, and |{file.tex}|. +% Theses are alternative names for \cs{regex_split:nnN} and friends, +% with arguments re-ordered for \meta{seq~var} setting; +% see \pkg{l3regex} chapter for more details of the \meta{regex} +% format. +% \end{function} +% % \begin{function} % {\seq_concat:NNN, \seq_concat:ccc, \seq_gconcat:NNN, \seq_gconcat:ccc} % \begin{syntax} @@ -1411,6 +1486,84 @@ % \end{macro} % \end{macro} % +% \begin{macro} +% { +% \seq_set_regex_extract_once:Nnn, \seq_set_regex_extract_once:cnn, +% \seq_gset_regex_extract_once:Nnn, \seq_gset_regex_extract_once:cnn +% } +% \begin{macro} +% { +% \seq_set_regex_extract_all:Nnn, \seq_set_regex_extract_all:cnn, +% \seq_gset_regex_extract_all:Nnn, \seq_gset_regex_extract_all:cnn +% } +% \begin{macro} +% { +% \seq_set_regex_extract_once:NNn, \seq_set_regex_extract_once:cNn, +% \seq_gset_regex_extract_once:NNn, \seq_gset_regex_extract_once:cNn +% } +% \begin{macro} +% { +% \seq_set_regex_extract_all:NNn, \seq_set_regex_extract_all:cNn, +% \seq_gset_regex_extract_all:NNn, \seq_gset_regex_extract_all:cNn +% } +% \begin{macro} +% { +% \seq_set_regex_split:Nnn, \seq_set_regex_split:cnn, +% \seq_gset_regex_split:Nnn, \seq_gset_regex_split:cnn +% } +% \begin{macro} +% { +% \seq_set_regex_split:NNn, \seq_set_regex_split:cNn, +% \seq_gset_regex_split:NNn, \seq_gset_regex_split:cNn +% } +% \begin{macrocode} +\cs_new_protected:Npn \seq_set_regex_extract_once:Nnn #1#2#3 + { \regex_extract_once:nnN {#2} {#3} #1 } +\cs_generate_variant:Nn \seq_set_regex_extract_once:Nnn { c } +\cs_new_protected:Npn \seq_set_regex_extract_once:NNn #1#2#3 + { \regex_extract_once:NnN #2 {#3} #1 } +\cs_generate_variant:Nn \seq_set_regex_extract_once:NNn { c } +\cs_new_protected:Npn \seq_set_regex_extract_all:Nnn #1#2#3 + { \regex_extract_all:nnN {#2} {#3} #1 } +\cs_generate_variant:Nn \seq_set_regex_extract_all:Nnn { c } +\cs_new_protected:Npn \seq_set_regex_extract_all:NNn #1#2#3 + { \regex_extract_all:NnN #2 {#3} #1 } +\cs_generate_variant:Nn \seq_set_regex_extract_all:NNn { c } +\cs_new_protected:Npn \seq_set_regex_split:Nnn #1#2#3 + { \regex_split:nnN {#2} {#3} #1 } +\cs_generate_variant:Nn \seq_set_regex_split:Nnn { c } +\cs_new_protected:Npn \seq_set_regex_split:NNn #1#2#3 + { \regex_split:NnN #2 {#3} #1 } +\cs_generate_variant:Nn \seq_set_regex_split:NNn { c } +\group_begin: + \cs_set_protected:Npn \@@_tmp:w #1#2#3 + { + \cs_new_protected:cpe { seq_gset_regex_ #1 :N #2 n } ##1##2##3 + { + \group_begin: + \seq_set_eq:NN \exp_not:N \l_@@_tmp_seq ##1 + \exp_not:c { regex_ #1 :Nn #2 } + #3 {##2} {##3} \exp_not:N \l_@@_tmp_seq + \seq_gset_eq:NN ##1 \exp_not:N \l_@@_tmp_seq + \group_end: + } + \cs_generate_variant:cn { seq_gset_regex_ #1 :N #2 n } { c } + } + \@@_tmp:w { extract_once } n { } + \@@_tmp:w { extract_once } N \use:n + \@@_tmp:w { extract_all } n { } + \@@_tmp:w { extract_all } N \use:n + \@@_tmp:w { split } n { } + \@@_tmp:w { split } N \use:n +\group_end: +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% % \begin{macro}{\seq_concat:NNN, \seq_concat:ccc} % \UnitTested % \begin{macro}{\seq_gconcat:NNN, \seq_gconcat:ccc} @@ -1525,10 +1678,10 @@ % \end{macrocode} % \end{macro} % -% \begin{variable}{\l_@@_remove_seq} +% \begin{variable}{\l_@@_tmp_seq} % An internal sequence for the removal routines. % \begin{macrocode} -\seq_new:N \l_@@_remove_seq +\seq_new:N \l_@@_tmp_seq % \end{macrocode} % \end{variable} % @@ -1545,13 +1698,13 @@ { \@@_remove_duplicates:NN \seq_gset_eq:NN } \cs_new_protected:Npn \@@_remove_duplicates:NN #1#2 { - \seq_clear:N \l_@@_remove_seq + \seq_clear:N \l_@@_tmp_seq \seq_map_inline:Nn #2 { - \seq_if_in:NnF \l_@@_remove_seq {##1} - { \seq_put_right:Nn \l_@@_remove_seq {##1} } + \seq_if_in:NnF \l_@@_tmp_seq {##1} + { \seq_put_right:Nn \l_@@_tmp_seq {##1} } } - #1 #2 \l_@@_remove_seq + #1 #2 \l_@@_tmp_seq } \cs_generate_variant:Nn \seq_remove_duplicates:N { c } \cs_generate_variant:Nn \seq_gremove_duplicates:N { c } diff --git a/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx b/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx index 2e15eb28665..27fc10b4c16 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % @@ -769,7 +769,7 @@ % \end{syntax} % Sets \meta{skip} to the value of \meta{skip expr}, which % must evaluate to a length with units and may include a rubber -% component (for example |1 cm plus 0.5 cm|. +% component (for example |1 cm plus 0.5 cm|). % \end{function} % % \begin{function} @@ -1000,7 +1000,7 @@ % % \begin{function}[updated = 2011-10-22] % { -% \muskip_set:Nn, \muskip_set:cn, \muskip_set:Nn, \muskip_set:cn, +% \muskip_set:Nn, \muskip_set:cn, \muskip_set:NV, \muskip_set:cV, % \muskip_gset:Nn, \muskip_gset:cn, \muskip_gset:NV, \muskip_gset:cV % } % \begin{syntax} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx b/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx index c599739d566..7161e105251 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx b/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx index 1976b092b10..095ec90e18e 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % @@ -2624,9 +2624,7 @@ \exp_args:Ne \tl_to_str:n { \str_map_function:nN {#1} \@@_convert_pdfname:n } } -\bool_lazy_or:nnTF - { \sys_if_engine_luatex_p: } - { \sys_if_engine_xetex_p: } +\sys_if_engine_opentype:TF { \cs_new:Npn \@@_convert_pdfname:n #1 { diff --git a/Master/texmf-dist/source/latex/l3kernel/l3str.dtx b/Master/texmf-dist/source/latex/l3kernel/l3str.dtx index 94a74b17d13..39fb3f0677b 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3str.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3str.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx b/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx index 4a600987daa..11883819405 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % @@ -107,6 +107,26 @@ % |\sys_if_engine_ptex_p:| is true for \epTeX{} but false for \eupTeX{}. % \end{function} % +% \begin{function}[added = 2024-11-05, pTF]{\sys_if_engine_opentype:} +% \begin{syntax} +% \cs{sys_if_engine_opentype_p:} +% \cs{sys_if_engine_opentype:TF} \Arg{true code} \Arg{false code} +% \end{syntax} +% Conditional which allows functionality-specific code to be used. +% The test is true for engines which can use OpenType fonts and +% thus full Unicode typesetting. This tests for features not engine +% name, but currently is equivalent to requiring either +% \XeTeX{} or \LuaTeX{}. +% \begin{texnote} +% The underlying test here checks for \tn{Umathcode}, which +% is used to implement OpenType math font typesetting. Any +% engine which should give a \texttt{true} result here needs +% to provide general Unicode support (accepting the full UTF-8 +% range for character codes), a mechanism to load system fonts +% and a suitable interface for math mode typesetting. +% \end{texnote} +% \end{function} +% % \begin{variable}[added = 2015-09-19]{\c_sys_engine_str} % The current engine given as a lower case string: one of % |luatex|, |pdftex|, |ptex|, |uptex| or |xetex|. @@ -514,6 +534,14 @@ % \end{variable} % \end{macro} % +% \begin{function}[pTF]{\sys_if_engine_opentype:} +% \begin{macrocode} +\@@_const:nn + { sys_if_engine_opentype } + { \cs_if_exist_p:N \tex_Umathcode:D } +% \end{macrocode} +% \end{function} +% % \begin{variable}{\c_sys_engine_exec_str,\c_sys_engine_format_str} % Take the functions defined above, and set up the engine and format % names. \cs{c_sys_engine_exec_str} differs from \cs{c_sys_engine_str} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx b/Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx index a9847bf900a..47fc71efc52 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % @@ -801,9 +801,7 @@ % the standard catcode. If neither are true, we set as 13 on the grounds that % this will be what is used anyway! % \begin{macrocode} -\bool_lazy_or:nnTF - { \sys_if_engine_luatex_p: } - { \sys_if_engine_xetex_p: } +\sys_if_engine_opentype:TF { \cs_new:Npn \@@_change_case_catcode:nn #1#2 { \@@_char_catcode:N #1 } @@ -2319,9 +2317,7 @@ % A few adjustments to case mapping for combining chars: these are not needed % for the Unicode engines % \begin{macrocode} -\bool_lazy_or:nnF - { \sys_if_engine_luatex_p: } - { \sys_if_engine_xetex_p: } +\sys_if_engine_opentype:F { \text_declare_uppercase_mapping:nn { "01F0 } { \v { J } } } diff --git a/Master/texmf-dist/source/latex/l3kernel/l3text-map.dtx b/Master/texmf-dist/source/latex/l3kernel/l3text-map.dtx index 52e304ec15e..3a24accbf94 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3text-map.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3text-map.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3text-purify.dtx b/Master/texmf-dist/source/latex/l3kernel/l3text-purify.dtx index 8163fead6aa..ca70f75fab0 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3text-purify.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3text-purify.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3text.dtx b/Master/texmf-dist/source/latex/l3kernel/l3text.dtx index 559bc158ae3..15139492802 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3text.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3text.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % @@ -654,9 +654,7 @@ % Grab a codepoint and apply some code to it: here |#1| should expect one % following \emph{balanced text}. % \begin{macrocode} -\bool_lazy_or:nnTF - { \sys_if_engine_luatex_p: } - { \sys_if_engine_xetex_p: } +\sys_if_engine_opentype:TF { \cs_new:Npn \@@_codepoint_process:nN #1#2 { #1 {#2} } } @@ -710,9 +708,7 @@ % Allows comparison for all engines using a first \enquote{character} followed % by a codepoint. % \begin{macrocode} -\bool_lazy_or:nnTF - { \sys_if_engine_luatex_p: } - { \sys_if_engine_xetex_p: } +\sys_if_engine_opentype:TF { \prg_new_conditional:Npnn \@@_codepoint_compare:nNn #1#2#3 { TF , p } diff --git a/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx b/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx index d3342eb876a..900540e055e 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3tl-build.dtx b/Master/texmf-dist/source/latex/l3kernel/l3tl-build.dtx index e3c615f5b27..aa7c9486f12 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3tl-build.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3tl-build.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx b/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx index 3d08f2354b2..44dc9d8de2f 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % @@ -333,8 +333,8 @@ % Tests if the \meta{token list} and the special \cs{c_novalue_tl} marker % contain the same list of tokens, both in respect of character codes and % category codes. This means that -% \cs{exp_args:No} \cs{tl_if_novalue:nTF} \{ \cs{c_novalue_tl} \} is -% logically \texttt{true} but \cs{tl_if_novalue:nTF} \{ \cs{c_novalue_tl} \} +% \cs{exp_args:No} \cs{tl_if_novalue:nTF} \texttt\{ \cs{c_novalue_tl} \texttt\} is +% logically \texttt{true} but \cs{tl_if_novalue:nTF} \texttt\{ \cs{c_novalue_tl} \texttt\} % is logically \texttt{false}. % This function is intended to allow construction % of flexible document interface structures in which missing optional @@ -376,6 +376,28 @@ % Token groups (|{|\ldots|}|) are not single tokens. % \end{function} % +% \begin{function}[TF, added = 2024-12-08] +% { +% \tl_if_regex_match:nn, \tl_if_regex_match:Vn, +% \tl_if_regex_match:nN, \tl_if_regex_match:VN, +% } +% \begin{syntax} +% \cs{tl_if_regex_match:nnTF} \Arg{token list} \Arg{regex} \Arg{true code} \Arg{false code} +% \cs{tl_if_regex_match:nNTF} \Arg{token list} \meta{regex~var} \Arg{true code} \Arg{false code} +% \end{syntax} +% Tests whether the \meta{regular expression} matches any part +% of the \meta{token list}. For instance, +% \begin{verbatim} +% \tl_if_regex_match:nnTF { abecdcx } { b [cde]* } { TRUE } { FALSE } +% \tl_if_regex_match:nnTF { example } { [b-dq-w] } { TRUE } { FALSE } +% \end{verbatim} +% leaves \texttt{TRUE} then \texttt{FALSE} in the input stream. +% Theses are alternative names for \cs{regex_match:nnTF} and friends, +% with arguments re-ordered for \meta{token list} testing; +% see \pkg{l3regex} chapter for more details of the \meta{regex} +% format. +% \end{function} +% % \subsection{Testing the first token} % % \begin{function}[updated = 2012-07-09, EXP, pTF] @@ -1158,6 +1180,51 @@ % for an example). % \end{function} % +% \begin{function}[added = 2024-12-08] +% { +% \tl_regex_replace_once:Nnn, \tl_regex_replace_once:cnn, +% \tl_regex_replace_once:NNn, \tl_regex_replace_once:cNn, +% \tl_regex_greplace_once:Nnn, \tl_regex_greplace_once:cnn, +% \tl_regex_greplace_once:NNn, \tl_regex_greplace_once:cNn +% } +% \begin{syntax} +% \cs{tl_regex_replace_once:Nnn} \meta{tl~var} \Arg{regex} \Arg{replacement} +% \cs{tl_regex_replace_once:NNn} \meta{tl~var} \meta{regex~var} \Arg{replacement} +% \end{syntax} +% Searches for the \meta{regular expression} in the contents of the +% \meta{tl~var} and replaces the first match with the +% \meta{replacement}. In the \meta{replacement}, +% |\0| represents the full match, |\1| represent the contents of the +% first capturing group, |\2| of the second, \emph{etc.} +% Theses are alternative names for \cs{regex_replace_once:nnN} and friends, +% with arguments re-ordered for \meta{tl~var} setting; +% See \pkg{l3regex} chapter for more details of the \meta{regex} +% format. +% \end{function} +% +% \begin{function}[added = 2024-12-08] +% { +% \tl_regex_replace_all:Nnn, \tl_regex_replace_all:cnn, +% \tl_regex_replace_all:NNn, \tl_regex_replace_all:cNn, +% \tl_regex_greplace_all:Nnn, \tl_regex_greplace_all:cnn, +% \tl_regex_greplace_all:NNn, \tl_regex_greplace_all:cNn +% } +% \begin{syntax} +% \cs{tl_regex_replace_all:Nnn} \meta{tl~var} \Arg{regex} \Arg{replacement} +% \cs{tl_regex_replace_all:NNn} \meta{tl~var} \meta{regex~var} \Arg{replacement} +% \end{syntax} +% Replaces all occurrences of the \meta{regular expression} in the +% contents of the \meta{tl~var} +% by the \meta{replacement}, where |\0| represents +% the full match, |\1| represent the contents of the first capturing +% group, |\2| of the second, \emph{etc.} Every match is treated +% independently, and matches cannot overlap. +% Theses are alternative names for \cs{regex_replace_all:nnN} and friends, +% with arguments re-ordered for \meta{tl~var} setting; +% see \pkg{l3regex} chapter for more details of the \meta{regex} +% format. +% \end{function} +% % \begin{function}[updated = 2011-08-11] % { % \tl_remove_once:Nn, \tl_remove_once:NV, \tl_remove_once:Ne, @@ -2249,6 +2316,57 @@ % % \begin{macro} % { +% \tl_regex_replace_once:Nnn, \tl_regex_replace_once:cnn, +% \tl_regex_replace_once:NNn, \tl_regex_replace_once:cNn, +% \tl_regex_greplace_once:Nnn, \tl_regex_greplace_once:cnn, +% \tl_regex_greplace_once:NNn, \tl_regex_greplace_once:cNn +% } +% \begin{macro} +% { +% \tl_regex_replace_all:Nnn, \tl_regex_replace_all:cnn, +% \tl_regex_replace_all:NNn, \tl_regex_replace_all:cNn, +% \tl_regex_greplace_all:Nnn, \tl_regex_greplace_all:cnn, +% \tl_regex_greplace_all:NNn, \tl_regex_greplace_all:cNn +% } +% Wrappers. +% \begin{macrocode} +\cs_new_protected:Npn \tl_regex_replace_once:Nnn #1#2#3 + { \regex_replace_once:nnN {#2} {#3} #1 } +\cs_generate_variant:Nn \tl_regex_replace_once:Nnn { c } +\cs_new_protected:Npn \tl_regex_replace_once:NNn #1#2#3 + { \regex_replace_once:NnN #2 {#3} #1 } +\cs_generate_variant:Nn \tl_regex_replace_once:NNn { c } +\cs_new_protected:Npn \tl_regex_replace_all:Nnn #1#2#3 + { \regex_replace_all:nnN {#2} {#3} #1 } +\cs_generate_variant:Nn \tl_regex_replace_all:Nnn { c } +\cs_new_protected:Npn \tl_regex_replace_all:NNn #1#2#3 + { \regex_replace_all:NnN #2 {#3} #1 } +\cs_generate_variant:Nn \tl_regex_replace_all:NNn { c } +\group_begin: + \cs_set_protected:Npn \@@_tmp:w #1#2#3 + { + \cs_new_protected:cpe { tl_regex_greplace_ #1 :N #2 n } ##1##2##3 + { + \group_begin: + \tl_set_eq:NN \exp_not:N \l_@@_internal_a_tl ##1 + \exp_not:c { regex_replace_ #1 :Nn #2 } + #3 {##2} {##3} \exp_not:N \l_@@_internal_a_tl + \tl_gset_eq:NN ##1 \exp_not:N \l_@@_internal_a_tl + \group_end: + } + \cs_generate_variant:cn { tl_regex_greplace_ #1 :N #2 n } { c } + } + \@@_tmp:w { once } n { } + \@@_tmp:w { once } N \use:n + \@@_tmp:w { all } n { } + \@@_tmp:w { all } N \use:n +\group_end: +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro} +% { % \tl_remove_once:Nn, \tl_remove_once:NV, \tl_remove_once:Ne, % \tl_remove_once:cn, \tl_remove_once:cV, \tl_remove_once:ce % } @@ -2611,6 +2729,29 @@ % \end{macrocode} % \end{macro} % +% \begin{macro} +% { +% \tl_if_regex_match:nn, \tl_if_regex_match:Vn, +% \tl_if_regex_match:nN, \tl_if_regex_match:VN, +% } +% \begin{macrocode} +\prg_new_protected_conditional:Npnn \tl_if_regex_match:nn #1#2 { TF , T , F } + { + \regex_match:nnTF {#2} {#1} + \prg_return_true: \prg_return_false: + } +\prg_generate_conditional_variant:Nnn \tl_if_regex_match:nn + { V } { TF , T , F } +\prg_new_protected_conditional:Npnn \tl_if_regex_match:nN #1#2 { TF , T , F } + { + \regex_match:nNTF {#2} #1 + \prg_return_true: \prg_return_false: + } +\prg_generate_conditional_variant:Nnn \tl_if_regex_match:nN + { V } { TF , T , F } +% \end{macrocode} +% \end{macro} +% % \subsection{Mapping over token lists} % % \begin{macro} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3token.dtx b/Master/texmf-dist/source/latex/l3kernel/l3token.dtx index 8dc792cab50..2833a71ca17 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3token.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3token.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % @@ -151,7 +151,7 @@ % $0$ is not allowed. % Active characters cannot be generated in older versions of \XeTeX{}. % Another way to build token lists with unusual category codes is -% \cs{regex_replace:nnN} |{.*}| \Arg{replacement} \meta{tl~var}. +% \cs{regex_replace_all:nnN} |{.*}| \Arg{replacement} \meta{tl~var}. % \begin{texnote} % Exactly two expansions are needed to produce the character. % \end{texnote} @@ -443,12 +443,6 @@ % not be used other than for category code tests. % \end{variable} % -% \begin{variable}{\c_catcode_active_tl} -% A token list containing an active token. This is used internally -% for test purposes and should not be used other than in -% appropriately-constructed category code tests. -% \end{variable} -% % \section{Converting tokens} % % \begin{function}[EXP]{\token_to_meaning:N, \token_to_meaning:c} @@ -799,7 +793,7 @@ % stream while leaving it in place. This is handled using the % \enquote{peek} functions. The generic \cs{peek_after:Nw} is provided % along with a family of predefined tests for common cases. Peeking -% ahead does \emph{not} skip spaces: rather, \cs{peek_remove_spaces:n}. +% ahead does \emph{not} skip spaces: rather, \cs{peek_remove_spaces:n} % should be used. In addition, using \cs{peek_analysis_map_inline:n}, % one can map through the following tokens in the input stream and % repeatedly perform some tests. @@ -1833,12 +1827,12 @@ % \end{macrocode} % \end{macro} % -% \begin{variable}{\c_catcode_active_tl} +% \begin{variable}{\c_@@_active_tl} % Not an implicit token! % \begin{macrocode} \group_begin: \char_set_catcode_active:N \* - \tl_const:Nn \c_catcode_active_tl { \exp_not:N * } + \tl_const:Nn \c_@@_active_tl { \exp_not:N * } \group_end: % \end{macrocode} % \end{variable} @@ -1975,13 +1969,13 @@ % % \begin{macro}[pTF]{\token_if_active:N} % Check if token is an active char token. We use the constant -% \cs{c_catcode_active_tl} for this. A technical point is that -% \cs{c_catcode_active_tl} is in fact a macro expanding to +% \cs{c_@@_active_tl} for this. A technical point is that +% \cs{c_@@_active_tl} is in fact a macro expanding to % |\exp_not:N *|, where |*| is active. % \begin{macrocode} \prg_new_conditional:Npnn \token_if_active:N #1 { p , T , F , TF } { - \if_catcode:w \exp_not:N #1 \c_catcode_active_tl + \if_catcode:w \exp_not:N #1 \c_@@_active_tl \prg_return_true: \else: \prg_return_false: \fi: } % \end{macrocode} @@ -2833,7 +2827,7 @@ end % \peek_meaning_remove:N, % } % The public functions themselves cannot be defined using -% \cs{prg_new_conditional:Npnn}. Instead, the |TF|, |T|, |F| variants +% \cs{prg_new_protected_conditional:Npnn}. Instead, the |TF|, |T|, |F| variants % are defined in terms of corresponding variants of % \cs{@@_token_generic:NNTF} or \cs{@@_token_remove_generic:NNTF}, % with first argument one of \cs{@@_execute_branches_catcode:}, diff --git a/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx b/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx index 5708992806a..b0c96acd98d 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2024-11-02} +% \date{Released 2024-12-09} % % \maketitle % @@ -162,9 +162,7 @@ % can generate character tokens for document use: those are defined below, % in the data recovery setup. % \begin{macrocode} -\bool_lazy_or:nnTF - { \sys_if_engine_luatex_p: } - { \sys_if_engine_xetex_p: } +\sys_if_engine_opentype:TF { \cs_new:Npn \codepoint_str_generate:n #1 { @@ -390,9 +388,7 @@ { \exp_args:Ne \@@_to_nfd:n { \int_eval:n {#1} } } \cs_new:Npn \@@_to_nfd:n #1 { \@@_to_nfd:nn {#1} { \char_value_catcode:n {#1} } } -\bool_lazy_or:nnF - { \sys_if_engine_luatex_p: } - { \sys_if_engine_xetex_p: } +\sys_if_engine_opentype:F { \cs_gset:Npn \@@_to_nfd:n #1 { |