texlive[73085] Master/texmf-dist: l3kernel-dev (9dec24)

commits+karl at tug.org commits+karl at tug.org
Mon Dec 9 22:14:45 CET 2024


Revision: 73085
          https://tug.org/svn/texlive?view=revision&revision=73085
Author:   karl
Date:     2024-12-09 22:14:45 +0100 (Mon, 09 Dec 2024)
Log Message:
-----------
l3kernel-dev (9dec24)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex-dev/l3kernel/CHANGELOG.md
    trunk/Master/texmf-dist/doc/latex-dev/l3kernel/README.md
    trunk/Master/texmf-dist/doc/latex-dev/l3kernel/expl3.pdf
    trunk/Master/texmf-dist/doc/latex-dev/l3kernel/interface3.pdf
    trunk/Master/texmf-dist/doc/latex-dev/l3kernel/interface3.tex
    trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3doc.pdf
    trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3docstrip.pdf
    trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3news.pdf
    trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3news01.pdf
    trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3news02.pdf
    trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3news03.pdf
    trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3news04.pdf
    trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3news05.pdf
    trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3news06.pdf
    trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3news07.pdf
    trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3news08.pdf
    trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3news09.pdf
    trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3news10.pdf
    trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3news11.pdf
    trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3news12.pdf
    trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3obsolete.txt
    trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3prefixes.csv
    trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3prefixes.pdf
    trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3styleguide.pdf
    trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3styleguide.tex
    trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3syntax-changes.pdf
    trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3syntax-changes.tex
    trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3term-glossary.pdf
    trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3term-glossary.tex
    trunk/Master/texmf-dist/doc/latex-dev/l3kernel/source3.pdf
    trunk/Master/texmf-dist/doc/latex-dev/l3kernel/source3.tex
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/expl3.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3basics.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3bitset.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3bootstrap.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3box.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3cctab.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3clist.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3coffins.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3color.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3debug.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3deprecation.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3doc.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3docstrip.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3expan.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3file.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3flag.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-assign.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-aux.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-basics.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-convert.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-expo.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-extended.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-functions.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-logic.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-parse.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-random.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-round.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-symbolic.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-traps.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-trig.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-types.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fparray.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3int.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3intarray.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3kernel-functions.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3keys.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3legacy.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3luatex.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3msg.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3names.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3pdf.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3prg.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3prop.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3quark.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3regex.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3seq.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3skip.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3sort.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3str-convert.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3str.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3sys.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3text-case.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3text-map.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3text-purify.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3text.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3tl-analysis.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3tl-build.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3tl.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3token.dtx
    trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3unicode.dtx
    trunk/Master/texmf-dist/tex/latex-dev/l3kernel/expl3-code.tex
    trunk/Master/texmf-dist/tex/latex-dev/l3kernel/expl3-generic.tex
    trunk/Master/texmf-dist/tex/latex-dev/l3kernel/expl3.ltx
    trunk/Master/texmf-dist/tex/latex-dev/l3kernel/expl3.sty
    trunk/Master/texmf-dist/tex/latex-dev/l3kernel/l3debug.def
    trunk/Master/texmf-dist/tex/latex-dev/l3kernel/l3doc.cls

Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/CHANGELOG.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/l3kernel/CHANGELOG.md	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/doc/latex-dev/l3kernel/CHANGELOG.md	2024-12-09 21:14:45 UTC (rev 73085)
@@ -7,6 +7,28 @@
 
 ## [Unreleased]
 
