diff options
Diffstat (limited to 'macros/latex/contrib/l3kernel')
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 functions have been added for dim variables, e.g. `\dim_step_inline: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 Binary files differindex 10bc95f1d0..9c593937fd 100644 --- a/macros/latex/contrib/l3kernel/expl3.pdf +++ b/macros/latex/contrib/l3kernel/expl3.pdf diff --git a/macros/latex/contrib/l3kernel/interface3.pdf b/macros/latex/contrib/l3kernel/interface3.pdf Binary files differindex 91aff8e85b..311daaad87 100644 --- a/macros/latex/contrib/l3kernel/interface3.pdf +++ b/macros/latex/contrib/l3kernel/interface3.pdf 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 Binary files differindex ba9d9375ed..5198841d10 100644 --- a/macros/latex/contrib/l3kernel/l3docstrip.pdf +++ b/macros/latex/contrib/l3kernel/l3docstrip.pdf 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 Binary files differindex a06982d228..548fee9bed 100644 --- a/macros/latex/contrib/l3kernel/l3news.pdf +++ b/macros/latex/contrib/l3kernel/l3news.pdf 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 Binary files differindex 0fa9132de6..3ace4904a4 100644 --- a/macros/latex/contrib/l3kernel/l3news01.pdf +++ b/macros/latex/contrib/l3kernel/l3news01.pdf diff --git a/macros/latex/contrib/l3kernel/l3news02.pdf b/macros/latex/contrib/l3kernel/l3news02.pdf Binary files differindex 0110d5cdc0..9ed1645fcd 100644 --- a/macros/latex/contrib/l3kernel/l3news02.pdf +++ b/macros/latex/contrib/l3kernel/l3news02.pdf diff --git a/macros/latex/contrib/l3kernel/l3news03.pdf b/macros/latex/contrib/l3kernel/l3news03.pdf Binary files differindex 38f2707903..391475fcf6 100644 --- a/macros/latex/contrib/l3kernel/l3news03.pdf +++ b/macros/latex/contrib/l3kernel/l3news03.pdf diff --git a/macros/latex/contrib/l3kernel/l3news04.pdf b/macros/latex/contrib/l3kernel/l3news04.pdf Binary files differindex 7399a65d84..095d00c064 100644 --- a/macros/latex/contrib/l3kernel/l3news04.pdf +++ b/macros/latex/contrib/l3kernel/l3news04.pdf diff --git a/macros/latex/contrib/l3kernel/l3news05.pdf b/macros/latex/contrib/l3kernel/l3news05.pdf Binary files differindex d17c6e49dc..128147df68 100644 --- a/macros/latex/contrib/l3kernel/l3news05.pdf +++ b/macros/latex/contrib/l3kernel/l3news05.pdf diff --git a/macros/latex/contrib/l3kernel/l3news06.pdf b/macros/latex/contrib/l3kernel/l3news06.pdf Binary files differindex 9cfe26ccde..eb931c08db 100644 --- a/macros/latex/contrib/l3kernel/l3news06.pdf +++ b/macros/latex/contrib/l3kernel/l3news06.pdf diff --git a/macros/latex/contrib/l3kernel/l3news07.pdf b/macros/latex/contrib/l3kernel/l3news07.pdf Binary files differindex e0208fa696..0f0710fb54 100644 --- a/macros/latex/contrib/l3kernel/l3news07.pdf +++ b/macros/latex/contrib/l3kernel/l3news07.pdf diff --git a/macros/latex/contrib/l3kernel/l3news08.pdf b/macros/latex/contrib/l3kernel/l3news08.pdf Binary files differindex ae306f8536..1ac7b48fc0 100644 --- a/macros/latex/contrib/l3kernel/l3news08.pdf +++ b/macros/latex/contrib/l3kernel/l3news08.pdf diff --git a/macros/latex/contrib/l3kernel/l3news09.pdf b/macros/latex/contrib/l3kernel/l3news09.pdf Binary files differindex 0dd900517a..f0b9042c8a 100644 --- a/macros/latex/contrib/l3kernel/l3news09.pdf +++ b/macros/latex/contrib/l3kernel/l3news09.pdf diff --git a/macros/latex/contrib/l3kernel/l3news10.pdf b/macros/latex/contrib/l3kernel/l3news10.pdf Binary files differindex e96f6bb029..a28ad5fabf 100644 --- a/macros/latex/contrib/l3kernel/l3news10.pdf +++ b/macros/latex/contrib/l3kernel/l3news10.pdf diff --git a/macros/latex/contrib/l3kernel/l3news11.pdf b/macros/latex/contrib/l3kernel/l3news11.pdf Binary files differindex 3a4e17fd16..3df9be07b4 100644 --- a/macros/latex/contrib/l3kernel/l3news11.pdf +++ b/macros/latex/contrib/l3kernel/l3news11.pdf diff --git a/macros/latex/contrib/l3kernel/l3news12.pdf b/macros/latex/contrib/l3kernel/l3news12.pdf Binary files differindex 0f7aaf6285..9ffaf1e42f 100644 --- a/macros/latex/contrib/l3kernel/l3news12.pdf +++ b/macros/latex/contrib/l3kernel/l3news12.pdf diff --git a/macros/latex/contrib/l3kernel/l3prefixes.pdf b/macros/latex/contrib/l3kernel/l3prefixes.pdf Binary files differindex 7ff0a83c23..3e52f7b795 100644 --- a/macros/latex/contrib/l3kernel/l3prefixes.pdf +++ b/macros/latex/contrib/l3kernel/l3prefixes.pdf 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 Binary files differindex e61ce63c9d..af3ec49fc6 100644 --- a/macros/latex/contrib/l3kernel/l3styleguide.pdf +++ b/macros/latex/contrib/l3kernel/l3styleguide.pdf 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 Binary files differindex 9663dbfa35..4acc2f2a2f 100644 --- a/macros/latex/contrib/l3kernel/l3syntax-changes.pdf +++ b/macros/latex/contrib/l3kernel/l3syntax-changes.pdf 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 Binary files differindex 8d83bef487..b23107625d 100644 --- a/macros/latex/contrib/l3kernel/l3term-glossary.pdf +++ b/macros/latex/contrib/l3kernel/l3term-glossary.pdf 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 Binary files differindex d3419a584b..f70cc7def0 100644 --- a/macros/latex/contrib/l3kernel/source3.pdf +++ b/macros/latex/contrib/l3kernel/source3.pdf 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 |