summaryrefslogtreecommitdiff
path: root/macros/latex/contrib
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib')
-rw-r--r--macros/latex/contrib/l3kernel/CHANGELOG.md8
-rw-r--r--macros/latex/contrib/l3kernel/README.md2
-rw-r--r--macros/latex/contrib/l3kernel/expl3.dtx4
-rw-r--r--macros/latex/contrib/l3kernel/expl3.pdfbin584772 -> 584879 bytes
-rw-r--r--macros/latex/contrib/l3kernel/interface3.pdfbin1544205 -> 1544503 bytes
-rw-r--r--macros/latex/contrib/l3kernel/interface3.tex2
-rw-r--r--macros/latex/contrib/l3kernel/l3alloc.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3basics.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3bootstrap.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3box.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3candidates.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3clist.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3coffins.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3color-base.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3debug.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3deprecation.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3doc.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3docstrip.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3docstrip.pdfbin263360 -> 263493 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3expan.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3file.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3final.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3flag.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-assign.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-aux.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-basics.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-convert.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-expo.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-extended.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-logic.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-parse.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-random.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-round.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-traps.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp-trig.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fp.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3fparray.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3int.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3intarray.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3kernel-functions.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3keys.dtx385
-rw-r--r--macros/latex/contrib/l3kernel/l3legacy.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3luatex.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3msg.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3names.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3news.pdfbin379248 -> 379248 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news01.pdfbin113529 -> 113529 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news02.pdfbin140776 -> 140776 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news03.pdfbin144784 -> 144784 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news04.pdfbin107117 -> 107117 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news05.pdfbin105090 -> 105090 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news06.pdfbin140797 -> 140797 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news07.pdfbin119092 -> 119092 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news08.pdfbin152413 -> 152413 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news09.pdfbin235323 -> 235323 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news10.pdfbin147096 -> 147096 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news11.pdfbin165956 -> 165956 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news12.pdfbin199153 -> 199153 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3prefixes.csv3
-rw-r--r--macros/latex/contrib/l3kernel/l3prefixes.pdfbin75066 -> 75377 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3prg.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3prop.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3quark.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3regex.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3seq.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3skip.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3sort.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3str-convert.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3str.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3styleguide.pdfbin280109 -> 280191 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3styleguide.tex2
-rw-r--r--macros/latex/contrib/l3kernel/l3syntax-changes.pdfbin228403 -> 228503 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3syntax-changes.tex2
-rw-r--r--macros/latex/contrib/l3kernel/l3sys.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3term-glossary.pdfbin186619 -> 186719 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3term-glossary.tex2
-rw-r--r--macros/latex/contrib/l3kernel/l3text-case.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3text-purify.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3text.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3tl-analysis.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3tl.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3token.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3unicode.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/source3.pdfbin5890263 -> 5898773 bytes
-rw-r--r--macros/latex/contrib/l3kernel/source3.tex2
-rw-r--r--macros/latex/contrib/l3packages/CHANGELOG.md8
-rw-r--r--macros/latex/contrib/l3packages/README.md2
-rw-r--r--macros/latex/contrib/l3packages/l3keys2e.dtx8
-rw-r--r--macros/latex/contrib/l3packages/l3keys2e.pdfbin347543 -> 347720 bytes
-rw-r--r--macros/latex/contrib/l3packages/xfp.dtx4
-rw-r--r--macros/latex/contrib/l3packages/xfp.pdfbin309887 -> 310099 bytes
-rw-r--r--macros/latex/contrib/l3packages/xfrac.dtx4
-rw-r--r--macros/latex/contrib/l3packages/xfrac.pdfbin454318 -> 454527 bytes
-rw-r--r--macros/latex/contrib/l3packages/xparse.dtx148
-rw-r--r--macros/latex/contrib/l3packages/xparse.ins5
-rw-r--r--macros/latex/contrib/l3packages/xparse.pdfbin505893 -> 506103 bytes
-rw-r--r--macros/latex/contrib/l3packages/xtemplate.dtx52
-rw-r--r--macros/latex/contrib/l3packages/xtemplate.pdfbin416401 -> 416612 bytes
98 files changed, 490 insertions, 261 deletions
diff --git a/macros/latex/contrib/l3kernel/CHANGELOG.md b/macros/latex/contrib/l3kernel/CHANGELOG.md
index 5baa671d01..41cffac254 100644
--- a/macros/latex/contrib/l3kernel/CHANGELOG.md
+++ b/macros/latex/contrib/l3kernel/CHANGELOG.md
@@ -7,6 +7,11 @@ this project uses date-based 'snapshot' version identifiers.
## [Unreleased]
+## [2020-05-14]
+
+### Changed
+- Performance improvements in keyval processing
+
## [2020-05-11]
### Changed
@@ -678,7 +683,8 @@ this project uses date-based 'snapshot' version identifiers.
- Step func­tions have been added for dim vari­ables,
e.g. `\dim_step_in­line:nnnn`
-[Unreleased]: https://github.com/latex3/latex3/compare/2020-05-11...HEAD
+[Unreleased]: https://github.com/latex3/latex3/compare/2020-05-14...HEAD
+[2020-05-14]: https://github.com/latex3/latex3/compare/2020-05-11...2020-05-14
[2020-05-11]: https://github.com/latex3/latex3/compare/2020-05-05...2020-05-11
[2020-05-05]: https://github.com/latex3/latex3/compare/2020-04-06...2020-05-05
[2020-04-06]: https://github.com/latex3/latex3/compare/2020-03-06...2020-04-06
diff --git a/macros/latex/contrib/l3kernel/README.md b/macros/latex/contrib/l3kernel/README.md
index 3a7c3730b9..99f233c0e8 100644
--- a/macros/latex/contrib/l3kernel/README.md
+++ b/macros/latex/contrib/l3kernel/README.md
@@ -1,7 +1,7 @@
LaTeX3 Programming Conventions
==============================
-Release 2020-05-11
+Release 2020-05-14
Overview
--------
diff --git a/macros/latex/contrib/l3kernel/expl3.dtx b/macros/latex/contrib/l3kernel/expl3.dtx
index a24e520f45..c03cfc436e 100644
--- a/macros/latex/contrib/l3kernel/expl3.dtx
+++ b/macros/latex/contrib/l3kernel/expl3.dtx
@@ -24,7 +24,7 @@
%
%<*driver|generic|package|2ekernel>
%</driver|generic|package|2ekernel>
-\def\ExplFileDate{2020-05-11}%
+\def\ExplFileDate{2020-05-14}%
%<*driver>
\documentclass[full]{l3doc}
\usepackage{graphicx}
@@ -51,7 +51,7 @@
% }^^A
% }
%
-% \date{Released 2020-05-11}
+% \date{Released 2020-05-14}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/expl3.pdf b/macros/latex/contrib/l3kernel/expl3.pdf
index b16b80e0c7..454be4b399 100644
--- a/macros/latex/contrib/l3kernel/expl3.pdf
+++ b/macros/latex/contrib/l3kernel/expl3.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/interface3.pdf b/macros/latex/contrib/l3kernel/interface3.pdf
index f91da62ed4..5914895ef1 100644
--- a/macros/latex/contrib/l3kernel/interface3.pdf
+++ b/macros/latex/contrib/l3kernel/interface3.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/interface3.tex b/macros/latex/contrib/l3kernel/interface3.tex
index e1b46c0897..5007307c17 100644
--- a/macros/latex/contrib/l3kernel/interface3.tex
+++ b/macros/latex/contrib/l3kernel/interface3.tex
@@ -54,7 +54,7 @@ for those people who are interested.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2020-05-11}
+\date{Released 2020-05-14}
\pagenumbering{roman}
\maketitle
diff --git a/macros/latex/contrib/l3kernel/l3alloc.dtx b/macros/latex/contrib/l3kernel/l3alloc.dtx
index 188477adcf..4e3ffdbe20 100644
--- a/macros/latex/contrib/l3kernel/l3alloc.dtx
+++ b/macros/latex/contrib/l3kernel/l3alloc.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-05-11}
+% \date{Released 2020-05-14}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3basics.dtx b/macros/latex/contrib/l3kernel/l3basics.dtx
index 22b7a75d15..8069dbafa8 100644
--- a/macros/latex/contrib/l3kernel/l3basics.dtx
+++ b/macros/latex/contrib/l3kernel/l3basics.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-05-11}
+% \date{Released 2020-05-14}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3bootstrap.dtx b/macros/latex/contrib/l3kernel/l3bootstrap.dtx
index 4ff6267be1..88682ead64 100644
--- a/macros/latex/contrib/l3kernel/l3bootstrap.dtx
+++ b/macros/latex/contrib/l3kernel/l3bootstrap.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-05-11}
+% \date{Released 2020-05-14}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3box.dtx b/macros/latex/contrib/l3kernel/l3box.dtx
index 7c6b12dd78..9279b3a1da 100644
--- a/macros/latex/contrib/l3kernel/l3box.dtx
+++ b/macros/latex/contrib/l3kernel/l3box.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-05-11}
+% \date{Released 2020-05-14}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3candidates.dtx b/macros/latex/contrib/l3kernel/l3candidates.dtx
index c97fb26e25..90d433dcd9 100644
--- a/macros/latex/contrib/l3kernel/l3candidates.dtx
+++ b/macros/latex/contrib/l3kernel/l3candidates.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2020-05-11}
+% \date{Released 2020-05-14}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3clist.dtx b/macros/latex/contrib/l3kernel/l3clist.dtx
index 0b011f80e0..b6c9390cee 100644
--- a/macros/latex/contrib/l3kernel/l3clist.dtx
+++ b/macros/latex/contrib/l3kernel/l3clist.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2020-05-11}
+% \date{Released 2020-05-14}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3coffins.dtx b/macros/latex/contrib/l3kernel/l3coffins.dtx
index 47fca97465..2dd3f49c12 100644
--- a/macros/latex/contrib/l3kernel/l3coffins.dtx
+++ b/macros/latex/contrib/l3kernel/l3coffins.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-05-11}
+% \date{Released 2020-05-14}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3color-base.dtx b/macros/latex/contrib/l3kernel/l3color-base.dtx
index 0555edc19c..5f0d01d420 100644
--- a/macros/latex/contrib/l3kernel/l3color-base.dtx
+++ b/macros/latex/contrib/l3kernel/l3color-base.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-05-11}
+% \date{Released 2020-05-14}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3debug.dtx b/macros/latex/contrib/l3kernel/l3debug.dtx
index df79d6a031..d3be8e5fd0 100644
--- a/macros/latex/contrib/l3kernel/l3debug.dtx
+++ b/macros/latex/contrib/l3kernel/l3debug.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-05-11}
+% \date{Released 2020-05-14}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3deprecation.dtx b/macros/latex/contrib/l3kernel/l3deprecation.dtx
index f84e9faea3..3143cbcd9f 100644
--- a/macros/latex/contrib/l3kernel/l3deprecation.dtx
+++ b/macros/latex/contrib/l3kernel/l3deprecation.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-05-11}
+% \date{Released 2020-05-14}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3doc.dtx b/macros/latex/contrib/l3kernel/l3doc.dtx
index 9ef8771afb..1f9bb20394 100644
--- a/macros/latex/contrib/l3kernel/l3doc.dtx
+++ b/macros/latex/contrib/l3kernel/l3doc.dtx
@@ -79,7 +79,7 @@ and all files in that bundle must be distributed together.
%
% \title{The \cls{l3doc} class}
% \author{\Team}
-% \date{Released 2020-05-11}
+% \date{Released 2020-05-14}
% \maketitle
% \tableofcontents
%
diff --git a/macros/latex/contrib/l3kernel/l3docstrip.dtx b/macros/latex/contrib/l3kernel/l3docstrip.dtx
index 044e3fbab5..8177c56ddc 100644
--- a/macros/latex/contrib/l3kernel/l3docstrip.dtx
+++ b/macros/latex/contrib/l3kernel/l3docstrip.dtx
@@ -63,7 +63,7 @@
% }^^A
% }
%
-% \date{Released 2020-05-11}
+% \date{Released 2020-05-14}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3docstrip.pdf b/macros/latex/contrib/l3kernel/l3docstrip.pdf
index 870f43aacb..c01f5c6666 100644
--- a/macros/latex/contrib/l3kernel/l3docstrip.pdf
+++ b/macros/latex/contrib/l3kernel/l3docstrip.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3expan.dtx b/macros/latex/contrib/l3kernel/l3expan.dtx
index 0841f43fc4..6357eb7317 100644
--- a/macros/latex/contrib/l3kernel/l3expan.dtx
+++ b/macros/latex/contrib/l3kernel/l3expan.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-05-11}
+% \date{Released 2020-05-14}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3file.dtx b/macros/latex/contrib/l3kernel/l3file.dtx
index c816d771fb..2aba70b29e 100644
--- a/macros/latex/contrib/l3kernel/l3file.dtx
+++ b/macros/latex/contrib/l3kernel/l3file.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2020-05-11}
+% \date{Released 2020-05-14}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3final.dtx b/macros/latex/contrib/l3kernel/l3final.dtx
index d48aac03f5..79b816bfd8 100644
--- a/macros/latex/contrib/l3kernel/l3final.dtx
+++ b/macros/latex/contrib/l3kernel/l3final.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-05-11}
+% \date{Released 2020-05-14}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3flag.dtx b/macros/latex/contrib/l3kernel/l3flag.dtx
index 7a76d29386..301f78a340 100644
--- a/macros/latex/contrib/l3kernel/l3flag.dtx
+++ b/macros/latex/contrib/l3kernel/l3flag.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-05-11}
+% \date{Released 2020-05-14}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-assign.dtx b/macros/latex/contrib/l3kernel/l3fp-assign.dtx
index 725abc23b9..64e67f8fad 100644
--- a/macros/latex/contrib/l3kernel/l3fp-assign.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-assign.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2020-05-11}
+% \date{Released 2020-05-14}
% \maketitle
%
% \begin{documentation}
diff --git a/macros/latex/contrib/l3kernel/l3fp-aux.dtx b/macros/latex/contrib/l3kernel/l3fp-aux.dtx
index 0281772275..85a31450c9 100644
--- a/macros/latex/contrib/l3kernel/l3fp-aux.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-aux.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-05-11}
+% \date{Released 2020-05-14}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-basics.dtx b/macros/latex/contrib/l3kernel/l3fp-basics.dtx
index 55823ba7fb..b634f3a949 100644
--- a/macros/latex/contrib/l3kernel/l3fp-basics.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-basics.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2020-05-11}
+% \date{Released 2020-05-14}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-convert.dtx b/macros/latex/contrib/l3kernel/l3fp-convert.dtx
index fc629937c4..9ede33c378 100644
--- a/macros/latex/contrib/l3kernel/l3fp-convert.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-convert.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-05-11}
+% \date{Released 2020-05-14}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-expo.dtx b/macros/latex/contrib/l3kernel/l3fp-expo.dtx
index a1defe9889..8f2c090d5b 100644
--- a/macros/latex/contrib/l3kernel/l3fp-expo.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-expo.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2020-05-11}
+% \date{Released 2020-05-14}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-extended.dtx b/macros/latex/contrib/l3kernel/l3fp-extended.dtx
index 8904c44200..28b2eaca4f 100644
--- a/macros/latex/contrib/l3kernel/l3fp-extended.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-extended.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2020-05-11}
+% \date{Released 2020-05-14}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-logic.dtx b/macros/latex/contrib/l3kernel/l3fp-logic.dtx
index a503e3a3d4..a76ba25fb4 100644
--- a/macros/latex/contrib/l3kernel/l3fp-logic.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-logic.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2020-05-11}
+% \date{Released 2020-05-14}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-parse.dtx b/macros/latex/contrib/l3kernel/l3fp-parse.dtx
index 978d4dfe7f..bc0a4c1e64 100644
--- a/macros/latex/contrib/l3kernel/l3fp-parse.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-parse.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2020-05-11}
+% \date{Released 2020-05-14}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-random.dtx b/macros/latex/contrib/l3kernel/l3fp-random.dtx
index 11bf7d311d..61e8d09b8f 100644
--- a/macros/latex/contrib/l3kernel/l3fp-random.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-random.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2020-05-11}
+% \date{Released 2020-05-14}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-round.dtx b/macros/latex/contrib/l3kernel/l3fp-round.dtx
index a5b0bc6485..0edd5bf20c 100644
--- a/macros/latex/contrib/l3kernel/l3fp-round.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-round.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-05-11}
+% \date{Released 2020-05-14}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-traps.dtx b/macros/latex/contrib/l3kernel/l3fp-traps.dtx
index 51d25a090e..093fdccffe 100644
--- a/macros/latex/contrib/l3kernel/l3fp-traps.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-traps.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2020-05-11}
+% \date{Released 2020-05-14}
% \maketitle
%
% \begin{documentation}
diff --git a/macros/latex/contrib/l3kernel/l3fp-trig.dtx b/macros/latex/contrib/l3kernel/l3fp-trig.dtx
index 156485e628..1d4ce7f6a6 100644
--- a/macros/latex/contrib/l3kernel/l3fp-trig.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp-trig.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2020-05-11}
+% \date{Released 2020-05-14}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp.dtx b/macros/latex/contrib/l3kernel/l3fp.dtx
index f9bcbee467..4dd9a6815c 100644
--- a/macros/latex/contrib/l3kernel/l3fp.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp.dtx
@@ -49,7 +49,7 @@
% }^^A
% }
%
-% \date{Released 2020-05-11}
+% \date{Released 2020-05-14}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fparray.dtx b/macros/latex/contrib/l3kernel/l3fparray.dtx
index d41c366b73..9295a0d05a 100644
--- a/macros/latex/contrib/l3kernel/l3fparray.dtx
+++ b/macros/latex/contrib/l3kernel/l3fparray.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2020-05-11}
+% \date{Released 2020-05-14}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3int.dtx b/macros/latex/contrib/l3kernel/l3int.dtx
index faab276e44..6b58e379da 100644
--- a/macros/latex/contrib/l3kernel/l3int.dtx
+++ b/macros/latex/contrib/l3kernel/l3int.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-05-11}
+% \date{Released 2020-05-14}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3intarray.dtx b/macros/latex/contrib/l3kernel/l3intarray.dtx
index 1c68482f55..c8ea3e3172 100644
--- a/macros/latex/contrib/l3kernel/l3intarray.dtx
+++ b/macros/latex/contrib/l3kernel/l3intarray.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2020-05-11}
+% \date{Released 2020-05-14}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3kernel-functions.dtx b/macros/latex/contrib/l3kernel/l3kernel-functions.dtx
index d5cc6170ad..52dd498f57 100644
--- a/macros/latex/contrib/l3kernel/l3kernel-functions.dtx
+++ b/macros/latex/contrib/l3kernel/l3kernel-functions.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-05-11}
+% \date{Released 2020-05-14}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3keys.dtx b/macros/latex/contrib/l3kernel/l3keys.dtx
index b3630af0b1..621f3776de 100644
--- a/macros/latex/contrib/l3kernel/l3keys.dtx
+++ b/macros/latex/contrib/l3kernel/l3keys.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-05-11}
+% \date{Released 2020-05-14}
%
% \maketitle
%
@@ -939,13 +939,13 @@
%
% \subsection{Low-level interface}
%
-% The low-level key parser is based heavily on \pkg{keyval}, but with a number
-% of additional \enquote{safety} requirements and with the idea that the
-% parsed list of key--value pairs can be processed in a variety of ways.
-% The net result is that this code needs around twice the amount of time
-% as \pkg{keyval} to parse the same list of keys. To optimise speed as far
-% as reasonably practical, a number of lower-level approaches are taken
-% rather than using the higher-level \pkg{expl3} interfaces.
+% The low-level key parser's implementation is based heavily on \pkg{expkv}.
+% Compared to \pkg{keyval} it adds a number of additional \enquote{safety}
+% requirements and allows to process the parsed list of key--value pairs in a
+% variety of ways. The net result is that this code needs around one and a half
+% the amount of time as \pkg{keyval} to parse the same list of keys. To optimise
+% speed as far as reasonably practical, a number of lower-level approaches are
+% taken rather than using the higher-level \pkg{expl3} interfaces.
%
% \begin{macrocode}
%<@@=keyval>
@@ -970,9 +970,9 @@
% \end{macrocode}
%
% \begin{macro}[EXP]{\keyval_parse:NNn}
-% The main function starts the first of two input 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
+% 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
% argument.
% \begin{macrocode}
\cs_new:Npn \keyval_parse:NNn ##1 ##2 ##3
@@ -982,157 +982,267 @@
%
% \begin{macro}[EXP]{\@@_loop_active:NNw}
% First a fast test for the end of the loop is done, it'll gobble everything
-% up to an \cs{s_@@_mark} immediately followed by an \cs{s_@@_tail}. The loop
-% ending macro will gobble everything to the last \cs{s_@@_mark} in this
-% definition.
+% up to a \cs{s_@@_tail}. The loop ending macro will gobble everything to the
+% last \cs{s_@@_mark} in this definition.
% If the end isn't reached yet, start the second loop splitting at other
-% comments, and after that one iterate the current loop.
+% commas, and after that one iterate the current loop.
% \begin{macrocode}
\cs_new:Npn \@@_loop_active:NNw ##1 ##2 ##3 #1
{
\@@_if_recursion_tail:w ##3
- \@@_end_loop_active:w \s_@@_mark \s_@@_tail
+ \@@_end_loop_active:w \s_@@_tail
\@@_loop_other:NNw ##1 ##2 ##3 , \s_@@_tail ,
\@@_loop_active:NNw ##1 ##2 \s_@@_mark
}
% \end{macrocode}
% \end{macro}
%
+% \begin{macro}[EXP]{\@@_split_other:w, \@@_split_active:w}
+% These two macros allow to split at the first equals sign of category 12 or
+% 13. At the same time they also execute branching by inserting the first
+% token following \cs{s_@@_mark} that followed the equals sign. Hence they
+% also test for the presence of such an equals sign simultaneously.
+% \begin{macrocode}
+ \cs_new:Npn \@@_split_other:w ##1 = ##2 \s_@@_mark ##3 ##4 \s_@@_stop
+ { ##3 ##1 \s_@@_stop \s_@@_mark ##2 }
+ \cs_new:Npn \@@_split_active:w ##1 #2 ##2 \s_@@_mark ##3 ##4 \s_@@_stop
+ { ##3 ##1 \s_@@_stop \s_@@_mark ##2 }
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macro}[EXP]{\@@_loop_other:NNw}
% The second loop uses the same test for its end as the first loop, next it
-% tests whether there are other or active equals signs, throwing an error if
-% there are both. If there are none, test whether the argument is blank or is
-% a single key. If there are only active equals signs split at those, else
-% split at others. Finally, iterate the loop.
+% splits at the first active equals sign using \cs{@@_split_active:w}. The
+% \cs{s_@@_nil} prevents accidental brace stripping and acts as a delimiter in
+% the next steps. First testing for an active equals sign will reduce the
+% number of necessary expansion steps for the expected average use case of
+% other equals signs and hence perform better on average.
% \begin{macrocode}
\cs_new:Npn \@@_loop_other:NNw ##1 ##2 ##3 ,
{
\@@_if_recursion_tail:w ##3
- \@@_end_loop_other:w \s_@@_mark \s_@@_tail
- \@@_if_has_equal_other:w ##3 = \s_@@_stop
- \@@_has_false:w \s_@@_mark \s_@@_stop \use_i:nn
- {
- \@@_if_has_equal_active:w ##3 #2 \s_@@_stop
- \@@_has_false:w \s_@@_mark \s_@@_stop \use_i:nn
- \@@_misplaced_equal_error:
- { \@@_split_other:w ##3 = \s_@@_stop ##2 }
- }
- {
- \@@_if_has_equal_active:w ##3 #2 \s_@@_stop
- \@@_has_false:w \s_@@_mark \s_@@_stop \use_i:nn
- { \@@_split_active:w ##3 #2 \s_@@_stop ##2 }
- {
- \@@_if_blank:w ##3 \s_@@_nil \s_@@_stop
- \@@_blank_true:w \s_@@_mark \s_@@_stop \use:n
- { \@@_trim:nN { ##3 } \@@_key:nN ##1 }
- }
- }
+ \@@_end_loop_other:w \s_@@_tail
+ \@@_split_active:w ##3 \s_@@_nil
+ \s_@@_mark \@@_split_active_auxi:w
+ #2 \s_@@_mark \@@_clean_up_active:w
+ \s_@@_stop
+ ##1 ##2
\@@_loop_other:NNw ##1 ##2 \s_@@_mark
}
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[EXP]{\@@_split_active:w}
-% \begin{macro}[EXP]{\@@_split_active:nw}
-% Splits at the first active equals sign and trims the key. Next test whether
-% there are any more valid split points, if so throw an error and gobble the
-% remaining \meta{function_2}, which will not yet be gobbled. If there was
-% only one active equals sign start trimming the spaces off the value and give
-% control to \cs[no-index]{@@_key_val:nnN}.
+% \begin{macro}[EXP]{\@@_split_active_auxi:w}
+% \begin{macro}[EXP]{\@@_split_active_auxii:w}
+% \begin{macro}[EXP]{\@@_split_active_auxiii:w}
+% \begin{macro}[EXP]{\@@_split_active_auxiv:w}
+% \begin{macro}[EXP]{\@@_split_active_auxv:w}
+% After \cs{@@_split_active:w} the following will only be called if there was
+% at least one active equals sign in the current key--value pair. Therefore
+% this is the execution branch for a key--value pair with an active equals
+% sign. |##1| will be everything up to the first active equals sign. First it
+% tests for other equals signs in the key name, which will eventually throw an
+% error via \cs{@@_misplaced_equal_after_active_error:w}. If none was found we
+% forward the key to \cs{@@_split_active_auxii:w}.
+% \begin{macrocode}
+ \cs_new:Npn \@@_split_active_auxi:w ##1 \s_@@_stop
+ {
+ \@@_split_other:w ##1 \s_@@_nil
+ \s_@@_mark \@@_misplaced_equal_after_active_error:w
+ = \s_@@_mark \@@_split_active_auxii:w
+ \s_@@_stop
+ }
+% \end{macrocode}
+% \cs{@@_split_active_auxii:w} gets the correct key name with a leading
+% \cs{s_@@_mark} as |##1|. It has to sanitise the remainder of the previous
+% test and trims the key name which will be forwarded to
+% \cs{@@_split_active_auxiii:w}.
+% \begin{macrocode}
+ \cs_new:Npn \@@_split_active_auxii:w
+ ##1 \s_@@_nil \s_@@_mark \@@_misplaced_equal_after_active_error:w
+ \s_@@_stop \s_@@_mark
+ { \@@_trim:nN { ##1 } \@@_split_active_auxiii:w }
+% \end{macrocode}
+% Next we test for a misplaced active equals sign in the value, if none is
+% found \cs{@@_split_active_auxiv:w} will be called.
+% \begin{macrocode}
+ \cs_new:Npn \@@_split_active_auxiii:w ##1 ##2 \s_@@_nil
+ {
+ \@@_split_active:w ##2 \s_@@_nil
+ \s_@@_mark \@@_misplaced_equal_in_split_error:w
+ #2 \s_@@_mark \@@_split_active_auxiv:w
+ \s_@@_stop
+ { ##1 }
+ }
+% \end{macrocode}
+% This runs the last test after sanitising the remainder of the previous one.
+% This time test for a misplaced equals sign of category 12 in the value.
+% Finally the last auxiliary macro will be called.
% \begin{macrocode}
- \cs_new:Npn \@@_split_active:w ##1 #2
- { \@@_trim:nN { ##1 } \@@_split_active:nw \s_@@_mark }
- \cs_new:Npn \@@_split_active:nw ##1 ##2 #2 ##3 \s_@@_stop
+ \cs_new:Npn \@@_split_active_auxiv:w
+ ##1 \s_@@_nil \s_@@_mark \@@_misplaced_equal_in_split_error:w
+ \s_@@_stop \s_@@_mark
{
- \@@_if_empty:w \s_@@_mark ##3 \s_@@_stop
- \@@_has_false:w \s_@@_mark \s_@@_stop \use_i:nn
- { \@@_misplaced_equal_error: \use_none:n }
- { \@@_trim:nN { ##2 } \@@_key_val:nnN { ##1 } }
+ \@@_split_other:w ##1 \s_@@_nil
+ \s_@@_mark \@@_misplaced_equal_in_split_error:w
+ = \s_@@_mark \@@_split_active_auxv:w
+ \s_@@_stop
}
% \end{macrocode}
+% This last macro in this execution branch sanitises the last test, trims the
+% value and passes it to \cs{@@_pair:nnNN}.
+% \begin{macrocode}
+ \cs_new:Npn \@@_split_active_auxv:w
+ ##1 \s_@@_nil \s_@@_mark \@@_misplaced_equal_in_split_error:w
+ \s_@@_stop \s_@@_mark
+ { \@@_trim:nN { ##1 } \@@_pair:nnNN }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
% \end{macro}
% \end{macro}
%
-% \begin{macro}[EXP]{\@@_if_has_equal_active:w}
-% The test for an active equals sign just gobbles tokens until the first
-% active equals sign and then runs the test for an empty argument.
+% \begin{macro}[EXP]{\@@_clean_up_active:w}
+% The following is the branch taken if the key--value pair doesn't contain an
+% active equals sign. The remainder of that test will be cleaned up by
+% \cs{@@_clean_up_active:w} which will then split at an equals sign of
+% category other.
% \begin{macrocode}
- \cs_new:Npn \@@_if_has_equal_active:w ##1 #2
- { \@@_if_empty:w \s_@@_mark }
+ \cs_new:Npn \@@_clean_up_active:w
+ ##1 \s_@@_nil \s_@@_mark \@@_split_active_auxi:w \s_@@_stop \s_@@_mark
+ {
+ \@@_split_other:w ##1 \s_@@_nil
+ \s_@@_mark \@@_split_other_auxi:w
+ = \s_@@_mark \@@_clean_up_other:w
+ \s_@@_stop
+ }
% \end{macrocode}
% \end{macro}
%
-% We're done with the macros which need active equals signs or commas in their
-% definition, so we can end that scope and call the temporary macro which will
-% do the definitions.
+% \begin{macro}[EXP]{\@@_split_other_auxi:w}
+% \begin{macro}[EXP]{\@@_split_other_auxii:w}
+% \begin{macro}[EXP]{\@@_split_other_auxiii:w}
+% This is executed if the key--value pair doesn't contain an active equals
+% sign but at least one other. |##1| of \cs{@@_split_other_auxi:w} will
+% contain the complete key name, which is trimmed and forwarded to the next
+% auxiliary macro.
% \begin{macrocode}
- }
- \char_set_catcode_active:n { `\, }
- \char_set_catcode_active:n { `\= }
- \@@_tmp:NN , =
-\group_end:
+ \cs_new:Npn \@@_split_other_auxi:w ##1 \s_@@_stop
+ { \@@_trim:nN { ##1 } \@@_split_other_auxii:w }
+% \end{macrocode}
+% We know that the value doesn't contain misplaced active equals signs but we
+% have to test for others.
+% \begin{macrocode}
+ \cs_new:Npn \@@_split_other_auxii:w ##1 ##2 \s_@@_nil
+ {
+ \@@_split_other:w ##2 \s_@@_nil
+ \s_@@_mark \@@_misplaced_equal_in_split_error:w
+ = \s_@@_mark \@@_split_other_auxiii:w
+ \s_@@_stop
+ { ##1 }
+ }
+% \end{macrocode}
+% \cs{@@_split_other_auxiii:w} sanitises the test for other equals signs,
+% trims the value and forwards it to \cs{@@_pair:nnNN}.
+% \begin{macrocode}
+ \cs_new:Npn \@@_split_other_auxiii:w
+ ##1 \s_@@_nil \s_@@_mark \@@_misplaced_equal_in_split_error:w
+ \s_@@_stop \s_@@_mark
+ { \@@_trim:nN { ##1 } \@@_pair:nnNN }
% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
%
-% \begin{macro}[EXP]{\@@_end_loop_active:w,\@@_end_loop_other:w}
-% Both of these macros just have to gobble a few tokens to remove the reminder
-% of the loops current iteration. We do this in a pretty static manner,
-% explicitly stating every token we know beforehand because this is slightly
-% faster.
+% \begin{macro}[EXP]{\@@_clean_up_other:w}
+% \cs{@@_clean_up_other:w} is the last branch that might exist. It is called
+% if no equals sign was found, hence the only possibilities left are a blank
+% list element, which is to be skipped, or a lonely key. If it's no empty list
+% element this will trim the key name and forward it to \cs{@@_key:nNN}.
% \begin{macrocode}
-\cs_new:Npn \@@_end_loop_active:w
- \s_@@_mark \s_@@_tail
- \@@_loop_other:NNw #1 , \s_@@_tail ,
- \@@_loop_active:NNw #2 \s_@@_mark
- { }
-\cs_new:Npn \@@_end_loop_other:w
- \s_@@_mark \s_@@_tail
- \@@_if_has_equal_other:w #1 = \s_@@_stop
- \@@_has_false:w \s_@@_mark \s_@@_stop \use_i:nn
- #2
- \@@_loop_other:NNw #3 \s_@@_mark
- { }
+ \cs_new:Npn \@@_clean_up_other:w
+ ##1 \s_@@_nil \s_@@_mark \@@_split_other_auxi:w \s_@@_stop \s_@@_mark
+ {
+ \@@_if_blank:w ##1 \s_@@_nil \s_@@_stop \@@_blank_true:w
+ \s_@@_mark \s_@@_stop \use:n
+ { \@@_trim:nN { ##1 } \@@_key:nNN }
+ }
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[EXP]{\@@_split_other:w}
-% \begin{macro}[EXP]{\@@_split_other:nw}
-% These work exactly as \cs[no-index]{@@_split_active:wN}, just for
-% equals signs of category other.
+% \begin{macro}[EXP]{\@@_misplaced_equal_after_active_error:w}
+% \begin{macro}[EXP]{\@@_misplaced_equal_in_split_error:w}
+% All these two macros do is gobble the remainder of the current other loop
+% execution and throw an error.
% \begin{macrocode}
-\cs_new:Npn \@@_split_other:w #1 =
- { \@@_trim:nN { #1 } \@@_split_other:nw \s_@@_mark }
-\cs_new:Npn \@@_split_other:nw #1 #2 = #3 \s_@@_stop
- {
- \@@_if_empty:w \s_@@_mark #3 \s_@@_stop
- \@@_has_false:w \s_@@_mark \s_@@_stop \use_i:nn
- { \@@_misplaced_equal_error: \use_none:n }
- { \@@_trim:nN { #2 } \@@_key_val:nnN { #1 } }
- }
+ \cs_new:Npn \@@_misplaced_equal_after_active_error:w
+ \s_@@_mark ##1 \s_@@_stop \s_@@_mark ##2 \s_@@_nil
+ \s_@@_mark ##3 \s_@@_nil ##4 ##5
+ {
+ \__kernel_msg_expandable_error:nn
+ { kernel } { misplaced-equals-sign }
+ }
+ \cs_new:Npn \@@_misplaced_equal_in_split_error:w
+ \s_@@_mark ##1 \s_@@_stop \s_@@_mark ##2 \s_@@_nil
+ ##3 ##4 ##5
+ {
+ \__kernel_msg_expandable_error:nn
+ { kernel } { misplaced-equals-sign }
+ }
% \end{macrocode}
% \end{macro}
% \end{macro}
%
-% \begin{macro}[EXP]{\@@_key:nN}
-% This will get the current key with spaces trimmed and \meta{function_1} as
-% its arguments. All it has to do is put them in an \cs{exp_not:n} and reorder
-% them.
+% \begin{macro}[EXP]{\@@_end_loop_other:w, \@@_end_loop_active:w}
+% All that's left for the parsing loops are the macros which end the
+% recursion. Both just gobble the remaining tokens of the respective loop
+% including the next recursion call.
% \begin{macrocode}
-\cs_new:Npn \@@_key:nN #1 #2
- { \exp_not:n { #2 { #1 } } }
+ \cs_new:Npn \@@_end_loop_other:w
+ \s_@@_tail
+ \@@_split_active:w ##1 \s_@@_nil
+ \s_@@_mark \@@_split_active_auxi:w
+ #2 \s_@@_mark \@@_clean_up_active:w
+ \s_@@_stop
+ ##2 ##3
+ \@@_loop_other:NNw ##4 \s_@@_mark
+ { }
+ \cs_new:Npn \@@_end_loop_active:w
+ \s_@@_tail
+ \@@_loop_other:NNw ##1 , \s_@@_tail ,
+ \@@_loop_active:NNw ##2 \s_@@_mark
+ { }
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[EXP]{\@@_key_val:nnN}
-% This will get the key name and value with spaces trimmed. It has to
-% assert that the key name isn't empty. Afterwards put them into an
-% \cs{exp_not:n} together with \meta{function_2}. If the key is empty they are
-% gobbled instead.
+% The parsing loops are done, so here ends the definition of \cs{@@_tmp:NN},
+% which will finally set up the macros.
% \begin{macrocode}
-\cs_new:Npn \@@_key_val:nnN #1 #2 #3
+ }
+ \char_set_catcode_active:n { `\, }
+ \char_set_catcode_active:n { `\= }
+ \@@_tmp:NN , =
+\group_end:
+% \end{macrocode}
+%
+% \begin{macro}[EXP]{\@@_pair:nnNN, \@@_key:nNN}
+% These macros will be called on the parsed keys and values of the key--value
+% list. All arguments are completely trimmed. They test for blank key names
+% and call the functions passed to \cs{keyval_parse:NNn} inside of
+% \cs{exp_not:n} with the correct arguments.
+% \begin{macrocode}
+\cs_new:Npn \@@_pair:nnNN #1 #2 #3 #4
+ {
+ \@@_if_blank:w \s_@@_mark #2 \s_@@_nil \s_@@_stop \@@_blank_key_error:w
+ \s_@@_mark \s_@@_stop
+ \exp_not:n { #4 { #2 } { #1 } }
+ }
+\cs_new:Npn \@@_key:nNN #1 #2 #3
{
- \@@_if_empty:w \s_@@_mark #2 \s_@@_stop
- \@@_empty_key:w \s_@@_mark \s_@@_stop
- \exp_not:n { #3 { #2 } { #1 } }
+ \@@_if_blank:w \s_@@_mark #1 \s_@@_nil \s_@@_stop \@@_blank_key_error:w
+ \s_@@_mark \s_@@_stop
+ \exp_not:n { #2 { #1 } }
}
% \end{macrocode}
% \end{macro}
@@ -1143,46 +1253,31 @@
% with an arbitrary token following the argument. Each of these utilize the
% fact that the argument will contain a leading \cs{s_@@_mark}.
% \begin{macrocode}
-\cs_new:Npn \@@_if_empty:w #1 \s_@@_mark \s_@@_stop {}
+\cs_new:Npn \@@_if_empty:w #1 \s_@@_mark \s_@@_stop { }
\cs_new:Npn \@@_if_blank:w \s_@@_mark #1 { \@@_if_empty:w \s_@@_mark }
-\cs_new:Npn \@@_if_recursion_tail:w #1 \s_@@_mark \s_@@_tail {}
+\cs_new:Npn \@@_if_recursion_tail:w \s_@@_mark #1 \s_@@_tail { }
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}[EXP]{\@@_has_false:w,\@@_blank_true:w,\@@_empty_key:w}
+% \begin{macro}[EXP]{\@@_blank_true:w,\@@_blank_key_error:w}
% These macros will be called if the tests above didn't gobble them, they
% execute the branching.
% \begin{macrocode}
-\cs_new:Npn \@@_has_false:w \s_@@_mark \s_@@_stop \use_i:nn #1 #2 { #2 }
-\cs_new:Npn \@@_blank_true:w \s_@@_mark \s_@@_stop \use:n #1 {}
-\cs_new:Npn \@@_empty_key:w \s_@@_mark \s_@@_stop \exp_not:n #1
- { \@@_misplaced_equal_error: }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_if_has_equal_other:w}
-% Another test that works by gobbling tokens until a specific one is hit.
-% \begin{macrocode}
-\cs_new:Npn \@@_if_has_equal_other:w #1 =
- { \@@_if_empty:w \s_@@_mark }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\@@_misplaced_equal_error:}
-% Just throw an error expandably. This is hid inside a macro so that other
-% macros don't have to gobble so many tokens, which increases speed for
-% correct input. This will marginally slow down the error case, but that
-% doesn't have to be fast anyway.
-% \begin{macrocode}
-\cs_new:Npn \@@_misplaced_equal_error:
- { \__kernel_msg_expandable_error:nn { kernel } { misplaced-equals-sign } }
+\cs_new:Npn \@@_blank_true:w \s_@@_mark \s_@@_stop \use:n #1 #2 #3 { }
+\cs_new:Npn \@@_blank_key_error:w \s_@@_mark \s_@@_stop \exp_not:n #1
+ {
+ \__kernel_msg_expandable_error:nn
+ { kernel } { blank-key-name }
+ }
% \end{macrocode}
% \end{macro}
%
-% One message for the low level parsing system.
+% Two messages for the low level parsing system.
% \begin{macrocode}
\__kernel_msg_new:nnn { kernel } { misplaced-equals-sign }
{ Misplaced~equals~sign~in~key-value~input~\msg_line_context: }
+\__kernel_msg_new:nnn { kernel } { blank-key-name }
+ { Blank~key~name~in~key-value~input~\msg_line_context: }
% \end{macrocode}
%
% \begin{macro}[EXP]{\@@_trim:nN}
@@ -1203,7 +1298,7 @@
\@@_trim_auxi:w
##1
\s_@@_nil
- \s_@@_mark #1 {}
+ \s_@@_mark #1 { }
\s_@@_mark \@@_trim_auxii:w
\@@_trim_auxiii:w
#1 \s_@@_nil
@@ -1482,11 +1577,11 @@
\cs_if_exist:cTF { \c_@@_props_root_str \l_@@_property_str }
{ \@@_define_code:n {#2} }
{
- \str_if_empty:NF \l_@@_property_str
- {
- \__kernel_msg_error:nnxx { kernel } { key-property-unknown }
- { \l_@@_property_str } { \l_keys_path_str }
- }
+ \str_if_empty:NF \l_@@_property_str
+ {
+ \__kernel_msg_error:nnxx { kernel } { key-property-unknown }
+ { \l_@@_property_str } { \l_keys_path_str }
+ }
}
}
% \end{macrocode}
@@ -2729,7 +2824,7 @@
}
{
\__kernel_msg_error:nnxx { kernel } { key-unknown }
- { \l_keys_path_str } { \l_@@_module_str }
+ { \l_keys_path_str } { \l_@@_module_str }
}
}
}
diff --git a/macros/latex/contrib/l3kernel/l3legacy.dtx b/macros/latex/contrib/l3kernel/l3legacy.dtx
index 1c017035de..b491255503 100644
--- a/macros/latex/contrib/l3kernel/l3legacy.dtx
+++ b/macros/latex/contrib/l3kernel/l3legacy.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-05-11}
+% \date{Released 2020-05-14}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3luatex.dtx b/macros/latex/contrib/l3kernel/l3luatex.dtx
index 5b3c8243fe..fd8c5ed6e0 100644
--- a/macros/latex/contrib/l3kernel/l3luatex.dtx
+++ b/macros/latex/contrib/l3kernel/l3luatex.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-05-11}
+% \date{Released 2020-05-14}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3msg.dtx b/macros/latex/contrib/l3kernel/l3msg.dtx
index feb233bf54..5547c3ddc7 100644
--- a/macros/latex/contrib/l3kernel/l3msg.dtx
+++ b/macros/latex/contrib/l3kernel/l3msg.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-05-11}
+% \date{Released 2020-05-14}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3names.dtx b/macros/latex/contrib/l3kernel/l3names.dtx
index 2878654f58..3f9a7309c9 100644
--- a/macros/latex/contrib/l3kernel/l3names.dtx
+++ b/macros/latex/contrib/l3kernel/l3names.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-05-11}
+% \date{Released 2020-05-14}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3news.pdf b/macros/latex/contrib/l3kernel/l3news.pdf
index d3d8cd3d8a..5d5f7c9e6e 100644
--- a/macros/latex/contrib/l3kernel/l3news.pdf
+++ b/macros/latex/contrib/l3kernel/l3news.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news01.pdf b/macros/latex/contrib/l3kernel/l3news01.pdf
index e7e64883a3..214fd413d7 100644
--- a/macros/latex/contrib/l3kernel/l3news01.pdf
+++ b/macros/latex/contrib/l3kernel/l3news01.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news02.pdf b/macros/latex/contrib/l3kernel/l3news02.pdf
index 54d75387b2..3842c435e3 100644
--- a/macros/latex/contrib/l3kernel/l3news02.pdf
+++ b/macros/latex/contrib/l3kernel/l3news02.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news03.pdf b/macros/latex/contrib/l3kernel/l3news03.pdf
index 60aa4d7d5d..b8be0aefda 100644
--- a/macros/latex/contrib/l3kernel/l3news03.pdf
+++ b/macros/latex/contrib/l3kernel/l3news03.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news04.pdf b/macros/latex/contrib/l3kernel/l3news04.pdf
index 2165c12d76..a63902984d 100644
--- a/macros/latex/contrib/l3kernel/l3news04.pdf
+++ b/macros/latex/contrib/l3kernel/l3news04.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news05.pdf b/macros/latex/contrib/l3kernel/l3news05.pdf
index 56d2d5f600..db82fc240e 100644
--- a/macros/latex/contrib/l3kernel/l3news05.pdf
+++ b/macros/latex/contrib/l3kernel/l3news05.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news06.pdf b/macros/latex/contrib/l3kernel/l3news06.pdf
index 4c0f81e8cb..cfd3bd38e4 100644
--- a/macros/latex/contrib/l3kernel/l3news06.pdf
+++ b/macros/latex/contrib/l3kernel/l3news06.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news07.pdf b/macros/latex/contrib/l3kernel/l3news07.pdf
index f90ddaf6b1..d78833f8b5 100644
--- a/macros/latex/contrib/l3kernel/l3news07.pdf
+++ b/macros/latex/contrib/l3kernel/l3news07.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news08.pdf b/macros/latex/contrib/l3kernel/l3news08.pdf
index 0061ae2c85..5757976cef 100644
--- a/macros/latex/contrib/l3kernel/l3news08.pdf
+++ b/macros/latex/contrib/l3kernel/l3news08.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news09.pdf b/macros/latex/contrib/l3kernel/l3news09.pdf
index 149274576f..6be892cf79 100644
--- a/macros/latex/contrib/l3kernel/l3news09.pdf
+++ b/macros/latex/contrib/l3kernel/l3news09.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news10.pdf b/macros/latex/contrib/l3kernel/l3news10.pdf
index c6b222cbb4..b79ce66624 100644
--- a/macros/latex/contrib/l3kernel/l3news10.pdf
+++ b/macros/latex/contrib/l3kernel/l3news10.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news11.pdf b/macros/latex/contrib/l3kernel/l3news11.pdf
index ea68c02321..a6e2878426 100644
--- a/macros/latex/contrib/l3kernel/l3news11.pdf
+++ b/macros/latex/contrib/l3kernel/l3news11.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3news12.pdf b/macros/latex/contrib/l3kernel/l3news12.pdf
index d8e0127011..4988c454a7 100644
--- a/macros/latex/contrib/l3kernel/l3news12.pdf
+++ b/macros/latex/contrib/l3kernel/l3news12.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3prefixes.csv b/macros/latex/contrib/l3kernel/l3prefixes.csv
index bf6e968edc..ad48bfaa10 100644
--- a/macros/latex/contrib/l3kernel/l3prefixes.csv
+++ b/macros/latex/contrib/l3kernel/l3prefixes.csv
@@ -40,6 +40,7 @@ csvsim,csvsimple,Thomas F. Sturm,https://github.com/T-F-S/csvsimple,https://gith
ctex,ctex,Qing Lee,https://github.com/CTeX-org/ctex-kit,https://github.com/CTeX-org/ctex-kit.git,https://github.com/CTeX-org/ctex-kit/issues,2014-03-08,2014-03-08,
ctuthesis,ctuthesis,Tom Hejda,https://github.com/tohecz/ctuthesis,https://github.com/tohecz/ctuthesis.git,https://github.com/tohecz/ctuthesis/issues,2015-07-26,2015-07-26,
debug,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2017-07-15,2017-07-15,
+denisbdoc,denisbdoc,Denis Bitouzé,https://github.com/dbitouze/denisbdoc,git@github.com:dbitouze/denisbdoc.git,2020-05-13,2020-05-13,
deriv,derivative,Simon Jensen,,,,2019-07-24,2019-07-24,
diffcoeff,diffcoeff,Andrew Parsloe,,,,2019-08-26,2019-08-26,
dim,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
@@ -81,6 +82,7 @@ ghsystem,ghsystem,Clemens Niederberger,https://github.com/cgnieder/ghsystem/,htt
graph,lt3graph,Michiel Helvensteijn,,,,2014-02-05,2014-02-05,
group,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
gtl,gtl,Bruno Le Floch,https://github.com/blefloch/latex-gtl,https://github.com/blefloch/latex-gtl.git,https://github.com/blefloch/latex-gtl/issues,2015-09-22,2015-09-22,
+gzt,gzt,Denis Bitouzé,https://github.com/dbitouze/gzt,git@github.com:dbitouze/gzt.git,2020-05-13,2020-05-13,
hash,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
hbox,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
hcoffin,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-28,2012-09-28,
@@ -123,6 +125,7 @@ nil,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https:
no,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
notestobib,notes2bib,Joseph Wright,https://github.com/josephwright/notes2bib,https://github.com/josephwright/notes2bib.git,https://github.com/josephwright/notes2bib/issues,2012-11-07,2012-11-07,
novalue,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
+nwejm,nwejm,Denis Bitouzé,https://github.com/dbitouze/nwejm,git@github.com:dbitouze/nwejm.git,2020-05-13,2020-05-13,
ocgbase,ocgx2,Alexander Grahn,,https://gitlab.com/agrahn/ocgx2,https://gitlab.com/agrahn/ocgx2/issues,2016-02-26,2020-04-15,
ocgxii,ocgx2,Alexander Grahn,,https://gitlab.com/agrahn/ocgx2,https://gitlab.com/agrahn/ocgx2/issues,2016-02-26,2020-04-15,
one,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
diff --git a/macros/latex/contrib/l3kernel/l3prefixes.pdf b/macros/latex/contrib/l3kernel/l3prefixes.pdf
index fbf3f14164..3b412e4338 100644
--- a/macros/latex/contrib/l3kernel/l3prefixes.pdf
+++ b/macros/latex/contrib/l3kernel/l3prefixes.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3prg.dtx b/macros/latex/contrib/l3kernel/l3prg.dtx
index d14576f08c..34a14829c7 100644
--- a/macros/latex/contrib/l3kernel/l3prg.dtx
+++ b/macros/latex/contrib/l3kernel/l3prg.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-05-11}
+% \date{Released 2020-05-14}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3prop.dtx b/macros/latex/contrib/l3kernel/l3prop.dtx
index c586164260..33741fecf0 100644
--- a/macros/latex/contrib/l3kernel/l3prop.dtx
+++ b/macros/latex/contrib/l3kernel/l3prop.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-05-11}
+% \date{Released 2020-05-14}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3quark.dtx b/macros/latex/contrib/l3kernel/l3quark.dtx
index f513fcb026..9068f7bbec 100644
--- a/macros/latex/contrib/l3kernel/l3quark.dtx
+++ b/macros/latex/contrib/l3kernel/l3quark.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-05-11}
+% \date{Released 2020-05-14}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3regex.dtx b/macros/latex/contrib/l3kernel/l3regex.dtx
index 7c2d8e7504..80e2ffa896 100644
--- a/macros/latex/contrib/l3kernel/l3regex.dtx
+++ b/macros/latex/contrib/l3kernel/l3regex.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-05-11}
+% \date{Released 2020-05-14}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3seq.dtx b/macros/latex/contrib/l3kernel/l3seq.dtx
index 56c4bc1fda..830adba2cb 100644
--- a/macros/latex/contrib/l3kernel/l3seq.dtx
+++ b/macros/latex/contrib/l3kernel/l3seq.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-05-11}
+% \date{Released 2020-05-14}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3skip.dtx b/macros/latex/contrib/l3kernel/l3skip.dtx
index 8cfd78d6f1..a4973652c1 100644
--- a/macros/latex/contrib/l3kernel/l3skip.dtx
+++ b/macros/latex/contrib/l3kernel/l3skip.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2020-05-11}
+% \date{Released 2020-05-14}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3sort.dtx b/macros/latex/contrib/l3kernel/l3sort.dtx
index 6b41acfe3e..89c085f778 100644
--- a/macros/latex/contrib/l3kernel/l3sort.dtx
+++ b/macros/latex/contrib/l3kernel/l3sort.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-05-11}
+% \date{Released 2020-05-14}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3str-convert.dtx b/macros/latex/contrib/l3kernel/l3str-convert.dtx
index 4620342091..88bf391f25 100644
--- a/macros/latex/contrib/l3kernel/l3str-convert.dtx
+++ b/macros/latex/contrib/l3kernel/l3str-convert.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2020-05-11}
+% \date{Released 2020-05-14}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3str.dtx b/macros/latex/contrib/l3kernel/l3str.dtx
index d4cbc2bb49..d15ee54ed1 100644
--- a/macros/latex/contrib/l3kernel/l3str.dtx
+++ b/macros/latex/contrib/l3kernel/l3str.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-05-11}
+% \date{Released 2020-05-14}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3styleguide.pdf b/macros/latex/contrib/l3kernel/l3styleguide.pdf
index eb0878701d..caccebc3f6 100644
--- a/macros/latex/contrib/l3kernel/l3styleguide.pdf
+++ b/macros/latex/contrib/l3kernel/l3styleguide.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3styleguide.tex b/macros/latex/contrib/l3kernel/l3styleguide.tex
index 16d5983a04..0f04182896 100644
--- a/macros/latex/contrib/l3kernel/l3styleguide.tex
+++ b/macros/latex/contrib/l3kernel/l3styleguide.tex
@@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2020-05-11}
+\date{Released 2020-05-14}
\begin{document}
diff --git a/macros/latex/contrib/l3kernel/l3syntax-changes.pdf b/macros/latex/contrib/l3kernel/l3syntax-changes.pdf
index 44c75ca2e3..5366e6446b 100644
--- a/macros/latex/contrib/l3kernel/l3syntax-changes.pdf
+++ b/macros/latex/contrib/l3kernel/l3syntax-changes.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3syntax-changes.tex b/macros/latex/contrib/l3kernel/l3syntax-changes.tex
index 0bc6adc9ac..c11fe2002f 100644
--- a/macros/latex/contrib/l3kernel/l3syntax-changes.tex
+++ b/macros/latex/contrib/l3kernel/l3syntax-changes.tex
@@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2020-05-11}
+\date{Released 2020-05-14}
\newcommand{\TF}{\textit{(TF)}}
diff --git a/macros/latex/contrib/l3kernel/l3sys.dtx b/macros/latex/contrib/l3kernel/l3sys.dtx
index feef711735..fe96f7aec5 100644
--- a/macros/latex/contrib/l3kernel/l3sys.dtx
+++ b/macros/latex/contrib/l3kernel/l3sys.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-05-11}
+% \date{Released 2020-05-14}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3term-glossary.pdf b/macros/latex/contrib/l3kernel/l3term-glossary.pdf
index 974430a84b..06e770e291 100644
--- a/macros/latex/contrib/l3kernel/l3term-glossary.pdf
+++ b/macros/latex/contrib/l3kernel/l3term-glossary.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/l3term-glossary.tex b/macros/latex/contrib/l3kernel/l3term-glossary.tex
index eab4b9053c..3e35a2e3b8 100644
--- a/macros/latex/contrib/l3kernel/l3term-glossary.tex
+++ b/macros/latex/contrib/l3kernel/l3term-glossary.tex
@@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2020-05-11}
+\date{Released 2020-05-14}
\newcommand{\TF}{\textit{(TF)}}
diff --git a/macros/latex/contrib/l3kernel/l3text-case.dtx b/macros/latex/contrib/l3kernel/l3text-case.dtx
index ad71e49319..51819ed514 100644
--- a/macros/latex/contrib/l3kernel/l3text-case.dtx
+++ b/macros/latex/contrib/l3kernel/l3text-case.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-05-11}
+% \date{Released 2020-05-14}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3text-purify.dtx b/macros/latex/contrib/l3kernel/l3text-purify.dtx
index 070e41956f..54266ba72c 100644
--- a/macros/latex/contrib/l3kernel/l3text-purify.dtx
+++ b/macros/latex/contrib/l3kernel/l3text-purify.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-05-11}
+% \date{Released 2020-05-14}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3text.dtx b/macros/latex/contrib/l3kernel/l3text.dtx
index 5113e03cc9..0f8f24cafd 100644
--- a/macros/latex/contrib/l3kernel/l3text.dtx
+++ b/macros/latex/contrib/l3kernel/l3text.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-05-11}
+% \date{Released 2020-05-14}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3tl-analysis.dtx b/macros/latex/contrib/l3kernel/l3tl-analysis.dtx
index 6fbe2f1bbb..2a6b31f537 100644
--- a/macros/latex/contrib/l3kernel/l3tl-analysis.dtx
+++ b/macros/latex/contrib/l3kernel/l3tl-analysis.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2020-05-11}
+% \date{Released 2020-05-14}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3tl.dtx b/macros/latex/contrib/l3kernel/l3tl.dtx
index 53f61e9750..b3d6c3ddac 100644
--- a/macros/latex/contrib/l3kernel/l3tl.dtx
+++ b/macros/latex/contrib/l3kernel/l3tl.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-05-11}
+% \date{Released 2020-05-14}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3token.dtx b/macros/latex/contrib/l3kernel/l3token.dtx
index 0608820bba..0ed1350b03 100644
--- a/macros/latex/contrib/l3kernel/l3token.dtx
+++ b/macros/latex/contrib/l3kernel/l3token.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-05-11}
+% \date{Released 2020-05-14}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3unicode.dtx b/macros/latex/contrib/l3kernel/l3unicode.dtx
index bc0466eeca..6f2d533f58 100644
--- a/macros/latex/contrib/l3kernel/l3unicode.dtx
+++ b/macros/latex/contrib/l3kernel/l3unicode.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-05-11}
+% \date{Released 2020-05-14}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/source3.pdf b/macros/latex/contrib/l3kernel/source3.pdf
index 21358a14f7..af4dac1c7d 100644
--- a/macros/latex/contrib/l3kernel/source3.pdf
+++ b/macros/latex/contrib/l3kernel/source3.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3kernel/source3.tex b/macros/latex/contrib/l3kernel/source3.tex
index 91b33318e5..4209a7e724 100644
--- a/macros/latex/contrib/l3kernel/source3.tex
+++ b/macros/latex/contrib/l3kernel/source3.tex
@@ -53,7 +53,7 @@ for those people who are interested.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2020-05-11}
+\date{Released 2020-05-14}
\pagenumbering{roman}
\maketitle
diff --git a/macros/latex/contrib/l3packages/CHANGELOG.md b/macros/latex/contrib/l3packages/CHANGELOG.md
index 515f5d001b..ee88f4780f 100644
--- a/macros/latex/contrib/l3packages/CHANGELOG.md
+++ b/macros/latex/contrib/l3packages/CHANGELOG.md
@@ -7,6 +7,11 @@ this project uses date-based 'snapshot' version identifiers.
## [Unreleased]
+## [2020-05-14]
+
+### Changed
+- Internal packaging of `xparse` in advance of changes to the LaTeX2e kernel
+
## [2020-03-06]
### Added
@@ -92,7 +97,8 @@ this project uses date-based 'snapshot' version identifiers.
- Switch to ISO date format
- Improve cross-module use of internal functions
-[Unreleased]: https://github.com/latex3/latex3/compare/2020-03-06...HEAD
+[Unreleased]: https://github.com/latex3/latex3/compare/2020-05-14...HEAD
+[2020-05-14]: https://github.com/latex3/latex3/compare/2020-03-06...2020-05-14
[2020-03-06]: https://github.com/latex3/latex3/compare/2020-03-03...2020-03-06
[2020-03-03]: https://github.com/latex3/latex3/compare/2020-02-25...2020-03-03
[2020-02-25]: https://github.com/latex3/latex3/compare/2020-02-14...2020-02-25
diff --git a/macros/latex/contrib/l3packages/README.md b/macros/latex/contrib/l3packages/README.md
index dbfd91cf34..8f505b0141 100644
--- a/macros/latex/contrib/l3packages/README.md
+++ b/macros/latex/contrib/l3packages/README.md
@@ -1,7 +1,7 @@
LaTeX3 High-Level Concepts
==========================
-Release 2020-03-06
+Release 2020-05-14
Overview
--------
diff --git a/macros/latex/contrib/l3packages/l3keys2e.dtx b/macros/latex/contrib/l3packages/l3keys2e.dtx
index d6701c4519..6a09bb18bd 100644
--- a/macros/latex/contrib/l3packages/l3keys2e.dtx
+++ b/macros/latex/contrib/l3packages/l3keys2e.dtx
@@ -62,7 +62,7 @@
% }^^A
% }
%
-% \date{Released 2020-03-06}
+% \date{Released 2020-05-14}
%
% \maketitle
%
@@ -139,7 +139,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-\ProvidesExplPackage{l3keys2e}{2020-03-06}{}
+\ProvidesExplPackage{l3keys2e}{2020-05-14}{}
{LaTeX2e option processing using LaTeX3 keys}
% \end{macrocode}
%
@@ -299,8 +299,8 @@
% so that there will always be a sign available.
% \begin{macrocode}
\cs_new:Npn \@@_latexe_remove_equals:n #1
- { \@@_latexe_remove_equals:w #1 = \q_stop }
-\cs_new:Npn \@@_latexe_remove_equals:w #1 = #2 \q_stop { \exp_not:n {#1} }
+ { \@@_latexe_remove_equals:w #1 = \s_@@_stop }
+\cs_new:Npn \@@_latexe_remove_equals:w #1 = #2 \s_@@_stop { \exp_not:n {#1} }
% \end{macrocode}
% \end{macro}
% \end{macro}
diff --git a/macros/latex/contrib/l3packages/l3keys2e.pdf b/macros/latex/contrib/l3packages/l3keys2e.pdf
index 497301bdf7..0611a9b979 100644
--- a/macros/latex/contrib/l3packages/l3keys2e.pdf
+++ b/macros/latex/contrib/l3packages/l3keys2e.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3packages/xfp.dtx b/macros/latex/contrib/l3packages/xfp.dtx
index afdd9e189c..e0ebede0f9 100644
--- a/macros/latex/contrib/l3packages/xfp.dtx
+++ b/macros/latex/contrib/l3packages/xfp.dtx
@@ -64,7 +64,7 @@
% }^^A
% }
%
-% \date{Released 2020-03-06}
+% \date{Released 2020-05-14}
%
% \maketitle
%
@@ -167,7 +167,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-\ProvidesExplPackage{xfp}{2020-03-06}{}
+\ProvidesExplPackage{xfp}{2020-05-14}{}
{L3 Floating point unit}
% \end{macrocode}
%
diff --git a/macros/latex/contrib/l3packages/xfp.pdf b/macros/latex/contrib/l3packages/xfp.pdf
index 2191564816..96c91d897d 100644
--- a/macros/latex/contrib/l3packages/xfp.pdf
+++ b/macros/latex/contrib/l3packages/xfp.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3packages/xfrac.dtx b/macros/latex/contrib/l3packages/xfrac.dtx
index 7be07c978e..275aa6859a 100644
--- a/macros/latex/contrib/l3packages/xfrac.dtx
+++ b/macros/latex/contrib/l3packages/xfrac.dtx
@@ -65,7 +65,7 @@
% }^^A
% }
%
-% \date{Released 2020-03-06}
+% \date{Released 2020-05-14}
%
% \maketitle
%
@@ -535,7 +535,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-\ProvidesExplPackage{xfrac}{2020-03-06}{}
+\ProvidesExplPackage{xfrac}{2020-05-14}{}
{L3 Experimental split-level fractions}
% \end{macrocode}
%
diff --git a/macros/latex/contrib/l3packages/xfrac.pdf b/macros/latex/contrib/l3packages/xfrac.pdf
index a6b5f6a7c9..9454c240a2 100644
--- a/macros/latex/contrib/l3packages/xfrac.pdf
+++ b/macros/latex/contrib/l3packages/xfrac.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3packages/xparse.dtx b/macros/latex/contrib/l3packages/xparse.dtx
index f56bcdf5e9..c700434903 100644
--- a/macros/latex/contrib/l3packages/xparse.dtx
+++ b/macros/latex/contrib/l3packages/xparse.dtx
@@ -67,7 +67,7 @@
% }^^A
% }
%
-% \date{Released 2020-03-06}
+% \date{Released 2020-05-14}
%
% \maketitle
%
@@ -304,7 +304,7 @@
% follow such a command. The most common example is the use of \cmd{\\} in
% \pkg{amsmath} environments. In \pkg{xparse} terms it has signature
% \begin{verbatim}
-% \DeclareDocumentCommad \\ { !s !o } { ... }
+% \DeclareDocumentCommand \\ { !s !o } { ... }
% \end{verbatim}
%
% \subsection{Required delimited arguments}
@@ -993,7 +993,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-\ProvidesExplPackage{xparse}{2020-03-06}{}
+\ProvidesExplPackage{xparse}{2020-05-14}{}
{L3 Experimental document command parser}
% \end{macrocode}
%
@@ -1019,22 +1019,31 @@
% \end{variable}
% \end{variable}
%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+%
% \subsection{Reload check}
%
% A simple reload check.
% \begin{macrocode}
+%<*core>
\cs_if_exist:NT \NewDocumentCommand
{ \file_input_stop: }
+%</core>
% \end{macrocode}
%
+% Load the core code.
% \begin{macrocode}
-%</package>
+%<*2ekernel|package>
+\file_input:n { xparse-generic.tex }
+%</2ekernel|package>
% \end{macrocode}
%
% \subsection{Variables and constants}
%
% \begin{macrocode}
-%<*package|2ekernel>
+%<*!package>
% \end{macrocode}
%
% \begin{variable}{\c_@@_special_chars_seq}
@@ -1049,6 +1058,17 @@
% \end{macrocode}
% \end{variable}
%
+% \begin{macrocode}
+%<*core>
+\if_charcode:w xx
+ \cs_new:Npn \@@_file_end_hook: { }
+\else
+ \ExplSyntaxOn
+ \cs_new:Npn \@@_file_end_hook: { \ExplSyntaxOff }
+\fi:
+%</core>
+% \end{macrocode}
+%
% \begin{variable}{\l_@@_arg_spec_tl}
% Holds the argument specification after normalization of shorthands.
% \begin{macrocode}
@@ -1477,9 +1497,9 @@
%<*initex>
\cs_if_exist:cTF { environment~ \l_@@_environment_str }
%</initex>
-%<*package|2ekernel>
+%<*core>
\cs_if_exist:cTF { \l_@@_environment_str }
-%</package|2ekernel>
+%</core>
{
\__kernel_msg_info:nnxx { xparse } { redefine-environment }
{ \l_@@_environment_str } { \tl_to_str:n {#2} }
@@ -1525,10 +1545,10 @@
\cs_generate_from_arg_count:cNnn
{ environment~ #1 ~end~aux~ } \cs_set:Npn
\l_@@_current_arg_int {#4}
-%<*package|2ekernel>
+%<*core>
\cs_set_eq:cc {#1} { environment~ #1 }
\cs_set_eq:cc { end #1 } { environment~ #1 ~end }
-%</package|2ekernel>
+%</core>
}
}
% \end{macrocode}
@@ -1548,9 +1568,9 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_start_env:nnnnn #1#2
{
-%<*package|2ekernel>
+%<*core>
\cs_if_exist_use:N \conditionally@traceoff
-%</package|2ekernel>
+%</core>
\str_set:Nn \l_@@_environment_str {#2}
\bool_set_true:N \l_@@_environment_bool
\@@_start_aux:ccnnnn
@@ -1560,9 +1580,9 @@
}
\cs_new_protected:Npx \@@_start:nNNnnn #1#2#3
{
-%<*package|2ekernel>
+%<*core>
\exp_not:n { \cs_if_exist_use:N \conditionally@traceoff }
-%</package|2ekernel>
+%</core>
\exp_not:c { xparse~function~is~not~expandable }
\exp_not:n { \bool_set_false:N \l_@@_environment_bool }
\exp_not:N \@@_start_aux:NNnnnn
@@ -1599,9 +1619,9 @@
{
\tl_if_empty:NF \l_@@_defaults_tl { \@@_defaults: }
\tl_if_empty:NF \l_@@_process_all_tl { \@@_args_process: }
-%<*package|2ekernel>
+%<*core>
\cs_if_exist_use:N \conditionally@traceon
-%</package|2ekernel>
+%</core>
\exp_after:wN \l_@@_fn_code_tl \l_@@_args_tl
}
% \end{macrocode}
@@ -1885,11 +1905,39 @@
\int_incr:N \l_@@_current_arg_int
\cs_if_exist_use:cF { @@_normalize_type_ \tl_to_str:n {#1} :w }
{
+ \bool_lazy_any:nTF
+ {
+ { \str_if_eq_p:nn {#1} { G } }
+ { \str_if_eq_p:nn {#1} { g } }
+ { \str_if_eq_p:nn {#1} { l } }
+ { \str_if_eq_p:nn {#1} { u } }
+ }
+ {
+ \__kernel_msg_error:nnxx { xparse } { xparse-argument-type }
+ { \@@_environment_or_command: } { \tl_to_str:n {#1} }
+ }
+ {
+ \__kernel_msg_error:nnxx { xparse } { unknown-argument-type }
+ { \@@_environment_or_command: } { \tl_to_str:n {#1} }
+ }
+ \@@_bad_def:wn
+ }
+ }
+%</!package>
+%<*package>
+\cs_gset_protected:Npn \@@_normalize_arg_spec_loop:n #1
+ {
+ \quark_if_recursion_tail_stop:n {#1}
+ \int_incr:N \l_@@_current_arg_int
+ \cs_if_exist_use:cF { @@_normalize_type_ \tl_to_str:n {#1} :w }
+ {
\__kernel_msg_error:nnxx { xparse } { unknown-argument-type }
{ \@@_environment_or_command: } { \tl_to_str:n {#1} }
\@@_bad_def:wn
}
}
+%</package>
+%<*!package>
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -1923,8 +1971,6 @@
\quark_if_recursion_tail_stop_do:nn {##1} { \@@_bad_arg_spec:wn }
\@@_normalize_type_E:w {##1} { }
}
- \cs_new_protected:Npn \@@_normalize_type_g:w
- { \@@_normalize_type_G:w {#1} }
\cs_new_protected:Npn \@@_normalize_type_o:w
{ \@@_normalize_type_D:w [ ] {#1} }
\cs_new_protected:Npn \@@_normalize_type_O:w
@@ -1938,6 +1984,12 @@
{ \@@_normalize_type_t:w * }
}
\exp_args:No \@@_tmp:w { \c_novalue_tl }
+%</!package>
+%<*package>
+\cs_new_protected:Npx \@@_normalize_type_g:w
+ { \exp_not:N \@@_normalize_type_G:w { \exp_not:V \c_novalue_tl } }
+%</package>
+%<*!package>
% \end{macrocode}
% \end{macro}
%
@@ -2051,6 +2103,8 @@
\@@_normalize_E_unique_check:w #2 \q_stop
}
}
+%</!package>
+%<*package>
\cs_new_protected:Npn \@@_normalize_type_G:w #1
{
\quark_if_recursion_tail_stop_do:nn {#1} { \@@_bad_arg_spec:wn }
@@ -2059,6 +2113,8 @@
\tl_put_right:Nn \l_@@_last_delimiters_tl { { } }
\@@_normalize_arg_spec_loop:n
}
+%</package>
+%<*!package>
\cs_new_protected:Npn \@@_normalize_type_t:w #1
{
\quark_if_recursion_tail_stop_do:Nn #1 { \@@_bad_arg_spec:wn }
@@ -2095,12 +2151,16 @@
% \cs{l_@@_arg_spec_tl}, count the mandatory argument, and empty the
% list of last delimiters.
% \begin{macrocode}
+%</!package>
+%<*package>
\cs_new_protected:Npn \@@_normalize_type_l:w
{
\@@_normalize_check_lu:N l
\@@_add_arg_spec_mandatory:n { l }
\@@_normalize_arg_spec_loop:n
}
+%</package>
+%<*!package>
\cs_new_protected:Npn \@@_normalize_type_m:w
{
\@@_delimiter_check:nnn { } { m } { \iow_char:N \{ }
@@ -2117,6 +2177,8 @@
\@@_add_arg_spec_mandatory:n { R #1 #2 {#3} }
\@@_normalize_arg_spec_loop:n
}
+%</!package>
+%<*package>
\cs_new_protected:Npn \@@_normalize_type_u:w #1
{
\quark_if_recursion_tail_stop_do:nn {#1} { \@@_bad_arg_spec:wn }
@@ -2124,6 +2186,8 @@
\@@_add_arg_spec_mandatory:n { u {#1} }
\@@_normalize_arg_spec_loop:n
}
+%</package>
+%<*!package>
\cs_new_protected:Npn \@@_normalize_type_v:w
{
\@@_normalize_check_gv:N v
@@ -2482,6 +2546,8 @@
% For the \texttt{G} type, the grabber and the default are added to the
% signature.
% \begin{macrocode}
+%</!package>
+%<*package>
\cs_new_protected:Npn \@@_add_type_G:w #1
{
\@@_flush_m_args:
@@ -2503,6 +2569,8 @@
\@@_add_grabber:N l
\@@_prepare_signature:N
}
+%</package>
+%<*!package>
% \end{macrocode}
% \end{macro}
%
@@ -2558,6 +2626,8 @@
% At the set up stage, the \texttt{u} type argument is identical to the
% \texttt{G} type except for the name of the grabber function.
% \begin{macrocode}
+%</!package>
+%<*package>
\cs_new_protected:Npn \@@_add_type_u:w #1
{
\@@_flush_m_args:
@@ -2566,6 +2636,8 @@
\tl_put_right:Nn \l_@@_signature_tl { {#1} }
\@@_prepare_signature:N
}
+%</package>
+%<*!package>
% \end{macrocode}
% \end{macro}
%
@@ -2784,8 +2856,12 @@
% parameter text ends with |#| in fact end up being delimited by an
% open brace.
% \begin{macrocode}
+%</!package>
+%<*package>
\cs_new_protected:Npn \@@_add_expandable_type_l:w
{ \@@_add_expandable_type_u:w ## }
+%</package>
+%<*!package>
% \end{macrocode}
% \end{macro}
%
@@ -2834,6 +2910,8 @@
% Define an auxiliary that will be used directly in the signature. It
% grabs one argument delimited by |#1| and places it before \cs{q_@@}.
% \begin{macrocode}
+%</!package>
+%<*package>
\cs_new_protected:Npn \@@_add_expandable_type_u:w #1
{
\@@_add_default:
@@ -2846,6 +2924,8 @@
{ \exp_not:c { \l_@@_expandable_aux_name_tl } }
\@@_prepare_signature:N
}
+%</package>
+%<*!package>
% \end{macrocode}
% \end{macro}
%
@@ -3249,6 +3329,8 @@
% Optional groups are checked by meaning, so that the same code will
% work with, for example, \ConTeXt{}-like input.
% \begin{macrocode}
+%</!package>
+%<*package>
\cs_new_protected:Npn \@@_grab_G:w #1 \@@_run_code:
{
\@@_grab_G_aux:nNN {#1} \cs_set_protected_nopar:Npn
@@ -3278,6 +3360,8 @@
{ \l_@@_fn_tl }
{ \@@_add_arg:o \c_novalue_tl }
}
+%</package>
+%<*!package>
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -3290,6 +3374,8 @@
% \begin{macro}{\@@_grab_l_aux:nN}
% Argument grabbers for mandatory \TeX{} arguments are pretty simple.
% \begin{macrocode}
+%</!package>
+%<*package>
\cs_new_protected:Npn \@@_grab_l:w #1 \@@_run_code:
{ \@@_grab_l_aux:nN {#1} \cs_set_protected_nopar:Npn }
\cs_new_protected:Npn \@@_grab_l_long:w #1 \@@_run_code:
@@ -3301,6 +3387,8 @@
{ \@@_add_arg:n {##1} }
\l_@@_fn_tl
}
+%</package>
+%<*!package>
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -3472,6 +3560,8 @@
% Grabbing up to a list of tokens is quite easy: define the grabber,
% and then collect.
% \begin{macrocode}
+%</!package>
+%<*package>
\cs_new_protected:Npn \@@_grab_u:w #1#2 \@@_run_code:
{ \@@_grab_u_aux:nnN {#1} {#2} \cs_set_protected_nopar:Npn }
\cs_new_protected:Npn \@@_grab_u_long:w #1#2 \@@_run_code:
@@ -3483,6 +3573,8 @@
{ \@@_add_arg:n {##1} }
\l_@@_fn_tl
}
+%</package>
+%<*!package>
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -3694,10 +3786,10 @@
\c_@@_special_chars_seq
\char_set_catcode_other:N
%</initex>
-%<*package|2ekernel>
+%<*core>
\cs_set_eq:NN \do \char_set_catcode_other:N
\dospecials
-%</package|2ekernel>
+%</core>
\tex_endlinechar:D = `\^^M \scan_stop:
\bool_if:NTF \l_@@_long_bool
{ \char_set_catcode_other:n { \tex_endlinechar:D } }
@@ -4762,6 +4854,13 @@
The~letter~'#2'~does~not~specify~a~known~argument~type.
\c_@@_ignore_def_tl
}
+\__kernel_msg_new:nnnn { xparse } { xparse-argument-type }
+ { Deprecated~argument~type~'#2'~for~the~#1~requires~xparse. }
+ {
+ The~letter~'#2'~specifies~a~known~argument~type~that~requires~
+ the~xparse~package.
+ \c_@@_ignore_def_tl
+ }
% \end{macrocode}
%
% Errors when using commands/environments. The \texttt{if-boolean}
@@ -5112,18 +5211,15 @@
%
% \begin{macrocode}
%<*2ekernel>
-% \end{macrocode}
-%
-% \begin{macrocode}
\ExplSyntaxOff
-% \end{macrocode}
-%
-% \begin{macrocode}
%</2ekernel>
% \end{macrocode}
%
% \begin{macrocode}
-%</package|2ekernel>
+%<*core>
+\@@_file_end_hook:
+%</core>
+%</!package>
% \end{macrocode}
%
% \end{implementation}
diff --git a/macros/latex/contrib/l3packages/xparse.ins b/macros/latex/contrib/l3packages/xparse.ins
index d40f7cd6f2..17a94782a4 100644
--- a/macros/latex/contrib/l3packages/xparse.ins
+++ b/macros/latex/contrib/l3packages/xparse.ins
@@ -42,7 +42,8 @@ and all files in that bundle must be distributed together.
\keepsilent
-\generate{\file{xparse.sty} {\from{xparse.dtx} {package}}
- \file{xparse.ltx} {\from{xparse.dtx} {2ekernel}}}
+\generate{\file{xparse-generic.tex}{\from{xparse.dtx}{core}}
+ \file{xparse.sty}{\from{xparse.dtx}{package}}
+ \file{xparse.ltx}{\from{xparse.dtx}{2ekernel}}}
\endbatchfile
diff --git a/macros/latex/contrib/l3packages/xparse.pdf b/macros/latex/contrib/l3packages/xparse.pdf
index 76fe65c72b..7813fa3526 100644
--- a/macros/latex/contrib/l3packages/xparse.pdf
+++ b/macros/latex/contrib/l3packages/xparse.pdf
Binary files differ
diff --git a/macros/latex/contrib/l3packages/xtemplate.dtx b/macros/latex/contrib/l3packages/xtemplate.dtx
index 2236b30f97..897d1d3f84 100644
--- a/macros/latex/contrib/l3packages/xtemplate.dtx
+++ b/macros/latex/contrib/l3packages/xtemplate.dtx
@@ -63,7 +63,7 @@
% }^^A
% }
%
-% \date{Released 2020-03-06}
+% \date{Released 2020-05-14}
%
% \maketitle
%
@@ -682,7 +682,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-\ProvidesExplPackage{xtemplate}{2020-03-06}{}
+\ProvidesExplPackage{xtemplate}{2020-05-14}{}
{L3 Experimental prototype document functions}
% \end{macrocode}
%
@@ -858,6 +858,28 @@
% \end{macrocode}
% \end{variable}
%
+% \begin{variable}{\s_@@_mark,\s_@@_stop}
+% Internal scan marks.
+% \begin{macrocode}
+\scan_new:N \s_@@_mark
+\scan_new:N \s_@@_stop
+% \end{macrocode}
+% \end{variable}
+%
+% \begin{variable}{\q_@@_nil}
+% Internal quarks.
+% \begin{macrocode}
+\quark_new:N \q_@@_nil
+% \end{macrocode}
+% \end{variable}
+%
+% \begin{macro}[pTF]{\@@_quark_if_nil:n}
+% Branching quark conditional.
+% \begin{macrocode}
+\__kernel_quark_new_conditional:Nn \@@_quark_if_nil:N { F }
+% \end{macrocode}
+% \end{macro}
+%
% \subsection{Variant of prop functions}
%
% \begin{macro}[TF]{\prop_get:NoN}
@@ -1300,7 +1322,7 @@
{
\tl_clear:N \l_@@_key_name_tl
\exp_after:wN \@@_split_keytype_aux:w
- \l_@@_tmp_tl \q_stop
+ \l_@@_tmp_tl \s_@@_stop
}
}
{
@@ -1311,7 +1333,7 @@
\use:x
{
\cs_new_protected:Npn \exp_not:N \@@_split_keytype_aux:w
- ##1 \token_to_str:N : ##2 \exp_not:N \q_stop
+ ##1 \token_to_str:N : ##2 \s_@@_stop
{
\tl_put_right:Nx \exp_not:N \l_@@_key_name_tl
{ \exp_not:N \tl_to_str:n {##1} }
@@ -1319,7 +1341,7 @@
{
\tl_put_right:Nn \exp_not:N \l_@@_key_name_tl
{ \token_to_str:N : }
- \exp_not:N \@@_split_keytype_aux:w ##2 \exp_not:N \q_stop
+ \exp_not:N \@@_split_keytype_aux:w ##2 \s_@@_stop
}
{
\exp_not:N \tl_if_empty:NTF \exp_not:N \l_@@_key_name_tl
@@ -1357,7 +1379,7 @@
\tl_if_in:nnT {#1} {##1}
{
\cs_set:Npn \@@_split_keytype_arg_aux:w
- ####1 ##1 ####2 \q_stop
+ ####1 ##1 ####2 \s_@@_stop
{
\tl_if_empty:nT {####1}
{
@@ -1366,7 +1388,7 @@
\seq_map_break:
}
}
- \@@_split_keytype_arg_aux:w #1 \q_stop
+ \@@_split_keytype_arg_aux:w #1 \s_@@_stop
}
}
\seq_map_function:NN \c_@@_keytypes_arg_seq
@@ -1374,7 +1396,7 @@
}
\cs_generate_variant:Nn \@@_split_keytype_arg:n { o }
\cs_new:Npn \@@_split_keytype_arg_aux:n #1 { }
-\cs_new:Npn \@@_split_keytype_arg_aux:w #1 \q_stop { }
+\cs_new:Npn \@@_split_keytype_arg_aux:w #1 \s_@@_stop { }
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -1628,7 +1650,7 @@
}
{
\tl_if_in:nnTF {#1} { global }
- { \@@_parse_vars_elt_aux:w #1 \q_stop }
+ { \@@_parse_vars_elt_aux:w #1 \s_@@_stop }
{
\msg_error:nnx { xtemplate } { bad-variable }
{ \tl_to_str:n {#1} }
@@ -1637,7 +1659,7 @@
}
}
}
-\cs_new_protected:Npn \@@_parse_vars_elt_aux:w #1 global #2 \q_stop
+\cs_new_protected:Npn \@@_parse_vars_elt_aux:w #1 global #2 \s_@@_stop
{
\tl_if_empty:nTF {#1}
{
@@ -2060,10 +2082,10 @@
\bool_set_false:N \l_@@_global_bool
\tl_if_in:onT \l_@@_var_tl { global }
{
- \exp_after:wN \@@_find_global_aux:w \l_@@_var_tl \q_stop
+ \exp_after:wN \@@_find_global_aux:w \l_@@_var_tl \s_@@_stop
}
}
-\cs_new_protected:Npn \@@_find_global_aux:w #1 global #2 \q_stop
+\cs_new_protected:Npn \@@_find_global_aux:w #1 global #2 \s_@@_stop
{
\tl_set:Nn \l_@@_var_tl {#2}
\bool_set_true:N \l_@@_global_bool
@@ -2377,16 +2399,16 @@
\l_@@_value_tl
{
\exp_after:wN \@@_key_to_value_auxii:w \l_@@_value_tl
- \q_mark global \q_nil \q_stop
+ \s_@@_mark global \q_@@_nil \s_@@_stop
}
{
\msg_error:nnx { xtemplate } { unknown-attribute }
{ \l_@@_tmp_tl }
}
}
-\cs_new_protected:Npn \@@_key_to_value_auxii:w #1 global #2#3 \q_stop
+\cs_new_protected:Npn \@@_key_to_value_auxii:w #1 global #2#3 \s_@@_stop
{
- \quark_if_nil:NF #2
+ \@@_quark_if_nil:NF #2
{ \tl_set:Nn \l_@@_value_tl {#2} }
}
% \end{macrocode}
diff --git a/macros/latex/contrib/l3packages/xtemplate.pdf b/macros/latex/contrib/l3packages/xtemplate.pdf
index 68bbd25f44..e69b3a4142 100644
--- a/macros/latex/contrib/l3packages/xtemplate.pdf
+++ b/macros/latex/contrib/l3packages/xtemplate.pdf
Binary files differ