+## [2024-12-09]
+
+### Added
+- `\bitset_use:N` and `\clist_use:N`: this clarifies that bitsets and clists
+  can be used with `V`-type expansion
+- `\sys_if_engine_opentype:(TF)`
+- Add equivalent interfaces for regex functions:
+  - `\int_(g)set_regex_count:Nnn`, `\int_(g)set_regex_count:NNn`
+  - `\seq_(g)set_regex_extract_once:Nnn`, `\seq_(g)set_regex_extract_once:NNn`
+  - `\seq_(g)set_regex_extract_all:Nnn`, `\seq_(g)set_regex_extract_all:NNn`
+  - `\seq_(g)set_regex_split:Nnn`, `\seq_(g)set_regex_split:NNn`
+  - `\tl_if_regex_match:nn(TF)`, `\tl_if_regex_match:nN(TF)`
+  - `\tl_regex_(g)replace_once:Nnn`, `\tl_regex_(g)replace_once:NNn`
+  - `\tl_regex_(g)replace_all:Nnn`, `\tl_regex_(g)replace_all:NNn`
+
+### Fixed
+- `\prop_item:Nn` result not returned in `\exp_not:n` for linked properties
+  (#1630)
+
+### Removed
+- `\c_catcode_active_tl`: was missing a `_`, always intended to be internal
+
 ## [2024-11-02]
 
 ### Added
@@ -1793,7 +1815,8 @@
 - Step functions have been added for dim variables,
   e.g. `\dim_step_inline:nnnn`
 
-[Unreleased]: https://github.com/latex3/latex3/compare/2024-11-02...HEAD
+[Unreleased]: https://github.com/latex3/latex3/compare/2024-12-09...HEAD
+[2024-12-09]: https://github.com/latex3/latex3/compare/2024-11-02...2024-12-09
 [2024-11-02]: https://github.com/latex3/latex3/compare/2024-10-09...2024-11-02
 [2024-10-09]: https://github.com/latex3/latex3/compare/2024-09-10...2024-10-09
 [2024-09-10]: https://github.com/latex3/latex3/compare/2024-08-30...2024-09-10

Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/l3kernel/README.md	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/doc/latex-dev/l3kernel/README.md	2024-12-09 21:14:45 UTC (rev 73085)
@@ -1,7 +1,7 @@
 LaTeX3 Programming Conventions
 ==============================
 
-Release 2024-11-02
+Release 2024-12-09
 
 Overview
 --------

Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/expl3.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/interface3.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/interface3.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/l3kernel/interface3.tex	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/doc/latex-dev/l3kernel/interface3.tex	2024-12-09 21:14:45 UTC (rev 73085)
@@ -58,7 +58,7 @@
          {latex-team at latex-project.org}%
    }%
 }
-\date{Released 2024-11-02}
+\date{Released 2024-12-09}
 
 \pagenumbering{roman}
 \maketitle

Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3doc.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3docstrip.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3news.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3news01.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3news02.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3news03.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3news04.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3news05.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3news06.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3news07.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3news08.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3news09.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3news10.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3news11.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3news12.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3obsolete.txt
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3obsolete.txt	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3obsolete.txt	2024-12-09 21:14:45 UTC (rev 73085)
@@ -141,6 +141,7 @@
 \box_set_eq_clear:NN                            2021-07-07
 \box_use_clear:c                                2018-12-27
 \box_use_clear:N                                2018-12-27
+\c_catcode_active_tl                            2024-11-12
 \c_active_char_token                            2011-09-08
 \c_alignment_tab_token                          2011-09-08
 \c_eight                                        2020-01-01

Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3prefixes.csv
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3prefixes.csv	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3prefixes.csv	2024-12-09 21:14:45 UTC (rev 73085)
@@ -75,6 +75,7 @@
 emojicite,emojicite,Leon Sixt,https://github.com/berleon/emojicite,https://github.com/berleon/emojicite.git,https://github.com/berleon/emojicite/issues/,2020-04-14,2020-04-20,
 empty,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
 enotez,enotez,Clemens Niederberger,https://github.com/cgnieder/enotez/,https://github.com/cgnieder/enotez.git,https://github.com/cgnieder/enotez/issues,2013-03-16,2020-04-14,
+enumext,enumext,Pablo González,https://github.com/pablgonz/enumext,git@github.com:pablgonz/enumext.git,https://github.com/pablgonz/enumext/issues,2024-11-18,2024-11-18,
 etex,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
 etl,etl,Jonathan P. Spratte,https://github.com/Skillmon/ltx_etl,git@github.com:Skillmon/ltx_etl.git,https://github.com/Skillmon/ltx_etl/issues,2021-08-16,2021-08-16,
 exp,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
