summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/l3kernel
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2020-03-04 03:02:32 +0000
committerNorbert Preining <norbert@preining.info>2020-03-04 03:02:32 +0000
commit19d25b8009801aa98ea2f46b45c37c257f990491 (patch)
treec0da70fbab26feff40e87df289ae797917df8419 /macros/latex/contrib/l3kernel
parentb78f5a6705512314d6fe42fd5144c5f8e5d484ce (diff)
CTAN sync 202003040302
Diffstat (limited to 'macros/latex/contrib/l3kernel')
-rw-r--r--macros/latex/contrib/l3kernel/CHANGELOG.md29
-rw-r--r--macros/latex/contrib/l3kernel/README.md2
-rw-r--r--macros/latex/contrib/l3kernel/expl3.dtx17
-rw-r--r--macros/latex/contrib/l3kernel/expl3.pdfbin584652 -> 584343 bytes
-rw-r--r--macros/latex/contrib/l3kernel/interface3.pdfbin1540540 -> 1540601 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.dtx6
-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.pdfbin263236 -> 262916 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.dtx470
-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.dtx7
-rw-r--r--macros/latex/contrib/l3kernel/l3news.pdfbin379209 -> 384356 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news.tex15
-rw-r--r--macros/latex/contrib/l3kernel/l3news01.pdfbin113529 -> 113536 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news02.pdfbin140777 -> 140784 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news03.pdfbin137983 -> 143130 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news04.pdfbin107122 -> 107130 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news05.pdfbin105090 -> 105095 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news06.pdfbin140797 -> 140805 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news07.pdfbin119092 -> 119100 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news08.pdfbin152413 -> 152472 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news09.pdfbin235516 -> 240652 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news10.pdfbin140297 -> 145452 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news11.pdfbin159154 -> 164321 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3news12.pdfbin192383 -> 197530 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3prefixes.pdfbin74225 -> 74230 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.pdfbin279984 -> 279688 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3styleguide.tex2
-rw-r--r--macros/latex/contrib/l3kernel/l3syntax-changes.pdfbin227714 -> 227980 bytes
-rw-r--r--macros/latex/contrib/l3kernel/l3syntax-changes.tex9
-rw-r--r--macros/latex/contrib/l3kernel/l3sys.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/l3term-glossary.pdfbin186502 -> 186192 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.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.dtx6
-rw-r--r--macros/latex/contrib/l3kernel/l3unicode.dtx2
-rw-r--r--macros/latex/contrib/l3kernel/source3.pdfbin5773138 -> 5779050 bytes
-rw-r--r--macros/latex/contrib/l3kernel/source3.tex2
84 files changed, 397 insertions, 272 deletions
diff --git a/macros/latex/contrib/l3kernel/CHANGELOG.md b/macros/latex/contrib/l3kernel/CHANGELOG.md
index 9ce3fed751..75151331dd 100644
--- a/macros/latex/contrib/l3kernel/CHANGELOG.md
+++ b/macros/latex/contrib/l3kernel/CHANGELOG.md
@@ -7,6 +7,18 @@ this project uses date-based 'snapshot' version identifiers.
## [Unreleased]
+## [2020-03-03]
+
+### Added
+- `\tex...:D` coverage for TeX Live 2020 engine changes
+
+### Changed
+- New implementation for `\keyval_parse:NNn` - around 40% speed improvement,
+ also *expandable*
+
+### Fixed
+- Make `expl3` reload-safe for `latexrelease` (see latex3/latex2e#295)
+
## [2020-02-25]
### Changed
@@ -179,7 +191,7 @@ this project uses date-based 'snapshot' version identifiers.
## [2019-09-28]
### Changed
-- Speed up variants and reduce their \tracingall output
+- Speed up variants and reduce their `\tracingall` output
- Debug and deprecation code are now loaded independently of expl3 core
- `\file_compare_timestamp:nNn(TF)` now usable in expansion contexts
- Moved to stable:
@@ -410,7 +422,7 @@ this project uses date-based 'snapshot' version identifiers.
### Deprecated
- `\box_(g)set_eq_clear:NN`, replaced by `\box_(g)set_eq_drop:NN`
-- `\(h|v)box_unpack_clear:N`, replaced by `\(h|v)box_unpack_drop:N
+- `\(h|v)box_unpack_clear:N`, replaced by `\(h|v)box_unpack_drop:N`
- `\tl_(g)set_from_file(_x):Nnn`, replaced by `\file_get:nnN`
### Fixed
@@ -446,7 +458,7 @@ this project uses date-based 'snapshot' version identifiers.
### Fixed
- Correct fp randint with zero argument (see #507)
-- Handling of `\current@color` with (x)dvipdfmx` (see #510)
+- Handling of `\current@color` with `(x)dvipdfmx` (see #510)
### Removed
- Support for stand-alone `l3regex`, `l3sort`, `l3srt`, `l3tl-analysis`,
@@ -587,10 +599,10 @@ this project uses date-based 'snapshot' version identifiers.
## [2018-04-30]
### Added
-- Implement \tl_analysis_map_inline:nn
-- Implement \exp_args_generate:n to define new \exp_args:N...
+- Implement `\tl_analysis_map_inline:nn`
+- Implement `\exp_args_generate:n` to define new `\exp_args:N...`
functions
-- Low-level \int_value:w function
+- Low-level `\int_value:w` function
- New experimental functions for
- Building token lists piecewise
- Fast manipulation of integer arrays
@@ -604,7 +616,7 @@ this project uses date-based 'snapshot' version identifiers.
- Better documentation of cross-module kernel-internal functions
- Enable `\char_generate:nn` for active chars
- Renamed `\tl_show_analysis:(N|n)n` as `\tl_analysis_show:(N|n)n`
-- Change \int_rand:nn (and rand_item functions) to better use
+- Change `\int_rand:nn` (and rand_item functions) to better use
the RNG
- Make prg break functions public
- Make scan marks mechanism public
@@ -635,7 +647,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-02-25...HEAD
+[Unreleased]: https://github.com/latex3/latex3/compare/2020-03-03...HEAD
+[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-21...2020-02-25
[2020-02-21]: https://github.com/latex3/latex3/compare/2020-02-14...2020-02-21
[2020-02-14]: https://github.com/latex3/latex3/compare/2020-02-13...2020-02-14
diff --git a/macros/latex/contrib/l3kernel/README.md b/macros/latex/contrib/l3kernel/README.md
index 4337693ae2..81d6baa3fc 100644
--- a/macros/latex/contrib/l3kernel/README.md
+++ b/macros/latex/contrib/l3kernel/README.md
@@ -1,7 +1,7 @@
LaTeX3 Programming Conventions
==============================
-Release 2020-02-25
+Release 2020-03-03
Overview
--------
diff --git a/macros/latex/contrib/l3kernel/expl3.dtx b/macros/latex/contrib/l3kernel/expl3.dtx
index 3f2f1c78b4..bbe0f740fc 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-02-25}%
+\def\ExplFileDate{2020-03-03}%
%<*driver>
\documentclass[full]{l3doc}
\usepackage{graphicx}
@@ -51,7 +51,7 @@
% }^^A
% }
%
-% \date{Released 2020-02-25}
+% \date{Released 2020-03-03}
%
% \maketitle
%
@@ -1196,11 +1196,9 @@
% simply turn it on. We use \tn{@pushfilenameaux} as a marker: it's defined
% a little later.
% \begin{macrocode}
-%<*!2ekernel>
\ifdefined\@pushfilenameaux
\ExplSyntaxOn
\fi
-%</!2ekernel>
% \end{macrocode}
%
% \begin{macrocode}
@@ -1279,7 +1277,7 @@
\sys_load_debug:
\debug_on:n { log-functions }
} ,
- suppress-backend-headers .bool_set_inverse:N
+ suppress-backend-headers .bool_gset_inverse:N
= \g__kernel_backend_header_bool ,
suppress-backend-headers .initial:n = false ,
undo-recent-deprecations .code:n =
@@ -1381,7 +1379,7 @@
% saves the rest of the stack and then does the test. The flag here
% is not a proper \texttt{bool}, so a low-level test is used.
% \begin{macrocode}
-\cs_new_protected:Npn \@@_status_pop:w #1#2 \q_stop
+\cs_gset_protected:Npn \@@_status_pop:w #1#2 \q_stop
{
\tl_set:Nn \l_@@_status_stack_tl {#2}
\int_if_odd:nTF {#1}
@@ -1397,8 +1395,11 @@
% already active, at the end of the package \cs{ExplSyntaxOff} can
% safely be called.
% \begin{macrocode}
-\tl_new:N \l_@@_status_stack_tl
-\tl_set:Nn \l_@@_status_stack_tl { 0 }
+\tl_if_exist:NF \l_@@_status_stack_tl
+ {
+ \tl_new:N \l_@@_status_stack_tl
+ \tl_set:Nn \l_@@_status_stack_tl { 0 }
+ }
% \end{macrocode}
% \end{variable}
%
diff --git a/macros/latex/contrib/l3kernel/expl3.pdf b/macros/latex/contrib/l3kernel/expl3.pdf
index 10bc95f1d0..9c593937fd 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 91aff8e85b..311daaad87 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 edac55de1e..3074dade2d 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-02-25}
+\date{Released 2020-03-03}
\pagenumbering{roman}
\maketitle
diff --git a/macros/latex/contrib/l3kernel/l3alloc.dtx b/macros/latex/contrib/l3kernel/l3alloc.dtx
index 41a3e7e26c..0023ac5c81 100644
--- a/macros/latex/contrib/l3kernel/l3alloc.dtx
+++ b/macros/latex/contrib/l3kernel/l3alloc.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-02-25}
+% \date{Released 2020-03-03}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3basics.dtx b/macros/latex/contrib/l3kernel/l3basics.dtx
index b65f0feca4..e1f0f44552 100644
--- a/macros/latex/contrib/l3kernel/l3basics.dtx
+++ b/macros/latex/contrib/l3kernel/l3basics.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-02-25}
+% \date{Released 2020-03-03}
%
% \maketitle
%
@@ -1606,7 +1606,7 @@
%
% \begin{macro}{\use:x}
% Fully expands its argument and passes it to the input stream. Uses
-% the reserved \cs{l_@@_internal_tl} which will be set up in \pkg{l3expan}.
+% the reserved \cs{l_@@_internal_tl} which we've set up above.
% \begin{macrocode}
\cs_set_protected:Npn \use:x #1
{
@@ -1621,7 +1621,7 @@
% \end{macrocode}
%
% \begin{macro}[EXP]{\use:e}
-% Currently \LuaTeX-only: emulated for older engines.
+% In non-\LuaTeX engines older than 2019, \cs{expanded} is emulated.
% \begin{macrocode}
\cs_set:Npn \use:e #1 { \tex_expanded:D {#1} }
\tex_ifdefined:D \tex_expanded:D \tex_else:D
diff --git a/macros/latex/contrib/l3kernel/l3bootstrap.dtx b/macros/latex/contrib/l3kernel/l3bootstrap.dtx
index 113fa59ab6..b5b8197a88 100644
--- a/macros/latex/contrib/l3kernel/l3bootstrap.dtx
+++ b/macros/latex/contrib/l3kernel/l3bootstrap.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-02-25}
+% \date{Released 2020-03-03}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3box.dtx b/macros/latex/contrib/l3kernel/l3box.dtx
index efbbb2ca11..1610fd79ef 100644
--- a/macros/latex/contrib/l3kernel/l3box.dtx
+++ b/macros/latex/contrib/l3kernel/l3box.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-02-25}
+% \date{Released 2020-03-03}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3candidates.dtx b/macros/latex/contrib/l3kernel/l3candidates.dtx
index f36843ad33..1aa7572365 100644
--- a/macros/latex/contrib/l3kernel/l3candidates.dtx
+++ b/macros/latex/contrib/l3kernel/l3candidates.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2020-02-25}
+% \date{Released 2020-03-03}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3clist.dtx b/macros/latex/contrib/l3kernel/l3clist.dtx
index 739764ad2b..d50ead8069 100644
--- a/macros/latex/contrib/l3kernel/l3clist.dtx
+++ b/macros/latex/contrib/l3kernel/l3clist.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2020-02-25}
+% \date{Released 2020-03-03}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3coffins.dtx b/macros/latex/contrib/l3kernel/l3coffins.dtx
index f3a7ba081c..ec9e53693c 100644
--- a/macros/latex/contrib/l3kernel/l3coffins.dtx
+++ b/macros/latex/contrib/l3kernel/l3coffins.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-02-25}
+% \date{Released 2020-03-03}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3color-base.dtx b/macros/latex/contrib/l3kernel/l3color-base.dtx
index 6ca023be82..3076d372bb 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-02-25}
+% \date{Released 2020-03-03}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3debug.dtx b/macros/latex/contrib/l3kernel/l3debug.dtx
index bcdcb0cdd6..f1afae3f7a 100644
--- a/macros/latex/contrib/l3kernel/l3debug.dtx
+++ b/macros/latex/contrib/l3kernel/l3debug.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-02-25}
+% \date{Released 2020-03-03}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3deprecation.dtx b/macros/latex/contrib/l3kernel/l3deprecation.dtx
index a52f33774f..61249b69c8 100644
--- a/macros/latex/contrib/l3kernel/l3deprecation.dtx
+++ b/macros/latex/contrib/l3kernel/l3deprecation.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-02-25}
+% \date{Released 2020-03-03}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3doc.dtx b/macros/latex/contrib/l3kernel/l3doc.dtx
index c4bd0f7751..cced26c55a 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-02-25}
+% \date{Released 2020-03-03}
% \maketitle
% \tableofcontents
%
diff --git a/macros/latex/contrib/l3kernel/l3docstrip.dtx b/macros/latex/contrib/l3kernel/l3docstrip.dtx
index 5cc079b2a0..8b5d6093ad 100644
--- a/macros/latex/contrib/l3kernel/l3docstrip.dtx
+++ b/macros/latex/contrib/l3kernel/l3docstrip.dtx
@@ -63,7 +63,7 @@
% }^^A
% }
%
-% \date{Released 2020-02-25}
+% \date{Released 2020-03-03}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3docstrip.pdf b/macros/latex/contrib/l3kernel/l3docstrip.pdf
index ba9d9375ed..5198841d10 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 be01476521..89b10a06a2 100644
--- a/macros/latex/contrib/l3kernel/l3expan.dtx
+++ b/macros/latex/contrib/l3kernel/l3expan.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-02-25}
+% \date{Released 2020-03-03}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3file.dtx b/macros/latex/contrib/l3kernel/l3file.dtx
index d474dba637..fccaf3717a 100644
--- a/macros/latex/contrib/l3kernel/l3file.dtx
+++ b/macros/latex/contrib/l3kernel/l3file.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2020-02-25}
+% \date{Released 2020-03-03}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3final.dtx b/macros/latex/contrib/l3kernel/l3final.dtx
index 4c573fc3a4..4d3f9e6eb5 100644
--- a/macros/latex/contrib/l3kernel/l3final.dtx
+++ b/macros/latex/contrib/l3kernel/l3final.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-02-25}
+% \date{Released 2020-03-03}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3flag.dtx b/macros/latex/contrib/l3kernel/l3flag.dtx
index 15865ffa92..82889959d5 100644
--- a/macros/latex/contrib/l3kernel/l3flag.dtx
+++ b/macros/latex/contrib/l3kernel/l3flag.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-02-25}
+% \date{Released 2020-03-03}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-assign.dtx b/macros/latex/contrib/l3kernel/l3fp-assign.dtx
index 34f8eea19b..1cad6e13c2 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-02-25}
+% \date{Released 2020-03-03}
% \maketitle
%
% \begin{documentation}
diff --git a/macros/latex/contrib/l3kernel/l3fp-aux.dtx b/macros/latex/contrib/l3kernel/l3fp-aux.dtx
index 6b8e4ae9de..e94dacb368 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-02-25}
+% \date{Released 2020-03-03}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-basics.dtx b/macros/latex/contrib/l3kernel/l3fp-basics.dtx
index ee77e00c6f..b9f1340e73 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-02-25}
+% \date{Released 2020-03-03}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-convert.dtx b/macros/latex/contrib/l3kernel/l3fp-convert.dtx
index 404e2a5145..185676d381 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-02-25}
+% \date{Released 2020-03-03}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-expo.dtx b/macros/latex/contrib/l3kernel/l3fp-expo.dtx
index 5a2214748d..2ee3267fbf 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-02-25}
+% \date{Released 2020-03-03}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-extended.dtx b/macros/latex/contrib/l3kernel/l3fp-extended.dtx
index 263c82ff46..0566df9d98 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-02-25}
+% \date{Released 2020-03-03}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-logic.dtx b/macros/latex/contrib/l3kernel/l3fp-logic.dtx
index 66756acde0..6231aea96c 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-02-25}
+% \date{Released 2020-03-03}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-parse.dtx b/macros/latex/contrib/l3kernel/l3fp-parse.dtx
index 4a06f89be8..4df86f2ffc 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-02-25}
+% \date{Released 2020-03-03}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-random.dtx b/macros/latex/contrib/l3kernel/l3fp-random.dtx
index 71127ebd03..3138da7a5d 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-02-25}
+% \date{Released 2020-03-03}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-round.dtx b/macros/latex/contrib/l3kernel/l3fp-round.dtx
index 951e5dec81..d5f84ba41a 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-02-25}
+% \date{Released 2020-03-03}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp-traps.dtx b/macros/latex/contrib/l3kernel/l3fp-traps.dtx
index 9db9324a39..51bbf6c3dc 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-02-25}
+% \date{Released 2020-03-03}
% \maketitle
%
% \begin{documentation}
diff --git a/macros/latex/contrib/l3kernel/l3fp-trig.dtx b/macros/latex/contrib/l3kernel/l3fp-trig.dtx
index e52aeffe54..b5997b15d5 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-02-25}
+% \date{Released 2020-03-03}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fp.dtx b/macros/latex/contrib/l3kernel/l3fp.dtx
index bc408b3a26..9496226575 100644
--- a/macros/latex/contrib/l3kernel/l3fp.dtx
+++ b/macros/latex/contrib/l3kernel/l3fp.dtx
@@ -49,7 +49,7 @@
% }^^A
% }
%
-% \date{Released 2020-02-25}
+% \date{Released 2020-03-03}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3fparray.dtx b/macros/latex/contrib/l3kernel/l3fparray.dtx
index d4a0045e96..ec21dc624d 100644
--- a/macros/latex/contrib/l3kernel/l3fparray.dtx
+++ b/macros/latex/contrib/l3kernel/l3fparray.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2020-02-25}
+% \date{Released 2020-03-03}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3int.dtx b/macros/latex/contrib/l3kernel/l3int.dtx
index ff70d60c54..fbf0cc9b15 100644
--- a/macros/latex/contrib/l3kernel/l3int.dtx
+++ b/macros/latex/contrib/l3kernel/l3int.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-02-25}
+% \date{Released 2020-03-03}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3intarray.dtx b/macros/latex/contrib/l3kernel/l3intarray.dtx
index 477a6b66ff..56b293db63 100644
--- a/macros/latex/contrib/l3kernel/l3intarray.dtx
+++ b/macros/latex/contrib/l3kernel/l3intarray.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2020-02-25}
+% \date{Released 2020-03-03}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3kernel-functions.dtx b/macros/latex/contrib/l3kernel/l3kernel-functions.dtx
index 8bf6edca2e..48c85b5498 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-02-25}
+% \date{Released 2020-03-03}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3keys.dtx b/macros/latex/contrib/l3kernel/l3keys.dtx
index dcf83e0d87..417837ce37 100644
--- a/macros/latex/contrib/l3kernel/l3keys.dtx
+++ b/macros/latex/contrib/l3kernel/l3keys.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-02-25}
+% \date{Released 2020-03-03}
%
% \maketitle
%
@@ -722,7 +722,7 @@
% (\cs{keys_set_known:nnnN}), the key--value entries are returned
% relative to this point in the key tree. When it is absent, only the
% key name and value are provided. The correct list is returned by
-% nested calls.
+% nested calls.
% \end{function}
%
% \section{Selective key setting}
@@ -891,7 +891,7 @@
% \end{verbatim}
% are treated identically.
%
-% \begin{function}[updated = 2011-09-08]{\keyval_parse:NNn}
+% \begin{function}[EXP,updated = 2020-02-20]{\keyval_parse:NNn}
% \begin{syntax}
% \cs{keyval_parse:NNn} \meta{function_1} \meta{function_2} \Arg{key--value list}
% \end{syntax}
@@ -920,6 +920,11 @@
% all). Spaces are trimmed from the ends of the \meta{key} and \meta{value},
% then one \emph{outer} set of braces is removed from the \meta{key}
% and \meta{value} as part of the processing.
+% \begin{texnote}
+% The result is returned within \cs{exp_not:n}, which means that the
+% converted input stream does not expand further when appearing in an
+% \texttt{x}-type or \texttt{e}-type argument expansion.
+% \end{texnote}
% \end{function}
%
% \end{documentation}
@@ -946,234 +951,312 @@
%<@@=keyval>
% \end{macrocode}
%
-% \begin{variable}{\l_@@_key_tl, \l_@@_value_tl}
-% The current key name and value.
+% \begin{variable}{\s_@@_nil,\s_@@_mark,\s_@@_stop,\s_@@_tail}
% \begin{macrocode}
-\tl_new:N \l_@@_key_tl
-\tl_new:N \l_@@_value_tl
+\scan_new:N \s_@@_nil
+\scan_new:N \s_@@_mark
+\scan_new:N \s_@@_stop
+\scan_new:N \s_@@_tail
% \end{macrocode}
% \end{variable}
%
-% \begin{variable}{\l_@@_sanitise_tl}
-% A token list variable for dealing with awkward category codes in the
-% input.
+% This temporary macro will be used since some of the definitions will need an
+% active comma or equals sign. Inside of this macro |#1| will be the active
+% comma and |#2| will be the active equals sign.
% \begin{macrocode}
-\tl_new:N \l_@@_sanitise_tl
+\group_begin:
+ \cs_set_protected:Npn \@@_tmp:NN #1#2
+ {
% \end{macrocode}
-% \end{variable}
%
-% \begin{macro}{\keyval_parse:NNn}
-% The main function starts off by normalising category codes in package mode.
-% That's relatively \enquote{expensive} so is skipped (hopefully) in format
-% mode. We then hand off to the parser. The use of \cs{q_mark} here prevents
-% loss of braces from the key argument. Notice that by passing the two
-% processor commands along the input stack we avoid the need to track these
-% at all.
+% \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
+% argument.
% \begin{macrocode}
-\cs_new_protected:Npn \keyval_parse:NNn #1#2#3
- {
-%<*initex>
- \@@_loop:NNw #1#2 \q_mark #3 , \q_recursion_tail ,
-%</initex>
-%<*package>
- \tl_set:Nn \l_@@_sanitise_tl {#3}
- \@@_sanitise_equals:
- \@@_sanitise_comma:
- \exp_after:wN \@@_loop:NNw \exp_after:wN #1 \exp_after:wN #2
- \exp_after:wN \q_mark \l_@@_sanitise_tl , \q_recursion_tail ,
-%</package>
- }
+ \cs_new:Npn \keyval_parse:NNn ##1 ##2 ##3
+ {
+ \@@_loop_active:NNw ##1 ##2 \s_@@_mark ##3 #1 \s_@@_tail #1
+ }
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\@@_sanitise_equals:, \@@_sanitise_comma:}
-% \begin{macro}
-% {
-% \@@_sanitise_equals_auxi:w, \@@_sanitise_equals_auxii:w,
-% \@@_sanitise_comma_auxi:w, \@@_sanitise_comma_auxii:w,
-% \@@_sanitise_aux:w
-% }
-% A reasonably fast search and replace set up specifically for the active
-% tokens. The nature of the input is known so everything is hard-coded.
-% With only two tokens to cover, the speed gain from using dedicated
-% functions is worth it.
+% \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.
+% If the end isn't reached yet, start the second loop splitting at other
+% comments, and after that one iterate the current loop.
% \begin{macrocode}
-%<*package>
-\group_begin:
- \char_set_catcode_active:n { `\= }
- \char_set_catcode_active:n { `\, }
- \cs_new_protected:Npn \@@_sanitise_equals:
- {
- \exp_after:wN \@@_sanitise_equals_auxi:w \l_@@_sanitise_tl
- \q_mark = \q_nil =
- \exp_after:wN \@@_sanitise_aux:w \l_@@_sanitise_tl
- }
- \cs_new_protected:Npn \@@_sanitise_equals_auxi:w #1 =
- {
- \tl_set:Nn \l_@@_sanitise_tl {#1}
- \@@_sanitise_equals_auxii:w
- }
- \cs_new_protected:Npn \@@_sanitise_equals_auxii:w #1 =
- {
- \if_meaning:w \q_nil #1 \scan_stop:
- \else:
- \tl_set:Nx \l_@@_sanitise_tl
+ \cs_new:Npn \@@_loop_active:NNw ##1 ##2 ##3 #1
+ {
+ \@@_if_recursion_tail:w ##3
+ \@@_end_loop_active:w \s_@@_mark \s_@@_tail
+ \@@_loop_other:NNw ##1 ##2 ##3 , \s_@@_tail ,
+ \@@_loop_active:NNw ##1 ##2 \s_@@_mark
+ }
+% \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.
+% \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
{
- \exp_not:o \l_@@_sanitise_tl
- \token_to_str:N =
- \exp_not:n {#1}
+ \@@_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 }
}
- \exp_after:wN \@@_sanitise_equals_auxii:w
- \fi:
- }
- \cs_new_protected:Npn \@@_sanitise_comma:
- {
- \exp_after:wN \@@_sanitise_comma_auxi:w \l_@@_sanitise_tl
- \q_mark , \q_nil ,
- \exp_after:wN \@@_sanitise_aux:w \l_@@_sanitise_tl
- }
- \cs_new_protected:Npn \@@_sanitise_comma_auxi:w #1 ,
- {
- \tl_set:Nn \l_@@_sanitise_tl {#1}
- \@@_sanitise_comma_auxii:w
- }
- \cs_new_protected:Npn \@@_sanitise_comma_auxii:w #1 ,
- {
- \if_meaning:w \q_nil #1 \scan_stop:
- \else:
- \tl_set:Nx \l_@@_sanitise_tl
{
- \exp_not:o \l_@@_sanitise_tl
- \token_to_str:N ,
- \exp_not:n {#1}
+ \@@_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 }
+ }
}
- \exp_after:wN \@@_sanitise_comma_auxii:w
- \fi:
- }
-\group_end:
-\cs_new_protected:Npn \@@_sanitise_aux:w #1 \q_mark
- { \tl_set:Nn \l_@@_sanitise_tl {#1} }
-%</package>
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_loop:NNw}
-% A fast test for the end of the loop, remembering to remove the leading
-% quark first. Assuming that is not the case, look for a key and value then
-% loop around, re-inserting a leading quark in front of the next position.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_loop:NNw #1#2#3 ,
- {
- \exp_after:wN \if_meaning:w \exp_after:wN \q_recursion_tail
- \use_none:n #3 \prg_do_nothing:
- \else:
- \@@_split:NNw #1#2#3 == \q_stop
- \exp_after:wN \@@_loop:NNw \exp_after:wN #1 \exp_after:wN #2
- \exp_after:wN \q_mark
- \fi:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_split:NNw, \@@_split_value:NNw}
-% \begin{macro}{\@@_split_tidy:w}
-% \begin{macro}{\@@_action:}
-% The value is picked up separately from the key so there can be another
-% quark inserted at the front, keeping braces and allowing both parts to
-% share the same code paths. The key is found first then there's a check
-% that there is something there: this is biased to the common case of there
-% actually being a key. For the value, we first need to see if there is
-% anything to do: if there is, extract it. The appropriate action is then
-% inserted in front of the key and value. Doing this using an assignment is
-% marginally faster than an expansion chain.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_split:NNw #1#2#3 =
- {
- \@@_def:Nn \l_@@_key_tl {#3}
- \if_meaning:w \l_@@_key_tl \c_empty_tl
- \exp_after:wN \@@_split_tidy:w
- \else:
- \exp_after:wN \@@_split_value:NNw
- \exp_after:wN #1
- \exp_after:wN #2
- \exp_after:wN \q_mark
- \fi:
- }
-\cs_new_protected:Npn \@@_split_value:NNw #1#2#3 = #4 \q_stop
- {
- \if:w \scan_stop: \tl_to_str:n {#4} \scan_stop:
- \cs_set:Npx \@@_action:
- { \exp_not:N #1 { \exp_not:o \l_@@_key_tl } }
- \else:
- \if:w
- \scan_stop:
- \__kernel_tl_to_str:w \exp_after:wN { \use_none:n #4 }
- \scan_stop:
- \@@_def:Nn \l_@@_value_tl {#3}
- \cs_set:Npx \@@_action:
- {
- \exp_not:N #2
- { \exp_not:o \l_@@_key_tl }
- { \exp_not:o \l_@@_value_tl }
- }
- \else:
- \cs_set:Npn \@@_action:
+ \@@_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{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
{
- \__kernel_msg_error:nn { kernel }
- { misplaced-equals-sign }
+ \@@_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 } }
}
- \fi:
- \fi:
- \@@_action:
+% \end{macrocode}
+% \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{macrocode}
+ \cs_new:Npn \@@_if_has_equal_active:w ##1 #2
+ {
+ \@@_if_empty:w \s_@@_mark
+ }
+% \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{macrocode}
+ }
+ \char_set_catcode_active:n { `\, }
+ \char_set_catcode_active:n { `\= }
+ \@@_tmp:NN , =
+\group_end:
+% \end{macrocode}
+%
+% \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{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
+ {}
+% \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{macrocode}
+\cs_new:Npn \@@_split_other:w #1 =
+ {
+ \@@_trim:nN { #1 } \@@_split_other:nw \s_@@_mark
}
-\cs_new_protected:Npn \@@_split_tidy:w #1 \q_stop
+ \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 } }
+ }
+% \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{macrocode}
+\cs_new:Npn \@@_key:nN #1 #2
{
- \if:w
- \scan_stop:
- \__kernel_tl_to_str:w \exp_after:wN { \use_none:n #1 }
- \scan_stop:
- \else:
- \exp_after:wN \@@_empty_key:
- \fi:
+ \exp_not:n { #2 { #1 } }
}
-\cs_new:Npn \@@_action: { }
-\cs_new_protected:Npn \@@_empty_key:
- { \__kernel_msg_error:nn { kernel } { misplaced-equals-sign } }
% \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.
+% \begin{macrocode}
+\cs_new:Npn \@@_key_val: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 } }
+ }
+% \end{macrocode}
% \end{macro}
+%
+% \begin{macro}[EXP]{\@@_if_empty:w,\@@_if_blank:w,\@@_if_recursion_tail:w}
+% All these tests work by gobbling tokens until a certain combination is met,
+% which makes them pretty fast. The test for a blank argument should be called
+% 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_blank:w \s_@@_mark #1 { \@@_if_empty:w \s_@@_mark }
+\cs_new:Npn \@@_if_recursion_tail:w #1 \s_@@_mark \s_@@_tail {}
+% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\@@_def:Nn}
-% \begin{macro}[EXP]{\@@_def_aux:n}
-% \begin{macro}[EXP]{\@@_def_aux:w}
-% First remove the leading quark, then trim spaces off, and finally remove
-% a set of braces.
+% \begin{macro}[EXP]{\@@_has_false:w,\@@_blank_true:w,\@@_empty_key:w}
+% These macros will be called if the tests above didn't gobble them, they
+% execute the branching.
% \begin{macrocode}
-\cs_new_protected:Npn \@@_def:Nn #1#2
+\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
{
- \tl_set:Nx #1
- { \tl_trim_spaces_apply:oN { \use_none:n #2 } \@@_def_aux:n }
+ \@@_misplaced_equal_error:
}
-\cs_new:Npn \@@_def_aux:n #1
- { \@@_def_aux:w #1 \q_stop }
-\cs_new:Npn \@@_def_aux:w #1 \q_stop { \exp_not:n {#1} }
% \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 }
+ }
+% \end{macrocode}
% \end{macro}
%
% One message for the low level parsing system.
% \begin{macrocode}
-\__kernel_msg_new:nnnn { kernel } { misplaced-equals-sign }
+\__kernel_msg_new:nnn { kernel } { misplaced-equals-sign }
{ Misplaced~equals~sign~in~key-value~input~\msg_line_context: }
- {
- LaTeX~is~attempting~to~parse~some~key-value~input~but~found~
- two~equals~signs~not~separated~by~a~comma.
- }
% \end{macrocode}
%
+% \begin{macro}[EXP]{\@@_trim:nN}
+% \begin{macro}[EXP]
+% {\@@_trim_auxi:w,\@@_trim_auxii:w,\@@_trim_auxiii:w,\@@_trim_auxiv:w}
+% And an adapted version of \cs{__tl_trim_spaces:nn} which is a bit faster for
+% our use case, as it can strip the braces at the end. This is pretty much the
+% same concept, so I won't comment on it here. The speed gain by using this
+% instead of \cs{tl_trim_spaces_apply:nN} is about 10\,\% of the total time for
+% \cs{keyval_parse:NNn} with one key and one key--value pair, so I think it's
+% worth it.
+% \begin{macrocode}
+\group_begin:
+ \cs_set_protected:Npn \@@_tmp:n #1
+ {
+ \cs_new:Npn \@@_trim:nN ##1
+ {
+ \@@_trim_auxi:w
+ ##1
+ \s_@@_nil
+ \s_@@_mark #1 {}
+ \s_@@_mark \@@_trim_auxii:w
+ \@@_trim_auxiii:w
+ #1 \s_@@_nil
+ \@@_trim_auxiv:w
+ \s_@@_stop
+ }
+ \cs_new:Npn \@@_trim_auxi:w ##1 \s_@@_mark #1 ##2 \s_@@_mark ##3
+ {
+ ##3
+ \@@_trim_auxi:w
+ \s_@@_mark
+ ##2
+ \s_@@_mark #1 {##1}
+ }
+ \cs_new:Npn \@@_trim_auxii:w \@@_trim_auxi:w \s_@@_mark \s_@@_mark ##1
+ {
+ \@@_trim_auxiii:w
+ ##1
+ }
+ \cs_new:Npn \@@_trim_auxiii:w ##1 #1 \s_@@_nil ##2
+ {
+ ##2
+ ##1 \s_@@_nil
+ \@@_trim_auxiii:w
+ }
+% \end{macrocode}
+% This is the one macro which differs from the original definition.
+% \begin{macrocode}
+ \cs_new:Npn \@@_trim_auxiv:w \s_@@_mark ##1 \s_@@_nil ##2 \s_@@_stop ##3
+ { ##3 { ##1 } }
+ }
+ \@@_tmp:n { ~ }
+\group_end:
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
% \subsection{Constants and variables}
%
% \begin{macrocode}
@@ -2670,7 +2753,7 @@
{
\tl_set:Nx \l_@@_relative_tl
{ \exp_args:No \@@_trim_spaces:n \l_@@_relative_tl }
- \use:x
+ \use:x
{
\cs_set_protected:Npn \@@_store_unused:w
####1 \l_@@_relative_tl /
@@ -2772,7 +2855,6 @@
{
\exp_after:wN \@@_trim_spaces_auxi:w \tl_to_str:n {#1}
/ \q_nil \q_stop
-
}
\cs_new:Npn \@@_trim_spaces_auxi:w #1 / #2 \q_stop
{
diff --git a/macros/latex/contrib/l3kernel/l3legacy.dtx b/macros/latex/contrib/l3kernel/l3legacy.dtx
index 58984c8ba0..af62b24dc3 100644
--- a/macros/latex/contrib/l3kernel/l3legacy.dtx
+++ b/macros/latex/contrib/l3kernel/l3legacy.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-02-25}
+% \date{Released 2020-03-03}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3luatex.dtx b/macros/latex/contrib/l3kernel/l3luatex.dtx
index e3d5f6d816..942ad266f6 100644
--- a/macros/latex/contrib/l3kernel/l3luatex.dtx
+++ b/macros/latex/contrib/l3kernel/l3luatex.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-02-25}
+% \date{Released 2020-03-03}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3msg.dtx b/macros/latex/contrib/l3kernel/l3msg.dtx
index 4b2c06f526..42799793c3 100644
--- a/macros/latex/contrib/l3kernel/l3msg.dtx
+++ b/macros/latex/contrib/l3kernel/l3msg.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-02-25}
+% \date{Released 2020-03-03}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3names.dtx b/macros/latex/contrib/l3kernel/l3names.dtx
index 129e6ed6a2..f86cc4cf62 100644
--- a/macros/latex/contrib/l3kernel/l3names.dtx
+++ b/macros/latex/contrib/l3kernel/l3names.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-02-25}
+% \date{Released 2020-03-03}
%
% \maketitle
%
@@ -804,6 +804,8 @@
\@@_primitive:NN \dviextension \tex_dviextension:D
\@@_primitive:NN \dvifeedback \tex_dvifeedback:D
\@@_primitive:NN \dvivariable \tex_dvivariable:D
+ \@@_primitive:NN \eTeXglueshrinkorder \tex_eTeXglueshrinkorder:D
+ \@@_primitive:NN \eTeXgluestretchorder \tex_eTeXgluestretchorder:D
\@@_primitive:NN \etoksapp \tex_etoksapp:D
\@@_primitive:NN \etokspre \tex_etokspre:D
\@@_primitive:NN \exceptionpenalty \tex_exceptionpenalty:D
@@ -1124,9 +1126,11 @@
\@@_primitive:NN \hfi \tex_hfi:D
\@@_primitive:NN \ifdbox \tex_ifdbox:D
\@@_primitive:NN \ifddir \tex_ifddir:D
+ \@@_primitive:NN \ifjfont \tex_ifjfont:D
\@@_primitive:NN \ifmbox \tex_ifmbox:D
\@@_primitive:NN \ifmdir \tex_ifmdir:D
\@@_primitive:NN \iftbox \tex_iftbox:D
+ \@@_primitive:NN \iftfont \tex_iftfont:D
\@@_primitive:NN \iftdir \tex_iftdir:D
\@@_primitive:NN \ifybox \tex_ifybox:D
\@@_primitive:NN \ifydir \tex_ifydir:D
@@ -1171,6 +1175,7 @@
% \end{macrocode}
% Primitives from \upTeX{}.
% \begin{macrocode}
+ \@@_primitive:NN \currentcjktoken \tex_currentcjktoken:D
\@@_primitive:NN \disablecjktoken \tex_disablecjktoken:D
\@@_primitive:NN \enablecjktoken \tex_enablecjktoken:D
\@@_primitive:NN \forcecjktoken \tex_forcecjktoken:D
diff --git a/macros/latex/contrib/l3kernel/l3news.pdf b/macros/latex/contrib/l3kernel/l3news.pdf
index a06982d228..548fee9bed 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/l3news.tex b/macros/latex/contrib/l3kernel/l3news.tex
index ba379538e8..8b12177a15 100644
--- a/macros/latex/contrib/l3kernel/l3news.tex
+++ b/macros/latex/contrib/l3kernel/l3news.tex
@@ -25,6 +25,14 @@
\hypersetup{colorlinks}
\usepackage{bookmark}
+\MakeOuterQuote{"}
+
+\pdfstringdefDisableCommands
+ {%
+ \RenewExpandableDocumentCommand \cs { O{} m }
+ {\textbackslash#2}%
+ }
+
\makeatletter
\newcounter{issue}
\renewcommand*{\theissue}{%
@@ -155,6 +163,13 @@
}{%
\clearpage
}%
+ \def\MakeOuterQuote#1{%
+ \if\noexpand"\noexpand#1%
+ \else
+ \@latex@error{Unexpected \string\MakeOuterQuote
+ {\detokenize{#1}}\MessageBreak%
+ Check if output is valid in `l3news\theissue.tex'}%
+ \fi}
\makeatother
\loop
\ifnum\value{issue}<\lastissue
diff --git a/macros/latex/contrib/l3kernel/l3news01.pdf b/macros/latex/contrib/l3kernel/l3news01.pdf
index 0fa9132de6..3ace4904a4 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 0110d5cdc0..9ed1645fcd 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 38f2707903..391475fcf6 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 7399a65d84..095d00c064 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 d17c6e49dc..128147df68 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 9cfe26ccde..eb931c08db 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 e0208fa696..0f0710fb54 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 ae306f8536..1ac7b48fc0 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 0dd900517a..f0b9042c8a 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 e96f6bb029..a28ad5fabf 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 3a4e17fd16..3df9be07b4 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 0f7aaf6285..9ffaf1e42f 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.pdf b/macros/latex/contrib/l3kernel/l3prefixes.pdf
index 7ff0a83c23..3e52f7b795 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 cbe1ea8bd4..3cbb989db4 100644
--- a/macros/latex/contrib/l3kernel/l3prg.dtx
+++ b/macros/latex/contrib/l3kernel/l3prg.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-02-25}
+% \date{Released 2020-03-03}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3prop.dtx b/macros/latex/contrib/l3kernel/l3prop.dtx
index 7b06d4de6d..0d21cdaa12 100644
--- a/macros/latex/contrib/l3kernel/l3prop.dtx
+++ b/macros/latex/contrib/l3kernel/l3prop.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-02-25}
+% \date{Released 2020-03-03}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3quark.dtx b/macros/latex/contrib/l3kernel/l3quark.dtx
index 279747cfda..bb7f8f94c4 100644
--- a/macros/latex/contrib/l3kernel/l3quark.dtx
+++ b/macros/latex/contrib/l3kernel/l3quark.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-02-25}
+% \date{Released 2020-03-03}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3regex.dtx b/macros/latex/contrib/l3kernel/l3regex.dtx
index 746ebde995..7901939530 100644
--- a/macros/latex/contrib/l3kernel/l3regex.dtx
+++ b/macros/latex/contrib/l3kernel/l3regex.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-02-25}
+% \date{Released 2020-03-03}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3seq.dtx b/macros/latex/contrib/l3kernel/l3seq.dtx
index ccc96251db..9432890987 100644
--- a/macros/latex/contrib/l3kernel/l3seq.dtx
+++ b/macros/latex/contrib/l3kernel/l3seq.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-02-25}
+% \date{Released 2020-03-03}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3skip.dtx b/macros/latex/contrib/l3kernel/l3skip.dtx
index 0669b3b172..e15fa39a90 100644
--- a/macros/latex/contrib/l3kernel/l3skip.dtx
+++ b/macros/latex/contrib/l3kernel/l3skip.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2020-02-25}
+% \date{Released 2020-03-03}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3sort.dtx b/macros/latex/contrib/l3kernel/l3sort.dtx
index e95a16e715..e81bb56033 100644
--- a/macros/latex/contrib/l3kernel/l3sort.dtx
+++ b/macros/latex/contrib/l3kernel/l3sort.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-02-25}
+% \date{Released 2020-03-03}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3str-convert.dtx b/macros/latex/contrib/l3kernel/l3str-convert.dtx
index 3cf63e2768..b0e38274f5 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-02-25}
+% \date{Released 2020-03-03}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3str.dtx b/macros/latex/contrib/l3kernel/l3str.dtx
index 15a1378668..18880fe200 100644
--- a/macros/latex/contrib/l3kernel/l3str.dtx
+++ b/macros/latex/contrib/l3kernel/l3str.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-02-25}
+% \date{Released 2020-03-03}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3styleguide.pdf b/macros/latex/contrib/l3kernel/l3styleguide.pdf
index e61ce63c9d..af3ec49fc6 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 0a7686ae03..5efb9d47fc 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-02-25}
+\date{Released 2020-03-03}
\begin{document}
diff --git a/macros/latex/contrib/l3kernel/l3syntax-changes.pdf b/macros/latex/contrib/l3kernel/l3syntax-changes.pdf
index 9663dbfa35..4acc2f2a2f 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 f6b5382fe9..1ccd4dce5c 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-02-25}
+\date{Released 2020-03-03}
\newcommand{\TF}{\textit{(TF)}}
@@ -180,4 +180,11 @@ No change.
function was \texttt{N}-type.
\end{itemize}
+\section{February 2020}
+
+\begin{itemize}
+ \item \cs{keyval_parse:NNn} now works by expansion, returning
+ the parsed list inside \cs{exp_not:n}.
+\end{itemize}
+
\end{document}
diff --git a/macros/latex/contrib/l3kernel/l3sys.dtx b/macros/latex/contrib/l3kernel/l3sys.dtx
index d5b28d2f2b..1dbfca2d0e 100644
--- a/macros/latex/contrib/l3kernel/l3sys.dtx
+++ b/macros/latex/contrib/l3kernel/l3sys.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-02-25}
+% \date{Released 2020-03-03}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3term-glossary.pdf b/macros/latex/contrib/l3kernel/l3term-glossary.pdf
index 8d83bef487..b23107625d 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 3504f898f5..9e1ee7818c 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-02-25}
+\date{Released 2020-03-03}
\newcommand{\TF}{\textit{(TF)}}
diff --git a/macros/latex/contrib/l3kernel/l3text-case.dtx b/macros/latex/contrib/l3kernel/l3text-case.dtx
index 9cf8bff4ce..0a516e56fb 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-02-25}
+% \date{Released 2020-03-03}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3text.dtx b/macros/latex/contrib/l3kernel/l3text.dtx
index 837c1761d4..01af5e5c49 100644
--- a/macros/latex/contrib/l3kernel/l3text.dtx
+++ b/macros/latex/contrib/l3kernel/l3text.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-02-25}
+% \date{Released 2020-03-03}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3tl-analysis.dtx b/macros/latex/contrib/l3kernel/l3tl-analysis.dtx
index fe96c4ba2a..023bc13ab5 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-02-25}
+% \date{Released 2020-03-03}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3tl.dtx b/macros/latex/contrib/l3kernel/l3tl.dtx
index 229d5f8196..77fb21b753 100644
--- a/macros/latex/contrib/l3kernel/l3tl.dtx
+++ b/macros/latex/contrib/l3kernel/l3tl.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-02-25}
+% \date{Released 2020-03-03}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/l3token.dtx b/macros/latex/contrib/l3kernel/l3token.dtx
index 1d07b79af4..0a78a6401a 100644
--- a/macros/latex/contrib/l3kernel/l3token.dtx
+++ b/macros/latex/contrib/l3kernel/l3token.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-02-25}
+% \date{Released 2020-03-03}
%
% \maketitle
%
@@ -1831,7 +1831,9 @@
{ \tl_to_str:n {#2} }
{ \char_generate:nn {#1} { 12 } }
}
-\cs_if_exist:NF \tex_Uchar:D
+\bool_lazy_or:nnF
+ { \cs_if_exist_p:N \tex_luatexversion:D }
+ { \cs_if_exist_p:N \tex_XeTeXversion:D }
{
\cs_set:Npn \@@_str_change_case:nN #1#2
{ \tl_to_str:n {#2} }
diff --git a/macros/latex/contrib/l3kernel/l3unicode.dtx b/macros/latex/contrib/l3kernel/l3unicode.dtx
index 40c6775754..42f10d7ee9 100644
--- a/macros/latex/contrib/l3kernel/l3unicode.dtx
+++ b/macros/latex/contrib/l3kernel/l3unicode.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2020-02-25}
+% \date{Released 2020-03-03}
%
% \maketitle
%
diff --git a/macros/latex/contrib/l3kernel/source3.pdf b/macros/latex/contrib/l3kernel/source3.pdf
index d3419a584b..f70cc7def0 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 b18a1fc90a..03b190192a 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-02-25}
+\date{Released 2020-03-03}
\pagenumbering{roman}
\maketitle