summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/source
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2024-12-23 21:17:19 +0000
committerKarl Berry <karl@freefriends.org>2024-12-23 21:17:19 +0000
commitd47c7642e6b8b75ee853aa88325bc1010f47c23a (patch)
tree398b499fd087b1f8ea4051095ea92b4197fbaba1 /Master/texmf-dist/source
parent25947d6e5f8e8b1193e80605d4719147703d7124 (diff)
l3kernel (23dec24)
git-svn-id: svn://tug.org/texlive/trunk@73194 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/source')
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/expl3.dtx4
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3basics.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3bitset.dtx19
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3box.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3cctab.dtx8
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3clist.dtx25
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3color.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3debug.dtx4
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3doc.dtx15
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3expan.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3file.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3flag.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-functions.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-symbolic.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-types.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3int.dtx74
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3keys.dtx12
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3msg.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3names.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3pdf.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3prg.dtx41
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3prop.dtx4
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3quark.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3regex.dtx34
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3seq.dtx167
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3skip.dtx6
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3sort.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx6
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3str.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3sys.dtx30
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx10
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3text-map.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3text-purify.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3text.dtx10
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3tl-build.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3tl.dtx147
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3token.dtx24
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx10
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
{