@@ -231,6 +232,7 @@
 rivmath,rivmath,Julien Rivaud,,,,2018-06-13,2018-06-13,
 rpgicons,rpgicons,Jasper Habicht,https://github.com/jasperhabicht/rpgicons,https://github.com/jasperhabicht/rpgicons/rpgicons.git,https://github.com/jasperhabicht/rpgicons/issues,2024-04-29,2024-04-29,
 sanuml,sanitize-umlaut,Thomas F. Sturm,https://github.com/T-F-S/sanitize-umlaut,https://github.com/T-F-S/sanitize-umlaut.git,https://github.com/T-F-S/sanitize-umlaut/issues,2022-07-19,2022-07-19,
+scaletextbullet,scaletextbullet,Oliver Beery,https://github.com/beeryoliver/scaletextbullet,https://github.com/beeryoliver/scaletextbullet/scaletextbullet.git,https://github.com/beeryoliver/scaletextbullet/issues,2024-11-15,2024-11-15,
 scan,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
 schulma,schulmathematik,Keno Wehr,https://ctan.org/pkg/schulmathematik,,,2021-08-23,2021-08-23,
 scontents,scontents,Pablo González,https://github.com/pablgonz/scontents,git@github.com:pablgonz/scontents.git,https://github.com/pablgonz/scontents/issues,2019-12-05,2019-12-05,

Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3prefixes.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3styleguide.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3styleguide.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3styleguide.tex	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3styleguide.tex	2024-12-09 21:14:45 UTC (rev 73085)
@@ -32,7 +32,7 @@
         {latex-team at latex-project.org}%
     }%
 }
-\date{Released 2024-11-02}
+\date{Released 2024-12-09}
 
 \begin{document}
 

Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3syntax-changes.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3syntax-changes.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3syntax-changes.tex	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3syntax-changes.tex	2024-12-09 21:14:45 UTC (rev 73085)
@@ -32,7 +32,7 @@
         {latex-team at latex-project.org}%
     }%
 }
-\date{Released 2024-11-02}
+\date{Released 2024-12-09}
 
 \newcommand{\TF}{\textit{(TF)}}
 

Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3term-glossary.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3term-glossary.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3term-glossary.tex	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3term-glossary.tex	2024-12-09 21:14:45 UTC (rev 73085)
@@ -32,7 +32,7 @@
         {latex-team at latex-project.org}%
     }%
 }
-\date{Released 2024-11-02}
+\date{Released 2024-12-09}
 
 \newcommand{\TF}{\textit{(TF)}}
 

Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/source3.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/source3.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/l3kernel/source3.tex	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/doc/latex-dev/l3kernel/source3.tex	2024-12-09 21:14:45 UTC (rev 73085)
@@ -57,7 +57,7 @@
          {latex-team at latex-project.org}%
    }%
 }
