summaryrefslogtreecommitdiff
diff options
context:
space:
mode:
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md11
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/README.md2
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/expl3.pdfbin621772 -> 621883 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/interface3.pdfbin1717910 -> 1722092 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/interface3.tex2
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3doc.pdfbin558218 -> 558289 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdfbin152023 -> 152101 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3news.pdfbin395889 -> 395889 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3news01.pdfbin122711 -> 122711 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3news02.pdfbin150675 -> 150675 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3news03.pdfbin148704 -> 148704 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3news04.pdfbin114591 -> 114591 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3news05.pdfbin112487 -> 112487 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3news06.pdfbin151569 -> 151569 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3news07.pdfbin128317 -> 128317 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3news08.pdfbin163456 -> 163456 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3news09.pdfbin250127 -> 250127 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3news10.pdfbin150282 -> 150282 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3news11.pdfbin170069 -> 170069 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3news12.pdfbin204992 -> 204992 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3prefixes.pdfbin81941 -> 81941 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdfbin296516 -> 296645 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex2
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdfbin243162 -> 243279 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex2
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.pdfbin218315 -> 218431 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.tex2
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/source3.pdfbin7360498 -> 7369566 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/source3.tex2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/expl3.dtx4
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3basics.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3box.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3cctab.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3clist.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3color.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3debug.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3doc.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3expan.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3file.dtx32
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3flag.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx4
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3int.dtx7
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3keys.dtx16
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3msg.dtx136
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3names.dtx4
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3pdf.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3prg.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3prop.dtx68
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3quark.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3regex.dtx73
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3seq.dtx55
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3skip.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3sort.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3str.dtx14
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3sys.dtx24
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3text-map.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3text-purify.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3text.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3tl.dtx238
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3token.dtx3
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx2
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex127
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex2
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/expl3.ltx2
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/expl3.sty2
90 files changed, 659 insertions, 261 deletions
diff --git a/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md b/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md
index 17d0940072e..43e0dce3393 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md
+++ b/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md
@@ -7,6 +7,14 @@ this project uses date-based 'snapshot' version identifiers.
## [Unreleased]
+## [2023-08-29]
+
+### Added
+- `\c_sys_timestamp_str`
+
+### Changed
+- Rename `\tex_pdfcreationdate:D` to `\tex_creationdate:D`
+
## [2023-08-11]
### Changed
@@ -1504,7 +1512,8 @@ this project uses date-based 'snapshot' version identifiers.
- Step functions have been added for dim variables,
e.g. `\dim_step_inline:nnnn`
-[Unreleased]: https://github.com/latex3/latex3/compare/2023-08-11...HEAD
+[Unreleased]: https://github.com/latex3/latex3/compare/2023-08-29...HEAD
+[2023-08-29]: https://github.com/latex3/latex3/compare/2023-08-11...2023-08-29
[2023-08-11]: https://github.com/latex3/latex3/compare/2023-08-03...2023-08-11
[2023-08-03]: https://github.com/latex3/latex3/compare/2023-06-30...2023-08-03
[2023-06-30]: https://github.com/latex3/latex3/compare/2023-06-16...2023-06-30
diff --git a/Master/texmf-dist/doc/latex/l3kernel/README.md b/Master/texmf-dist/doc/latex/l3kernel/README.md
index 6be76267b6b..7afb055297b 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/README.md
+++ b/Master/texmf-dist/doc/latex/l3kernel/README.md
@@ -1,7 +1,7 @@
LaTeX3 Programming Conventions
==============================
-Release 2023-08-11
+Release 2023-08-29
Overview
--------
diff --git a/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf b/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf
index dbcbdc76bd5..33262bd8281 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf b/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf
index 25cec1c3cd1..61d451cc9ee 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/interface3.tex b/Master/texmf-dist/doc/latex/l3kernel/interface3.tex
index 696f03d0486..0198240396c 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/interface3.tex
+++ b/Master/texmf-dist/doc/latex/l3kernel/interface3.tex
@@ -62,7 +62,7 @@ for those people who are interested.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2023-08-11}
+\date{Released 2023-08-29}
\pagenumbering{roman}
\maketitle
diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3doc.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3doc.pdf
index da3b5ed323b..8ec07dcef36 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/l3doc.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/l3doc.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf
index db1f297e269..d93d065c3b2 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3news.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3news.pdf
index 5a24e8b46ef..7ebec4848a6 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/l3news.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/l3news.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3news01.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3news01.pdf
index 9951afa47de..fe4f64501cc 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/l3news01.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/l3news01.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3news02.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3news02.pdf
index 1b78bf3492a..3b36d8a341e 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/l3news02.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/l3news02.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3news03.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3news03.pdf
index a05ce9a5a93..f3031cb0d83 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/l3news03.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/l3news03.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3news04.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3news04.pdf
index e75b8011f3d..d7155a90490 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/l3news04.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/l3news04.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3news05.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3news05.pdf
index a17cb861b50..788ded7ff12 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/l3news05.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/l3news05.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3news06.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3news06.pdf
index 5d30d5f234f..9778f1dd952 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/l3news06.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/l3news06.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3news07.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3news07.pdf
index a6990b3d024..84e2f2c9f28 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/l3news07.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/l3news07.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3news08.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3news08.pdf
index fe9cbd8b2cc..e91e2d344b5 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/l3news08.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/l3news08.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3news09.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3news09.pdf
index 9e20ff1ab43..83832c32372 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/l3news09.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/l3news09.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3news10.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3news10.pdf
index 62699d75461..acbefc90b50 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/l3news10.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/l3news10.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3news11.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3news11.pdf
index 39a7cdb5a68..132979c8a75 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/l3news11.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/l3news11.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3news12.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3news12.pdf
index 7b96788d948..c1ed0ffacaf 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/l3news12.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/l3news12.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3prefixes.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3prefixes.pdf
index b733ee49218..89ba420517c 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/l3prefixes.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/l3prefixes.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf
index a8a44d7cfca..c3025741c6d 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex b/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex
index dbb84004aa9..d241392fb9d 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex
+++ b/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex
@@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2023-08-11}
+\date{Released 2023-08-29}
\begin{document}
diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf
index dbf641ceaf0..ebc9bcab2ae 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex b/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex
index 18a715e5781..42e1b4c263d 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex
+++ b/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex
@@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2023-08-11}
+\date{Released 2023-08-29}
\newcommand{\TF}{\textit{(TF)}}
diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.pdf
index 23f7fa7394c..c34ddb6bd89 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.tex b/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.tex
index 9258e215a01..e0a5780cb87 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.tex
+++ b/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.tex
@@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2023-08-11}
+\date{Released 2023-08-29}
\newcommand{\TF}{\textit{(TF)}}
diff --git a/Master/texmf-dist/doc/latex/l3kernel/source3.pdf b/Master/texmf-dist/doc/latex/l3kernel/source3.pdf
index 31040f07f51..458c832be3c 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/source3.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/source3.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/source3.tex b/Master/texmf-dist/doc/latex/l3kernel/source3.tex
index 97bb54971ab..ee6efdcc7ac 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/source3.tex
+++ b/Master/texmf-dist/doc/latex/l3kernel/source3.tex
@@ -53,7 +53,7 @@ for those people who are interested.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2023-08-11}
+\date{Released 2023-08-29}
\pagenumbering{roman}
\maketitle
diff --git a/Master/texmf-dist/source/latex/l3kernel/expl3.dtx b/Master/texmf-dist/source/latex/l3kernel/expl3.dtx
index de20e5abe84..9adee097c5c 100644
--- a/Master/texmf-dist/source/latex/l3kernel/expl3.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/expl3.dtx
@@ -24,7 +24,7 @@
%
%<*driver|generic|package|2ekernel>
%</driver|generic|package|2ekernel>
-\def\ExplFileDate{2023-08-11}%
+\def\ExplFileDate{2023-08-29}%
%<*driver>
\documentclass[full]{l3doc}
\usepackage{graphicx}
@@ -51,7 +51,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx b/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx
index bc363401677..17cb2467bf6 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx b/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx
index bf51cb55274..aaa4333858e 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3box.dtx b/Master/texmf-dist/source/latex/l3kernel/l3box.dtx
index 0b4ae268924..34b6ca44efd 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3box.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3box.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx b/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx
index 978c6d95de1..f3a50214254 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3cctab.dtx b/Master/texmf-dist/source/latex/l3kernel/l3cctab.dtx
index e8804818f24..fc9cdd9e927 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3cctab.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3cctab.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx b/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx
index 88455b84721..0eaac6a532c 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx b/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx
index cf1ed0ebc84..2269c6c6869 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3color.dtx b/Master/texmf-dist/source/latex/l3kernel/l3color.dtx
index 3597f0bc4e4..1453001a2ae 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3color.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3color.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3debug.dtx b/Master/texmf-dist/source/latex/l3kernel/l3debug.dtx
index 36e5e8d313d..d700a0f0217 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3debug.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3debug.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx b/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx
index 14386a14308..a60fe16ff48 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx b/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx
index 43a3312231e..b1744b9f7bb 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx
@@ -85,7 +85,7 @@ and all files in that bundle must be distributed together.
% require you to do updates, if the class changes.}}
%
% \author{\Team}
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
% \maketitle
% \tableofcontents
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx b/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx
index 58c151045a4..2b40c56fc50 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx
@@ -63,7 +63,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx b/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx
index 922e0315b2a..0d7e3e877a9 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3file.dtx b/Master/texmf-dist/source/latex/l3kernel/l3file.dtx
index 8ef7950afa1..1c1401e3929 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3file.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3file.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
@@ -126,7 +126,8 @@
% the \meta{false code} is inserted into the input stream.
% \end{function}
%
-% \begin{function}[updated = 2012-02-09]{\iow_open:Nn, \iow_open:cn}
+% \begin{function}[updated = 2012-02-09]
+% {\iow_open:Nn, \iow_open:NV, \iow_open:cn, \iow_open:cV}
% \begin{syntax}
% \cs{iow_open:Nn} \meta{stream} \Arg{file name}
% \end{syntax}
@@ -446,7 +447,8 @@
%
% \subsection{Writing to files}
%
-% \begin{function}[updated = 2012-06-05]{\iow_now:Nn, \iow_now:Nx, \iow_now:cn, \iow_now:cx}
+% \begin{function}[updated = 2012-06-05]
+% {\iow_now:Nn, \iow_now:NV, \iow_now:Nx, \iow_now:cn, \iow_now:cV, \iow_now:cx}
% \begin{syntax}
% \cs{iow_now:Nn} \meta{stream} \Arg{tokens}
% \end{syntax}
@@ -703,7 +705,7 @@
% \end{texnote}
% \end{variable}
%
-% \begin{function}[TF, updated = 2012-02-10]{\file_if_exist:n}
+% \begin{function}[TF, updated = 2012-02-10]{\file_if_exist:n, \file_if_exist:V}
% \begin{syntax}
% \cs{file_if_exist:nTF} \Arg{file name} \Arg{true code} \Arg{false code}
% \end{syntax}
@@ -922,7 +924,7 @@
% \end{function}
%
%
-% \begin{function}[updated = 2017-06-26]{\file_input:n}
+% \begin{function}[updated = 2017-06-26]{\file_input:n, \file_input:V}
% \begin{syntax}
% \cs{file_input:n} \Arg{file name}
% \end{syntax}
@@ -1634,7 +1636,7 @@
% \end{macrocode}
% \end{variable}
%
-% \begin{macro}{\iow_open:Nn, \iow_open:cn}
+% \begin{macro}{\iow_open:Nn, \iow_open:NV, \iow_open:cn, \iow_open:cV}
% \begin{macro}{\@@_open_stream:Nn, \@@_open_stream:NV}
% The same idea as for reading, but without the path and without the need
% to allow for a conditional version.
@@ -1652,7 +1654,7 @@
\@@_open_stream:NV #1 \l_@@_file_name_tl
}
}
-\cs_generate_variant:Nn \iow_open:Nn { c }
+\cs_generate_variant:Nn \iow_open:Nn { NV , c , cV }
\cs_new_protected:Npn \@@_open_stream:Nn #1#2
{
\tex_global:D \tex_chardef:D #1 = \l_@@_stream_tl \scan_stop:
@@ -1798,7 +1800,11 @@
% \end{macro}
% \end{macro}
%
-% \begin{macro}{\iow_now:Nn, \iow_now:Nx, \iow_now:cn, \iow_now:cx}
+% \begin{macro}
+% {
+% \iow_now:Nn, \iow_now:NV, \iow_now:Nx,
+% \iow_now:cn, \iow_now:cV, \iow_now:cx
+% }
% This routine writes the second argument onto the output stream without
% expansion. If this stream isn't open, the output goes to the terminal
% instead. If the first argument is no output stream at all, we get an
@@ -1816,7 +1822,7 @@
\__kernel_iow_with:Nnn \tex_newlinechar:D { `\^^J }
{ \tex_immediate:D \tex_write:D #1 { \exp_not:n {#2} } }
}
-\cs_generate_variant:Nn \iow_now:Nn { c, Nx, cx }
+\cs_generate_variant:Nn \iow_now:Nn { NV , Nx , c , cV , cx }
% \end{macrocode}
% \end{macro}
%
@@ -3308,7 +3314,7 @@
% \end{macro}
% \end{macro}
%
-% \begin{macro}[TF]{\file_if_exist:n}
+% \begin{macro}[TF]{\file_if_exist:n, \file_if_exist:V}
% The test for the existence of a file is a wrapper around the function to
% add a path to a file. If the file was found, the path contains
% something, whereas if the file was not located then the return value
@@ -3320,6 +3326,7 @@
{ \prg_return_true: }
{ \prg_return_false: }
}
+\prg_generate_conditional_variant:Nnn \file_if_exist:n { V } { T , F , TF }
% \end{macrocode}
% \end{macro}
%
@@ -3360,7 +3367,7 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\file_input:n}
+% \begin{macro}{\file_input:n, \file_input:V}
% \begin{macro}{\@@_input:n, \@@_input:V}
% \begin{macro}{\@@_input_push:n, \__kernel_file_input_push:n}
% \begin{macro}{\@@_input_pop:, \__kernel_file_input_pop:}
@@ -3376,6 +3383,7 @@
{ \@@_input:V \l_@@_full_name_tl }
{ \__kernel_file_missing:n {#1} }
}
+\cs_generate_variant:Nn \file_input:n { V }
\cs_new_protected:Npx \@@_input:n #1
{
\exp_not:N \clist_if_exist:NTF \exp_not:N \@filelist
@@ -3751,7 +3759,7 @@
% \begin{macrocode}
\tex_endinput:D
}
-% \begin{macrocode}
+% \end{macrocode}
%
% Now define the actual error message:
% \begin{macrocode}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx b/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx
index 16d7ad8cf4e..3fb39305353 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx
index fd74adbb30f..ecdd6ea31cd 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
% \maketitle
%
% \begin{documentation}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx
index b79d221f386..1f6b3337610 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx
index 2ce6f8c75aa..6a8d6376fbc 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx
index 6b9443ce090..bce0ddc8fd0 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx
index 320c7ffa934..d9c8cf5685b 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx
index fbc59aa01fa..0a5ac448aac 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx
index ea21e32e9c1..9f11464f295 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
@@ -404,7 +404,7 @@
\exp:w \exp_end_continue_f:w \@@_parse:n {#3}
}
\cs_generate_variant:Nn \fp_step_function:nnnN { nnnc }
-% \end{macrocode}
+% \end{macrocode}
% Only floating point numbers (not tuples) are allowed arguments.
% Only \enquote{normal} floating points (not $\pm 0$,
% $\pm\texttt{inf}$, \texttt{nan}) can be used as step; if positive,
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx
index 76e511868f6..86e2366f2dc 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx
index 948b81b2cc1..bb0e4b12f01 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx
index d52675b87b8..c0c656189ff 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx
index 725674b62c3..9b59b1759d5 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
% \maketitle
%
% \begin{documentation}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx
index aef546549ad..f4cc0513add 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx
index 9966e983e5a..17193dd8aff 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx
@@ -49,7 +49,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx
index 75a307ea9dc..e3693f0a41e 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3int.dtx b/Master/texmf-dist/source/latex/l3kernel/l3int.dtx
index 64919d9e465..5bb880ead35 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3int.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3int.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
@@ -688,7 +688,7 @@
% Integers can be placed into the output stream with formatting. These
% conversions apply to any integer expressions.
%
-% \begin{function}[updated = 2011-10-22, EXP]{\int_to_arabic:n}
+% \begin{function}[updated = 2011-10-22, EXP]{\int_to_arabic:n, \int_to_arabic:v}
% \begin{syntax}
% \cs{int_to_arabic:n} \Arg{int expr}
% \end{syntax}
@@ -2024,11 +2024,12 @@
%
% \subsection{Formatting integers}
%
-% \begin{macro}{\int_to_arabic:n}
+% \begin{macro}{\int_to_arabic:n, \int_to_arabic:v}
% \UnitTested
% Nothing exciting here.
% \begin{macrocode}
\cs_new_eq:NN \int_to_arabic:n \int_eval:n
+\cs_generate_variant:Nn \int_to_arabic:n { v }
% \end{macrocode}
% \end{macro}
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx b/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx
index c9f97c6304b..cdbf71784c6 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx b/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx
index 876aabddddd..c2d442f1832 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx b/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx
index d84b56eee04..8a78f8cd7c2 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
@@ -985,7 +985,8 @@
% \end{verbatim}
% are treated identically.
%
-% \begin{function}[rEXP, added=2020-12-19, updated = 2021-05-10]{\keyval_parse:nnn}
+% \begin{function}[rEXP, added=2020-12-19, updated = 2021-05-10]
+% {\keyval_parse:nnn, \keyval_parse:nnV, \keyval_parse:nnv}
% \begin{syntax}
% \cs{keyval_parse:nnn} \Arg{code_1} \Arg{code_2} \Arg{key--value list}
% \end{syntax}
@@ -1023,7 +1024,8 @@
% \end{texnote}
% \end{function}
%
-% \begin{function}[rEXP, updated = 2021-05-10]{\keyval_parse:NNn}
+% \begin{function}[rEXP, updated = 2021-05-10]
+% {\keyval_parse:NNn, \keyval_parse:NNV, \keyval_parse:NNv}
% \begin{syntax}
% \cs{keyval_parse:NNn} \meta{function_1} \meta{function_2} \Arg{key--value list}
% \end{syntax}
@@ -1114,7 +1116,11 @@
{
% \end{macrocode}
%
-% \begin{macro}[EXP]{\keyval_parse:nnn, \keyval_parse:NNn}
+% \begin{macro}[EXP]
+% {
+% \keyval_parse:nnn, \keyval_parse:nnV, \keyval_parse:nnv,
+% \keyval_parse:NNn, \keyval_parse:NNV, \keyval_parse:NNv
+% }
% The main function starts the first of two loops. The outer loop splits the
% key--value list at active commas, the inner loop will do so at other commas.
% The use of \cs{s_@@_mark} here prevents loss of braces from the key
@@ -1379,6 +1385,8 @@
\char_set_catcode_active:n { `\= }
\@@_tmp:w , =
\group_end:
+\cs_generate_variant:Nn \keyval_parse:NNn { NNV , NNv }
+\cs_generate_variant:Nn \keyval_parse:nnn { nnV , nnv }
% \end{macrocode}
%
% \begin{macro}[EXP]{\@@_pair:nnnn, \@@_key:nn}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx b/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx
index acb2ad3cbd4..4142ac4658f 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx b/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx
index 079f23e3c12..4e1f6a5bb83 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx b/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx
index 7e80cf56654..82092523fa1 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
@@ -103,7 +103,11 @@
% although in general this may be confusing; simply writing the messages
% using |~| characters is the method favored by the team.
%
-% \begin{function}[updated = 2011-08-16]{\msg_new:nnnn, \msg_new:nnn}
+% \begin{function}[updated = 2011-08-16]
+% {
+% \msg_new:nnnn, \msg_new:nnxx,
+% \msg_new:nnn, \msg_new:nnx
+% }
% \begin{syntax}
% \cs{msg_new:nnnn} \Arg{module} \Arg{message} \Arg{text} \Arg{more text}
% \end{syntax}
@@ -312,9 +316,15 @@
% \msg_fatal:nnnn ,
% \msg_fatal:nnn ,
% \msg_fatal:nn ,
+% \msg_fatal:nnVV ,
+% \msg_fatal:nnVn ,
+% \msg_fatal:nnnV ,
+% \msg_fatal:nnV ,
% \msg_fatal:nnxxxx ,
% \msg_fatal:nnxxx ,
+% \msg_fatal:nnnxx ,
% \msg_fatal:nnxx ,
+% \msg_fatal:nnnx ,
% \msg_fatal:nnx
% }
% \begin{syntax}
@@ -333,9 +343,15 @@
% \msg_critical:nnnn ,
% \msg_critical:nnn ,
% \msg_critical:nn ,
+% \msg_critical:nnVV ,
+% \msg_critical:nnVn ,
+% \msg_critical:nnnV ,
+% \msg_critical:nnV ,
% \msg_critical:nnxxxx ,
% \msg_critical:nnxxx ,
+% \msg_critical:nnnxx ,
% \msg_critical:nnxx ,
+% \msg_critical:nnnx ,
% \msg_critical:nnx
% }
% \begin{syntax}
@@ -360,9 +376,15 @@
% \msg_error:nnnn ,
% \msg_error:nnn ,
% \msg_error:nn ,
+% \msg_error:nnVV ,
+% \msg_error:nnVn ,
+% \msg_error:nnnV ,
+% \msg_error:nnV ,
% \msg_error:nnxxxx ,
% \msg_error:nnxxx ,
+% \msg_error:nnnxx ,
% \msg_error:nnxx ,
+% \msg_error:nnnx ,
% \msg_error:nnx
% }
% \begin{syntax}
@@ -380,10 +402,17 @@
% \msg_warning:nnnnn ,
% \msg_warning:nnnn ,
% \msg_warning:nnn ,
+% \msg_warning:nnn ,
% \msg_warning:nn ,
+% \msg_warning:nnVV ,
+% \msg_warning:nnVn ,
+% \msg_warning:nnnV ,
+% \msg_warning:nnV ,
% \msg_warning:nnxxxx ,
% \msg_warning:nnxxx ,
+% \msg_warning:nnnxx ,
% \msg_warning:nnxx ,
+% \msg_warning:nnnx ,
% \msg_warning:nnx
% }
% \begin{syntax}
@@ -402,18 +431,30 @@
% \msg_note:nnnn ,
% \msg_note:nnn ,
% \msg_note:nn ,
+% \msg_note:nnVV ,
+% \msg_note:nnVn ,
+% \msg_note:nnnV ,
+% \msg_note:nnV ,
% \msg_note:nnxxxx ,
% \msg_note:nnxxx ,
+% \msg_note:nnnxx ,
% \msg_note:nnxx ,
+% \msg_note:nnnx ,
% \msg_note:nnx ,
% \msg_info:nnnnnn ,
% \msg_info:nnnnn ,
% \msg_info:nnnn ,
% \msg_info:nnn ,
% \msg_info:nn ,
+% \msg_info:nnVV ,
+% \msg_info:nnVn ,
+% \msg_info:nnnV ,
+% \msg_info:nnV ,
% \msg_info:nnxxxx ,
% \msg_info:nnxxx ,
+% \msg_info:nnnxx ,
% \msg_info:nnxx ,
+% \msg_info:nnnx ,
% \msg_info:nnx
% }
% \begin{syntax}
@@ -435,18 +476,30 @@
% \msg_term:nnnn ,
% \msg_term:nnn ,
% \msg_term:nn ,
+% \msg_term:nnVV ,
+% \msg_term:nnVn ,
+% \msg_term:nnnV ,
+% \msg_term:nnV ,
% \msg_term:nnxxxx ,
% \msg_term:nnxxx ,
+% \msg_term:nnnxx ,
% \msg_term:nnxx ,
+% \msg_term:nnnx ,
% \msg_term:nnx ,
% \msg_log:nnnnnn ,
% \msg_log:nnnnn ,
% \msg_log:nnnn ,
% \msg_log:nnn ,
% \msg_log:nn ,
+% \msg_log:nnVV ,
+% \msg_log:nnVn ,
+% \msg_log:nnnV ,
+% \msg_log:nnV ,
% \msg_log:nnxxxx ,
% \msg_log:nnxxx ,
+% \msg_log:nnnxx ,
% \msg_log:nnxx ,
+% \msg_log:nnnx ,
% \msg_log:nnx
% }
% \begin{syntax}
@@ -468,9 +521,15 @@
% \msg_none:nnnn ,
% \msg_none:nnn ,
% \msg_none:nn ,
+% \msg_none:nnVV ,
+% \msg_none:nnVn ,
+% \msg_none:nnnV ,
+% \msg_none:nnV ,
% \msg_none:nnxxxx ,
% \msg_none:nnxxx ,
+% \msg_none:nnnxx ,
% \msg_none:nnxx ,
+% \msg_none:nnnx ,
% \msg_none:nnx
% }
% \begin{syntax}
@@ -489,9 +548,15 @@
% \msg_show:nnnn ,
% \msg_show:nnn ,
% \msg_show:nn ,
+% \msg_show:nnVV ,
+% \msg_show:nnVn ,
+% \msg_show:nnnV ,
+% \msg_show:nnV ,
% \msg_show:nnxxxx ,
% \msg_show:nnxxx ,
+% \msg_show:nnnxx ,
% \msg_show:nnxx ,
+% \msg_show:nnnx ,
% \msg_show:nnx
% }
% \begin{syntax}
@@ -740,7 +805,7 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\msg_new:nnnn, \msg_new:nnn}
+% \begin{macro}{\msg_new:nnnn, \msg_new:nnxx, \msg_new:nnn, \msg_new:nnx}
% \begin{macro}{\msg_gset:nnnn, \msg_gset:nnn}
% \begin{macro}{\msg_set:nnnn, \msg_set:nnn}
% Setting a message simply means saving the appropriate text
@@ -751,8 +816,10 @@
\@@_chk_free:nn {#1} {#2}
\msg_gset:nnnn {#1} {#2}
}
+\cs_generate_variant:Nn \msg_new:nnnn { nnxx }
\cs_new_protected:Npn \msg_new:nnn #1#2#3
{ \msg_new:nnnn {#1} {#2} {#3} { } }
+\cs_generate_variant:Nn \msg_new:nnn { nnx }
\cs_new_protected:Npn \msg_set:nnnn #1#2#3#4
{
\cs_set:cpn { \c_@@_text_prefix_tl #1 / #2 }
@@ -1113,6 +1180,9 @@
{ \exp_not:c { msg_ #1 :nnnnnn } {##1} {##2} {##3} { } { } { } }
\cs_new_protected:cpx { msg_ #1 :nn } ##1##2
{ \exp_not:c { msg_ #1 :nnnnnn } {##1} {##2} { } { } { } { } }
+ \cs_generate_variant:cn { msg_ #1 :nnn } { nnV }
+ \cs_generate_variant:cn { msg_ #1 :nnnn } { nnVV , nnVn , nnnV , nnnx }
+ \cs_generate_variant:cn { msg_ #1 :nnnnn } { nnnxx }
\cs_new_protected:cpx { msg_ #1 :nnxxxx } ##1##2##3##4##5##6
{
\use:x
@@ -1139,9 +1209,15 @@
% \msg_fatal:nnnn ,
% \msg_fatal:nnn ,
% \msg_fatal:nn ,
+% \msg_fatal:nnVV ,
+% \msg_fatal:nnVn ,
+% \msg_fatal:nnnV ,
+% \msg_fatal:nnV ,
% \msg_fatal:nnxxxx ,
% \msg_fatal:nnxxx ,
+% \msg_fatal:nnnxx ,
% \msg_fatal:nnxx ,
+% \msg_fatal:nnnx ,
% \msg_fatal:nnx
% }
% \begin{macro}{\@@_fatal_exit:}
@@ -1173,9 +1249,15 @@
% \msg_critical:nnnn ,
% \msg_critical:nnn ,
% \msg_critical:nn ,
+% \msg_critical:nnVV ,
+% \msg_critical:nnVn ,
+% \msg_critical:nnnV ,
+% \msg_critical:nnV ,
% \msg_critical:nnxxxx ,
% \msg_critical:nnxxx ,
+% \msg_critical:nnnxx ,
% \msg_critical:nnxx ,
+% \msg_critical:nnnx ,
% \msg_critical:nnx
% }
% Not quite so bad: just end the current file.
@@ -1198,9 +1280,15 @@
% \msg_error:nnnn ,
% \msg_error:nnn ,
% \msg_error:nn ,
+% \msg_error:nnVV ,
+% \msg_error:nnVn ,
+% \msg_error:nnnV ,
+% \msg_error:nnV ,
% \msg_error:nnxxxx ,
% \msg_error:nnxxx ,
+% \msg_error:nnnxx ,
% \msg_error:nnxx ,
+% \msg_error:nnnx ,
% \msg_error:nnx
% }
% For an error, the interrupt routine is called. We check if there is
@@ -1229,27 +1317,45 @@
% \msg_warning:nnnn ,
% \msg_warning:nnn ,
% \msg_warning:nn ,
+% \msg_warning:nnVV ,
+% \msg_warning:nnVn ,
+% \msg_warning:nnnV ,
+% \msg_warning:nnV ,
% \msg_warning:nnxxxx ,
% \msg_warning:nnxxx ,
+% \msg_warning:nnnxx ,
% \msg_warning:nnxx ,
+% \msg_warning:nnnx ,
% \msg_warning:nnx ,
% \msg_note:nnnnnn ,
% \msg_note:nnnnn ,
% \msg_note:nnnn ,
% \msg_note:nnn ,
% \msg_note:nn ,
+% \msg_note:nnVV ,
+% \msg_note:nnVn ,
+% \msg_note:nnnV ,
+% \msg_note:nnV ,
% \msg_note:nnxxxx ,
% \msg_note:nnxxx ,
+% \msg_note:nnnxx ,
% \msg_note:nnxx ,
+% \msg_note:nnnx ,
% \msg_note:nnx ,
% \msg_info:nnnnnn ,
% \msg_info:nnnnn ,
% \msg_info:nnnn ,
% \msg_info:nnn ,
% \msg_info:nn ,
+% \msg_info:nnVV ,
+% \msg_info:nnVn ,
+% \msg_info:nnnV ,
+% \msg_info:nnV ,
% \msg_info:nnxxxx ,
% \msg_info:nnxxx ,
+% \msg_info:nnnxx ,
% \msg_info:nnxx ,
+% \msg_info:nnnx ,
% \msg_info:nnx ,
% }
% Warnings and information messages have no decoration. Warnings are
@@ -1303,18 +1409,30 @@
% \msg_log:nnnn ,
% \msg_log:nnn ,
% \msg_log:nn ,
+% \msg_log:nnVV ,
+% \msg_log:nnVn ,
+% \msg_log:nnnV ,
+% \msg_log:nnV ,
% \msg_log:nnxxxx ,
% \msg_log:nnxxx ,
+% \msg_log:nnnxx ,
% \msg_log:nnxx ,
+% \msg_log:nnnx ,
% \msg_log:nnx ,
% \msg_term:nnnnnn ,
% \msg_term:nnnnn ,
% \msg_term:nnnn ,
% \msg_term:nnn ,
% \msg_term:nn ,
+% \msg_term:nnVV ,
+% \msg_term:nnVn ,
+% \msg_term:nnnV ,
+% \msg_term:nnV ,
% \msg_term:nnxxxx ,
% \msg_term:nnxxx ,
+% \msg_term:nnnxx ,
% \msg_term:nnxx ,
+% \msg_term:nnnx ,
% \msg_term:nnx ,
% }
% \enquote{Log} data is very similar to information, but with no extras
@@ -1345,9 +1463,15 @@
% \msg_none:nnnn ,
% \msg_none:nnn ,
% \msg_none:nn ,
+% \msg_none:nnVV ,
+% \msg_none:nnVn ,
+% \msg_none:nnnV ,
+% \msg_none:nnV ,
% \msg_none:nnxxxx ,
% \msg_none:nnxxx ,
+% \msg_none:nnnxx ,
% \msg_none:nnxx ,
+% \msg_none:nnnx ,
% \msg_none:nnx
% }
% The \texttt{none} message type is needed so that input can be gobbled.
@@ -1363,9 +1487,15 @@
% \msg_show:nnnn ,
% \msg_show:nnn ,
% \msg_show:nn ,
+% \msg_show:nnVV ,
+% \msg_show:nnVn ,
+% \msg_show:nnnV ,
+% \msg_show:nnV ,
% \msg_show:nnxxxx ,
% \msg_show:nnxxx ,
+% \msg_show:nnnxx ,
% \msg_show:nnxx ,
+% \msg_show:nnx ,
% \msg_show:nnx
% }
% \begin{macro}{\@@_show:n, \@@_show:w, \@@_show_dot:w, \@@_show:nn}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3names.dtx b/Master/texmf-dist/source/latex/l3kernel/l3names.dtx
index 1db4aaa8065..f3f56f7f723 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3names.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3names.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
@@ -533,7 +533,6 @@
\@@_primitive:NN \pdfcompresslevel \tex_pdfcompresslevel:D
\@@_primitive:NN \pdfcolorstack \tex_pdfcolorstack:D
\@@_primitive:NN \pdfcolorstackinit \tex_pdfcolorstackinit:D
- \@@_primitive:NN \pdfcreationdate \tex_pdfcreationdate:D
\@@_primitive:NN \pdfdecimaldigits \tex_pdfdecimaldigits:D
\@@_primitive:NN \pdfdest \tex_pdfdest:D
\@@_primitive:NN \pdfdestmargin \tex_pdfdestmargin:D
@@ -627,6 +626,7 @@
\@@_primitive:NN \pdfadjustspacing \tex_adjustspacing:D
\@@_primitive:NN \pdfappendkern \tex_appendkern:D
\@@_primitive:NN \pdfcopyfont \tex_copyfont:D
+ \@@_primitive:NN \pdfcreationdate \tex_creationdate:D
\@@_primitive:NN \pdfdraftmode \tex_draftmode:D
\@@_primitive:NN \pdfeachlinedepth \tex_eachlinedepth:D
\@@_primitive:NN \pdfeachlineheight \tex_eachlineheight:D
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3pdf.dtx b/Master/texmf-dist/source/latex/l3kernel/l3pdf.dtx
index dd275751db0..ebfdc9115b7 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3pdf.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3pdf.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx b/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx
index fe88bac05d6..ec778817d3d 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx b/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx
index e7ef6d11f88..2d5fc3edccf 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
@@ -167,16 +167,16 @@
% {
% \prop_put:Nnn, \prop_put:NnV, \prop_put:Nno, \prop_put:Nne, \prop_put:Nnx,
% \prop_put:NVn, \prop_put:NVV, \prop_put:NVx, \prop_put:Nvx,
-% \prop_put:Non, \prop_put:Noo, \prop_put:Nxx,
+% \prop_put:Non, \prop_put:Nxn, \prop_put:NxV, \prop_put:Noo, \prop_put:Nxx,
% \prop_put:cnn, \prop_put:cnV, \prop_put:cno, \prop_put:cne, \prop_put:cnx,
% \prop_put:cVn, \prop_put:cVV, \prop_put:cVx, \prop_put:cvx,
-% \prop_put:con, \prop_put:coo, \prop_put:cxx,
+% \prop_put:con, \prop_put:cxn, \prop_put:cxV, \prop_put:coo, \prop_put:cxx,
% \prop_gput:Nnn, \prop_gput:NnV, \prop_gput:Nno, \prop_gput:Nne, \prop_gput:Nnx,
% \prop_gput:NVn, \prop_gput:NVV, \prop_gput:NVx, \prop_gput:Nvx,
-% \prop_gput:Non, \prop_gput:Noo, \prop_gput:Nxx,
+% \prop_gput:Non, \prop_gput:Nxn, \prop_gput:NxV, \prop_gput:Noo, \prop_gput:Nxx,
% \prop_gput:cnn, \prop_gput:cnV, \prop_gput:cno, \prop_gput:cne, \prop_gput:cnx,
% \prop_gput:cVn, \prop_gput:cVV, \prop_gput:cVx, \prop_gput:cvx,
-% \prop_gput:con, \prop_gput:coo, \prop_gput:cxx
+% \prop_gput:con, \prop_gput:cxn, \prop_gput:cxV, \prop_gput:coo, \prop_gput:cxx
% }
% \begin{syntax}
% \cs{prop_put:Nnn} \meta{property list} \Arg{key} \Arg{value}
@@ -250,8 +250,9 @@
%
% \begin{function}[updated = 2011-08-28]
% {
-% \prop_get:NnN, \prop_get:NVN, \prop_get:NvN, \prop_get:NoN,
-% \prop_get:cnN, \prop_get:cVN, \prop_get:cvN, \prop_get:coN,
+% \prop_get:NnN, \prop_get:NVN, \prop_get:NvN, \prop_get:NoN, \prop_get:NxN,
+% \prop_get:cnN, \prop_get:cVN, \prop_get:cvN, \prop_get:coN, \prop_get:cxN,
+% \prop_get:cnc
% }
% \begin{syntax}
% \cs{prop_get:NnN} \meta{property list} \Arg{key} \meta{tl var}
@@ -294,7 +295,11 @@
% the \meta{token list variable} is local. See also \cs{prop_gpop:NnNTF}.
% \end{function}
%
-% \begin{function}[added = 2014-07-17, EXP]{\prop_item:Nn, \prop_item:cn}
+% \begin{function}[added = 2014-07-17, EXP]
+% {
+% \prop_item:Nn, \prop_item:NV, \prop_item:No, \prop_item:Ne,
+% \prop_item:cn, \prop_item:cV, \prop_item:co, \prop_item:ce
+% }
% \begin{syntax}
% \cs{prop_item:Nn} \meta{property list} \Arg{key}
% \end{syntax}
@@ -399,8 +404,9 @@
%
% \begin{function}[updated = 2012-05-19, TF]
% {
-% \prop_get:NnN, \prop_get:NVN, \prop_get:NvN, \prop_get:NoN,
-% \prop_get:cnN, \prop_get:cVN, \prop_get:cvN, \prop_get:coN
+% \prop_get:NnN, \prop_get:NVN, \prop_get:NvN, \prop_get:NoN, \prop_get:NxN,
+% \prop_get:cnN, \prop_get:cVN, \prop_get:cvN, \prop_get:coN, \prop_get:cxN,
+% \prop_get:cnc
% }
% \begin{syntax}
% \cs{prop_get:NnNTF} \meta{property list} \Arg{key} \meta{token list variable} \\
@@ -982,8 +988,9 @@
%
% \begin{macro}[tested = m3prop002]
% {
-% \prop_get:NnN, \prop_get:NVN, \prop_get:NoN,
-% \prop_get:cnN, \prop_get:cVN, \prop_get:coN
+% \prop_get:NnN, \prop_get:NVN, \prop_get:NvN, \prop_get:NoN, \prop_get:NxN,
+% \prop_get:cnN, \prop_get:cVN, \prop_get:cvN, \prop_get:coN, \prop_get:cxN,
+% \prop_get:cnc
% }
% Getting an item from a list is very easy: after splitting,
% if the key is in the property list, just set the token list variable
@@ -995,8 +1002,8 @@
{ \tl_set:Nn #3 {##2} }
{ \tl_set:Nn #3 { \q_no_value } }
}
-\cs_generate_variant:Nn \prop_get:NnN { NV , Nv , No }
-\cs_generate_variant:Nn \prop_get:NnN { c , cV , cv , co }
+\cs_generate_variant:Nn \prop_get:NnN { NV , Nv , No , Nx }
+\cs_generate_variant:Nn \prop_get:NnN { c , cV , cv , co , cx , cnc }
% \end{macrocode}
% \end{macro}
%
@@ -1035,7 +1042,11 @@
% \end{macro}
% \end{macro}
%
-% \begin{macro}[EXP]{\prop_item:Nn, \prop_item:cn}
+% \begin{macro}[EXP]
+% {
+% \prop_item:Nn, \prop_item:NV, \prop_item:No, \prop_item:Ne,
+% \prop_item:cn, \prop_item:cV, \prop_item:co, \prop_item:ce
+% }
% \begin{macro}[EXP]{\@@_item:nnn}
% Getting the value corresponding to a key in a property list in an
% expandable fashion simply uses \cs{prop_map_tokens:Nn} to go through
@@ -1053,7 +1064,7 @@
\str_if_eq:eeT {#1} {#2}
{ \prop_map_break:n { \exp_not:n {#3} } }
}
-\cs_generate_variant:Nn \prop_item:Nn { c }
+\cs_generate_variant:Nn \prop_item:Nn { NV , No , Ne , c , cV , co , ce }
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -1154,19 +1165,19 @@
% {
% \prop_put:Nnn, \prop_put:NnV, \prop_put:Nno, \prop_put:Nne, \prop_put:Nnx,
% \prop_put:NVn, \prop_put:NVV, \prop_put:NVx, \prop_put:Nvx,
-% \prop_put:Non, \prop_put:Noo, \prop_put:Nxx,
+% \prop_put:Non, \prop_put:Nxn, \prop_put:NxV, \prop_put:Noo, \prop_put:Nxx,
% \prop_put:cnn, \prop_put:cnV, \prop_put:cno, \prop_put:cne, \prop_put:cnx,
% \prop_put:cVn, \prop_put:cVV, \prop_put:cVx, \prop_put:cvx,
-% \prop_put:con, \prop_put:coo, \prop_put:cxx
+% \prop_put:con, \prop_put:cxn, \prop_put:cxV, \prop_put:coo, \prop_put:cxx
% }
% \begin{macro}[tested = m3prop002]
% {
% \prop_gput:Nnn, \prop_gput:NnV, \prop_gput:Nno, \prop_gput:Nne, \prop_gput:Nnx,
-% \prop_gput:NVn, \prop_gput:NVV, \prop_hput:NVx, \prop_hput:Nvx,
-% \prop_gput:Non, \prop_gput:Noo, \prop_gput:Nxx,
+% \prop_gput:NVn, \prop_gput:NVV, \prop_gput:NVx, \prop_hput:Nvx,
+% \prop_gput:Non, \prop_gput:Nxn, \prop_pgut:NxV, \prop_gput:Noo, \prop_gput:Nxx,
% \prop_gput:cnn, \prop_gput:cnV, \prop_gput:cno, \prop_gput:cne, \prop_gput:cnx,
% \prop_gput:cVn, \prop_gput:cVV, \prop_gput:cVx, \prop_gput:cvx,
-% \prop_gput:con, \prop_gput:coo, \prop_gput:cxx
+% \prop_gput:con, \prop_gput:cxn, \prop_gput:cxV, \prop_gput:coo, \prop_gput:cxx
% }
% \begin{macro}{\@@_put:NNnn}
% Since the branches of \cs{@@_split:NnTF} are used as the replacement
@@ -1196,13 +1207,13 @@
{ #1 #2 { \exp_not:o {#2} \l_@@_internal_tl } }
}
\cs_generate_variant:Nn \prop_put:Nnn
- { NnV , Nno , Nne , Nnx , NV , NVV , NVx , Nvx , No , Noo , Nxx }
+ { NnV , Nno , Nne , Nnx , NV , NVV , NVx , Nvx , No , Nx , NxV , Noo , Nxx }
\cs_generate_variant:Nn \prop_put:Nnn
- { c , cnV , cno , cne , cnx , cV , cVV , cVx , cvx , co , coo , cxx }
+ { c , cnV , cno , cne , cnx , cV , cVV , cVx , cvx , co , cx , cxV , coo , cxx }
\cs_generate_variant:Nn \prop_gput:Nnn
- { NnV , Nno , Nne , Nnx , NV , NVV , NVx , Nvx , No , Noo , Nxx }
+ { NnV , Nno , Nne , Nnx , NV , NVV , NVx , Nvx , No , Nx , NxV , Noo , Nxx }
\cs_generate_variant:Nn \prop_gput:Nnn
- { c , cnV , cno , cne , cnx , cV , cVV , cVx , cvx , co , coo , cxx }
+ { c , cnV , cno , cne , cnx , cV , cVV , cVx , cvx , co , cx , cxV , coo , cxx }
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -1307,8 +1318,9 @@
%
% \begin{macro}[TF, tested = m3prop004]
% {
-% \prop_get:NnN, \prop_get:NVN, \prop_get:NoN,
-% \prop_get:cnN, \prop_get:cVN, \prop_get:coN
+% \prop_get:NnN, \prop_get:NVN, \prop_get:NvN, \prop_get:NoN, \prop_get:NxN,
+% \prop_get:cnN, \prop_get:cVN, \prop_get:cvN, \prop_get:coN, \prop_get:cxN,
+% \prop_get:cnc
% }
% Getting the value corresponding to a key, keeping track of whether
% the key was present or not, is implemented as a conditional (with
@@ -1324,7 +1336,7 @@
{ \prg_return_false: }
}
\prg_generate_conditional_variant:Nnn \prop_get:NnN
- { NV , Nv , No , c , cV , cv , co } { T , F , TF }
+ { NV , Nv , No , Nx , c , cV , cv , co , cx , cnc } { T , F , TF }
% \end{macrocode}
% \end{macro}
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx b/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx
index 41c61be8384..e05b5369e11 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx b/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx
index 6aef0742a02..3d342960ac9 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
@@ -587,7 +587,11 @@
% while the later require a compiled expression as generated by
% \cs{regex_set:Nn}.
%
-% \begin{function}[TF, added = 2017-05-26]{\regex_match:nn, \regex_match:Nn}
+% \begin{function}[TF, added = 2017-05-26]
+% {
+% \regex_match:nn, \regex_match:nV,
+% \regex_match:Nn, \regex_match:NV
+% }
% \begin{syntax}
% \cs{regex_match:nnTF} \Arg{regex} \Arg{token list} \Arg{true code} \Arg{false code}
% \end{syntax}
@@ -600,7 +604,11 @@
% leaves \texttt{TRUE} then \texttt{FALSE} in the input stream.
% \end{function}
%
-% \begin{function}[added = 2017-05-26]{\regex_count:nnN, \regex_count:NnN}
+% \begin{function}[added = 2017-05-26]
+% {
+% \regex_count:nnN, \regex_count:nVN,
+% \regex_count:NnN, \regex_count:NVN
+% }
% \begin{syntax}
% \cs{regex_count:nnN} \Arg{regex} \Arg{token list} \meta{int var}
% \end{syntax}
@@ -657,7 +665,10 @@
% \section{Submatch extraction}
%
% \begin{function}[noTF, added = 2017-05-26]
-% {\regex_extract_once:nnN, \regex_extract_once:NnN}
+% {
+% \regex_extract_once:nnN, \regex_extract_once:nVN,
+% \regex_extract_once:NVN, \regex_extract_once:NVN
+% }
% \begin{syntax}
% \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}
@@ -688,7 +699,10 @@
% \end{function}
%
% \begin{function}[noTF, added = 2017-05-26]
-% {\regex_extract_all:nnN, \regex_extract_all:NnN}
+% {
+% \regex_extract_all:nnN, \regex_extract_all:nVN,
+% \regex_extract_all:NnN, \regex_extract_all:NVN
+% }
% \begin{syntax}
% \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}
@@ -711,7 +725,11 @@
% and the \texttt{true} branch is left in the input stream.
% \end{function}
%
-% \begin{function}[noTF, added = 2017-05-26]{\regex_split:nnN, \regex_split:NnN}
+% \begin{function}[noTF, added = 2017-05-26]
+% {
+% \regex_split:nnN, \regex_split:nVN,
+% \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}
@@ -740,7 +758,10 @@
% \section{Replacement}
%
% \begin{function}[noTF, added = 2017-05-26]
-% {\regex_replace_once:nnN,\regex_replace_once:NnN}
+% {
+% \regex_replace_once:nnN,\regex_replace_once:nVN,
+% \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}
@@ -754,7 +775,10 @@
% \end{function}
%
% \begin{function}[noTF, added = 2017-05-26]
-% {\regex_replace_all:nnN, \regex_replace_all:NnN}
+% {
+% \regex_replace_all:nnN,\regex_replace_all:nVN,
+% \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}
@@ -6518,7 +6542,11 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[TF]{\regex_match:nn, \regex_match:Nn}
+% \begin{macro}[TF]
+% {
+% \regex_match:nn, \regex_match:nV,
+% \regex_match:Nn, \regex_match:NV
+% }
% Those conditionals are based on a common auxiliary defined
% later. Its first argument builds the \textsc{nfa} corresponding to
% the regex, and the second argument is the query token list. Once we
@@ -6530,21 +6558,26 @@
\@@_if_match:nn { \@@_build:n {#1} } {#2}
\@@_return:
}
+\prg_generate_conditional_variant:Nnn \regex_match:nn { nV } { T , F , TF }
\prg_new_protected_conditional:Npnn \regex_match:Nn #1#2 { T , F , TF }
{
\@@_if_match:nn { \@@_build:N #1 } {#2}
\@@_return:
}
+\prg_generate_conditional_variant:Nnn \regex_match:Nn { NV } { T , F , TF }
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\regex_count:nnN, \regex_count:NnN}
+% \begin{macro}
+% {\regex_count:nnN, \regex_count:nVN, \regex_count:NnN, \regex_count:NVN}
% Again, use an auxiliary whose first argument builds the \textsc{nfa}.
% \begin{macrocode}
\cs_new_protected:Npn \regex_count:nnN #1
{ \@@_count:nnN { \@@_build:n {#1} } }
\cs_new_protected:Npn \regex_count:NnN #1
{ \@@_count:nnN { \@@_build:N #1 } }
+\cs_generate_variant:Nn \regex_count:nnN { nV }
+\cs_generate_variant:Nn \regex_count:NnN { NV }
% \end{macrocode}
% \end{macro}
%
@@ -6573,11 +6606,16 @@
%
% \begin{macro}[noTF]
% {
-% \regex_extract_once:nnN, \regex_extract_once:NnN,
-% \regex_extract_all:nnN, \regex_extract_all:NnN,
-% \regex_replace_once:nnN, \regex_replace_once:NnN,
-% \regex_replace_all:nnN, \regex_replace_all:NnN,
-% \regex_split:nnN, \regex_split:NnN
+% \regex_extract_once:nnN, \regex_extract_once:nVN,
+% \regex_extract_once:NnN, \regex_extract_once:NVN,
+% \regex_extract_all:nnN, \regex_extract_all:nVN,
+% \regex_extract_all:NnN, \regex_extract_all:NVN,
+% \regex_replace_once:nnN, \regex_replace_once:nVN,
+% \regex_replace_once:NnN, \regex_replace_once:NVN,
+% \regex_replace_all:nnN, \regex_replace_all:nVN,
+% \regex_replace_all:NnN, \regex_replace_all:NVN,
+% \regex_split:NnN, \regex_split:NVN,
+% \regex_split:nnN, \regex_split:nVN
% }
% We define here $40$ user functions, following a common pattern in
% terms of \texttt{:nnN} auxiliaries, defined in the coming
@@ -6595,6 +6633,11 @@
{ #1 { \@@_build:n {##1} } {##2} ##3 \@@_return: }
\prg_new_protected_conditional:Npnn #3 ##1##2##3 { T , F , TF }
{ #1 { \@@_build:N ##1 } {##2} ##3 \@@_return: }
+ \cs_generate_variant:Nn #2 { nV }
+ \prg_generate_conditional_variant:Nnn #2 { nV } { T , F , TF }
+ \cs_generate_variant:Nn #3 { NV }
+ \prg_generate_conditional_variant:Nnn #3 { NV } { T , F , TF }
+
}
\@@_tmp:w \@@_extract_once:nnN
\regex_extract_once:nnN \regex_extract_once:NnN
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx b/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx
index ad14896d422..d523320f4e5 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
@@ -126,8 +126,12 @@
%
% \begin{function}[added = 2011-08-15, updated = 2012-07-02]
% {
-% \seq_set_split:Nnn , \seq_set_split:NnV ,
-% \seq_gset_split:Nnn, \seq_gset_split:NnV
+% \seq_set_split:Nnn ,
+% \seq_set_split:NVn , \seq_set_split:NnV , \seq_set_split:NVV ,
+% \seq_set_split:Nnx , \seq_set_split:Nxx ,
+% \seq_gset_split:Nnn,
+% \seq_gset_split:NVn , \seq_gset_split:NnV, \seq_gset_split:NVV,
+% \seq_gset_split:Nnx , \seq_gset_split:Nxx
% }
% \begin{syntax}
% \cs{seq_set_split:Nnn} \meta{seq~var} \Arg{delimiter} \Arg{token list}
@@ -304,7 +308,11 @@
% the special marker \cs{q_no_value}.
% \end{function}
%
-% \begin{function}[added = 2014-07-17, EXP]{\seq_item:Nn, \seq_item:cn}
+% \begin{function}[added = 2014-07-17, EXP]
+% {
+% \seq_item:Nn, \seq_item:NV, \seq_item:Ne,
+% \seq_item:cn, \seq_item:cV, \seq_item:ce
+% }
% \begin{syntax}
% \cs{seq_item:Nn} \meta{seq~var} \Arg{integer expression}
% \end{syntax}
@@ -463,8 +471,10 @@
%
% \begin{function}
% {
-% \seq_remove_all:Nn , \seq_remove_all:cn,
-% \seq_gremove_all:Nn, \seq_gremove_all:cn
+% \seq_remove_all:Nn, \seq_remove_all:NV, \seq_remove_all:Nx,
+% \seq_remove_all:cn, \seq_remove_all:cV, \seq_remove_all:cx,
+% \seq_gremove_all:Nn, \seq_gremove_all:NV, \seq_gremove_all:Nx,
+% \seq_gremove_all:cn, \seq_gremove_all:cV, \seq_gremove_all:cx
% }
% \begin{syntax}
% \cs{seq_remove_all:Nn} \meta{seq~var} \Arg{item}
@@ -1266,8 +1276,12 @@
%
% \begin{macro}
% {
-% \seq_set_split:Nnn , \seq_set_split:NnV ,
-% \seq_gset_split:Nnn, \seq_gset_split:NnV
+% \seq_set_split:Nnn ,
+% \seq_set_split:NVn , \seq_set_split:NnV , \seq_set_split:NVV ,
+% \seq_set_split:Nnx , \seq_set_split:Nxx ,
+% \seq_gset_split:Nnn,
+% \seq_gset_split:NVn , \seq_gset_split:NnV, \seq_gset_split:NVV,
+% \seq_gset_split:Nnx, \seq_gset_split:Nxx
% }
% \begin{macro}
% {
@@ -1340,8 +1354,8 @@
}
\cs_new:Npn \@@_set_split:w #1 \@@_set_split_end:
{ \@@_wrap_item:n {#1} }
-\cs_generate_variant:Nn \seq_set_split:Nnn { NnV }
-\cs_generate_variant:Nn \seq_gset_split:Nnn { NnV }
+\cs_generate_variant:Nn \seq_set_split:Nnn { NV , NnV , NVV , Nnx , Nxx }
+\cs_generate_variant:Nn \seq_gset_split:Nnn { NV , NnV , NVV , Nnx , Nxx }
\cs_generate_variant:Nn \seq_set_split_keep_spaces:Nnn { NnV }
\cs_generate_variant:Nn \seq_gset_split_keep_spaces:Nnn { NnV }
% \end{macrocode}
@@ -1499,9 +1513,17 @@
% \end{macro}
% \end{macro}
%
-% \begin{macro}{\seq_remove_all:Nn, \seq_remove_all:cn}
+% \begin{macro}
+% {
+% \seq_remove_all:Nn, \seq_remove_all:NV, \seq_remove_all:Nx,
+% \seq_remove_all:cn, \seq_remove_all:cV, \seq_remove_all:cx
+% }
% \UnitTested
-% \begin{macro}{\seq_gremove_all:Nn, \seq_gremove_all:cn}
+% \begin{macro}
+% {
+% \seq_gremove_all:Nn, \seq_gremove_all:NV, \seq_gremove_all:Nx,
+% \seq_gremove_all:cn, \seq_gremove_all:cV, \seq_gremove_all:cx
+% }
% \UnitTested
% \begin{macro}{\@@_remove_all_aux:NNn}
% The idea of the code here is to avoid a relatively expensive addition of
@@ -1542,8 +1564,8 @@
#1 #2 {#2}
\@@_pop_item_def:
}
-\cs_generate_variant:Nn \seq_remove_all:Nn { c }
-\cs_generate_variant:Nn \seq_gremove_all:Nn { c }
+\cs_generate_variant:Nn \seq_remove_all:Nn { NV , Nx , c , cV , cx }
+\cs_generate_variant:Nn \seq_gremove_all:Nn { NV , Nx , c , cV , cx }
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -2047,7 +2069,8 @@
% \end{macro}
% \end{macro}
%
-% \begin{macro}{\seq_item:Nn, \seq_item:cn}
+% \begin{macro}
+% {\seq_item:Nn, \seq_item:NV, \seq_item:Ne, \seq_item:cn, \seq_item:cV, \seq_item:ce}
% \begin{macro}{\@@_item:wNn, \@@_item:nN, \@@_item:nwn}
% The idea here is to find the offset of the item from the left, then use
% a loop to grab the correct item. If the resulting offset is too large,
@@ -2077,7 +2100,7 @@
{ \prg_break:n { \exp_not:n {#3} } }
{ \exp_args:Nf \@@_item:nwn { \int_eval:n { #1 - 1 } } }
}
-\cs_generate_variant:Nn \seq_item:Nn { c }
+\cs_generate_variant:Nn \seq_item:Nn { NV , Ne , c , cV , ce }
% \end{macrocode}
% \end{macro}
% \end{macro}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx b/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx
index 35d380e58bd..7ce22afb7ea 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx b/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx
index 99efb3e9c27..b92eddbb350 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx b/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx
index 6bb0b39f85f..6c0b2145e25 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3str.dtx b/Master/texmf-dist/source/latex/l3kernel/l3str.dtx
index ed7e39d816a..c2498436cba 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3str.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3str.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
@@ -283,7 +283,10 @@
% \end{function}
%
% \begin{function}[added = 2013-07-24, updated = 2022-03-21, EXP, noTF]
-% {\str_case:nn, \str_case:Vn, \str_case:Nn, \str_case:on, \str_case:nV, \str_case:nv}
+% {
+% \str_case:nn, \str_case:Vn, \str_case:Nn, \str_case:on, \str_case:en,
+% \str_case:nV, \str_case:nv
+% }
% \begin{syntax}
% \cs{str_case:nnTF} \Arg{test string} \\
% ~~|{| \\
@@ -1228,7 +1231,10 @@
% \end{macro}
%
% \begin{macro}[EXP, noTF]
-% {\str_case:nn, \str_case:Vn, \str_case:Nn, \str_case:on, \str_case:nV, \str_case:nv, \str_case_e:nn}
+% {
+% \str_case:nn, \str_case:Vn, \str_case:Nn, \str_case:on, \str_case:en, \str_case:nV, \str_case:nv,
+% \str_case_e:nn
+% }
% \begin{macro}[EXP]{\@@_case:nnTF, \@@_case_e:nnTF}
% \begin{macro}[EXP]
% {\@@_case:nw, \@@_case_e:nw, \@@_case_end:nw}
@@ -1257,7 +1263,7 @@
}
\cs_new:Npn \@@_case:nnTF #1#2#3#4
{ \@@_case:nw {#1} #2 {#1} { } \s_@@_mark {#3} \s_@@_mark {#4} \s_@@_stop }
-\cs_generate_variant:Nn \str_case:nn { V , o , nV , nv }
+\cs_generate_variant:Nn \str_case:nn { V , o , e , nV , nv }
\prg_generate_conditional_variant:Nnn \str_case:nn
{ V , o , nV , nv } { T , F , TF }
\cs_new_eq:NN \str_case:Nn \str_case:Vn
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx b/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx
index 5ff23b47750..5717e60e731 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
@@ -79,6 +79,11 @@
% \end{texnote}
% \end{variable}
%
+% \begin{variable}[added = 2023-08-27]{\c_sys_timestamp_str}
+% The timestamp for the current job: the format is as described for
+% \cs{file_timestamp:n}.
+% \end{variable}
+%
% \section{Engine}
%
% \begin{function}[added = 2015-09-07, EXP, pTF]
@@ -928,6 +933,23 @@ end
% \end{macrocode}
% \end{variable}
%
+% \begin{variable}{\c_sys_timestamp_str}
+% A simple expansion: Lua\TeX{} chokes if we use \tn{pdffeedback} here,
+% hence the direct use of Lua. Notice that the function there is in the
+% \texttt{pdf} library but isn actually tied to PDF.
+% \begin{macrocode}
+\@@_everyjob:n
+ {
+ \str_const:Nx \c_sys_timestamp_str
+ {
+ \cs_if_exist:NTF \tex_directlua:D
+ { \tex_directlua:D { tex.print(pdf.getcreationdate()) } }
+ { \tex_creationdate:D }
+ }
+ }
+% \end{macrocode}
+% \end{variable}
+%
% \subsubsection{Random numbers}
%
% \begin{macro}[EXP]{\sys_rand_seed:}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx b/Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx
index 245ea5b4fad..07a79e2bb02 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3text-map.dtx b/Master/texmf-dist/source/latex/l3kernel/l3text-map.dtx
index 9d083adf04a..b2372d446f7 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3text-map.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3text-map.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3text-purify.dtx b/Master/texmf-dist/source/latex/l3kernel/l3text-purify.dtx
index 450c5b748f3..35d180d0421 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3text-purify.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3text-purify.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3text.dtx b/Master/texmf-dist/source/latex/l3kernel/l3text.dtx
index a946fad8451..016c5579a19 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3text.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3text.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx b/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx
index 1a484457db5..385b3db8ac6 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx b/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx
index 08ed9216efc..06226fd7bad 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
@@ -177,10 +177,10 @@
%
% \begin{function}
% {
-% \tl_put_left:Nn, \tl_put_left:NV, \tl_put_left:No, \tl_put_left:Nx,
-% \tl_put_left:cn, \tl_put_left:cV, \tl_put_left:co, \tl_put_left:cx,
-% \tl_gput_left:Nn, \tl_gput_left:NV, \tl_gput_left:No, \tl_gput_left:Nx,
-% \tl_gput_left:cn, \tl_gput_left:cV, \tl_gput_left:co, \tl_gput_left:cx
+% \tl_put_left:Nn, \tl_put_left:NV, \tl_put_left:Nv, \tl_put_left:No, \tl_put_left:Nx,
+% \tl_put_left:cn, \tl_put_left:cV, \tl_put_left:cv, \tl_put_left:co, \tl_put_left:cx,
+% \tl_gput_left:Nn, \tl_gput_left:NV, \tl_gput_left:Nv, \tl_gput_left:No, \tl_gput_left:Nx,
+% \tl_gput_left:cn, \tl_gput_left:cV, \tl_gput_left:cv, \tl_gput_left:co, \tl_gput_left:cx
% }
% \begin{syntax}
% \cs{tl_put_left:Nn} \meta{tl~var} \Arg{tokens}
@@ -191,12 +191,10 @@
%
% \begin{function}
% {
-% \tl_put_right:Nn, \tl_put_right:NV, \tl_put_right:No, \tl_put_right:Nx,
-% \tl_put_right:cn, \tl_put_right:cV, \tl_put_right:co, \tl_put_right:cx,
-% \tl_gput_right:Nn, \tl_gput_right:NV, \tl_gput_right:No,
-% \tl_gput_right:Nx,
-% \tl_gput_right:cn, \tl_gput_right:cV, \tl_gput_right:co,
-% \tl_gput_right:cx
+% \tl_put_right:Nn, \tl_put_right:NV, \tl_put_right:Nv, \tl_put_right:No, \tl_put_right:Nx,
+% \tl_put_right:cn, \tl_put_right:cV, \tl_put_right:cv, \tl_put_right:co, \tl_put_right:cx,
+% \tl_gput_right:Nn, \tl_gput_right:NV, \tl_gput_right:Nv, \tl_gput_right:No, \tl_gput_right:Nx,
+% \tl_gput_right:cn, \tl_gput_right:cV, \tl_gput_right:cv, \tl_gput_right:co, \tl_gput_right:cx
% }
% \begin{syntax}
% \cs{tl_put_right:Nn} \meta{tl~var} \Arg{tokens}
@@ -230,7 +228,7 @@
% \end{function}
%
% \begin{function}[added = 2012-05-24, updated = 2012-06-05, EXP,pTF]
-% {\tl_if_empty:n, \tl_if_empty:V, \tl_if_empty:o}
+% {\tl_if_empty:n, \tl_if_empty:V, \tl_if_empty:o, \tl_if_empty:e}
% \begin{syntax}
% \cs{tl_if_empty_p:n} \Arg{token list}
% \cs{tl_if_empty:nTF} \Arg{token list} \Arg{true code} \Arg{false code}
@@ -270,7 +268,8 @@
% category codes are not important.
% \end{function}
%
-% \begin{function}[TF]{\tl_if_eq:nn}
+% \begin{function}[TF]
+% {\tl_if_eq:nn, \tl_if_eq:Vn, \tl_if_eq:nV, \tl_if_eq:xn, \tl_if_eq:nx}
% \begin{syntax}
% \cs{tl_if_eq:nnTF} \Arg{token list_1} \Arg{token list_2} \Arg{true code} \Arg{false code}
% \end{syntax}
@@ -281,7 +280,7 @@
% or \cs{str_if_eq:nnTF} if category codes are not important.
% \end{function}
%
-% \begin{function}[TF]{\tl_if_in:Nn, \tl_if_in:cn}
+% \begin{function}[TF]{\tl_if_in:Nn, \tl_if_in:NV, \tl_if_in:cn, \tl_if_in:cV}
% \begin{syntax}
% \cs{tl_if_in:NnTF} \meta{tl~var} \Arg{token list} \Arg{true code} \Arg{false code}
% \end{syntax}
@@ -293,7 +292,7 @@
% \end{function}
%
% \begin{function}[TF]
-% {\tl_if_in:nn, \tl_if_in:Vn, \tl_if_in:on, \tl_if_in:no}
+% {\tl_if_in:nn, \tl_if_in:Vn, \tl_if_in:nV, \tl_if_in:on, \tl_if_in:no}
% \begin{syntax}
% \cs{tl_if_in:nnTF} \Arg{token list_1} \Arg{token list_2} \Arg{true code} \Arg{false code}
% \end{syntax}
@@ -438,7 +437,8 @@
%
% \subsection{Using token lists}
%
-% \begin{function}[EXP]{\tl_to_str:n, \tl_to_str:o, \tl_to_str:V, \tl_to_str:v}
+% \begin{function}[EXP]
+% {\tl_to_str:n, \tl_to_str:o, \tl_to_str:V, \tl_to_str:v, \tl_to_str:e}
% \begin{syntax}
% \cs{tl_to_str:n} \Arg{token list}
% \end{syntax}
@@ -536,7 +536,7 @@
% \end{function}
%
% \begin{function}[updated = 2012-01-08, EXP]
-% {\tl_reverse:n, \tl_reverse:V, \tl_reverse:o}
+% {\tl_reverse:n, \tl_reverse:V, \tl_reverse:o, \tl_reverse:f, \tl_reverse:e}
% \begin{syntax}
% \cs{tl_reverse:n} \Arg{token list}
% \end{syntax}
@@ -1073,10 +1073,14 @@
%
% \begin{function}[updated = 2011-08-11]
% {
-% \tl_replace_once:Nnn, \tl_replace_once:Nxx,
-% \tl_replace_once:cnn, \tl_replace_once:cxx,
-% \tl_greplace_once:Nnn, \tl_greplace_once:Nxx
-% \tl_greplace_once:cnn, \tl_greplace_once:cxx
+% \tl_replace_once:Nnn, \tl_replace_once:NVn, \tl_replace_once:NnV,
+% \tl_replace_once:Nxn, \tl_replace_once:Nnx, \tl_replace_once:Nxx,
+% \tl_replace_once:cnn, \tl_replace_once:cVn, \tl_replace_once:cnV,
+% \tl_replace_once:cxn, \tl_replace_once:cnx, \tl_replace_once:cxx,
+% \tl_greplace_once:Nnn, \tl_greplace_once:NVn, \tl_rgeplace_once:NnV,
+% \tl_greplace_once:Nxn, \tl_greplace_once:Nnx, \tl_greplace_once:Nxx,
+% \tl_greplace_once:cnn, \tl_greplace_once:cVn, \tl_greplace_once:cnV,
+% \tl_greplace_once:cxn, \tl_greplace_once:cnx, \tl_greplace_once:cxx
% }
% \begin{syntax}
% \cs{tl_replace_once:Nnn} \meta{tl~var} \Arg{old tokens} \Arg{new tokens}
@@ -1090,10 +1094,14 @@
%
% \begin{function}[updated = 2011-08-11]
% {
-% \tl_replace_all:Nnn, \tl_replace_all:Nxx,
-% \tl_replace_all:cnn, \tl_replace_all:cxx
-% \tl_greplace_all:Nnn, \tl_greplace_all:Nxx,
-% \tl_greplace_all:cnn, \tl_greplace_all:cxx
+% \tl_replace_all:Nnn, \tl_replace_all:NVn, \tl_replace_all:NnV,
+% \tl_replace_all:Nxn, \tl_replace_all:Nnx, \tl_replace_all:Nxx,
+% \tl_replace_all:cnn, \tl_replace_all:cVn, \tl_replace_all:cnV,
+% \tl_replace_all:cxn, \tl_replace_all:cnx, \tl_replace_all:cxx,
+% \tl_greplace_all:Nnn, \tl_greplace_all:NVn, \tl_greplace_all:cnV,
+% \tl_greplace_all:Nxn, \tl_greplace_all:Nnx, \tl_greplace_all:Nxx,
+% \tl_greplace_all:cnn, \tl_greplace_all:cVn, \tl_greplace_all:cnV,
+% \tl_greplace_all:cxn, \tl_greplace_all:cnx, \tl_greplace_all:cxx
% }
% \begin{syntax}
% \cs{tl_replace_all:Nnn} \meta{tl~var} \Arg{old tokens} \Arg{new tokens}
@@ -1111,10 +1119,10 @@
%
% \begin{function}[updated = 2011-08-11]
% {
-% \tl_remove_once:Nn, \tl_remove_once:Nx,
-% \tl_remove_once:cn, \tl_remove_once:cx,
-% \tl_gremove_once:Nn, \tl_gremove_once:Nx
-% \tl_gremove_once:cn, \tl_gremove_once:cx
+% \tl_remove_once:Nn, \tl_remove_once:NV, \tl_remove_once:Nx,
+% \tl_remove_once:cn, \tl_remove_once:cV, \tl_remove_once:cx,
+% \tl_gremove_once:Nn, \tl_gremove_once:NV, \tl_gremove_once:Nx
+% \tl_gremove_once:cn, \tl_gremove_once:cV, \tl_gremove_once:cx
% }
% \begin{syntax}
% \cs{tl_remove_once:Nn} \meta{tl~var} \Arg{tokens}
@@ -1127,10 +1135,10 @@
%
% \begin{function}[updated = 2011-08-11]
% {
-% \tl_remove_all:Nn, \tl_remove_all:Nx,
-% \tl_remove_all:cn, \tl_remove_all:cx,
-% \tl_gremove_all:Nn, \tl_gremove_all:Nx
-% \tl_gremove_all:cn, \tl_gremove_all:cx
+% \tl_remove_all:Nn, \tl_remove_all:NV, \tl_remove_all:Nx,
+% \tl_remove_all:cn, \tl_remove_all:cV, \tl_remove_all:cx,
+% \tl_gremove_all:Nn, \tl_gremove_all:NV, \tl_gremove_all:Nx
+% \tl_gremove_all:cn, \tl_gremove_all:cV, \tl_gremove_all:cx
% }
% \begin{syntax}
% \cs{tl_remove_all:Nn} \meta{tl~var} \Arg{tokens}
@@ -1161,10 +1169,10 @@
%
% \begin{function}[updated = 2015-08-11]
% {
-% \tl_set_rescan:Nnn, \tl_set_rescan:Nno, \tl_set_rescan:Nnx,
-% \tl_set_rescan:cnn, \tl_set_rescan:cno, \tl_set_rescan:cnx,
-% \tl_gset_rescan:Nnn, \tl_gset_rescan:Nno, \tl_gset_rescan:Nnx,
-% \tl_gset_rescan:cnn, \tl_gset_rescan:cno, \tl_gset_rescan:cnx
+% \tl_set_rescan:Nnn, \tl_set_rescan:NnV, \tl_set_rescan:Nno, \tl_set_rescan:Nnx,
+% \tl_set_rescan:cnn, \tl_set_rescan:cnV, \tl_set_rescan:cno, \tl_set_rescan:cnx,
+% \tl_gset_rescan:Nnn, \tl_gset_rescan:NnV, \tl_gset_rescan:Nno, \tl_gset_rescan:Nnx,
+% \tl_gset_rescan:cnn, \tl_gset_rescan:cnV, \tl_gset_rescan:cno, \tl_gset_rescan:cnx
% }
% \begin{syntax}
% \cs{tl_set_rescan:Nnn} \meta{tl~var} \Arg{setup} \Arg{tokens}
@@ -1488,13 +1496,13 @@
%
% \begin{macro}
% {
-% \tl_put_left:Nn, \tl_put_left:NV, \tl_put_left:No, \tl_put_left:Nx,
-% \tl_put_left:cn, \tl_put_left:cV, \tl_put_left:co, \tl_put_left:cx
+% \tl_put_left:Nn, \tl_put_left:NV, \tl_put_left:Nv, \tl_put_left:No, \tl_put_left:Nx,
+% \tl_put_left:cn, \tl_put_left:cV, \tl_put_left:cv, \tl_put_left:co, \tl_put_left:cx
% }
% \begin{macro}
% {
-% \tl_gput_left:Nn, \tl_gput_left:NV, \tl_gput_left:No, \tl_gput_left:Nx,
-% \tl_gput_left:cn, \tl_gput_left:cV, \tl_gput_left:co, \tl_gput_left:cx
+% \tl_gput_left:Nn, \tl_gput_left:NV, \tl_gput_left:Nv, \tl_gput_left:No, \tl_gput_left:Nx,
+% \tl_gput_left:cn, \tl_gput_left:cV, \tl_gput_left:cv, \tl_gput_left:co, \tl_gput_left:cx
% }
% Adding to the left is done directly to gain a little performance.
% \begin{macrocode}
@@ -1508,6 +1516,11 @@
\__kernel_tl_set:Nx #1
{ \exp_not:V #2 \__kernel_exp_not:w \exp_after:wN {#1} }
}
+\cs_new_protected:Npn \tl_put_left:Nv #1#2
+ {
+ \__kernel_tl_set:Nx #1
+ { \exp_not:v {#2} \__kernel_exp_not:w \exp_after:wN {#1} }
+ }
\cs_new_protected:Npn \tl_put_left:No #1#2
{
\__kernel_tl_set:Nx #1
@@ -1528,6 +1541,11 @@
\__kernel_tl_gset:Nx #1
{ \exp_not:V #2 \__kernel_exp_not:w \exp_after:wN {#1} }
}
+\cs_new_protected:Npn \tl_gput_left:Nv #1#2
+ {
+ \__kernel_tl_gset:Nx #1
+ { \exp_not:v {#2} \__kernel_exp_not:w \exp_after:wN {#1} }
+ }
\cs_new_protected:Npn \tl_gput_left:No #1#2
{
\__kernel_tl_gset:Nx #1
@@ -1540,10 +1558,12 @@
{ \__kernel_tl_gset:Nx #1 { #2 \__kernel_exp_not:w \exp_after:wN {#1} } }
\cs_generate_variant:Nn \tl_put_left:Nn { c }
\cs_generate_variant:Nn \tl_put_left:NV { c }
+\cs_generate_variant:Nn \tl_put_left:Nv { c }
\cs_generate_variant:Nn \tl_put_left:No { c }
\cs_generate_variant:Nn \tl_put_left:Nx { c }
\cs_generate_variant:Nn \tl_gput_left:Nn { c }
\cs_generate_variant:Nn \tl_gput_left:NV { c }
+\cs_generate_variant:Nn \tl_gput_left:NV { c }
\cs_generate_variant:Nn \tl_gput_left:No { c }
\cs_generate_variant:Nn \tl_gput_left:Nx { c }
% \end{macrocode}
@@ -1552,14 +1572,14 @@
%
% \begin{macro}
% {
-% \tl_put_right:Nn, \tl_put_right:NV, \tl_put_right:No, \tl_put_right:Nx,
-% \tl_put_right:cn, \tl_put_right:cV, \tl_put_right:co, \tl_put_right:cx
+% \tl_put_right:Nn, \tl_put_right:NV, \tl_put_right:Nv, \tl_put_right:No, \tl_put_right:Nx,
+% \tl_put_right:cn, \tl_put_right:cV, \tl_put_right:cv, \tl_put_right:co, \tl_put_right:cx
% }
% \begin{macro}
% {
-% \tl_gput_right:Nn, \tl_gput_right:NV, \tl_gput_right:No,
+% \tl_gput_right:Nn, \tl_gput_right:NV, \tl_gput_right:Nv, \tl_gput_right:No,
% \tl_gput_right:Nx,
-% \tl_gput_right:cn, \tl_gput_right:cV, \tl_gput_right:co,
+% \tl_gput_right:cn, \tl_gput_right:cV, \tl_gput_right:cv, \tl_gput_right:co,
% \tl_gput_right:cx
% }
% The same on the right.
@@ -1571,6 +1591,11 @@
\__kernel_tl_set:Nx #1
{ \__kernel_exp_not:w \exp_after:wN {#1} \exp_not:V #2 }
}
+\cs_new_protected:Npn \tl_put_right:Nv #1#2
+ {
+ \__kernel_tl_set:Nx #1
+ { \__kernel_exp_not:w \exp_after:wN {#1} \exp_not:v {#2} }
+ }
\cs_new_protected:Npn \tl_put_right:No #1#2
{
\__kernel_tl_set:Nx #1
@@ -1588,6 +1613,11 @@
\__kernel_tl_gset:Nx #1
{ \__kernel_exp_not:w \exp_after:wN {#1} \exp_not:V #2 }
}
+\cs_new_protected:Npn \tl_gput_right:Nv #1#2
+ {
+ \__kernel_tl_gset:Nx #1
+ { \__kernel_exp_not:w \exp_after:wN {#1} \exp_not:v {#2} }
+ }
\cs_new_protected:Npn \tl_gput_right:No #1#2
{
\__kernel_tl_gset:Nx #1
@@ -1600,10 +1630,12 @@
{ \__kernel_tl_gset:Nx #1 { \__kernel_exp_not:w \exp_after:wN {#1} #2 } }
\cs_generate_variant:Nn \tl_put_right:Nn { c }
\cs_generate_variant:Nn \tl_put_right:NV { c }
+\cs_generate_variant:Nn \tl_put_right:Nv { c }
\cs_generate_variant:Nn \tl_put_right:No { c }
\cs_generate_variant:Nn \tl_put_right:Nx { c }
\cs_generate_variant:Nn \tl_gput_right:Nn { c }
\cs_generate_variant:Nn \tl_gput_right:NV { c }
+\cs_generate_variant:Nn \tl_gput_right:Nv { c }
\cs_generate_variant:Nn \tl_gput_right:No { c }
\cs_generate_variant:Nn \tl_gput_right:Nx { c }
% \end{macrocode}
@@ -1653,13 +1685,13 @@
%
% \begin{macro}
% {
-% \tl_set_rescan:Nnn, \tl_set_rescan:Nno, \tl_set_rescan:Nnx,
-% \tl_set_rescan:cnn, \tl_set_rescan:cno, \tl_set_rescan:cnx
+% \tl_set_rescan:Nnn, \tl_set_rescan:NnV, \tl_set_rescan:Nno, \tl_set_rescan:Nnx,
+% \tl_set_rescan:cnn, \tl_set_rescan:cnV, \tl_set_rescan:cno, \tl_set_rescan:cnx
% }
% \begin{macro}
% {
-% \tl_gset_rescan:Nnn, \tl_gset_rescan:Nno, \tl_gset_rescan:Nnx,
-% \tl_gset_rescan:cnn, \tl_gset_rescan:cno, \tl_gset_rescan:cnx
+% \tl_gset_rescan:Nnn, \tl_gset_rescan:NnV, \tl_gset_rescan:Nno, \tl_gset_rescan:Nnx,
+% \tl_gset_rescan:cnn, \tl_gset_rescan:cnV, \tl_gset_rescan:cno, \tl_gset_rescan:cnx
% }
% \begin{macro}{\tl_rescan:nn, \tl_rescan:nV}
% \begin{macro}{\@@_rescan_aux:}
@@ -1758,10 +1790,10 @@
\group_end:
#1 #2 {#3}
}
-\cs_generate_variant:Nn \tl_set_rescan:Nnn { Nno , Nnx }
-\cs_generate_variant:Nn \tl_set_rescan:Nnn { c , cno , cnx }
-\cs_generate_variant:Nn \tl_gset_rescan:Nnn { Nno , Nnx }
-\cs_generate_variant:Nn \tl_gset_rescan:Nnn { c , cno }
+\cs_generate_variant:Nn \tl_set_rescan:Nnn { NnV , Nno , Nnx }
+\cs_generate_variant:Nn \tl_set_rescan:Nnn { c , cnV , cno , cnx }
+\cs_generate_variant:Nn \tl_gset_rescan:Nnn { NnV , Nno , Nnx }
+\cs_generate_variant:Nn \tl_gset_rescan:Nnn { c , cnV , cno , cnx }
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -1879,10 +1911,34 @@
%
% \subsection{Modifying token list variables}
%
-% \begin{macro}{\tl_replace_all:Nnn, \tl_replace_all:cnn}
-% \begin{macro}{\tl_greplace_all:Nnn, \tl_greplace_all:cnn}
-% \begin{macro}{\tl_replace_once:Nnn, \tl_replace_once:cnn}
-% \begin{macro}{\tl_greplace_once:Nnn, \tl_greplace_once:cnn}
+% \begin{macro}
+% {
+% \tl_replace_all:Nnn, \tl_replace_all:NVn, \tl_replace_all:NnV,
+% \tl_replace_all:Nxn, \tl_replace_all:Nnx, \tl_replace_all:Nxx,
+% \tl_replace_all:cnn, \tl_replace_all:cVn, \tl_replace_all:cnV,
+% \tl_replace_all:cxn, \tl_replace_all:cnx, \tl_replace_all:cxx
+% }
+% \begin{macro}
+% {
+% \tl_greplace_all:Nnn, \tl_greplace_all:NVn, \tl_greplace_all:NnV,
+% \tl_greplace_all:Nxn, \tl_greplace_all:Nnx, \tl_greplace_all:Nxx,
+% \tl_greplace_all:cnn, \tl_greplace_all:cVn, \tl_greplace_all:cnV,
+% \tl_greplace_all:cxn, \tl_greplace_all:cnx, \tl_greplace_all:cxx
+% }
+% \begin{macro}
+% {
+% \tl_replace_once:Nnn, \tl_replace_once:NVn, \tl_replace_once:NnV,
+% \tl_replace_once:Nxn, \tl_replace_once:Nnx, \tl_replace_once:Nxx,
+% \tl_replace_once:cnn, \tl_replace_once:cVn, \tl_replace_once:cnV,
+% \tl_replace_once:cxn, \tl_replace_once:cnx, \tl_replace_once:cxx
+% }
+% \begin{macro}
+% {
+% \tl_greplace_once:Nnn, \tl_greplace_once:NVn, \tl_replace_once:NnV,
+% \tl_greplace_once:Nxn, \tl_greplace_once:Nnx, \tl_greplace_once:Nxx,
+% \tl_greplace_once:cnn, \tl_greplace_once:cVn, \tl_replace_once:cnV,
+% \tl_greplace_once:cxn, \tl_greplace_once:cnx, \tl_greplace_once:cxx
+% }
% All of the \texttt{replace} functions call \cs{@@_replace:NnNNNnn}
% with appropriate arguments. The first two arguments are explained
% later. The next controls whether the replacement function calls
@@ -1902,10 +1958,14 @@
{ \@@_replace:NnNNNnn \q_@@_mark ? \@@_replace_next:w \__kernel_tl_set:Nx }
\cs_new_protected:Npn \tl_greplace_all:Nnn
{ \@@_replace:NnNNNnn \q_@@_mark ? \@@_replace_next:w \__kernel_tl_gset:Nx }
-\cs_generate_variant:Nn \tl_replace_once:Nnn { Nxx , c , cxx }
-\cs_generate_variant:Nn \tl_greplace_once:Nnn { Nxx , c , cxx }
-\cs_generate_variant:Nn \tl_replace_all:Nnn { Nxx , c , cxx }
-\cs_generate_variant:Nn \tl_greplace_all:Nnn { Nxx , c , cxx }
+\cs_generate_variant:Nn \tl_replace_once:Nnn
+ { NV , NnV , Nx , Nnx , Nxx , c , cV , cnV , cx , cnx , cxx }
+\cs_generate_variant:Nn \tl_greplace_once:Nnn
+ { NV , NnV , Nx , Nnx , Nxx , c , cV , cnV , cx , cnx , cxx }
+\cs_generate_variant:Nn \tl_replace_all:Nnn
+ { NV , NnV , Nx , Nnx , Nxx , c , cV , cnV , cx , cnx , cxx }
+\cs_generate_variant:Nn \tl_greplace_all:Nnn
+ { NV , NnV , Nx , Nnx , Nxx , c , cV , cnV , cx , cnx , cxx }
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -2090,30 +2150,46 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\tl_remove_once:Nn, \tl_remove_once:cn}
-% \begin{macro}{\tl_gremove_once:Nn, \tl_gremove_once:cn}
+% \begin{macro}
+% {
+% \tl_remove_once:Nn, \tl_remove_once:NV, \tl_remove_once:Nx,
+% \tl_remove_once:cn, \tl_remove_once:cV, \tl_remove_once:cx
+% }
+% \begin{macro}
+% {
+% \tl_gremove_once:Nn, \tl_gremove_once:NV, \tl_gremove_once:Nx,
+% \tl_gremove_once:cn, \tl_gremove_once:cV, \tl_gremove_once:cx
+% }
% Removal is just a special case of replacement.
% \begin{macrocode}
\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
{ \tl_greplace_once:Nnn #1 {#2} { } }
-\cs_generate_variant:Nn \tl_remove_once:Nn { Nx , c , cx }
-\cs_generate_variant:Nn \tl_gremove_once:Nn { Nx , c , cx }
+\cs_generate_variant:Nn \tl_remove_once:Nn { NV , Nx , c , cV , cx }
+\cs_generate_variant:Nn \tl_gremove_once:Nn { NV , Nx , c , cV , cx }
% \end{macrocode}
% \end{macro}
% \end{macro}
%
-% \begin{macro}{\tl_remove_all:Nn, \tl_remove_all:cn}
-% \begin{macro}{\tl_gremove_all:Nn, \tl_gremove_all:cn}
+% \begin{macro}
+% {
+% \tl_remove_all:Nn, \tl_remove_all:NV, \tl_remove_all:Nx,
+% \tl_remove_all:cn, \tl_remove_all:cV, \tl_remove_all:cx
+% }
+% \begin{macro}
+% {
+% \tl_gremove_all:Nn, \tl_gremove_all:NV, \tl_gremove_all:Nx,
+% \tl_gremove_all:cn, \tl_gremove_all:cV, \tl_gremove_all:cx
+% }
% Removal is just a special case of replacement.
% \begin{macrocode}
\cs_new_protected:Npn \tl_remove_all:Nn #1#2
{ \tl_replace_all:Nnn #1 {#2} { } }
\cs_new_protected:Npn \tl_gremove_all:Nn #1#2
{ \tl_greplace_all:Nnn #1 {#2} { } }
-\cs_generate_variant:Nn \tl_remove_all:Nn { Nx , c , cx }
-\cs_generate_variant:Nn \tl_gremove_all:Nn { Nx , c , cx }
+\cs_generate_variant:Nn \tl_remove_all:Nn { NV , Nx , c , cV , cx }
+\cs_generate_variant:Nn \tl_gremove_all:Nn { NV , Nx , c , cV , cx }
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -2137,7 +2213,7 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[pTF]{\tl_if_empty:n, \tl_if_empty:V}
+% \begin{macro}[pTF]{\tl_if_empty:n, \tl_if_empty:V, \tl_if_empty:e}
% The \cs{if:w} triggers the expansion of \cs{tl_to_str:n} which converts the
% argument to a string: this is empty if and only if the argument is. Then
% |\if:w \scan_stop: ... \scan_stop:| is \texttt{true} if and only if the
@@ -2155,7 +2231,7 @@
\fi:
}
\prg_generate_conditional_variant:Nnn \tl_if_empty:n
- { V } { p , TF , T , F }
+ { V , e } { p , TF , T , F }
% \end{macrocode}
% \end{macro}
%
@@ -2252,7 +2328,7 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[TF]{\tl_if_eq:nn}
+% \begin{macro}[TF]{\tl_if_eq:nn, \tl_if_eq:Vn, \tl_if_eq:nV, \tl_if_eq:xn, \tl_if_eq:nx}
% A simple store and compare routine.
% \begin{macrocode}
\prg_new_protected_conditional:Npnn \tl_if_eq:nn #1#2 { T , F , TF }
@@ -2268,10 +2344,11 @@
\prg_return_false:
\fi:
}
+\prg_generate_conditional_variant:Nnn \tl_if_eq:nn { V , nV , x , nx } { TF , T , F }
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[TF]{\tl_if_in:Nn, \tl_if_in:cn}
+% \begin{macro}[TF]{\tl_if_in:Nn, \tl_if_in:NV, \tl_if_in:cn, \tl_if_in:cV}
% See \cs{tl_if_in:nnTF} for further comments. Here we simply
% expand the token list variable and pass it to \cs{tl_if_in:nnTF}.
% \begin{macrocode}
@@ -2279,11 +2356,11 @@
\cs_new_protected:Npn \tl_if_in:NnF { \exp_args:No \tl_if_in:nnF }
\cs_new_protected:Npn \tl_if_in:NnTF { \exp_args:No \tl_if_in:nnTF }
\prg_generate_conditional_variant:Nnn \tl_if_in:Nn
- { c } { T , F , TF }
+ { NV , c , cV } { T , F , TF }
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[TF]{\tl_if_in:nn, \tl_if_in:Vn, \tl_if_in:on, \tl_if_in:no}
+% \begin{macro}[TF]{\tl_if_in:nn, \tl_if_in:Vn, \tl_if_in:on, \tl_if_in:nV, \tl_if_in:no}
% Once more, the test relies on the emptiness test for robustness.
% The function \cs{@@_tmp:w} removes tokens until the first occurrence
% of |#2|. If this does not appear in |#1|, then the final |#2| is removed,
@@ -2313,7 +2390,7 @@
\if_false: } \fi:
}
\prg_generate_conditional_variant:Nnn \tl_if_in:nn
- { V , o , no } { T , F , TF }
+ { V , o , nV , no } { T , F , TF }
% \end{macrocode}
% \end{macro}
%
@@ -2557,10 +2634,10 @@
%
% \subsection{Using token lists}
%
-% \begin{macro}{\tl_to_str:n, \tl_to_str:o, \tl_to_str:V, \tl_to_str:v}
+% \begin{macro}{\tl_to_str:n, \tl_to_str:o, \tl_to_str:V, \tl_to_str:v, \tl_to_str:e}
% Another name for a primitive: defined in \pkg{l3basics}.
% \begin{macrocode}
-\cs_generate_variant:Nn \tl_to_str:n { o , V , v }
+\cs_generate_variant:Nn \tl_to_str:n { o , V , v , e }
% \end{macrocode}
% \end{macro}
%
@@ -3228,7 +3305,8 @@
% \end{macro}
% \end{macro}
%
-% \begin{macro}[EXP]{\tl_reverse:n, \tl_reverse:o, \tl_reverse:V}
+% \begin{macro}[EXP]
+% {\tl_reverse:n, \tl_reverse:o, \tl_reverse:V, \tl_reverse:f, \tl_reverse:e}
% \begin{macro}[EXP]{\@@_reverse_normal:nN}
% \begin{macro}[EXP]{\@@_reverse_group_preserve:nn}
% \begin{macro}[EXP]{\@@_reverse_space:n}
@@ -3250,7 +3328,7 @@
{#1}
}
}
-\cs_generate_variant:Nn \tl_reverse:n { o , V }
+\cs_generate_variant:Nn \tl_reverse:n { o , V , f , e }
\cs_new:Npn \@@_reverse_normal:N
{ \@@_act_reverse_output:n }
\cs_new:Npn \@@_reverse_group_preserve:n #1
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3token.dtx b/Master/texmf-dist/source/latex/l3kernel/l3token.dtx
index 832205cd70d..ce274f9583d 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3token.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3token.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
@@ -1603,6 +1603,7 @@
\tl_put_right:Nn \l_@@_tmp_tl { ^^@ \exp_not:N \or: }
\char_set_catcode_letter:n { 0 }
\tl_put_right:Nn \l_@@_tmp_tl { ^^@ \exp_not:N \or: }
+% \end{macrocode}
% For making spaces, there needs to be an |o|-type expansion of a |\use:n|
% (or some other tokenization) to avoid dropping the space.
% \begin{macrocode}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx b/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx
index dc95aad698d..f79fc63e5a3 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2023-08-11}
+% \date{Released 2023-08-29}
%
% \maketitle
%
diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex b/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex
index 85a3014e8c4..ac67d0b7f43 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex
+++ b/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex
@@ -71,7 +71,7 @@
%% and all files in that bundle must be distributed together.
%%
%% File: expl3.dtx
-\def\ExplFileDate{2023-08-11}%
+\def\ExplFileDate{2023-08-29}%
\begingroup
\def\next{\endgroup}%
\expandafter\ifx\csname PackageError\endcsname\relax
@@ -665,7 +665,6 @@ Type H <return> for immediate help}\def~{\errmessage{%
\__kernel_primitive:NN \pdfcompresslevel \tex_pdfcompresslevel:D
\__kernel_primitive:NN \pdfcolorstack \tex_pdfcolorstack:D
\__kernel_primitive:NN \pdfcolorstackinit \tex_pdfcolorstackinit:D
- \__kernel_primitive:NN \pdfcreationdate \tex_pdfcreationdate:D
\__kernel_primitive:NN \pdfdecimaldigits \tex_pdfdecimaldigits:D
\__kernel_primitive:NN \pdfdest \tex_pdfdest:D
\__kernel_primitive:NN \pdfdestmargin \tex_pdfdestmargin:D
@@ -754,6 +753,7 @@ Type H <return> for immediate help}\def~{\errmessage{%
\__kernel_primitive:NN \pdfadjustspacing \tex_adjustspacing:D
\__kernel_primitive:NN \pdfappendkern \tex_appendkern:D
\__kernel_primitive:NN \pdfcopyfont \tex_copyfont:D
+ \__kernel_primitive:NN \pdfcreationdate \tex_creationdate:D
\__kernel_primitive:NN \pdfdraftmode \tex_draftmode:D
\__kernel_primitive:NN \pdfeachlinedepth \tex_eachlinedepth:D
\__kernel_primitive:NN \pdfeachlineheight \tex_eachlineheight:D
@@ -3424,6 +3424,11 @@ Type H <return> for immediate help}\def~{\errmessage{%
\__kernel_tl_set:Nx #1
{ \exp_not:V #2 \__kernel_exp_not:w \exp_after:wN {#1} }
}
+\cs_new_protected:Npn \tl_put_left:Nv #1#2
+ {
+ \__kernel_tl_set:Nx #1
+ { \exp_not:v {#2} \__kernel_exp_not:w \exp_after:wN {#1} }
+ }
\cs_new_protected:Npn \tl_put_left:No #1#2
{
\__kernel_tl_set:Nx #1
@@ -3444,6 +3449,11 @@ Type H <return> for immediate help}\def~{\errmessage{%
\__kernel_tl_gset:Nx #1
{ \exp_not:V #2 \__kernel_exp_not:w \exp_after:wN {#1} }
}
+\cs_new_protected:Npn \tl_gput_left:Nv #1#2
+ {
+ \__kernel_tl_gset:Nx #1
+ { \exp_not:v {#2} \__kernel_exp_not:w \exp_after:wN {#1} }
+ }
\cs_new_protected:Npn \tl_gput_left:No #1#2
{
\__kernel_tl_gset:Nx #1
@@ -3456,10 +3466,12 @@ Type H <return> for immediate help}\def~{\errmessage{%
{ \__kernel_tl_gset:Nx #1 { #2 \__kernel_exp_not:w \exp_after:wN {#1} } }
\cs_generate_variant:Nn \tl_put_left:Nn { c }
\cs_generate_variant:Nn \tl_put_left:NV { c }
+\cs_generate_variant:Nn \tl_put_left:Nv { c }
\cs_generate_variant:Nn \tl_put_left:No { c }
\cs_generate_variant:Nn \tl_put_left:Nx { c }
\cs_generate_variant:Nn \tl_gput_left:Nn { c }
\cs_generate_variant:Nn \tl_gput_left:NV { c }
+\cs_generate_variant:Nn \tl_gput_left:NV { c }
\cs_generate_variant:Nn \tl_gput_left:No { c }
\cs_generate_variant:Nn \tl_gput_left:Nx { c }
\cs_new_protected:Npn \tl_put_right:Nn #1#2
@@ -3469,6 +3481,11 @@ Type H <return> for immediate help}\def~{\errmessage{%
\__kernel_tl_set:Nx #1
{ \__kernel_exp_not:w \exp_after:wN {#1} \exp_not:V #2 }
}
+\cs_new_protected:Npn \tl_put_right:Nv #1#2
+ {
+ \__kernel_tl_set:Nx #1
+ { \__kernel_exp_not:w \exp_after:wN {#1} \exp_not:v {#2} }
+ }
\cs_new_protected:Npn \tl_put_right:No #1#2
{
\__kernel_tl_set:Nx #1
@@ -3486,6 +3503,11 @@ Type H <return> for immediate help}\def~{\errmessage{%
\__kernel_tl_gset:Nx #1
{ \__kernel_exp_not:w \exp_after:wN {#1} \exp_not:V #2 }
}
+\cs_new_protected:Npn \tl_gput_right:Nv #1#2
+ {
+ \__kernel_tl_gset:Nx #1
+ { \__kernel_exp_not:w \exp_after:wN {#1} \exp_not:v {#2} }
+ }
\cs_new_protected:Npn \tl_gput_right:No #1#2
{
\__kernel_tl_gset:Nx #1
@@ -3498,10 +3520,12 @@ Type H <return> for immediate help}\def~{\errmessage{%
{ \__kernel_tl_gset:Nx #1 { \__kernel_exp_not:w \exp_after:wN {#1} #2 } }
\cs_generate_variant:Nn \tl_put_right:Nn { c }
\cs_generate_variant:Nn \tl_put_right:NV { c }
+\cs_generate_variant:Nn \tl_put_right:Nv { c }
\cs_generate_variant:Nn \tl_put_right:No { c }
\cs_generate_variant:Nn \tl_put_right:Nx { c }
\cs_generate_variant:Nn \tl_gput_right:Nn { c }
\cs_generate_variant:Nn \tl_gput_right:NV { c }
+\cs_generate_variant:Nn \tl_gput_right:Nv { c }
\cs_generate_variant:Nn \tl_gput_right:No { c }
\cs_generate_variant:Nn \tl_gput_right:Nx { c }
\quark_new:N \q__tl_nil
@@ -3552,10 +3576,10 @@ Type H <return> for immediate help}\def~{\errmessage{%
\group_end:
#1 #2 {#3}
}
-\cs_generate_variant:Nn \tl_set_rescan:Nnn { Nno , Nnx }
-\cs_generate_variant:Nn \tl_set_rescan:Nnn { c , cno , cnx }
-\cs_generate_variant:Nn \tl_gset_rescan:Nnn { Nno , Nnx }
-\cs_generate_variant:Nn \tl_gset_rescan:Nnn { c , cno }
+\cs_generate_variant:Nn \tl_set_rescan:Nnn { NnV , Nno , Nnx }
+\cs_generate_variant:Nn \tl_set_rescan:Nnn { c , cnV , cno , cnx }
+\cs_generate_variant:Nn \tl_gset_rescan:Nnn { NnV , Nno , Nnx }
+\cs_generate_variant:Nn \tl_gset_rescan:Nnn { c , cnV , cno , cnx }
\cs_new_protected:Npn \__tl_set_rescan:nNN #1
{
\int_compare:nNnTF \tex_newlinechar:D < 0
@@ -3619,10 +3643,14 @@ Type H <return> for immediate help}\def~{\errmessage{%
{ \__tl_replace:NnNNNnn \q__tl_mark ? \__tl_replace_next:w \__kernel_tl_set:Nx }
\cs_new_protected:Npn \tl_greplace_all:Nnn
{ \__tl_replace:NnNNNnn \q__tl_mark ? \__tl_replace_next:w \__kernel_tl_gset:Nx }
-\cs_generate_variant:Nn \tl_replace_once:Nnn { Nxx , c , cxx }
-\cs_generate_variant:Nn \tl_greplace_once:Nnn { Nxx , c , cxx }
-\cs_generate_variant:Nn \tl_replace_all:Nnn { Nxx , c , cxx }
-\cs_generate_variant:Nn \tl_greplace_all:Nnn { Nxx , c , cxx }
+\cs_generate_variant:Nn \tl_replace_once:Nnn
+ { NV , NnV , Nx , Nnx , Nxx , c , cV , cnV , cx , cnx , cxx }
+\cs_generate_variant:Nn \tl_greplace_once:Nnn
+ { NV , NnV , Nx , Nnx , Nxx , c , cV , cnV , cx , cnx , cxx }
+\cs_generate_variant:Nn \tl_replace_all:Nnn
+ { NV , NnV , Nx , Nnx , Nxx , c , cV , cnV , cx , cnx , cxx }
+\cs_generate_variant:Nn \tl_greplace_all:Nnn
+ { NV , NnV , Nx , Nnx , Nxx , c , cV , cnV , cx , cnx , cxx }
\cs_new_protected:Npn \__tl_replace:NnNNNnn #1#2#3#4#5#6#7
{
\tl_if_empty:nTF {#6}
@@ -3683,14 +3711,14 @@ Type H <return> for immediate help}\def~{\errmessage{%
{ \tl_replace_once:Nnn #1 {#2} { } }
\cs_new_protected:Npn \tl_gremove_once:Nn #1#2
{ \tl_greplace_once:Nnn #1 {#2} { } }
-\cs_generate_variant:Nn \tl_remove_once:Nn { Nx , c , cx }
-\cs_generate_variant:Nn \tl_gremove_once:Nn { Nx , c , cx }
+\cs_generate_variant:Nn \tl_remove_once:Nn { NV , Nx , c , cV , cx }
+\cs_generate_variant:Nn \tl_gremove_once:Nn { NV , Nx , c , cV , cx }
\cs_new_protected:Npn \tl_remove_all:Nn #1#2
{ \tl_replace_all:Nnn #1 {#2} { } }
\cs_new_protected:Npn \tl_gremove_all:Nn #1#2
{ \tl_greplace_all:Nnn #1 {#2} { } }
-\cs_generate_variant:Nn \tl_remove_all:Nn { Nx , c , cx }
-\cs_generate_variant:Nn \tl_gremove_all:Nn { Nx , c , cx }
+\cs_generate_variant:Nn \tl_remove_all:Nn { NV , Nx , c , cV , cx }
+\cs_generate_variant:Nn \tl_gremove_all:Nn { NV , Nx , c , cV , cx }
\prg_new_conditional:Npnn \tl_if_empty:N #1 { p , T , F , TF }
{
\if_meaning:w #1 \c_empty_tl
@@ -3710,7 +3738,7 @@ Type H <return> for immediate help}\def~{\errmessage{%
\fi:
}
\prg_generate_conditional_variant:Nnn \tl_if_empty:n
- { V } { p , TF , T , F }
+ { V , e } { p , TF , T , F }
\cs_new:Npn \__tl_if_empty_if:o #1
{
\if:w \scan_stop: \__kernel_tl_to_str:w \exp_after:wN {#1} \scan_stop:
@@ -3766,11 +3794,12 @@ Type H <return> for immediate help}\def~{\errmessage{%
\prg_return_false:
\fi:
}
+\prg_generate_conditional_variant:Nnn \tl_if_eq:nn { V , nV , x , nx } { TF , T , F }
\cs_new_protected:Npn \tl_if_in:NnT { \exp_args:No \tl_if_in:nnT }
\cs_new_protected:Npn \tl_if_in:NnF { \exp_args:No \tl_if_in:nnF }
\cs_new_protected:Npn \tl_if_in:NnTF { \exp_args:No \tl_if_in:nnTF }
\prg_generate_conditional_variant:Nnn \tl_if_in:Nn
- { c } { T , F , TF }
+ { NV , c , cV } { T , F , TF }
\prg_new_protected_conditional:Npnn \tl_if_in:nn #1#2 { T , F , TF }
{
\scan_stop:
@@ -3781,7 +3810,7 @@ Type H <return> for immediate help}\def~{\errmessage{%
\if_false: } \fi:
}
\prg_generate_conditional_variant:Nnn \tl_if_in:nn
- { V , o , no } { T , F , TF }
+ { V , o , nV , no } { T , F , TF }
\cs_set_protected:Npn \__tl_tmp:w #1
{
\prg_new_conditional:Npnn \tl_if_novalue:n ##1
@@ -3900,7 +3929,7 @@ Type H <return> for immediate help}\def~{\errmessage{%
{ \prg_map_break:Nn \tl_map_break: { } }
\cs_new:Npn \tl_map_break:n
{ \prg_map_break:Nn \tl_map_break: }
-\cs_generate_variant:Nn \tl_to_str:n { o , V , v }
+\cs_generate_variant:Nn \tl_to_str:n { o , V , v , e }
\cs_new:Npn \tl_to_str:N #1 { \__kernel_tl_to_str:w \exp_after:wN {#1} }
\cs_generate_variant:Nn \tl_to_str:N { c }
\cs_new:Npn \tl_use:N #1
@@ -4230,7 +4259,7 @@ Type H <return> for immediate help}\def~{\errmessage{%
{#1}
}
}
-\cs_generate_variant:Nn \tl_reverse:n { o , V }
+\cs_generate_variant:Nn \tl_reverse:n { o , V , f , e }
\cs_new:Npn \__tl_reverse_normal:N
{ \__tl_act_reverse_output:n }
\cs_new:Npn \__tl_reverse_group_preserve:n #1
@@ -4630,7 +4659,7 @@ Type H <return> for immediate help}\def~{\errmessage{%
}
\cs_new:Npn \__str_case:nnTF #1#2#3#4
{ \__str_case:nw {#1} #2 {#1} { } \s__str_mark {#3} \s__str_mark {#4} \s__str_stop }
-\cs_generate_variant:Nn \str_case:nn { V , o , nV , nv }
+\cs_generate_variant:Nn \str_case:nn { V , o , e , nV , nv }
\prg_generate_conditional_variant:Nnn \str_case:nn
{ V , o , nV , nv } { T , F , TF }
\cs_new_eq:NN \str_case:Nn \str_case:Vn
@@ -5298,8 +5327,8 @@ Type H <return> for immediate help}\def~{\errmessage{%
}
\cs_new:Npn \__seq_set_split:w #1 \__seq_set_split_end:
{ \__seq_wrap_item:n {#1} }
-\cs_generate_variant:Nn \seq_set_split:Nnn { NnV }
-\cs_generate_variant:Nn \seq_gset_split:Nnn { NnV }
+\cs_generate_variant:Nn \seq_set_split:Nnn { NV , NnV , NVV , Nnx , Nxx }
+\cs_generate_variant:Nn \seq_gset_split:Nnn { NV , NnV , NVV , Nnx , Nxx }
\cs_generate_variant:Nn \seq_set_split_keep_spaces:Nnn { NnV }
\cs_generate_variant:Nn \seq_gset_split_keep_spaces:Nnn { NnV }
\cs_new_protected:Npn \seq_concat:NNN #1#2#3
@@ -5383,8 +5412,8 @@ Type H <return> for immediate help}\def~{\errmessage{%
#1 #2 {#2}
\__seq_pop_item_def:
}
-\cs_generate_variant:Nn \seq_remove_all:Nn { c }
-\cs_generate_variant:Nn \seq_gremove_all:Nn { c }
+\cs_generate_variant:Nn \seq_remove_all:Nn { NV , Nx , c , cV , cx }
+\cs_generate_variant:Nn \seq_gremove_all:Nn { NV , Nx , c , cV , cx }
\cs_new_eq:NN \__seq_int_eval:w \tex_numexpr:D
\cs_new_protected:Npn \seq_set_item:Nnn #1#2#3
{ \__seq_set_item:NnnNN #1 {#2} {#3} \__kernel_tl_set:Nx \use_i:nn }
@@ -5678,7 +5707,7 @@ Type H <return> for immediate help}\def~{\errmessage{%
{ \prg_break:n { \exp_not:n {#3} } }
{ \exp_args:Nf \__seq_item:nwn { \int_eval:n { #1 - 1 } } }
}
-\cs_generate_variant:Nn \seq_item:Nn { c }
+\cs_generate_variant:Nn \seq_item:Nn { NV , Ne , c , cV , ce }
\cs_new:Npn \seq_rand_item:N #1
{
\seq_if_empty:NF #1
@@ -6422,6 +6451,7 @@ Type H <return> for immediate help}\def~{\errmessage{%
\prg_break_point:Nn \scan_stop: { \int_gdecr:N \g__kernel_prg_map_int }
}
\cs_new_eq:NN \int_to_arabic:n \int_eval:n
+\cs_generate_variant:Nn \int_to_arabic:n { v }
\cs_new:Npn \int_to_symbols:nnn #1#2#3
{
\int_compare:nNnTF {#1} > {#2}
@@ -7540,6 +7570,15 @@ Type H <return> for immediate help}\def~{\errmessage{%
}
\__sys_everyjob:n
{
+ \str_const:Nx \c_sys_timestamp_str
+ {
+ \cs_if_exist:NTF \tex_directlua:D
+ { \tex_directlua:D { tex.print(pdf.getcreationdate()) } }
+ { \tex_creationdate:D }
+ }
+ }
+\__sys_everyjob:n
+ {
\cs_new:Npn \sys_rand_seed: { \tex_the:D \tex_randomseed:D }
}
\__sys_everyjob:n
@@ -9324,8 +9363,8 @@ Type H <return> for immediate help}\def~{\errmessage{%
{ \tl_set:Nn #3 {##2} }
{ \tl_set:Nn #3 { \q_no_value } }
}
-\cs_generate_variant:Nn \prop_get:NnN { NV , Nv , No }
-\cs_generate_variant:Nn \prop_get:NnN { c , cV , cv , co }
+\cs_generate_variant:Nn \prop_get:NnN { NV , Nv , No , Nx }
+\cs_generate_variant:Nn \prop_get:NnN { c , cV , cv , co , cx , cnc }
\cs_new_protected:Npn \prop_pop:NnN #1#2#3
{
\__prop_split:NnTF #1 {#2}
@@ -9358,7 +9397,7 @@ Type H <return> for immediate help}\def~{\errmessage{%
\str_if_eq:eeT {#1} {#2}
{ \prop_map_break:n { \exp_not:n {#3} } }
}
-\cs_generate_variant:Nn \prop_item:Nn { c }
+\cs_generate_variant:Nn \prop_item:Nn { NV , No , Ne , c , cV , co , ce }
\cs_new:Npn \prop_count:N #1
{
\int_eval:n
@@ -9423,13 +9462,13 @@ Type H <return> for immediate help}\def~{\errmessage{%
{ #1 #2 { \exp_not:o {#2} \l__prop_internal_tl } }
}
\cs_generate_variant:Nn \prop_put:Nnn
- { NnV , Nno , Nne , Nnx , NV , NVV , NVx , Nvx , No , Noo , Nxx }
+ { NnV , Nno , Nne , Nnx , NV , NVV , NVx , Nvx , No , Nx , NxV , Noo , Nxx }
\cs_generate_variant:Nn \prop_put:Nnn
- { c , cnV , cno , cne , cnx , cV , cVV , cVx , cvx , co , coo , cxx }
+ { c , cnV , cno , cne , cnx , cV , cVV , cVx , cvx , co , cx , cxV , coo , cxx }
\cs_generate_variant:Nn \prop_gput:Nnn
- { NnV , Nno , Nne , Nnx , NV , NVV , NVx , Nvx , No , Noo , Nxx }
+ { NnV , Nno , Nne , Nnx , NV , NVV , NVx , Nvx , No , Nx , NxV , Noo , Nxx }
\cs_generate_variant:Nn \prop_gput:Nnn
- { c , cnV , cno , cne , cnx , cV , cVV , cVx , cvx , co , coo , cxx }
+ { c , cnV , cno , cne , cnx , cV , cVV , cVx , cvx , co , cx , cxV , coo , cxx }
\cs_new_protected:Npn \prop_put_if_new:Nnn
{ \__prop_put_if_new:NNnn \__kernel_tl_set:Nx }
\cs_new_protected:Npn \prop_gput_if_new:Nnn
@@ -9481,7 +9520,7 @@ Type H <return> for immediate help}\def~{\errmessage{%
{ \prg_return_false: }
}
\prg_generate_conditional_variant:Nnn \prop_get:NnN
- { NV , Nv , No , c , cV , cv , co } { T , F , TF }
+ { NV , Nv , No , Nx , c , cV , cv , co , cx , cnc } { T , F , TF }
\cs_new:Npn \prop_map_function:NN #1#2
{
\exp_after:wN \use_i_ii:nnn
@@ -9601,8 +9640,10 @@ Type H <return> for immediate help}\def~{\errmessage{%
\__msg_chk_free:nn {#1} {#2}
\msg_gset:nnnn {#1} {#2}
}
+\cs_generate_variant:Nn \msg_new:nnnn { nnxx }
\cs_new_protected:Npn \msg_new:nnn #1#2#3
{ \msg_new:nnnn {#1} {#2} {#3} { } }
+\cs_generate_variant:Nn \msg_new:nnn { nnx }
\cs_new_protected:Npn \msg_set:nnnn #1#2#3#4
{
\cs_set:cpn { \c__msg_text_prefix_tl #1 / #2 }
@@ -9820,6 +9861,9 @@ Type H <return> for immediate help}\def~{\errmessage{%
{ \exp_not:c { msg_ #1 :nnnnnn } {##1} {##2} {##3} { } { } { } }
\cs_new_protected:cpx { msg_ #1 :nn } ##1##2
{ \exp_not:c { msg_ #1 :nnnnnn } {##1} {##2} { } { } { } { } }
+ \cs_generate_variant:cn { msg_ #1 :nnn } { nnV }
+ \cs_generate_variant:cn { msg_ #1 :nnnn } { nnVV , nnVn , nnnV , nnnx }
+ \cs_generate_variant:cn { msg_ #1 :nnnnn } { nnnxx }
\cs_new_protected:cpx { msg_ #1 :nnxxxx } ##1##2##3##4##5##6
{
\use:x
@@ -10812,7 +10856,7 @@ Type H <return> for immediate help}\def~{\errmessage{%
\__iow_open_stream:NV #1 \l__iow_file_name_tl
}
}
-\cs_generate_variant:Nn \iow_open:Nn { c }
+\cs_generate_variant:Nn \iow_open:Nn { NV , c , cV }
\cs_new_protected:Npn \__iow_open_stream:Nn #1#2
{
\tex_global:D \tex_chardef:D #1 = \l__iow_stream_tl \scan_stop:
@@ -10899,7 +10943,7 @@ Type H <return> for immediate help}\def~{\errmessage{%
\__kernel_iow_with:Nnn \tex_newlinechar:D { `\^^J }
{ \tex_immediate:D \tex_write:D #1 { \exp_not:n {#2} } }
}
-\cs_generate_variant:Nn \iow_now:Nn { c, Nx, cx }
+\cs_generate_variant:Nn \iow_now:Nn { NV , Nx , c , cV , cx }
\cs_set_protected:Npn \iow_log:x { \iow_now:Nx \c_log_iow }
\cs_new_protected:Npn \iow_log:n { \iow_now:Nn \c_log_iow }
\cs_set_protected:Npn \iow_term:x { \iow_now:Nx \c_term_iow }
@@ -11693,6 +11737,7 @@ Type H <return> for immediate help}\def~{\errmessage{%
{ \prg_return_true: }
{ \prg_return_false: }
}
+\prg_generate_conditional_variant:Nnn \file_if_exist:n { V } { T , F , TF }
\cs_new_protected:Npn \file_if_exist_input:n #1
{
\file_get_full_name:nNT {#1} \l__file_full_name_tl
@@ -11716,6 +11761,7 @@ Type H <return> for immediate help}\def~{\errmessage{%
{ \__file_input:V \l__file_full_name_tl }
{ \__kernel_file_missing:n {#1} }
}
+\cs_generate_variant:Nn \file_input:n { V }
\cs_new_protected:Npx \__file_input:n #1
{
\exp_not:N \clist_if_exist:NTF \exp_not:N \@filelist
@@ -12756,6 +12802,8 @@ Type H <return> for immediate help}\def~{\errmessage{%
\char_set_catcode_active:n { `\= }
\__keyval_tmp:w , =
\group_end:
+\cs_generate_variant:Nn \keyval_parse:NNn { NNV , NNv }
+\cs_generate_variant:Nn \keyval_parse:nnn { nnV , nnv }
\group_begin:
\cs_set_protected:Npn \__keyval_tmp:w #1#2
{
@@ -26509,15 +26557,19 @@ Type H <return> for immediate help}\def~{\errmessage{%
\__regex_if_match:nn { \__regex_build:n {#1} } {#2}
\__regex_return:
}
+\prg_generate_conditional_variant:Nnn \regex_match:nn { nV } { T , F , TF }
\prg_new_protected_conditional:Npnn \regex_match:Nn #1#2 { T , F , TF }
{
\__regex_if_match:nn { \__regex_build:N #1 } {#2}
\__regex_return:
}
+\prg_generate_conditional_variant:Nnn \regex_match:Nn { NV } { T , F , TF }
\cs_new_protected:Npn \regex_count:nnN #1
{ \__regex_count:nnN { \__regex_build:n {#1} } }
\cs_new_protected:Npn \regex_count:NnN #1
{ \__regex_count:nnN { \__regex_build:N #1 } }
+\cs_generate_variant:Nn \regex_count:nnN { nV }
+\cs_generate_variant:Nn \regex_count:NnN { NV }
\cs_new_protected:Npn \regex_match_case:nnTF #1#2#3
{
\__regex_match_case:nnTF {#1} {#2}
@@ -26540,6 +26592,11 @@ Type H <return> for immediate help}\def~{\errmessage{%
{ #1 { \__regex_build:n {##1} } {##2} ##3 \__regex_return: }
\prg_new_protected_conditional:Npnn #3 ##1##2##3 { T , F , TF }
{ #1 { \__regex_build:N ##1 } {##2} ##3 \__regex_return: }
+ \cs_generate_variant:Nn #2 { nV }
+ \prg_generate_conditional_variant:Nnn #2 { nV } { T , F , TF }
+ \cs_generate_variant:Nn #3 { NV }
+ \prg_generate_conditional_variant:Nnn #3 { NV } { T , F , TF }
+
}
\__regex_tmp:w \__regex_extract_once:nnN
\regex_extract_once:nnN \regex_extract_once:NnN
diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex b/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex
index 3dea1b9a3b8..45d89a2b1da 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex
+++ b/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex
@@ -19,7 +19,7 @@
%% and all files in that bundle must be distributed together.
%%
%% File: expl3.dtx
-\def\ExplFileDate{2023-08-11}%
+\def\ExplFileDate{2023-08-29}%
\let\ExplLoaderFileDate\ExplFileDate
\begingroup
\catcode`\_=11
diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3.ltx b/Master/texmf-dist/tex/latex/l3kernel/expl3.ltx
index 5f2416d2276..2cbd97f253c 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/expl3.ltx
+++ b/Master/texmf-dist/tex/latex/l3kernel/expl3.ltx
@@ -19,7 +19,7 @@
%% and all files in that bundle must be distributed together.
%%
%% File: expl3.dtx
-\def\ExplFileDate{2023-08-11}%
+\def\ExplFileDate{2023-08-29}%
\let\ExplLoaderFileDate\ExplFileDate
\begingroup
\catcode`\_=11
diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3.sty b/Master/texmf-dist/tex/latex/l3kernel/expl3.sty
index c41e065d0c6..ddd58a9acb0 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/expl3.sty
+++ b/Master/texmf-dist/tex/latex/l3kernel/expl3.sty
@@ -19,7 +19,7 @@
%% and all files in that bundle must be distributed together.
%%
%% File: expl3.dtx
-\def\ExplFileDate{2023-08-11}%
+\def\ExplFileDate{2023-08-29}%
\let\ExplLoaderFileDate\ExplFileDate
\ProvidesPackage{expl3}
[%