-\date{Released 2024-11-02}
+\date{Released 2024-12-09}
 
 \pagenumbering{roman}
 \maketitle

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/expl3.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/expl3.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/expl3.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -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
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3basics.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3basics.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3basics.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-11-02}
+% \date{Released 2024-12-09}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3bitset.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3bitset.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3bitset.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -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

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3bootstrap.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3bootstrap.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3bootstrap.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-11-02}
+% \date{Released 2024-12-09}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3box.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3box.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3box.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-11-02}
+% \date{Released 2024-12-09}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3cctab.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3cctab.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3cctab.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -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:

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3clist.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3clist.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3clist.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -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,

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3coffins.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3coffins.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3coffins.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-11-02}
+% \date{Released 2024-12-09}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3color.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3color.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3color.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-11-02}
+% \date{Released 2024-12-09}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3debug.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3debug.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3debug.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -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}

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3deprecation.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3deprecation.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3deprecation.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-11-02}
+% \date{Released 2024-12-09}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3doc.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3doc.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3doc.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -71,7 +71,7 @@
 % 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 @@
 %    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 @@
 %    \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 @@
 %    \begin{macrocode}
 \newenvironment{TemplateInterfaceDescription}[1]
   {
-    \subsection{The~object~type~`#1'}
+    \subsection{The~template~type~`#1'}
     \begingroup
     \@beginparpenalty\@M
     \description
@@ -3628,7 +3627,7 @@
 %    \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 @@
 %    \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 @@
       }
     \author
       {
-        The~\LaTeX3~Project\thanks{E-mail:~
+        The~\LaTeX~Project~team\thanks{E-mail:~
         \href{mailto:latex-l at listserv.uni-heidelberg.de}
              {latex-l at listserv.uni-heidelberg.de}}
       }

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3docstrip.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3docstrip.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3docstrip.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -63,7 +63,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-11-02}
+% \date{Released 2024-12-09}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3expan.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3expan.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3expan.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-11-02}
+% \date{Released 2024-12-09}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3file.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3file.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3file.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-11-02}
+% \date{Released 2024-12-09}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3flag.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3flag.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3flag.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-11-02}
+% \date{Released 2024-12-09}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-assign.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-assign.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-assign.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -42,7 +42,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2024-11-02}
+% \date{Released 2024-12-09}
 % \maketitle
 %
 % \begin{documentation}

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-aux.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-aux.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-aux.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-11-02}
+% \date{Released 2024-12-09}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-basics.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-basics.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-basics.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -42,7 +42,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2024-11-02}
+% \date{Released 2024-12-09}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-convert.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-convert.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-convert.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-11-02}
+% \date{Released 2024-12-09}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-expo.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-expo.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-expo.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -42,7 +42,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2024-11-02}
+% \date{Released 2024-12-09}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-extended.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-extended.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-extended.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -42,7 +42,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2024-11-02}
+% \date{Released 2024-12-09}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-functions.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-functions.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-functions.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -42,7 +42,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-11-02}
+% \date{Released 2024-12-09}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-logic.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-logic.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-logic.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -42,7 +42,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2024-11-02}
+% \date{Released 2024-12-09}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-parse.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-parse.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-parse.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -42,7 +42,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2024-11-02}
+% \date{Released 2024-12-09}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-random.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-random.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-random.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -42,7 +42,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2024-11-02}
+% \date{Released 2024-12-09}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-round.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-round.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-round.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-11-02}
+% \date{Released 2024-12-09}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-symbolic.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-symbolic.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-symbolic.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -42,7 +42,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-11-02}
+% \date{Released 2024-12-09}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-traps.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-traps.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-traps.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -42,7 +42,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2024-11-02}
+% \date{Released 2024-12-09}
 % \maketitle
 %
 % \begin{documentation}

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-trig.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-trig.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-trig.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -42,7 +42,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2024-11-02}
+% \date{Released 2024-12-09}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-types.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-types.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-types.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -42,7 +42,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-11-02}
+% \date{Released 2024-12-09}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -49,7 +49,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-11-02}
+% \date{Released 2024-12-09}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fparray.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fparray.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fparray.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-11-02}
+% \date{Released 2024-12-09}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3int.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3int.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3int.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -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}

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3intarray.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3intarray.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3intarray.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-11-02}
+% \date{Released 2024-12-09}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3kernel-functions.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3kernel-functions.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3kernel-functions.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-11-02}
+% \date{Released 2024-12-09}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3keys.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3keys.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3keys.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -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}

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3legacy.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3legacy.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3legacy.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-11-02}
+% \date{Released 2024-12-09}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3luatex.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3luatex.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3luatex.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-11-02}
+% \date{Released 2024-12-09}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3msg.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3msg.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3msg.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-11-02}
+% \date{Released 2024-12-09}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3names.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3names.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3names.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-11-02}
+% \date{Released 2024-12-09}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3pdf.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3pdf.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3pdf.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-11-02}
+% \date{Released 2024-12-09}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3prg.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3prg.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3prg.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-11-02}
+% \date{Released 2024-12-09}
 %
 % \maketitle
 %
@@ -79,7 +79,9 @@
 % \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} \\
@@ -86,36 +88,21 @@
 %     \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}.
+%   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}
 %
-% \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}).
-% \end{function}
-%
 % The conditionals are defined by \cs{prg_new_conditional:Npnn} and
 % friends as:
 % \begin{itemize}
@@ -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

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3prop.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3prop.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3prop.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -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
   {

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3quark.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3quark.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3quark.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-11-02}
+% \date{Released 2024-12-09}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3regex.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3regex.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3regex.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -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

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3seq.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3seq.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3seq.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -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 }

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3skip.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3skip.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3skip.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -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}

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3sort.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3sort.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3sort.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-11-02}
+% \date{Released 2024-12-09}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3str-convert.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3str-convert.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3str-convert.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -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
       {

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3str.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3str.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3str.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-11-02}
+% \date{Released 2024-12-09}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3sys.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3sys.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3sys.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -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}

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3text-case.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3text-case.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3text-case.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -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 } }
   }

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3text-map.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3text-map.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3text-map.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-11-02}
+% \date{Released 2024-12-09}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3text-purify.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3text-purify.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3text-purify.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-11-02}
+% \date{Released 2024-12-09}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3text.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3text.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3text.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -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 }

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3tl-analysis.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3tl-analysis.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3tl-analysis.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-11-02}
+% \date{Released 2024-12-09}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3tl-build.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3tl-build.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3tl-build.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2024-11-02}
+% \date{Released 2024-12-09}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3tl.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3tl.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3tl.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -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}

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3token.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3token.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3token.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -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 @@
 %     \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:},

Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3unicode.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3unicode.dtx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3unicode.dtx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -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
       {

Modified: trunk/Master/texmf-dist/tex/latex-dev/l3kernel/expl3-code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/l3kernel/expl3-code.tex	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/tex/latex-dev/l3kernel/expl3-code.tex	2024-12-09 21:14:45 UTC (rev 73085)
@@ -75,7 +75,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: expl3.dtx
-\def\ExplFileDate{2024-11-02}%
+\def\ExplFileDate{2024-12-09}%
 \begingroup
   \def\next{\endgroup}%
   \expandafter\ifx\csname PackageError\endcsname\relax
@@ -3864,6 +3864,37 @@
 \cs_new:Npn \__tl_replace_next_aux:w { \__tl_replace_next:w { } { } }
 \cs_new_eq:NN \__tl_replace_wrap:w ?
 \cs_new_eq:NN \__tl_replace_next:w ?
+\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 \__tl_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__tl_internal_a_tl ##1
+            \exp_not:c { regex_replace_ #1 :Nn #2 }
+              #3 {##2} {##3} \exp_not:N \l__tl_internal_a_tl
+            \tl_gset_eq:NN ##1 \exp_not:N \l__tl_internal_a_tl
+          \group_end:
+        }
+      \cs_generate_variant:cn { tl_regex_greplace_ #1 :N #2 n } { c }
+    }
+  \__tl_tmp:w { once } n { }
+  \__tl_tmp:w { once } N \use:n
+  \__tl_tmp:w { all } n { }
+  \__tl_tmp:w { all } N \use:n
+\group_end:
 \cs_new_protected:Npn \tl_remove_once:Nn #1#2
   { \tl_replace_once:Nnn #1 {#2} { } }
 \cs_new_protected:Npn \tl_gremove_once:Nn #1#2
@@ -4016,6 +4047,20 @@
       \prg_return_false:
     \fi:
   }
+\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 }
 \cs_new:Npn \tl_map_function:nN #1#2
   {
     \__tl_map_function:Nnnnnnnnn #2 #1
@@ -5619,6 +5664,45 @@
     #1 #2 { #3 }
     \__seq_pop_item_def:
   }
+\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 \__seq_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__seq_tmp_seq ##1
+            \exp_not:c { regex_ #1 :Nn #2 }
+              #3 {##2} {##3} \exp_not:N \l__seq_tmp_seq
+            \seq_gset_eq:NN ##1 \exp_not:N \l__seq_tmp_seq
+          \group_end:
+        }
+      \cs_generate_variant:cn { seq_gset_regex_ #1 :N #2 n } { c }
+    }
+  \__seq_tmp:w { extract_once } n { }
+  \__seq_tmp:w { extract_once } N \use:n
+  \__seq_tmp:w { extract_all } n { }
+  \__seq_tmp:w { extract_all } N \use:n
+  \__seq_tmp:w { split } n { }
+  \__seq_tmp:w { split } N \use:n
+\group_end:
 \cs_new_protected:Npn \seq_concat:NNN #1#2#3
   { \tl_set:Nf #1 { \exp_after:wN \use_i:nn \exp_after:wN #2 #3 } }
 \cs_new_protected:Npn \seq_gconcat:NNN #1#2#3
@@ -5659,7 +5743,7 @@
 \cs_generate_variant:Nn \seq_gput_right:Nn {     NV , Nv , Ne , No , Nx }
 \cs_generate_variant:Nn \seq_gput_right:Nn { c , cV , cv , ce , co , cx }
 \cs_new:Npn \__seq_wrap_item:n #1 { \exp_not:n { \__seq_item:n {#1} } }
-\seq_new:N \l__seq_remove_seq
+\seq_new:N \l__seq_tmp_seq
 \cs_new_protected:Npn \seq_remove_duplicates:N
   { \__seq_remove_duplicates:NN \seq_set_eq:NN }
 \cs_new_protected:Npn \seq_gremove_duplicates:N
@@ -5666,13 +5750,13 @@
   { \__seq_remove_duplicates:NN \seq_gset_eq:NN }
 \cs_new_protected:Npn \__seq_remove_duplicates:NN #1#2
   {
-    \seq_clear:N \l__seq_remove_seq
+    \seq_clear:N \l__seq_tmp_seq
     \seq_map_inline:Nn #2
       {
-        \seq_if_in:NnF \l__seq_remove_seq {##1}
-          { \seq_put_right:Nn \l__seq_remove_seq {##1} }
+        \seq_if_in:NnF \l__seq_tmp_seq {##1}
+          { \seq_put_right:Nn \l__seq_tmp_seq {##1} }
       }
-    #1 #2 \l__seq_remove_seq
+    #1 #2 \l__seq_tmp_seq
   }
 \cs_generate_variant:Nn \seq_remove_duplicates:N  { c }
 \cs_generate_variant:Nn \seq_gremove_duplicates:N { c }
@@ -6470,6 +6554,30 @@
   { \tex_global:D #1 = \__int_eval:w #2 \__int_eval_end: }
 \cs_generate_variant:Nn \int_set:Nn  { NV , c , cV }
 \cs_generate_variant:Nn \int_gset:Nn { NV , c , cV }
+\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__int_internal_a_int #1
+      \regex_count:nnN {#2} {#3} \l__int_internal_a_int
+      \int_gset_eq:NN #1 \l__int_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__int_internal_a_int #1
+      \regex_count:NnN #2 {#3} \l__int_internal_a_int
+      \int_gset_eq:NN #1 \l__int_internal_a_int
+    \group_end:
+  }
+\cs_generate_variant:Nn \int_gset_regex_count:NNn { c }
 \cs_new_eq:NN \int_use:N \tex_the:D
 \cs_new:Npn \int_use:c #1 { \tex_the:D \cs:w #1 \cs_end: }
 \cs_new_protected:Npn \__int_compare_error:
@@ -7582,6 +7690,9 @@
     \__sys_const:nn { sys_if_engine_ #1 }
       { \str_if_eq_p:Vn \c_sys_engine_str {#1} }
   }
+\__sys_const:nn
+  { sys_if_engine_opentype }
+  { \cs_if_exist_p:N \tex_Umathcode:D }
 \group_begin:
   \cs_set_eq:NN \lua_now:e    \tex_directlua:D
   \str_const:Ne \c_sys_engine_exec_str
@@ -8638,6 +8749,8 @@
 \cs_new:Npn \clist_use:Nn #1#2
   { \clist_use:Nnnn #1 {#2} {#2} {#2} }
 \cs_generate_variant:Nn \clist_use:Nn { c }
+\cs_new_eq:NN \clist_use:N \tl_use:N
+\cs_generate_variant:Nn \clist_use:N { c }
 \cs_new:Npn \clist_use:nnnn #1#2#3#4
   {
     \__clist_use:Nw \__clist_use_none_delimit_by_s_stop:w
@@ -9072,7 +9185,7 @@
 \group_end:
 \group_begin:
   \char_set_catcode_active:N \*
-  \tl_const:Nn \c_catcode_active_tl { \exp_not:N * }
+  \tl_const:Nn \c__token_active_tl { \exp_not:N * }
 \group_end:
 \prg_new_conditional:Npnn \token_if_group_begin:N #1 { p , T ,  F , TF }
   {
@@ -9130,7 +9243,7 @@
   }
 \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__token_active_tl
       \prg_return_true: \else: \prg_return_false: \fi:
   }
 \prg_new_eq_conditional:NNn \token_if_eq_meaning:NN \cs_if_eq:NN
@@ -9932,7 +10045,7 @@
             \exp_after:wN { \tl_to_str:n {#2} }
           }
       }
-      { \exp_after:wN \__prop_get_linked:w #1 {#2} \use:n { } { } }
+      { \exp_after:wN \__prop_get_linked:w #1 {#2} \exp_not:n { } { } }
   }
 \cs_new:Npn \__prop_item:nnn #1#2#3
   {
@@ -22285,6 +22398,8 @@
   }
 \cs_generate_variant:Nn \bitset_to_arabic:N  { c }
 \cs_generate_variant:Nn \bitset_to_bin:N { c }
+\cs_new_eq:NN \bitset_use:N \tl_use:N
+\cs_generate_variant:Nn \bitset_use:N { c }
 \cs_new:Npn \bitset_item:Nn #1#2
   {
     \prop_if_in:cnTF { g__bitset_ \cs_to_str:N #1 _name_prop } {#2}
@@ -22667,8 +22782,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
@@ -22693,8 +22807,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 }
       \__cctab_gset:n { \c_code_cctab }
     \group_end:
@@ -24473,9 +24586,7 @@
     \exp_args:Ne \tl_to_str:n
       { \str_map_function:nN {#1} \__str_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 \__str_convert_pdfname:n #1
       {
@@ -33360,9 +33471,7 @@
 \prop_gput:Nnn \g_msg_module_name_prop { luatex } { LaTeX }
 \prop_gput:Nnn \g_msg_module_type_prop { luatex } { }
 %% File: l3unicode.dtx
-\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
       {
@@ -33540,9 +33649,7 @@
   { \exp_args:Ne \__codepoint_to_nfd:n { \int_eval:n {#1} } }
 \cs_new:Npn \__codepoint_to_nfd:n #1
   { \__codepoint_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 \__codepoint_to_nfd:n #1
       {
@@ -34130,9 +34237,7 @@
       }
       { \prg_return_false: }
   }
-\bool_lazy_or:nnTF
-  { \sys_if_engine_luatex_p: }
-  { \sys_if_engine_xetex_p: }
+\sys_if_engine_opentype:TF
   {
     \cs_new:Npn \__text_codepoint_process:nN #1#2 { #1 {#2} }
   }
@@ -34170,9 +34275,7 @@
     \cs_new:Npn \__text_codepoint_process:nNNNN #1#2#3#4#5
       { #1 {#2#3#4#5} }
   }
-\bool_lazy_or:nnTF
-  { \sys_if_engine_luatex_p: }
-  { \sys_if_engine_xetex_p: }
+\sys_if_engine_opentype:TF
   {
     \prg_new_conditional:Npnn
       \__text_codepoint_compare:nNn #1#2#3 { TF , p }
@@ -35164,9 +35267,7 @@
           }
       }
   }
-\bool_lazy_or:nnTF
-  { \sys_if_engine_luatex_p: }
-  { \sys_if_engine_xetex_p: }
+\sys_if_engine_opentype:TF
   {
     \cs_new:Npn \__text_change_case_catcode:nn #1#2
       { \__text_char_catcode:N #1 }
@@ -36280,9 +36381,7 @@
           }
       }
   }
-\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 } }
   }

Modified: trunk/Master/texmf-dist/tex/latex-dev/l3kernel/expl3-generic.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/l3kernel/expl3-generic.tex	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/tex/latex-dev/l3kernel/expl3-generic.tex	2024-12-09 21:14:45 UTC (rev 73085)
@@ -19,7 +19,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: expl3.dtx
-\def\ExplFileDate{2024-11-02}%
+\def\ExplFileDate{2024-12-09}%
 \let\ExplLoaderFileDate\ExplFileDate
 \begingroup
   \catcode`\_=11

Modified: trunk/Master/texmf-dist/tex/latex-dev/l3kernel/expl3.ltx
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/l3kernel/expl3.ltx	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/tex/latex-dev/l3kernel/expl3.ltx	2024-12-09 21:14:45 UTC (rev 73085)
@@ -19,7 +19,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: expl3.dtx
-\def\ExplFileDate{2024-11-02}%
+\def\ExplFileDate{2024-12-09}%
 \let\ExplLoaderFileDate\ExplFileDate
 \begingroup
   \catcode`\_=11

Modified: trunk/Master/texmf-dist/tex/latex-dev/l3kernel/expl3.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/l3kernel/expl3.sty	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/tex/latex-dev/l3kernel/expl3.sty	2024-12-09 21:14:45 UTC (rev 73085)
@@ -19,7 +19,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: expl3.dtx
-\def\ExplFileDate{2024-11-02}%
+\def\ExplFileDate{2024-12-09}%
 \let\ExplLoaderFileDate\ExplFileDate
 \ProvidesPackage{expl3}
   [%

Modified: trunk/Master/texmf-dist/tex/latex-dev/l3kernel/l3debug.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/l3kernel/l3debug.def	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/tex/latex-dev/l3kernel/l3debug.def	2024-12-09 21:14:45 UTC (rev 73085)
@@ -19,7 +19,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: l3debug.dtx
-\ProvidesExplFile{l3debug.def}{2024-11-02}{}{L3 Debugging support}
+\ProvidesExplFile{l3debug.def}{2024-12-09}{}{L3 Debugging support}
 \scan_new:N \s__debug_stop
 \cs_new:Npn \__debug_use_i_delimit_by_s_stop:nw #1 #2 \s__debug_stop {#1}
 \quark_new:N \q__debug_recursion_tail

Modified: trunk/Master/texmf-dist/tex/latex-dev/l3kernel/l3doc.cls
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/l3kernel/l3doc.cls	2024-12-09 21:14:09 UTC (rev 73084)
+++ trunk/Master/texmf-dist/tex/latex-dev/l3kernel/l3doc.cls	2024-12-09 21:14:45 UTC (rev 73085)
@@ -20,7 +20,7 @@
 %% 
 %% File: l3doc.dtx
 \RequirePackage{calc}
-\ProvidesExplClass{l3doc}{2024-11-02}{}
+\ProvidesExplClass{l3doc}{2024-12-09}{}
   {L3 Experimental documentation class}
 \clist_new:N \g_docinput_clist
 \seq_new:N \g_doc_functions_seq
@@ -439,8 +439,7 @@
 \raggedbottom
 \bool_if:NT \g__codedoc_lmodern_bool
   {
-    \bool_lazy_or:nnTF
-      { \sys_if_engine_luatex_p: }{ \sys_if_engine_xetex_p: }
+    \sys_if_engine_opentype:TF
       {
         \group_begin:
           \ttfamily
@@ -1720,7 +1719,7 @@
 \AddToHook{env/variable/begin}{\def\footnote{\__codedoc_fn_footnote:nn{variable}}}
 \newenvironment{TemplateInterfaceDescription}[1]
   {
-    \subsection{The~object~type~`#1'}
+    \subsection{The~template~type~`#1'}
     \begingroup
     \@beginparpenalty\@M
     \description
@@ -1736,7 +1735,7 @@
   }
 \newenvironment{TemplateDescription}[2]
   {
-    \subsection{The~template~`#2'~(object~type~#1)}
+    \subsection{The~template~`#2'~(template~type~#1)}
     \subsubsection*{Attributes:}
     \begingroup
     \@beginparpenalty\@M



More information about the tex-live-commits mailing list.