diff options
Diffstat (limited to 'Master/texmf-dist')
169 files changed, 1277 insertions, 1065 deletions
diff --git a/Master/texmf-dist/doc/latex/l3build/CHANGELOG.md b/Master/texmf-dist/doc/latex/l3build/CHANGELOG.md index f5be81a9372..c6f67da4b2e 100644 --- a/Master/texmf-dist/doc/latex/l3build/CHANGELOG.md +++ b/Master/texmf-dist/doc/latex/l3build/CHANGELOG.md @@ -7,6 +7,14 @@ this project uses date-based 'snapshot' version identifiers. ## [Unreleased] +## [2021-11-12] + +### Changed +- Documentation improvements + +### Fixed +- Allow config names ending with 'lua', as long as they don't end with '.lua' + ## [2021-08-28] ### Fixed @@ -509,7 +517,8 @@ this project uses date-based 'snapshot' version identifiers. - Rationalise short option names: removed `-d`, `-E`, `-r` - Target `cmdcheck`: specific to LaTeX kernel work -[Unreleased]: https://github.com/latex3/l3build/compare/2021-08-28...HEAD +[Unreleased]: https://github.com/latex3/l3build/compare/2021-11-12...HEAD +[2021-11-12]: https://github.com/latex3/l3build/compare/2021-08-28...2021-11-12 [2021-08-28]: https://github.com/latex3/l3build/compare/2021-08-27...2021-08-28 [2021-08-27]: https://github.com/latex3/l3build/compare/2021-05-06...2021-08-27 [2021-05-06]: https://github.com/latex3/l3build/compare/2021-05-05...2021-05-06 diff --git a/Master/texmf-dist/doc/latex/l3build/README.md b/Master/texmf-dist/doc/latex/l3build/README.md index 635693ae9ff..f75e873dfd1 100644 --- a/Master/texmf-dist/doc/latex/l3build/README.md +++ b/Master/texmf-dist/doc/latex/l3build/README.md @@ -1,7 +1,7 @@ l3build: a testing and building system for LaTeX ================================================= -Release 2021-08-28 +Release 2021-11-12 Overview -------- @@ -31,6 +31,6 @@ The LaTeX kernel is developed by [The LaTeX Project](https://latex-project.org). ----- -<p>Copyright (C) 2014-2020 The LaTeX Project <br /> +<p>Copyright (C) 2014-2021 The LaTeX Project <br /> <a href="http://latex-project.org/">http://latex-project.org/</a> <br /> All rights reserved.</p> diff --git a/Master/texmf-dist/doc/latex/l3build/l3build.pdf b/Master/texmf-dist/doc/latex/l3build/l3build.pdf Binary files differindex fe2778114f0..7c23434947d 100644 --- a/Master/texmf-dist/doc/latex/l3build/l3build.pdf +++ b/Master/texmf-dist/doc/latex/l3build/l3build.pdf diff --git a/Master/texmf-dist/doc/latex/l3experimental/CHANGELOG.md b/Master/texmf-dist/doc/latex/l3experimental/CHANGELOG.md index 4e557273eab..42e0fe6dc8f 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/CHANGELOG.md +++ b/Master/texmf-dist/doc/latex/l3experimental/CHANGELOG.md @@ -7,6 +7,11 @@ this project uses date-based 'snapshot' version identifiers. ## [Unreleased] +## [2021-11-12] + +### Added +- `\draw_point_intersect_line_circle:nnnnn` + ## [2021-08-27] ### Changed @@ -226,7 +231,8 @@ this project uses date-based 'snapshot' version identifiers. - New `l3color` module using `xcolor`-like expression syntax - New `l3draw` module, based on `pgf` layer of the TikZ system -[Unreleased]: https://github.com/latex3/latex3/compare/2021-08-27...HEAD +[Unreleased]: https://github.com/latex3/latex3/compare/2021-11-12...HEAD +[2021-11-12]: https://github.com/latex3/latex3/compare/2021-08-27...2021-11-12 [2021-08-27]: https://github.com/latex3/latex3/compare/2021-08-04...2021-08-27 [2021-08-04]: https://github.com/latex3/latex3/compare/2021-07-12...2021-08-04 [2021-07-12]: https://github.com/latex3/latex3/compare/2021-05-27...2021-07-12 diff --git a/Master/texmf-dist/doc/latex/l3experimental/README.md b/Master/texmf-dist/doc/latex/l3experimental/README.md index 38eff7cf661..0a8c1f250d9 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/README.md +++ b/Master/texmf-dist/doc/latex/l3experimental/README.md @@ -1,7 +1,7 @@ Experimental LaTeX3 Concepts ============================ -Release 2021-08-27 +Release 2021-11-12 Overview -------- diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3benchmark/l3benchmark.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3benchmark/l3benchmark.pdf Binary files differindex 157e2cf3a71..55a39d0fc57 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/l3benchmark/l3benchmark.pdf +++ b/Master/texmf-dist/doc/latex/l3experimental/l3benchmark/l3benchmark.pdf diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3bitset/l3bitset.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3bitset/l3bitset.pdf Binary files differindex 9b4fadc6caf..e46962b6fdb 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/l3bitset/l3bitset.pdf +++ b/Master/texmf-dist/doc/latex/l3experimental/l3bitset/l3bitset.pdf diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw-code.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw-code.pdf Binary files differindex ac7276ee1e0..98b2d5625e6 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw-code.pdf +++ b/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw-code.pdf diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw.pdf Binary files differindex 42e86d08cc4..63b74dc9fd0 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw.pdf +++ b/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw.pdf diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3graphics/l3graphics.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3graphics/l3graphics.pdf Binary files differindex a920bded0a4..845356b86c1 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/l3graphics/l3graphics.pdf +++ b/Master/texmf-dist/doc/latex/l3experimental/l3graphics/l3graphics.pdf diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3opacity/l3opacity.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3opacity/l3opacity.pdf Binary files differindex cc30509499d..16c5c6d756d 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/l3opacity/l3opacity.pdf +++ b/Master/texmf-dist/doc/latex/l3experimental/l3opacity/l3opacity.pdf diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.pdf Binary files differindex 07dc9eea04a..1041b445b67 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.pdf +++ b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.pdf diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3sys-shell/l3sys-shell.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3sys-shell/l3sys-shell.pdf Binary files differindex 41b79767a8e..91ded20b127 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/l3sys-shell/l3sys-shell.pdf +++ b/Master/texmf-dist/doc/latex/l3experimental/l3sys-shell/l3sys-shell.pdf diff --git a/Master/texmf-dist/doc/latex/l3experimental/xcoffins/xcoffins.pdf b/Master/texmf-dist/doc/latex/l3experimental/xcoffins/xcoffins.pdf Binary files differindex ae301c7c8ba..09029471784 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/xcoffins/xcoffins.pdf +++ b/Master/texmf-dist/doc/latex/l3experimental/xcoffins/xcoffins.pdf diff --git a/Master/texmf-dist/doc/latex/l3experimental/xgalley/l3galley.pdf b/Master/texmf-dist/doc/latex/l3experimental/xgalley/l3galley.pdf Binary files differindex 61a9667c91a..8f756538d15 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/xgalley/l3galley.pdf +++ b/Master/texmf-dist/doc/latex/l3experimental/xgalley/l3galley.pdf diff --git a/Master/texmf-dist/doc/latex/l3experimental/xgalley/xgalley.pdf b/Master/texmf-dist/doc/latex/l3experimental/xgalley/xgalley.pdf Binary files differindex 2d685ddcca6..a0ed251a18a 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/xgalley/xgalley.pdf +++ b/Master/texmf-dist/doc/latex/l3experimental/xgalley/xgalley.pdf diff --git a/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md b/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md index 82782d208d7..a889c04c8c4 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md +++ b/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md @@ -7,6 +7,19 @@ this project uses date-based 'snapshot' version identifiers. ## [Unreleased] +## [2021-11-12] + +### Fixed +- DeviceN colorspace conversions with alternative model RGB + +### Added +- `.str_set:N`, etc., key properties (issue #1007) +- `\bool_to_str:n` (issue #1010) + +### Changed +- `\prop_..._from_keyval:Nn` functions now support active comma or + equal sign (pull #1012) + ## [2021-10-18] ### Added @@ -971,7 +984,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/2021-10-18...HEAD +[Unreleased]: https://github.com/latex3/latex3/compare/2021-11-12...HEAD +[2021-11-12]: https://github.com/latex3/latex3/compare/2021-10-18...2021-11-12 [2021-10-18]: https://github.com/latex3/latex3/compare/2021-10-17...2021-10-18 [2021-10-17]: https://github.com/latex3/latex3/compare/2021-10-12...2021-10-17 [2021-10-12]: https://github.com/latex3/latex3/compare/2021-08-27...2021-10-12 diff --git a/Master/texmf-dist/doc/latex/l3kernel/README.md b/Master/texmf-dist/doc/latex/l3kernel/README.md index 0ceca4ca198..027c1c96363 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/README.md +++ b/Master/texmf-dist/doc/latex/l3kernel/README.md @@ -1,7 +1,7 @@ LaTeX3 Programming Conventions ============================== -Release 2021-10-18 +Release 2021-11-12 Overview -------- diff --git a/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf b/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf Binary files differindex 60e57d41482..92b32349e67 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf +++ b/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf diff --git a/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf b/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf Binary files differindex 19980978f92..eee082fa60d 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf +++ b/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf diff --git a/Master/texmf-dist/doc/latex/l3kernel/interface3.tex b/Master/texmf-dist/doc/latex/l3kernel/interface3.tex index b2c52db293b..f64cd3abbbb 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/interface3.tex +++ b/Master/texmf-dist/doc/latex/l3kernel/interface3.tex @@ -54,7 +54,7 @@ for those people who are interested. {latex-team@latex-project.org}% }% } -\date{Released 2021-10-18} +\date{Released 2021-11-12} \pagenumbering{roman} \maketitle diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf Binary files differindex 62968c5aa04..2a9399305e9 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf +++ b/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3news.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3news.pdf Binary files differindex aea97df6cd4..e1c52b5cc37 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/l3news.pdf +++ b/Master/texmf-dist/doc/latex/l3kernel/l3news.pdf diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3news01.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3news01.pdf Binary files differindex 8ca02b765dc..1b6dc0fbe33 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/l3news01.pdf +++ b/Master/texmf-dist/doc/latex/l3kernel/l3news01.pdf diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3news02.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3news02.pdf Binary files differindex d4f88d81132..28c71948587 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/l3news02.pdf +++ b/Master/texmf-dist/doc/latex/l3kernel/l3news02.pdf diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3news03.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3news03.pdf Binary files differindex 6ff29375370..a52b994d207 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/l3news03.pdf +++ b/Master/texmf-dist/doc/latex/l3kernel/l3news03.pdf diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3news04.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3news04.pdf Binary files differindex 42b13884bea..dcaa766fd78 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/l3news04.pdf +++ b/Master/texmf-dist/doc/latex/l3kernel/l3news04.pdf diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3news05.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3news05.pdf Binary files differindex 87426871bca..5110b7df1a4 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/l3news05.pdf +++ b/Master/texmf-dist/doc/latex/l3kernel/l3news05.pdf diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3news06.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3news06.pdf Binary files differindex 825152e7205..7f5bd08342f 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/l3news06.pdf +++ b/Master/texmf-dist/doc/latex/l3kernel/l3news06.pdf diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3news07.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3news07.pdf Binary files differindex 3309098d71b..57e35fbd7cf 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/l3news07.pdf +++ b/Master/texmf-dist/doc/latex/l3kernel/l3news07.pdf diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3news08.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3news08.pdf Binary files differindex beed982815d..28c0de51a54 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/l3news08.pdf +++ b/Master/texmf-dist/doc/latex/l3kernel/l3news08.pdf diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3news09.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3news09.pdf Binary files differindex 4e7870ec4ef..571f491b28f 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/l3news09.pdf +++ b/Master/texmf-dist/doc/latex/l3kernel/l3news09.pdf diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3news10.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3news10.pdf Binary files differindex 6c12559b817..d0239237a27 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/l3news10.pdf +++ b/Master/texmf-dist/doc/latex/l3kernel/l3news10.pdf diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3news11.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3news11.pdf Binary files differindex 36b254b236c..e5cc04782c8 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/l3news11.pdf +++ b/Master/texmf-dist/doc/latex/l3kernel/l3news11.pdf diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3news12.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3news12.pdf Binary files differindex b1992769377..b6195360165 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/l3news12.pdf +++ b/Master/texmf-dist/doc/latex/l3kernel/l3news12.pdf diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3prefixes.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3prefixes.pdf Binary files differindex cdaa3fe63bc..06fe96aef03 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/l3prefixes.pdf +++ b/Master/texmf-dist/doc/latex/l3kernel/l3prefixes.pdf diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf Binary files differindex 4589d6a2d2b..e8ec9a0b73d 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf +++ b/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex b/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex index 3b3ec1b3bf7..07f81058249 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex +++ b/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex @@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN. {latex-team@latex-project.org}% }% } -\date{Released 2021-10-18} +\date{Released 2021-11-12} \begin{document} diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf Binary files differindex 55d08cee703..c0043ad4b1a 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf +++ b/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex b/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex index 882304511f8..035b9117fc0 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex +++ b/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex @@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN. {latex-team@latex-project.org}% }% } -\date{Released 2021-10-18} +\date{Released 2021-11-12} \newcommand{\TF}{\textit{(TF)}} diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.pdf Binary files differindex 51c0c6d52ce..33d947829f0 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.pdf +++ b/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.pdf diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.tex b/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.tex index 8e289903b60..88221a01dab 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.tex +++ b/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.tex @@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN. {latex-team@latex-project.org}% }% } -\date{Released 2021-10-18} +\date{Released 2021-11-12} \newcommand{\TF}{\textit{(TF)}} diff --git a/Master/texmf-dist/doc/latex/l3kernel/source3.pdf b/Master/texmf-dist/doc/latex/l3kernel/source3.pdf Binary files differindex 9884bf29d17..8d919c1a263 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/source3.pdf +++ b/Master/texmf-dist/doc/latex/l3kernel/source3.pdf diff --git a/Master/texmf-dist/doc/latex/l3kernel/source3.tex b/Master/texmf-dist/doc/latex/l3kernel/source3.tex index 7910459271a..56c5f487d7a 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/source3.tex +++ b/Master/texmf-dist/doc/latex/l3kernel/source3.tex @@ -53,7 +53,7 @@ for those people who are interested. {latex-team@latex-project.org}% }% } -\date{Released 2021-10-18} +\date{Released 2021-11-12} \pagenumbering{roman} \maketitle diff --git a/Master/texmf-dist/doc/latex/l3packages/CHANGELOG.md b/Master/texmf-dist/doc/latex/l3packages/CHANGELOG.md index 9b7487dc515..a5a54eeed00 100644 --- a/Master/texmf-dist/doc/latex/l3packages/CHANGELOG.md +++ b/Master/texmf-dist/doc/latex/l3packages/CHANGELOG.md @@ -7,6 +7,11 @@ this project uses date-based 'snapshot' version identifiers. ## [Unreleased] +## [2021-11-12] + +### Added +- Added `\NewCommandCopy` support for deprecated argument types. + ## [2021-08-27] ### Changed @@ -159,7 +164,8 @@ this project uses date-based 'snapshot' version identifiers. - Switch to ISO date format - Improve cross-module use of internal functions -[Unreleased]: https://github.com/latex3/latex3/compare/2021-08-27...HEAD +[Unreleased]: https://github.com/latex3/latex3/compare/2021-11-12...HEAD +[2021-11-12]: https://github.com/latex3/latex3/compare/2021-08-27...2021-11-12 [2021-08-27]: https://github.com/latex3/latex3/compare/2021-08-04...2021-08-27 [2021-08-04]: https://github.com/latex3/latex3/compare/2021-06-18...2021-08-04 [2021-06-18]: https://github.com/latex3/latex3/compare/2021-06-01...2021-06-18 diff --git a/Master/texmf-dist/doc/latex/l3packages/README.md b/Master/texmf-dist/doc/latex/l3packages/README.md index d20f9f83bee..d71cfcc5844 100644 --- a/Master/texmf-dist/doc/latex/l3packages/README.md +++ b/Master/texmf-dist/doc/latex/l3packages/README.md @@ -1,7 +1,7 @@ LaTeX3 High-Level Concepts ========================== -Release 2021-08-27 +Release 2021-11-12 Overview -------- diff --git a/Master/texmf-dist/doc/latex/l3packages/l3keys2e/l3keys2e.pdf b/Master/texmf-dist/doc/latex/l3packages/l3keys2e/l3keys2e.pdf Binary files differindex 587e3201c27..8cece1c69cf 100644 --- a/Master/texmf-dist/doc/latex/l3packages/l3keys2e/l3keys2e.pdf +++ b/Master/texmf-dist/doc/latex/l3packages/l3keys2e/l3keys2e.pdf diff --git a/Master/texmf-dist/doc/latex/l3packages/xfp/xfp.pdf b/Master/texmf-dist/doc/latex/l3packages/xfp/xfp.pdf Binary files differindex cd5a23f6014..0e0dc875b71 100644 --- a/Master/texmf-dist/doc/latex/l3packages/xfp/xfp.pdf +++ b/Master/texmf-dist/doc/latex/l3packages/xfp/xfp.pdf diff --git a/Master/texmf-dist/doc/latex/l3packages/xfrac/xfrac.pdf b/Master/texmf-dist/doc/latex/l3packages/xfrac/xfrac.pdf Binary files differindex 2895df4613f..b5b461116eb 100644 --- a/Master/texmf-dist/doc/latex/l3packages/xfrac/xfrac.pdf +++ b/Master/texmf-dist/doc/latex/l3packages/xfrac/xfrac.pdf diff --git a/Master/texmf-dist/doc/latex/l3packages/xparse/xparse.pdf b/Master/texmf-dist/doc/latex/l3packages/xparse/xparse.pdf Binary files differindex 139e90a8737..f7075f0b22b 100644 --- a/Master/texmf-dist/doc/latex/l3packages/xparse/xparse.pdf +++ b/Master/texmf-dist/doc/latex/l3packages/xparse/xparse.pdf diff --git a/Master/texmf-dist/doc/latex/l3packages/xtemplate/xtemplate.pdf b/Master/texmf-dist/doc/latex/l3packages/xtemplate/xtemplate.pdf Binary files differindex dd14606df02..10bea564f79 100644 --- a/Master/texmf-dist/doc/latex/l3packages/xtemplate/xtemplate.pdf +++ b/Master/texmf-dist/doc/latex/l3packages/xtemplate/xtemplate.pdf diff --git a/Master/texmf-dist/doc/man/man1/l3build.1 b/Master/texmf-dist/doc/man/man1/l3build.1 index 6c2f071a46a..3faa8f04b15 100644 --- a/Master/texmf-dist/doc/man/man1/l3build.1 +++ b/Master/texmf-dist/doc/man/man1/l3build.1 @@ -1,4 +1,4 @@ -.TH l3build 1 "2021-08-28" +.TH l3build 1 "2021-11-12" .SH NAME l3build \- Checking and building packages .SH SYNOPSIS diff --git a/Master/texmf-dist/doc/man/man1/l3build.man1.pdf b/Master/texmf-dist/doc/man/man1/l3build.man1.pdf Binary files differindex ecb6a8a15cd..4728154d7db 100644 --- a/Master/texmf-dist/doc/man/man1/l3build.man1.pdf +++ b/Master/texmf-dist/doc/man/man1/l3build.man1.pdf diff --git a/Master/texmf-dist/scripts/l3build/l3build-arguments.lua b/Master/texmf-dist/scripts/l3build/l3build-arguments.lua index 8f62e8b433f..470290db562 100644 --- a/Master/texmf-dist/scripts/l3build/l3build-arguments.lua +++ b/Master/texmf-dist/scripts/l3build/l3build-arguments.lua @@ -1,6 +1,6 @@ --[[ -File l3build-arguments.lua Copyright (C) 2018-2020 The LaTeX Project +File l3build-arguments.lua Copyright (C) 2018-2021 The LaTeX Project It may be distributed and/or modified under the conditions of the LaTeX Project Public License (LPPL), either version 1.3c of this @@ -141,7 +141,7 @@ option_list = }, ["show-saves"] = { - desc = "If tests fail, show the l3build save invocation to regenerate the tests", + desc = "Show the invocation to update failing .tlg files", short = "S", type = "boolean" }, diff --git a/Master/texmf-dist/scripts/l3build/l3build-aux.lua b/Master/texmf-dist/scripts/l3build/l3build-aux.lua index 12fe704af49..42e7f6a53a5 100644 --- a/Master/texmf-dist/scripts/l3build/l3build-aux.lua +++ b/Master/texmf-dist/scripts/l3build/l3build-aux.lua @@ -1,6 +1,6 @@ --[[ -File l3build-aux.lua Copyright (C) 2018-2020 The LaTeX Project +File l3build-aux.lua Copyright (C) 2018-2021 The LaTeX Project It may be distributed and/or modified under the conditions of the LaTeX Project Public License (LPPL), either version 1.3c of this diff --git a/Master/texmf-dist/scripts/l3build/l3build-check.lua b/Master/texmf-dist/scripts/l3build/l3build-check.lua index f83dee4e448..3e8089970a3 100644 --- a/Master/texmf-dist/scripts/l3build/l3build-check.lua +++ b/Master/texmf-dist/scripts/l3build/l3build-check.lua @@ -1,6 +1,6 @@ --[[ -File l3build-check.lua Copyright (C) 2018-2020 The LaTeX Project +File l3build-check.lua Copyright (C) 2018-2021 The LaTeX Project It may be distributed and/or modified under the conditions of the LaTeX Project Public License (LPPL), either version 1.3c of this @@ -548,6 +548,7 @@ local function normalize_pdf(content) not match(line,"^%%%%Invocation") and not match(line,"^%%%%%+") then line = gsub(line,"%/ID( ?)%[<[^>]+><[^>]+>]","/ID%1[<ID-STRING><ID-STRING>]") + line = gsub(line,"%/ID( ?)%[(%b())%2%]","/ID%1[<ID-STRING><ID-STRING>]") new_content = new_content .. line .. os_newline end end diff --git a/Master/texmf-dist/scripts/l3build/l3build-clean.lua b/Master/texmf-dist/scripts/l3build/l3build-clean.lua index f548a392eb9..226650b478d 100644 --- a/Master/texmf-dist/scripts/l3build/l3build-clean.lua +++ b/Master/texmf-dist/scripts/l3build/l3build-clean.lua @@ -1,6 +1,6 @@ --[[ -File l3build-clean.lua Copyright (C) 2018,2020 The LaTeX Project +File l3build-clean.lua Copyright (C) 2018,2020,2021 The LaTeX Project It may be distributed and/or modified under the conditions of the LaTeX Project Public License (LPPL), either version 1.3c of this @@ -77,4 +77,3 @@ function bundleclean() + rmdir(ctandir) + rmdir(tdsdir) end - diff --git a/Master/texmf-dist/scripts/l3build/l3build-ctan.lua b/Master/texmf-dist/scripts/l3build/l3build-ctan.lua index e5b3b7e8f84..1f5aa2bc906 100644 --- a/Master/texmf-dist/scripts/l3build/l3build-ctan.lua +++ b/Master/texmf-dist/scripts/l3build/l3build-ctan.lua @@ -1,6 +1,6 @@ --[[ -File l3build-ctan.lua Copyright (C) 2018-2020 The LaTeX Project +File l3build-ctan.lua Copyright (C) 2018-2021 The LaTeX Project It may be distributed and/or modified under the conditions of the LaTeX Project Public License (LPPL), either version 1.3c of this @@ -160,4 +160,3 @@ function ctan() end return errorlevel end - diff --git a/Master/texmf-dist/scripts/l3build/l3build-file-functions.lua b/Master/texmf-dist/scripts/l3build/l3build-file-functions.lua index 53364bd3010..1fc9e1d47af 100644 --- a/Master/texmf-dist/scripts/l3build/l3build-file-functions.lua +++ b/Master/texmf-dist/scripts/l3build/l3build-file-functions.lua @@ -1,6 +1,6 @@ --[[ -File l3build-file-functions.lua Copyright (C) 2018-2020 The LaTeX Project +File l3build-file-functions.lua Copyright (C) 2018-2021 The LaTeX Project It may be distributed and/or modified under the conditions of the LaTeX Project Public License (LPPL), either version 1.3c of this diff --git a/Master/texmf-dist/scripts/l3build/l3build-help.lua b/Master/texmf-dist/scripts/l3build/l3build-help.lua index 6431ac547ef..2e7d776a730 100644 --- a/Master/texmf-dist/scripts/l3build/l3build-help.lua +++ b/Master/texmf-dist/scripts/l3build/l3build-help.lua @@ -1,6 +1,6 @@ --[[ -File l3build-help.lua Copyright (C) 2018,2020 The LaTeX Project +File l3build-help.lua Copyright (C) 2018,2020,2021 The LaTeX Project It may be distributed and/or modified under the conditions of the LaTeX Project Public License (LPPL), either version 1.3c of this diff --git a/Master/texmf-dist/scripts/l3build/l3build-install.lua b/Master/texmf-dist/scripts/l3build/l3build-install.lua index f4839fdca77..21257aad0d6 100644 --- a/Master/texmf-dist/scripts/l3build/l3build-install.lua +++ b/Master/texmf-dist/scripts/l3build/l3build-install.lua @@ -1,6 +1,6 @@ --[[ -File l3build-install.lua Copyright (C) 2018-2020 The LaTeX Project +File l3build-install.lua Copyright (C) 2018-2021 The LaTeX Project It may be distributed and/or modified under the conditions of the LaTeX Project Public License (LPPL), either version 1.3c of this @@ -234,11 +234,11 @@ function install_files(target,full,dry_run) typesetlist = create_file_list(docfiledir,typesetfiles,{sourcefiles}) sourcelist = create_file_list(sourcefiledir,sourcefiles, {bstfiles,installfiles,makeindexfiles,scriptfiles}) - + if dry_run then print("\nFor installation inside " .. target .. ":") - end - + end + errorlevel = create_install_map(sourcefiledir,"source",{sourcelist}) + create_install_map(docfiledir,"doc", {bibfiles,demofiles,docfiles,pdffiles,textfiles,typesetlist}) @@ -290,8 +290,8 @@ function install_files(target,full,dry_run) for _,v in ipairs(installmap) do errorlevel = cp(v.file,v.source,v.dest) if errorlevel ~= 0 then return errorlevel end - end - + end + return 0 end diff --git a/Master/texmf-dist/scripts/l3build/l3build-manifest-setup.lua b/Master/texmf-dist/scripts/l3build/l3build-manifest-setup.lua index 9fcf4937297..f7051dac5c5 100644 --- a/Master/texmf-dist/scripts/l3build/l3build-manifest-setup.lua +++ b/Master/texmf-dist/scripts/l3build/l3build-manifest-setup.lua @@ -1,6 +1,6 @@ --[[ -File l3build-manifest-setup.lua Copyright (C) 2018,2020 The LaTeX Project +File l3build-manifest-setup.lua Copyright (C) 2018,2020,2021 The LaTeX Project It may be distributed and/or modified under the conditions of the LaTeX Project Public License (LPPL), either version 1.3c of this diff --git a/Master/texmf-dist/scripts/l3build/l3build-manifest.lua b/Master/texmf-dist/scripts/l3build/l3build-manifest.lua index f9b1c4e82e9..8f3e5ef4217 100644 --- a/Master/texmf-dist/scripts/l3build/l3build-manifest.lua +++ b/Master/texmf-dist/scripts/l3build/l3build-manifest.lua @@ -1,6 +1,6 @@ --[[ -File l3build-manifest.lua Copyright (C) 2018,2020 The LaTeX Project +File l3build-manifest.lua Copyright (C) 2018,2020,2021 The LaTeX Project It may be distributed and/or modified under the conditions of the LaTeX Project Public License (LPPL), either version 1.3c of this diff --git a/Master/texmf-dist/scripts/l3build/l3build-stdmain.lua b/Master/texmf-dist/scripts/l3build/l3build-stdmain.lua index 80b5cc84be1..4b6da6675e9 100644 --- a/Master/texmf-dist/scripts/l3build/l3build-stdmain.lua +++ b/Master/texmf-dist/scripts/l3build/l3build-stdmain.lua @@ -1,6 +1,6 @@ --[[ -File l3build-stdmain.lua Copyright (C) 2018-2020 The LaTeX Project +File l3build-stdmain.lua Copyright (C) 2018-2021 The LaTeX Project It may be distributed and/or modified under the conditions of the LaTeX Project Public License (LPPL), either version 1.3c of this diff --git a/Master/texmf-dist/scripts/l3build/l3build-tagging.lua b/Master/texmf-dist/scripts/l3build/l3build-tagging.lua index e255aba5cdd..9f396505980 100644 --- a/Master/texmf-dist/scripts/l3build/l3build-tagging.lua +++ b/Master/texmf-dist/scripts/l3build/l3build-tagging.lua @@ -1,6 +1,6 @@ --[[ -File l3build-tagging.lua Copyright (C) 2018-2020 The LaTeX Project +File l3build-tagging.lua Copyright (C) 2018-2021 The LaTeX Project It may be distributed and/or modified under the conditions of the LaTeX Project Public License (LPPL), either version 1.3c of this diff --git a/Master/texmf-dist/scripts/l3build/l3build-typesetting.lua b/Master/texmf-dist/scripts/l3build/l3build-typesetting.lua index 716648f7fd4..4934c3f4979 100644 --- a/Master/texmf-dist/scripts/l3build/l3build-typesetting.lua +++ b/Master/texmf-dist/scripts/l3build/l3build-typesetting.lua @@ -1,6 +1,6 @@ --[[ -File l3build-typesetting.lua Copyright (C) 2018-2020 The LaTeX Project +File l3build-typesetting.lua Copyright (C) 2018-2021 The LaTeX Project It may be distributed and/or modified under the conditions of the LaTeX Project Public License (LPPL), either version 1.3c of this diff --git a/Master/texmf-dist/scripts/l3build/l3build-unpack.lua b/Master/texmf-dist/scripts/l3build/l3build-unpack.lua index 7ab21ee09d4..a734d4c8ea9 100644 --- a/Master/texmf-dist/scripts/l3build/l3build-unpack.lua +++ b/Master/texmf-dist/scripts/l3build/l3build-unpack.lua @@ -1,6 +1,6 @@ --[[ -File l3build-unpack.lua Copyright (C) 2018-2020 The LaTeX Project +File l3build-unpack.lua Copyright (C) 2018-2021 The LaTeX Project It may be distributed and/or modified under the conditions of the LaTeX Project Public License (LPPL), either version 1.3c of this diff --git a/Master/texmf-dist/scripts/l3build/l3build-upload.lua b/Master/texmf-dist/scripts/l3build/l3build-upload.lua index 47268f5b6a9..be814ce5ae8 100644 --- a/Master/texmf-dist/scripts/l3build/l3build-upload.lua +++ b/Master/texmf-dist/scripts/l3build/l3build-upload.lua @@ -1,6 +1,6 @@ --[[ -File l3build-upload.lua Copyright (C) 2018-2020 The LaTeX Project +File l3build-upload.lua Copyright (C) 2018-2021 The LaTeX Project It may be distributed and/or modified under the conditions of the LaTeX Project Public License (LPPL), either version 1.3c of this @@ -145,9 +145,9 @@ function upload(tagnames) output(curlopt) write(ctan_post) close(curlopt) - + ctan_post=curlexe .. " --config " .. curloptfile - + if options["debug"] then ctan_post = ctan_post .. ' https://httpbin.org/post' @@ -254,7 +254,7 @@ function construct_ctan_post(uploadfile,debug) -- start building the curl command: -- commandline ctan_post = curlexe .. " " ctan_post="" - + -- build up the curl command field-by-field: -- field max desc mandatory multi diff --git a/Master/texmf-dist/scripts/l3build/l3build-variables.lua b/Master/texmf-dist/scripts/l3build/l3build-variables.lua index f1032004b60..9f2b25b8d2e 100644 --- a/Master/texmf-dist/scripts/l3build/l3build-variables.lua +++ b/Master/texmf-dist/scripts/l3build/l3build-variables.lua @@ -1,6 +1,6 @@ --[[ -File l3build-variables.lua Copyright (C) 2018-2020 The LaTeX Project +File l3build-variables.lua Copyright (C) 2018-2021 The LaTeX Project It may be distributed and/or modified under the conditions of the LaTeX Project Public License (LPPL), either version 1.3c of this diff --git a/Master/texmf-dist/scripts/l3build/l3build.lua b/Master/texmf-dist/scripts/l3build/l3build.lua index 51b7a493e31..b48aa306f71 100755 --- a/Master/texmf-dist/scripts/l3build/l3build.lua +++ b/Master/texmf-dist/scripts/l3build/l3build.lua @@ -2,7 +2,7 @@ --[[ -File l3build.lua Copyright (C) 2014-2020 The LaTeX Project +File l3build.lua Copyright (C) 2014-2021 The LaTeX Project It may be distributed and/or modified under the conditions of the LaTeX Project Public License (LPPL), either version 1.3c of this @@ -25,7 +25,7 @@ for those people who are interested. --]] -- Version information -release_date = "2021-08-28" +release_date = "2021-11-12" -- File operations are aided by the LuaFileSystem module local lfs = require("lfs") @@ -201,7 +201,7 @@ end if #checkconfigs == 1 and checkconfigs[1] ~= "build" and (options["target"] == "check" or options["target"] == "save" or options["target"] == "clean") then - local config = "./" .. gsub(checkconfigs[1],".lua$","") .. ".lua" + local config = "./" .. gsub(checkconfigs[1],"%.lua$","") .. ".lua" if fileexists(config) then local savedtestfiledir = testfiledir dofile(config) diff --git a/Master/texmf-dist/source/latex/l3build/l3build.dtx b/Master/texmf-dist/source/latex/l3build/l3build.dtx index 8d340552275..b0d5aab879b 100644 --- a/Master/texmf-dist/source/latex/l3build/l3build.dtx +++ b/Master/texmf-dist/source/latex/l3build/l3build.dtx @@ -1,6 +1,6 @@ % \iffalse % -% File l3build.dtx (C) Copyright 2014-2020 The LaTeX Project +% File l3build.dtx (C) Copyright 2014-2021 The LaTeX Project % % It may be distributed and/or modified under the conditions of the % LaTeX Project Public License (LPPL), either version 1.3c of this @@ -236,7 +236,7 @@ % }^^A % } % -% \date{Released 2021-08-28} +% \date{Released 2021-11-12} % % \maketitle % \tableofcontents @@ -366,7 +366,7 @@ % \item |--first| Name of the first test to run % \item |--force| (|-f|) Force checks to run even if sanity % checks fail, \emph{e.g.}~when |--engine| is not given in -% \luavar{checkengines} +% \var{checkengines} % \item |--full| Instructs the \texttt{install} target to include the % \texttt{doc} and \texttt{source} trees % \item |--halt-on-error| (|-H|) Specifies that checks @@ -1087,7 +1087,7 @@ % % To allow complex set up for tests, a hook |checkinit_hook()| is available % to be executed once all standard set up is complete but before any tests -% are run. +% are run. This should return an integer value: $0$ indicates no error. % % \subsection{Additional test tasks} % @@ -1149,9 +1149,9 @@ % \subsection{Epoch setting} % % To produce predictable output when using dates, the test system offers the -% ability to set the epoch to a known value. The \luavar{epoch} variable may +% ability to set the epoch to a known value. The \var{epoch} variable may % be given as a raw value (a simple integer) or as a date in ISO format. -% The two flags \luavar{forcecheckepoch} and \luavar{forcedocepoch} then +% The two flags \var{forcecheckepoch} and \var{forcedocepoch} then % determine whether this is applied in testing and typesetting, respectively. % % The epoch may also be given as a command line option, |-E|, which again @@ -1309,7 +1309,7 @@ % \end{itemize} % % For more complex set ups, this can be customised using the -% \luavar{tdslocations} table. Each entry there should be a glob specifying the +% \var{tdslocations} table. Each entry there should be a glob specifying the % TDS position of a file or files. Any files not specified in the table % will use the standard locations above. For example, to place some files % in the generic tree, some in the plain \TeX{} tree and some in the \LaTeX{} @@ -1383,8 +1383,8 @@ % As part of the overall build process, \pkg{l3build} will create PDF % documentation as described earlier. The standard build process for PDFs % will attempt to run Biber, \BibTeX{} and MakeIndex as appropriate -% (the exact binaries used are defined by \luavar{biberexe}, \luavar{bibtexexe} -% and \luavar{makeindexexe}). However, there is no attempt to create an entire +% (the exact binaries used are defined by \var{biberexe}, \var{bibtexexe} +% and \var{makeindexexe}). However, there is no attempt to create an entire % PDF creation system in the style of \texttt{latexmk} or similar. % % For package authors who have more complex requirements than those covered @@ -1828,7 +1828,7 @@ % Rather than use this function, we recommend the replacement construct % \begin{verbatim} % io.popen(<cmd>,"w"):write(string.rep("y\n", 300)):close() -% \end{verbatim} +% \end{verbatim} % \end{variable} % % \subsection{Components of \texttt{l3build}} diff --git a/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.dtx b/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.dtx index d5ba6349ab4..5a868d830e4 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.dtx @@ -46,7 +46,7 @@ % }^^A % } % -% \date{Released 2021-08-27} +% \date{Released 2021-11-12} % % \maketitle % @@ -122,7 +122,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3benchmark}{2021-08-27}{} +\ProvidesExplPackage{l3benchmark}{2021-11-12}{} {L3 Experimental benchmarking} % \end{macrocode} % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3bitset/l3bitset.dtx b/Master/texmf-dist/source/latex/l3experimental/l3bitset/l3bitset.dtx index 517cab5815f..21a5f550b83 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3bitset/l3bitset.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3bitset/l3bitset.dtx @@ -42,7 +42,7 @@ % }^^A % } % -% \date{Released 2021-08-27} +% \date{Released 2021-11-12} % % \maketitle % \begin{documentation} @@ -264,7 +264,7 @@ %<@@=bitset> % \end{macrocode} % \begin{macrocode} -\ProvidesExplPackage{l3bitset}{2021-08-27}{} +\ProvidesExplPackage{l3bitset}{2021-11-12}{} {L3 Experimental bitset support} % \end{macrocode} % A bitset is a string variable. diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-boxes.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-boxes.dtx index 817db2e90fc..d3a474abdae 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-boxes.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-boxes.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2021-08-27} +% \date{Released 2021-11-12} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-layers.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-layers.dtx index bab6d5d0144..8c8bcea84bd 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-layers.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-layers.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2021-08-27} +% \date{Released 2021-11-12} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-paths.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-paths.dtx index 9f49558bc25..ad09f0a605f 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-paths.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-paths.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2021-08-27} +% \date{Released 2021-11-12} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-points.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-points.dtx index 2e17871c405..82629b50536 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-points.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-points.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2021-08-27} +% \date{Released 2021-11-12} % % \maketitle % @@ -477,6 +477,137 @@ % \end{macro} % \end{macro} % +% \begin{macro}[EXP]{\draw_point_intersect_line_circle:nnnnn} +% \begin{macro}[EXP]{\@@_point_intersect_line_circle_auxi:nnnnnnnn} +% \begin{macro}[EXP] +% { +% \@@_point_intersect_line_circle_auxii:nnnnnnnn, +% \@@_point_intersect_line_circle_auxii:fnnnnnnn, +% \@@_point_intersect_line_circle_auxiii:nnnnnnnn, +% \@@_point_intersect_line_circle_auxiii:fffnnnnn +% } +% \begin{macro}[EXP] +% { +% \@@_point_intersect_line_circle_auxiv:nnnnnnnn, +% \@@_point_intersect_line_circle_auxiv:ffnnnnnn +% } +% \begin{macro}[EXP] +% { +% \@@_point_intersect_line_circle_auxv:nnnnn, +% \@@_point_intersect_line_circle_auxv:fnnnn +% } +% The intersection points~$P_{1}$ and~$P_{2}$ between +% a line joining points $(x_{1}, y_{1})$ and $(x_{2}, y_{2})$ +% and a circle with center $(x_{3}, y_{3})$ and radius~$r$. +% We use the intermediate +% values +% \begin{align*} +% a &= (x_{2} - x_{1})^{2} + (y_{2} - y_{1})^{2} \\ +% b &= 2 \times ((x_{2} - x_{1}) \times (x_{1} - x_{3}) + (y_{2} - y_{1}) \times (y_{1} - y_{3})) \\ +% c &= x_{3}^{2} + y_{3}^{2} + x_{1}^{2} + y_{1}^{2} +% - 2\times(x_{3} \times x_{1} + y_{3} \times y_{1}) - r^{2} \\ +% d &= b^{2} - 4\times a \times c \\ +% \mu_{1} &= \frac{-b + \sqrt{d}}{2 \times a}\\ +% \mu_{2} &= \frac{-b - \sqrt{d}}{2 \times a} +% \end{align*} +% in either +% \begin{align*} +% P_{1x} &= x_{1} + \mu_{1}\times (x_{2} - x_{1}) \\ +% P_{1y} &= y_{1} + \mu_{1}\times (y_{2} - y_{1}) +% \end{align*} +% or +% \begin{align*} +% P_{2x} &= x_{1} + \mu_{2}\times (x_{2} - x_{1}) \\ +% P_{2y} &= y_{1} + \mu_{2}\times (y_{2} - y_{1}) +% \end{align*} +% depending on which solution is required. The rest of the work is simply +% forcing the appropriate expansion and shuffling arguments. +% \begin{macrocode} +\cs_new:Npn \draw_point_intersect_line_circle:nnnnn #1#2#3#4#5 + { + \@@_point_process:nnnn + { \@@_point_intersect_line_circle_auxi:nnnnnnnn {#4} {#5} } + {#1} {#2} {#3} + } +\cs_new:Npn \@@_point_intersect_line_circle_auxi:nnnnnnnn #1#2#3#4#5#6#7#8 + { + \@@_point_intersect_line_circle_auxii:fnnnnnnn + { \fp_eval:n {#1} } {#3} {#4} {#5} {#6} {#7} {#8} {#2} + } +% \end{macrocode} +% At this stage we have all of the information we need, fully expanded: +% \begin{enumerate}[label = \#\arabic*, font = \ttfamily] +% \item $r$ +% \item $x_{1}$ +% \item $y_{1}$ +% \item $x_{2}$ +% \item $y_{2}$ +% \item $x_{3}$ +% \item $y_{3}$ +% \item $n$ +% \end{enumerate} +% Once we evaluate $a$, $b$ and $c$, the co-ordinate $(x_{3},y_{3})$ +% and $r$ are no longer required: handy as we will need various +% intermediate values in the following. +% \begin{macrocode} +\cs_new:Npn \@@_point_intersect_line_circle_auxii:nnnnnnnn #1#2#3#4#5#6#7#8 + { + \@@_point_intersect_line_circle_auxiii:fffnnnnn + { \fp_eval:n { (#4-#2)*(#4-#2)+(#5-#3)*(#5-#3) } } + { \fp_eval:n { 2*((#4-#2)*(#2-#6)+(#5-#3)*(#3-#7)) } } + { \fp_eval:n { (#6*#6+#7*#7)+(#2*#2+#3*#3)-(2*(#6*#2+#7*#3))-(#1*#1) } } + {#2} {#3} {#4} {#5} {#8} + } +\cs_generate_variant:Nn \@@_point_intersect_line_circle_auxii:nnnnnnnn { f } +% \end{macrocode} +% then we can get $d = b^{2} - 4\times a \times c$ and the usage of $n$. +% \begin{macrocode} +\cs_new:Npn \@@_point_intersect_line_circle_auxiii:nnnnnnnn #1#2#3#4#5#6#7#8 + { + \@@_point_intersect_line_circle_auxiv:ffnnnnnn + { \fp_eval:n { #2 * #2 - 4 * #1 * #3 } } + { \int_if_odd:nTF {#8} { 1 } { -1 } } + {#1} {#2} {#4} {#5} {#6} {#7} + } +\cs_generate_variant:Nn \@@_point_intersect_line_circle_auxiii:nnnnnnnn { fff } +% \end{macrocode} +% We now have all of the intermediate values we require, with one division +% carried out up-front to avoid doing this expensive step twice: +% \begin{enumerate}[label = \#\arabic*, font = \ttfamily] +% \item $a$ +% \item $b$ +% \item $c$ +% \item $d$ +% \item $\pm$(the usage of $n$) +% \item $x_{1}$ +% \item $y_{1}$ +% \item $x_{2}$ +% \item $y_{2}$ +% \end{enumerate} +% There are some final pre-calculations, +% $\mu = \frac{-b \pm \sqrt{d}}{2 \times a}$ +% then, we can yield a result. +% \begin{macrocode} +\cs_new:Npn \@@_point_intersect_line_circle_auxiv:nnnnnnnn #1#2#3#4#5#6#7#8 + { + \@@_point_intersect_line_circle_auxv:fnnnn + { \fp_eval:n { (-1 * #4 + #2 * sqrt(#1)) / (2 * #3) } } + {#5} {#6} {#7} {#8} + } +\cs_generate_variant:Nn \@@_point_intersect_line_circle_auxiv:nnnnnnnn { ff } +\cs_new:Npn \@@_point_intersect_line_circle_auxv:nnnnn #1#2#3#4#5 + { + \draw_point:n + { #2 + #1 * (#4 - #2), #3 + #1 * (#5 - #3) } + } +\cs_generate_variant:Nn \@@_point_intersect_line_circle_auxv:nnnnn { f } +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% % \subsection{Interpolation on a line (vector) or arc} % % \begin{macro}[EXP]{\draw_point_interpolate_line:nnn} diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-scopes.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-scopes.dtx index 174764e29d2..e20f31bf813 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-scopes.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-scopes.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2021-08-27} +% \date{Released 2021-11-12} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-softpath.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-softpath.dtx index c0e748f2622..64aeec907d3 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-softpath.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-softpath.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2021-08-27} +% \date{Released 2021-11-12} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-state.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-state.dtx index 6158be04a34..fc08e1b5100 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-state.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-state.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2021-08-27} +% \date{Released 2021-11-12} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-transforms.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-transforms.dtx index 5c25b61c35a..82be9368a64 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-transforms.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-transforms.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2021-08-27} +% \date{Released 2021-11-12} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx index bda53293c7e..9fd88f8c7fe 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx @@ -110,7 +110,7 @@ % }^^A % } % -% \date{Released 2021-08-27} +% \date{Released 2021-11-12} % % \maketitle % @@ -528,6 +528,17 @@ % \pkg{pgf}, which has the two centers then the two radii. % \end{function} % +% \begin{function}[EXP]{\draw_point_intersect_line_circle:nnnnn} +% \begin{syntax} +% \cs{draw_point_intersect_line_circle:nnnnn} +% \Arg{point1} \Arg{point2} \Arg{center} \Arg{radius} \Arg{root} +% \end{syntax} +% Evaluates the point at the intersection of one line, joining +% \meta{point1} and \meta{point2}, and a circle with \meta{center} +% and \meta{radius}. If the lines and circle do not intersect and +% error will occur. +% \end{function} +% % \subsubsection{Interpolations} % % \begin{function}[EXP]{\draw_point_interpolate_line:nnn} @@ -1162,7 +1173,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3draw}{2021-08-27}{} +\ProvidesExplPackage{l3draw}{2021-11-12}{} {L3 Experimental core drawing support} % \end{macrocode} % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.dtx b/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.dtx index a3691ae3273..9b7860425c3 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.dtx @@ -46,7 +46,7 @@ % }^^A % } % -% \date{Released 2021-08-27} +% \date{Released 2021-11-12} % % \maketitle % @@ -240,7 +240,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3graphics}{2021-08-27}{} +\ProvidesExplPackage{l3graphics}{2021-11-12}{} {L3 Experimental graphics inclusion support} % \end{macrocode} % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3opacity/l3opacity.dtx b/Master/texmf-dist/source/latex/l3experimental/l3opacity/l3opacity.dtx index e2e518fffe8..fcbfb83f0f2 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3opacity/l3opacity.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3opacity/l3opacity.dtx @@ -46,7 +46,7 @@ % }^^A % } % -% \date{Released 2021-08-27} +% \date{Released 2021-11-12} % % \maketitle % @@ -97,7 +97,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3opacity}{2021-08-27}{} +\ProvidesExplPackage{l3opacity}{2021-11-12}{} {L3 Experimental opacity support} % \end{macrocode} % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx b/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx index 5da80c3a743..0ecbb95c3f0 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx @@ -48,7 +48,7 @@ % }^^A % } % -% \date{Released 2021-08-27} +% \date{Released 2021-11-12} % % \maketitle % @@ -166,7 +166,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3str-format}{2021-08-27}{} +\ProvidesExplPackage{l3str-format}{2021-11-12}{} {L3 Experimental string formatting} % \end{macrocode} % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.dtx b/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.dtx index 3ba357ee7ca..50424a66851 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.dtx @@ -46,7 +46,7 @@ % }^^A % } % -% \date{Released 2021-08-27} +% \date{Released 2021-11-12} % % \maketitle % @@ -151,7 +151,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3sys-shell}{2021-08-27}{} +\ProvidesExplPackage{l3sys-shell}{2021-11-12}{} {L3 Experimental system shell functions} % \end{macrocode} % diff --git a/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx b/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx index 61a6009c9e5..f167302265d 100644 --- a/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx @@ -53,7 +53,7 @@ % }^^A % } % -% \date{Released 2021-08-27} +% \date{Released 2021-11-12} % % \maketitle % @@ -672,7 +672,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{xcoffins}{2021-08-27}{} +\ProvidesExplPackage{xcoffins}{2021-11-12}{} {L3 Experimental design level coffins} % \end{macrocode} % diff --git a/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx b/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx index 877e39b3daf..7ce0c017843 100644 --- a/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx @@ -61,7 +61,7 @@ % }^^A % } % -% \date{Released 2021-08-27} +% \date{Released 2021-11-12} % % \maketitle % @@ -686,7 +686,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3galley}{2021-08-27}{} +\ProvidesExplPackage{l3galley}{2021-11-12}{} {L3 Experimental galley code} % \end{macrocode} % diff --git a/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx b/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx index 64fafabdcb9..659ddb27514 100644 --- a/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2021-08-27} +% \date{Released 2021-11-12} % % \maketitle % @@ -731,7 +731,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{xgalley}{2021-08-27}{} +\ProvidesExplPackage{xgalley}{2021-11-12}{} {L3 Experimental galley} \RequirePackage{xtemplate,l3galley} % \end{macrocode} diff --git a/Master/texmf-dist/source/latex/l3kernel/expl3.dtx b/Master/texmf-dist/source/latex/l3kernel/expl3.dtx index 24246f1ace0..01a2dbf0fb4 100644 --- a/Master/texmf-dist/source/latex/l3kernel/expl3.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/expl3.dtx @@ -24,7 +24,7 @@ % %<*driver|generic|package|2ekernel> %</driver|generic|package|2ekernel> -\def\ExplFileDate{2021-10-18}% +\def\ExplFileDate{2021-11-12}% %<*driver> \documentclass[full]{l3doc} \usepackage{graphicx} @@ -51,7 +51,7 @@ % }^^A % } % -% \date{Released 2021-10-18} +% \date{Released 2021-11-12} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx b/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx index d54bc9a70ae..5b810b393d6 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2021-10-18} +% \date{Released 2021-11-12} % % \maketitle % @@ -1203,7 +1203,7 @@ % Tests whether the \meta{control sequence} is currently free to % be defined. This test is \texttt{false} if the % \meta{control sequence} currently exists (as defined by -% \cs{cs_if_exist:N}). +% \cs{cs_if_exist:NTF}). % \end{function} % % \subsection{Primitive conditionals} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx b/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx index c0c676dd9f8..7cf40957e74 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2021-10-18} +% \date{Released 2021-11-12} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3box.dtx b/Master/texmf-dist/source/latex/l3kernel/l3box.dtx index 8e000f70f58..c71f489712f 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3box.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3box.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2021-10-18} +% \date{Released 2021-11-12} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx b/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx index e0787f1a0eb..ebfb71b81e7 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2021-10-18} +% \date{Released 2021-11-12} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3cctab.dtx b/Master/texmf-dist/source/latex/l3kernel/l3cctab.dtx index 0d53ada5393..4669bcc875a 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3cctab.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3cctab.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2021-10-18} +% \date{Released 2021-11-12} % % \maketitle % @@ -699,7 +699,7 @@ % % \subsection{Category code table conditionals} % -% \begin{macro}{\cctab_if_exist:N,\cctab_if_exist:c} +% \begin{macro}[pTF]{\cctab_if_exist:N,\cctab_if_exist:c} % Checks whether a \meta{cctab~var} is defined. % \begin{macrocode} \prg_new_eq_conditional:NNn \cctab_if_exist:N \cs_if_exist:N diff --git a/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx b/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx index 8ca665469bc..718c75d07a0 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2021-10-18} +% \date{Released 2021-11-12} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx b/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx index 1a47fa6b73f..ca112398ab8 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2021-10-18} +% \date{Released 2021-11-12} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3color.dtx b/Master/texmf-dist/source/latex/l3kernel/l3color.dtx index cef2e7bef18..b3f10132d3a 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3color.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3color.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2021-10-18} +% \date{Released 2021-11-12} % % \maketitle % @@ -654,20 +654,20 @@ \tl_set:Nx #4 { \cs_if_exist:cTF { @@_convert_ #1 _ #2 :w } - { \use:c { @@_convert_ #1 _ #2 :w } #3 ~ 0 ~ 0 ~ 0 \s_@@_stop } + { \use:c { @@_convert_ #1 _ #2 :w } #3 \s_@@_stop } { \use:c { c_@@_fallback_ #2 _tl } } } } \cs_generate_variant:Nn \@@_convert:nnnN { nV , nnV } -\cs_new:Npn \@@_convert_gray_rgb:w #1 ~ #2 \s_@@_stop +\cs_new:Npn \@@_convert_gray_rgb:w #1 \s_@@_stop { #1 ~ #1 ~ #1 } -\cs_new:Npn \@@_convert_gray_cmyk:w #1 ~ #2 \s_@@_stop +\cs_new:Npn \@@_convert_gray_cmyk:w #1 \s_@@_stop { 0 ~ 0 ~ 0 ~ \fp_eval:n { 1 - #1 } } % \end{macrocode} % These rather odd values are based on \textsc{ntsc} television: the set are % used for the |cmyk| conversion. % \begin{macrocode} -\cs_new:Npn \@@_convert_rgb_gray:w #1 ~ #2 ~ #3 ~ #4 \s_@@_stop +\cs_new:Npn \@@_convert_rgb_gray:w #1 ~ #2 ~ #3 \s_@@_stop { \fp_eval:n { 0.3 * #1 + 0.59 * #2 + 0.11 * #3 } } % \end{macrocode} % The conversion from |rgb| to |cmyk| is the most complex: a two-step @@ -677,7 +677,7 @@ % Moreover, as the likelihood of anyone using a non-unitary matrix here is % tiny, we simplify and treat those two concepts as no-ops. % \begin{macrocode} -\cs_new:Npn \@@_convert_rgb_cmyk:w #1 ~ #2 ~ #3 ~ #4 \s_@@_stop +\cs_new:Npn \@@_convert_rgb_cmyk:w #1 ~ #2 ~ #3 \s_@@_stop { \exp_args:Nf \@@_convert_rgb_cmyk:nnnn { \fp_eval:n { min ( 1 - #1 , 1 - #2 , 1 - #3 ) } } {#1} {#2} {#3} @@ -689,9 +689,9 @@ \fp_eval:n { min ( 1 , max ( 0 , 1 - #4 - #1 ) ) } \c_space_tl #1 } -\cs_new:Npn \@@_convert_cmyk_gray:w #1 ~ #2 ~ #3 ~ #4 ~ #5 \s_@@_stop +\cs_new:Npn \@@_convert_cmyk_gray:w #1 ~ #2 ~ #3 ~ #4 \s_@@_stop { \fp_eval:n { 1 - min ( 1 , 0.3 * #1 + 0.59 * #2 + 0.11 * #3 + #4 ) } } -\cs_new:Npn \@@_convert_cmyk_rgb:w #1 ~ #2 ~ #3 ~ #4 ~ #5 \s_@@_stop +\cs_new:Npn \@@_convert_cmyk_rgb:w #1 ~ #2 ~ #3 ~ #4 \s_@@_stop { \fp_eval:n { 1 - min ( 1 , #1 + #4 ) } \c_space_tl \fp_eval:n { 1 - min ( 1 , #2 + #4 ) } \c_space_tl @@ -1664,7 +1664,10 @@ { \fp_compare:nNnTF {#1} = { 0 } { 00 } - { \int_to_Hex:n { \fp_to_int:n { #1 * 255 } } } + { + \fp_compare:nNnT { #1 * 255 } < { 16 } { 0 } + \int_to_Hex:n { \fp_to_int:n { #1 * 255 } } + } } \cs_new_protected:cpn { @@_export_space-sep-rgb:Nw } #1#2 \s_@@_stop { \tl_set:Nn #1 {#2} } @@ -1930,7 +1933,7 @@ } \cs_new_protected:Npn \@@_model_separation_cmyk:nnnnnn #1#2#3#4#5#6 { - \cs_new:cpn { @@_convert_ #1 _cmyk:w } ##1 ~ ##2 \s_@@_stop + \cs_new:cpn { @@_convert_ #1 _cmyk:w } ##1 \s_@@_stop { \fp_eval:n {##1 * #3} ~ \fp_eval:n {##1 * #4} ~ @@ -1945,7 +1948,7 @@ } \cs_new_protected:Npn \@@_model_separation_rgb:nnnnnn #1#2#3#4#5#6 { - \cs_new:cpn { @@_convert_ #1 _rgb:w } ##1 ~ ##2 \s_@@_stop + \cs_new:cpn { @@_convert_ #1 _rgb:w } ##1 \s_@@_stop { \fp_eval:n {##1 * #3} ~ \fp_eval:n {##1 * #4} ~ @@ -1959,16 +1962,16 @@ } \cs_new_protected:Npn \@@_model_separation_gray:nnnnnn #1#2#3#4#5#6 { - \cs_new:cpn { @@_convert_ #1 _cmyk:w } ##1 ~ ##2 \s_@@_stop + \cs_new:cpn { @@_convert_ #1 _cmyk:w } ##1 \s_@@_stop { \fp_eval:n {##1 * #3} ~ \fp_eval:n {##1 * #3} ~ \fp_eval:n {##1 * #3} ~ \fp_eval:n {##1 * #3} } - \cs_new:cpn { @@_convert_ #1 _gray:w } ##1 ~ ##2 \s_@@_stop + \cs_new:cpn { @@_convert_ #1 _gray:w } ##1 \s_@@_stop { \fp_eval:n {##1 * #3} } - \cs_new:cpn { @@_convert_ #1 _rgb:w } ##1 ~ ##2 \s_@@_stop + \cs_new:cpn { @@_convert_ #1 _rgb:w } ##1 \s_@@_stop { \fp_eval:n {##1 * #3} ~ \fp_eval:n {##1 * #3} ~ @@ -1982,11 +1985,11 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_model_convert:nnn #1#2#3 { - \cs_new:cpx { @@_convert_ #1 _ #3 :w } ##1 ~ ##2 \s_@@_stop + \cs_new:cpx { @@_convert_ #1 _ #3 :w } ##1 \s_@@_stop { \exp_not:N \exp_args:NNe \exp_not:N \use:nn \exp_not:c { @@_convert_ #2 _ #3 :w } - { \exp_not:c { @@_convert_ #1 _ #2 :w } ##1 ~ ##2 \s_@@_stop } + { \exp_not:c { @@_convert_ #1 _ #2 :w } ##1 \s_@@_stop } \c_space_tl \exp_not:N \s_@@_stop } } @@ -2018,11 +2021,11 @@ \tl_if_exist:cTF { c_@@_model_whitepoint_CIELAB_ #1 _tl } { \@@_backend_separation_init_CIELAB:nnn {#1} {#3} { #4 ~ #5 ~ #6 } - \cs_new:cpn { @@_convert_ #2 _cmyk:w } ##1 ~ ##2 \s_@@_stop + \cs_new:cpn { @@_convert_ #2 _cmyk:w } ##1 \s_@@_stop { 0 ~ 0 ~ 0 ~ 1 } - \cs_new:cpn { @@_convert_ #2 _rgb:w } ##1 ~ ##2 \s_@@_stop + \cs_new:cpn { @@_convert_ #2 _rgb:w } ##1 \s_@@_stop { 1 ~ 1 ~ 1 } - \cs_new:cpn { @@_convert_ #2 _gray:w } ##1 ~ ##2 \s_@@_stop + \cs_new:cpn { @@_convert_ #2 _gray:w } ##1 \s_@@_stop { 1 } } { @@ -2311,7 +2314,7 @@ \prop_get:NnN \g_@@_alternative_values_prop {##1} \l_@@_value_tl \exp_after:wN \@@_model_devicen_transform:w - \l_@@_value_tl , 0 , 0 , 0 \s_@@_stop {#1} {#2} + \l_@@_value_tl , 0 , 0 , 0 , \s_@@_stop {#1} {#2} } \tl_put_right:Nx \l_@@_internal_tl { @@ -2349,7 +2352,7 @@ { \@@_model_devicen_transform:nnn {#5} { 1 } {#1} } \cs_new_protected:cpn { @@_model_devicen_transform_3:nnnnn } #1#2#3#4#5 { - \clist_map_inline { #1 , #2 , #3 } + \clist_map_inline:nn { #1 , #2 , #3 } { \@@_model_devicen_transform:nnn {#5} { 3 } {##1} } } \cs_new_protected:cpn { @@_model_devicen_transform_4:nnnnn } #1#2#3#4#5 @@ -2407,8 +2410,9 @@ { \exp_not:c { @@_convert_devicen_ #2 : \prg_replicate:nn {#3} { n } w } \prg_replicate:nn {#3} { { 1 } } - ##1 \exp_not:N \s_@@_mark + ##1 ~ \exp_not:N \s_@@_mark \clist_map_function:nN {#4} \@@_model_devicen_convert:n + {} \exp_not:N \s_@@_stop } } @@ -2490,7 +2494,7 @@ \cs_new:Npn \@@_convert_devicen_rgb:nnnw #1#2#3#4 ~ #5 \s_@@_mark #6#7 \s_@@_stop { - \@@_convert_devicen_cmyk:nnnnnn {#4} {#1} {#2} {#3} #6 + \@@_convert_devicen_rgb:nnnnnnn {#4} {#1} {#2} {#3} #6 #5 \s_@@_mark #7 \s_@@_stop } \cs_new:Npn \@@_convert_devicen_rgb:nnnnnnn #1#2#3#4#5#6#7 diff --git a/Master/texmf-dist/source/latex/l3kernel/l3debug.dtx b/Master/texmf-dist/source/latex/l3kernel/l3debug.dtx index cbc2ba0dd3b..39c210f013f 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3debug.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3debug.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2021-10-18} +% \date{Released 2021-11-12} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx b/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx index 118446f74d9..c4ac6b343f6 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2021-10-18} +% \date{Released 2021-11-12} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx b/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx index f8ddfd6744f..3926f4298bb 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx +++ b/Master/texmf-dist/source/latex/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 2021-10-18} +% \date{Released 2021-11-12} % \maketitle % \tableofcontents % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx b/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx index 77b11bec379..56d569dc863 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx @@ -63,7 +63,7 @@ % }^^A % } % -% \date{Released 2021-10-18} +% \date{Released 2021-11-12} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx b/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx index de04809b762..ff7dafb0948 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2021-10-18} +% \date{Released 2021-11-12} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3file.dtx b/Master/texmf-dist/source/latex/l3kernel/l3file.dtx index e2c608cdfce..59322d5c92e 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3file.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3file.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2021-10-18} +% \date{Released 2021-11-12} % % \maketitle % @@ -876,8 +876,8 @@ % \cs{file_if_exist_input:nF} \Arg{file name} \Arg{false code} % \end{syntax} % Searches for \meta{file name} using the current \TeX{} search -% path and the additional paths controlled by -% \cs{file_path_include:n}. If found then +% path and the additional paths included in \cs{l_file_search_path_seq}. +% If found then % reads in the file as additional \LaTeX{} source as described for % \cs{file_input:n}, otherwise inserts the \meta{false code}. % Note that these functions do not raise diff --git a/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx b/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx index 7a6712d4746..86e6f65a9bd 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2021-10-18} +% \date{Released 2021-11-12} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx index 357481da6be..18ed230b7f8 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2021-10-18} +% \date{Released 2021-11-12} % \maketitle % % \begin{documentation} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx index e735876dd46..edae5678c28 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2021-10-18} +% \date{Released 2021-11-12} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx index bb869cd5ca5..759a6e1c928 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2021-10-18} +% \date{Released 2021-11-12} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx index b113e024f77..0ae265ad823 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2021-10-18} +% \date{Released 2021-11-12} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx index f5f58acbe67..89769f7ad82 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2021-10-18} +% \date{Released 2021-11-12} % % \maketitle % @@ -1000,8 +1000,7 @@ \cs_new:Npn \@@_pow_normal_o:ww \s_@@ \@@_chk:w 1 #1#2#3; \s_@@ \@@_chk:w #4#5 { - \if_int_compare:w \@@_str_if_eq:nn { #2 #3 } - { 1 {1000} {0000} {0000} {0000} } = \c_zero_int + \if:w 0 \@@_str_if_eq:nn { #2 #3 } { 1 {1000} {0000} {0000} {0000} } \if_int_compare:w #4 #1 = 32 \exp_stop_f: \exp_after:wN \@@_case_return_ii_o:ww \fi: diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx index 820faac5365..ee1a7dfbede 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2021-10-18} +% \date{Released 2021-11-12} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx index 254983bcad9..64f25bcd703 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2021-10-18} +% \date{Released 2021-11-12} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx index c07bbc130f7..e2648f74fac 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2021-10-18} +% \date{Released 2021-11-12} % % \maketitle % @@ -1755,9 +1755,7 @@ { \if_catcode:w \scan_stop: \exp_not:N #1 \if_meaning:w \scan_stop: #1 - \if_int_compare:w - \@@_str_if_eq:nn { \s_@@ } { \exp_not:N #1 } - = \c_zero_int + \if:w 0 \@@_str_if_eq:nn { \s_@@ } { \exp_not:N #1 } 0 \msg_expandable_error:nnn { fp } { after-e } { floating~point~ } @@ -1769,9 +1767,7 @@ \prg_return_false: \fi: \else: - \if_int_compare:w - \@@_str_if_eq:nn { \int_value:w #1 } { \tex_the:D #1 } - = \c_zero_int + \if:w 0 \@@_str_if_eq:nn { \int_value:w #1 } { \tex_the:D #1 } \int_value:w #1 \else: 0 @@ -2263,9 +2259,7 @@ \cs_new:Npn \@@_parse_infix:NN #1 #2 { \if_catcode:w \scan_stop: \exp_not:N #2 - \if_int_compare:w - \@@_str_if_eq:nn { \s_@@_expr_mark } { \exp_not:N #2 } - = \c_zero_int + \if:w 0 \@@_str_if_eq:nn { \s_@@_expr_mark } { \exp_not:N #2 } \exp_after:wN \exp_after:wN \exp_after:wN \@@_parse_infix_mark:NNN \else: @@ -2315,9 +2309,7 @@ \cs_new:Npn \@@_parse_infix_after_paren:NN #1 #2 { \if_catcode:w \scan_stop: \exp_not:N #2 - \if_int_compare:w - \@@_str_if_eq:nn { \s_@@_expr_mark } { \exp_not:N #2 } - = \c_zero_int + \if:w 0 \@@_str_if_eq:nn { \s_@@_expr_mark } { \exp_not:N #2 } \exp_after:wN \exp_after:wN \exp_after:wN \@@_parse_infix_mark:NNN \else: diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx index 8defd82e8a1..2edef81d72e 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2021-10-18} +% \date{Released 2021-11-12} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx index 4669afeff6b..f261a87690f 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2021-10-18} +% \date{Released 2021-11-12} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx index d12dfb5e9f0..41736a6c92a 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2021-10-18} +% \date{Released 2021-11-12} % \maketitle % % \begin{documentation} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx index e7147443b13..4ae3c33f4b7 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2021-10-18} +% \date{Released 2021-11-12} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx index eef38c230f3..ed3468a0766 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx @@ -49,7 +49,7 @@ % }^^A % } % -% \date{Released 2021-10-18} +% \date{Released 2021-11-12} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx index 9646b84a944..5afd5f774a3 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2021-10-18} +% \date{Released 2021-11-12} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3int.dtx b/Master/texmf-dist/source/latex/l3kernel/l3int.dtx index 1e5ded3b6b3..749de68557b 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3int.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3int.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2021-10-18} +% \date{Released 2021-11-12} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx b/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx index 13ba3a394cf..3d95e6e04b3 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2021-10-18} +% \date{Released 2021-11-12} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx b/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx index bdc195d0a15..e9da0d7e8cd 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2021-10-18} +% \date{Released 2021-11-12} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx b/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx index e85bbc1d973..355de420bd2 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2021-10-18} +% \date{Released 2021-11-12} % % \maketitle % @@ -178,10 +178,10 @@ % \begin{function}[updated = 2013-07-08] % {.bool_set:N, .bool_set:c, .bool_gset:N, .bool_gset:c} % \begin{syntax} -% \meta{key} .bool_set:N = \meta{boolean} +% \meta{key} .bool_set:N = \meta{boolean variable} % \end{syntax} -% Defines \meta{key} to set \meta{boolean} to \meta{value} (which -% must be either \texttt{true} or \texttt{false}). If the variable +% Defines \meta{key} to set \meta{boolean variable} to \meta{value} (which +% must be either \enquote{\texttt{true}} or \enquote{\texttt{false}}). If the variable % does not exist, it will be created globally at the point that % the key is set up. % \end{function} @@ -192,12 +192,12 @@ % .bool_gset_inverse:N, .bool_gset_inverse:c % } % \begin{syntax} -% \meta{key} .bool_set_inverse:N = \meta{boolean} +% \meta{key} .bool_set_inverse:N = \meta{boolean variable} % \end{syntax} -% Defines \meta{key} to set \meta{boolean} to the logical -% inverse of \meta{value} (which must be either \texttt{true} or -% \texttt{false}). -% If the \meta{boolean} does not exist, it will be created globally +% Defines \meta{key} to set \meta{boolean variable} to the logical +% inverse of \meta{value} (which must be either \enquote{\texttt{true}} or +% \enquote{\texttt{false}}). +% If the \meta{boolean variable} does not exist, it will be created globally % at the point that the key is set up. % \end{function} % @@ -435,6 +435,27 @@ % require a value at point-of-use unless a default is set. % \end{function} % +% \begin{function}[added = 2021-10-30] +% {.str_set:N, .str_set:c, .str_gset:N, .str_gset:c} +% \begin{syntax} +% \meta{key} .str_set:N = \meta{string variable} +% \end{syntax} +% Defines \meta{key} to set \meta{string variable} to \meta{value}. +% If the variable does not exist, it is created globally +% at the point that the key is set up. +% \end{function} +% +% \begin{function}[added = 2021-10-30] +% {.str_set_x:N, .str_set_x:c, .str_gset_x:N, .str_gset_x:c} +% \begin{syntax} +% \meta{key} .str_set_x:N = \meta{string variable} +% \end{syntax} +% Defines \meta{key} to set \meta{string variable} to \meta{value}, +% which will be subjected to an \texttt{x}-type expansion +% (\emph{i.e.}~using \cs{str_set:Nx}). If the variable does not exist, +% it is created globally at the point that the key is set up. +% \end{function} +% % \begin{function}{.tl_set:N, .tl_set:c, .tl_gset:N, .tl_gset:c} % \begin{syntax} % \meta{key} .tl_set:N = \meta{token list variable} @@ -467,7 +488,7 @@ % \end{syntax} % Specifies that \meta{key} cannot receive a \meta{value} when used. % If a \meta{value} is given then an error will be issued. Setting -% the property \texttt{false} cancels the restriction. +% the property \enquote{\texttt{false}} cancels the restriction. % \end{function} % % \begin{function}[added = 2015-07-14]{.value_required:n} @@ -476,7 +497,7 @@ % \end{syntax} % Specifies that \meta{key} must receive a \meta{value} when used. % If a \meta{value} is not given then an error will be issued. Setting -% the property \texttt{false} cancels the restriction. +% the property \enquote{\texttt{false}} cancels the restriction. % \end{function} % % \section{Sub-dividing keys} @@ -1001,6 +1022,16 @@ % \end{macrocode} % \end{variable} % +% \begin{variable}{\l__kernel_keyval_allow_blank_keys_bool} +% The general behavior of the \pkg{l3keys} module is to throw an error on +% blank key names. However to support the usage of \cs{keyval_parse:nnn} in +% the \pkg{l3prop} module we allow this error to be switched off temporarily +% and just ignore blank names. +% \begin{macrocode} +\bool_new:N \l__kernel_keyval_allow_blank_keys_bool +% \end{macrocode} +% \end{variable} +% % 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. @@ -1343,9 +1374,11 @@ % \begin{macrocode} \cs_new:Npn \@@_blank_true:w \s_@@_mark \s_@@_stop \@@_trim:nN #1 \@@_key:nn { \@@_loop_other:nnw } -\cs_new:Npn \@@_blank_key_error:w #1 \@@_loop_other:nnw +\cs_new:Npn \@@_blank_key_error:w \s_@@_mark \s_@@_stop #1 \@@_loop_other:nnw { - \msg_expandable_error:nn { keyval } { blank-key-name } + \bool_if:NTF \l__kernel_keyval_allow_blank_keys_bool + { #1 } + { \msg_expandable_error:nn { keyval } { blank-key-name } } \@@_loop_other:nnw } % \end{macrocode} @@ -2052,7 +2085,7 @@ } { \msg_error:nnx { keys } - { property-boolean-values-only } + { boolean-values-only } { .value_ #1 :n } } } @@ -2398,6 +2431,34 @@ % \end{macro} % \end{macro} % +% \begin{macro}{.str_set:N, .str_set:c} +% \begin{macro}{.str_gset:N, .str_gset:c} +% \begin{macro}{.str_set_x:N, .str_set_x:c} +% \begin{macro}{.str_gset_x:N, .str_gset_x:c} +% Setting a variable is very easy: just pass the data along. +% \begin{macrocode} +\cs_new_protected:cpn { \c_@@_props_root_str .str_set:N } #1 + { \@@_variable_set:NnnN #1 { str } { } n } +\cs_new_protected:cpn { \c_@@_props_root_str .str_set:c } #1 + { \@@_variable_set:cnnN {#1} { str } { } n } +\cs_new_protected:cpn { \c_@@_props_root_str .str_set_x:N } #1 + { \@@_variable_set:NnnN #1 { str } { } x } +\cs_new_protected:cpn { \c_@@_props_root_str .str_set_x:c } #1 + { \@@_variable_set:cnnN {#1} { str } { } x } +\cs_new_protected:cpn { \c_@@_props_root_str .str_gset:N } #1 + { \@@_variable_set:NnnN #1 { str } { g } n } +\cs_new_protected:cpn { \c_@@_props_root_str .str_gset:c } #1 + { \@@_variable_set:cnnN {#1} { str } { g } n } +\cs_new_protected:cpn { \c_@@_props_root_str .str_gset_x:N } #1 + { \@@_variable_set:NnnN #1 { str } { g } x } +\cs_new_protected:cpn { \c_@@_props_root_str .str_gset_x:c } #1 + { \@@_variable_set:cnnN {#1} { str } { g } x } +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% % \begin{macro}{.tl_set:N, .tl_set:c} % \begin{macro}{.tl_gset:N, .tl_gset:c} % \begin{macro}{.tl_set_x:N, .tl_set_x:c} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx b/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx index 29872a655fd..c04f318fad9 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2021-10-18} +% \date{Released 2021-11-12} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx b/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx index f95ddecc824..ac63d0f89a3 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2021-10-18} +% \date{Released 2021-11-12} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx b/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx index 722f902e295..5804d528caa 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2021-10-18} +% \date{Released 2021-11-12} % % \maketitle % @@ -1979,7 +1979,7 @@ \msg_new:nnn { prg } { negative-replication } { Negative~argument~for~\iow_char:N\\prg_replicate:nn. } \msg_new:nnn { prop } { prop-keyval } - { Missing/extra~'='~in~'#1'~(in~'..._keyval:Nn') } + { Missing~'='~in~'#1'~(in~'..._keyval:Nn') } \msg_new:nnn { kernel } { unknown-comparison } { Relation~'#1'~not~among~=,<,>,==,!=,<=,>=. } \msg_new:nnn { kernel } { zero-step } diff --git a/Master/texmf-dist/source/latex/l3kernel/l3names.dtx b/Master/texmf-dist/source/latex/l3kernel/l3names.dtx index 9a34a74d249..2f3c8460cac 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3names.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3names.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2021-10-18} +% \date{Released 2021-11-12} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3pdf.dtx b/Master/texmf-dist/source/latex/l3kernel/l3pdf.dtx index 0ccb6817f15..8a4b70eb160 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3pdf.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3pdf.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2021-10-18} +% \date{Released 2021-11-12} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx b/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx index ae119af2067..4a91ce9a8a4 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2021-10-18} +% \date{Released 2021-11-12} % % \maketitle % @@ -313,6 +313,16 @@ % based on this result. % \end{function} % +% \begin{function}[EXP, added = 2021-11-01]{\bool_to_str:N, \bool_to_str:c, \bool_to_str:n} +% \begin{syntax} +% \cs{bool_to_str:N} \meta{boolean} +% \cs{bool_to_str:n} \meta{boolean expression} +% \end{syntax} +% Expands to the letters \texttt{true} or \texttt{false} depending on +% the logical truth of the \meta{boolean} or \meta{boolean +% expression}. +% \end{function} +% % \begin{function}[added = 2012-02-09, updated = 2021-04-29]{\bool_show:N, \bool_show:c} % \begin{syntax} % \cs{bool_show:N} \meta{boolean} @@ -961,20 +971,24 @@ % \end{macrocode} % \end{macro} % +% \begin{macro}[EXP]{\bool_to_str:N, \bool_to_str:c, \bool_to_str:n} +% Expands to \texttt{true} or \texttt{false} with category code letter. +% \begin{macrocode} +\cs_new:Npn \bool_to_str:N #1 { \bool_if:NTF #1 { true } { false } } +\cs_generate_variant:Nn \bool_to_str:N { c } +\cs_new:Npn \bool_to_str:n #1 { \bool_if:nTF {#1} { true } { false } } +% \end{macrocode} +% \end{macro} +% % \begin{macro}{\bool_show:n, \bool_log:n} -% \begin{macro}{\@@_to_str:n} -% Show the truth value of the boolean, as \texttt{true} or -% \texttt{false}. +% Show the truth value of the boolean. % \begin{macrocode} \cs_new_protected:Npn \bool_show:n - { \msg_show_eval:Nn \@@_to_str:n } + { \msg_show_eval:Nn \bool_to_str:n } \cs_new_protected:Npn \bool_log:n - { \msg_log_eval:Nn \@@_to_str:n } -\cs_new:Npn \@@_to_str:n #1 - { \bool_if:nTF {#1} { true } { false } } + { \msg_log_eval:Nn \bool_to_str:n } % \end{macrocode} % \end{macro} -% \end{macro} % % \begin{macro}{\bool_show:N, \bool_show:c, \bool_log:N, \bool_log:c, \@@_show:NN} % Show the truth value of the boolean, as \texttt{true} or diff --git a/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx b/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx index df20a5c02c8..ca6f9a3467c 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2021-10-18} +% \date{Released 2021-11-12} % % \maketitle % @@ -52,10 +52,10 @@ % \LaTeX3 implements a \enquote{property list} data type, which contain % an unordered list of entries each of which consists of a \meta{key} and % an associated \meta{value}. The \meta{key} and \meta{value} may both -% be any \meta{balanced text}, but the \meta{key} is processed using -% \cs{tl_to_str:n}, meaning that category codes are ignored. It is -% possible to map functions to property lists such that the function is -% applied to every key--value pair within the list. +% be any \meta{balanced text}, the \meta{key} is processed using +% \cs{tl_to_str:n}, meaning that category codes are ignored. It is possible to +% map functions to property lists such that the function is applied to every +% key--value pair within the list. % % Each entry in a property list must have a unique \meta{key}: if an entry is % added to a property list which already contains the \meta{key} then the new @@ -111,7 +111,7 @@ % \meta{property list_2}. % \end{function} % -% \begin{function}[added = 2017-11-28, updated = 2019-08-25] +% \begin{function}[added = 2017-11-28, updated = 2021-11-07] % { % \prop_set_from_keyval:Nn, \prop_set_from_keyval:cn, % \prop_gset_from_keyval:Nn, \prop_gset_from_keyval:cn, @@ -131,9 +131,11 @@ % group then a set of outer braces is removed. This enables both the % \meta{key} and the \meta{value} to contain spaces, commas or equal % signs. The \meta{key} is then processed by \cs{tl_to_str:n}. +% This function correctly detects the |=| and |,| signs provided they +% have the standard category code~$12$ or they are active. % \end{function} % -% \begin{function}[added = 2017-11-28, updated = 2019-08-25] +% \begin{function}[added = 2017-11-28, updated = 2021-11-07] % {\prop_const_from_keyval:Nn, \prop_const_from_keyval:cn} % \begin{syntax} % \cs{prop_const_from_keyval:Nn} \meta{prop~var} @@ -147,6 +149,8 @@ % contain key--value pairs given in the second argument, processed in % the way described for \cs{prop_set_from_keyval:Nn}. If duplicate % keys appear only the last of the values is kept. +% This function correctly detects the |=| and |,| signs provided they +% have the standard category code~$12$ or they are active. % \end{function} % % \section{Adding and updating property list entries} @@ -205,7 +209,7 @@ % last value, namely the value in \meta{prop~var_3} is kept. % \end{function} % -% \begin{function}[added = 2021-05-16] +% \begin{function}[added = 2021-05-16, updated = 2021-11-07] % { % \prop_put_from_keyval:Nn, \prop_put_from_keyval:cn, % \prop_gput_from_keyval:Nn, \prop_gput_from_keyval:cn, @@ -230,6 +234,8 @@ % \cs{prop_concat:NNN}. In particular, the \meta{keys} and % \meta{values} are space-trimmed and unbraced as described in % \cs{prop_set_from_keyval:Nn}. +% This function correctly detects the |=| and |,| signs provided they +% have the standard category code~$12$ or they are active. % \end{function} % % \section{Recovering values from property lists} @@ -793,7 +799,7 @@ \cs_new_protected:Npn \@@_concat:NNNN #1#2#3#4 { \prop_set_eq:NN \l_@@_internal_prop #3 - \prop_map_tokens:Nn #4 { \prop_put:Nnn \l_@@_internal_prop } + \prop_map_inline:Nn #4 { \prop_put:Nnn \l_@@_internal_prop {##1} {##2} } #1 #2 \l_@@_internal_prop } % \end{macrocode} @@ -804,16 +810,7 @@ % \begin{macro}{\prop_const_from_keyval:Nn, \prop_const_from_keyval:cn} % \begin{macro}{\prop_put_from_keyval:Nn, \prop_put_from_keyval:cn} % \begin{macro}{\prop_gput_from_keyval:Nn, \prop_gput_from_keyval:cn} -% \begin{macro} -% { -% \@@_from_keyval:n, -% \@@_from_keyval_loop:w, -% \@@_from_keyval_split:Nw, -% \@@_from_keyval_key:n, -% \@@_from_keyval_key:w, -% \@@_from_keyval_value:n, -% \@@_from_keyval_value:w -% } +% \begin{macro}{\@@_missing_eq:n} % To avoid tracking throughout the loop the variable name and whether % the assignment is local/global, do everything in a scratch variable % and empty it afterwards to avoid wasting memory. Loop through items @@ -832,80 +829,48 @@ % output one key--value pair for the property list; otherwise complain % about a missing or extra~|=|. % \begin{macrocode} -\cs_new_protected:Npn \prop_set_from_keyval:Nn #1#2 +\cs_new_protected:Npn \prop_set_from_keyval:Nn #1 { - \prop_clear:N \l_@@_internal_prop - \@@_from_keyval:n {#2} - \prop_set_eq:NN #1 \l_@@_internal_prop - \prop_clear:N \l_@@_internal_prop + \prop_clear:N #1 + \prop_put_from_keyval:Nn #1 } \cs_generate_variant:Nn \prop_set_from_keyval:Nn { c } -\cs_new_protected:Npn \prop_gset_from_keyval:Nn #1#2 +\cs_new_protected:Npn \prop_gset_from_keyval:Nn #1 { - \prop_clear:N \l_@@_internal_prop - \@@_from_keyval:n {#2} - \prop_gset_eq:NN #1 \l_@@_internal_prop - \prop_clear:N \l_@@_internal_prop + \prop_gclear:N #1 + \prop_gput_from_keyval:Nn #1 } \cs_generate_variant:Nn \prop_gset_from_keyval:Nn { c } \cs_new_protected:Npn \prop_const_from_keyval:Nn #1#2 { - \prop_clear:N \l_@@_internal_prop - \@@_from_keyval:n {#2} + \prop_set_from_keyval:Nn \l_@@_internal_prop {#2} \tl_const:Nx #1 { \exp_not:o \l_@@_internal_prop } \prop_clear:N \l_@@_internal_prop } \cs_generate_variant:Nn \prop_const_from_keyval:Nn { c } -\cs_new_protected:Npn \prop_put_from_keyval:Nn #1#2 +\cs_new_protected:Npn \prop_put_from_keyval:Nn { - \prop_set_eq:NN \l_@@_internal_prop #1 - \@@_from_keyval:n {#2} - \prop_set_eq:NN #1 \l_@@_internal_prop - \prop_clear:N \l_@@_internal_prop + \bool_if:NTF \l__kernel_keyval_allow_blank_keys_bool + { \@@_keyval_parse:NNNn \c_true_bool } + { \@@_keyval_parse:NNNn \c_false_bool } + \prop_put:Nnn } \cs_generate_variant:Nn \prop_put_from_keyval:Nn { c } -\cs_new_protected:Npn \prop_gput_from_keyval:Nn #1#2 +\cs_new_protected:Npn \prop_gput_from_keyval:Nn { - \prop_set_eq:NN \l_@@_internal_prop #1 - \@@_from_keyval:n {#2} - \prop_gset_eq:NN #1 \l_@@_internal_prop - \prop_clear:N \l_@@_internal_prop + \bool_if:NTF \l__kernel_keyval_allow_blank_keys_bool + { \@@_keyval_parse:NNNn \c_true_bool } + { \@@_keyval_parse:NNNn \c_false_bool } + \prop_gput:Nnn } \cs_generate_variant:Nn \prop_gput_from_keyval:Nn { c } -\cs_new_protected:Npn \@@_from_keyval:n #1 - { - \@@_from_keyval_loop:w \prg_do_nothing: #1 , - \q_@@_recursion_tail , \q_@@_recursion_stop - } -\cs_new_protected:Npn \@@_from_keyval_loop:w #1 , - { - \@@_if_recursion_tail_stop:o {#1} - \@@_from_keyval_split:Nw \@@_from_keyval_key:n - #1 = = \s_@@_stop {#1} - \@@_from_keyval_loop:w \prg_do_nothing: - } -\cs_new_protected:Npn \@@_from_keyval_split:Nw #1#2 = - { \tl_trim_spaces_apply:oN {#2} #1 } -\cs_new_protected:Npn \@@_from_keyval_key:n #1 - { \@@_from_keyval_key:w #1 \s_@@_mark } -\cs_new_protected:Npn \@@_from_keyval_key:w #1 \s_@@_mark #2 \s_@@_stop +\cs_new_protected:Npn \@@_missing_eq:n + { \msg_error:nnn { prop } { prop-keyval } } +\cs_new_protected:Npn \@@_keyval_parse:NNNn #1#2#3#4 { - \@@_from_keyval_split:Nw \@@_from_keyval_value:n - \prg_do_nothing: #2 \s_@@_stop {#1} - } -\cs_new_protected:Npn \@@_from_keyval_value:n #1 - { \@@_from_keyval_value:w #1 \s_@@_mark } -\cs_new_protected:Npn \@@_from_keyval_value:w #1 \s_@@_mark #2 \s_@@_stop #3#4 - { - \tl_if_single:nTF {#2} - { \prop_put:Nnn \l_@@_internal_prop {#3} {#1} } - { - \tl_if_empty:nF { #3 #1 #2 } - { - \msg_error:nnx { prop } { prop-keyval } - { \exp_not:o {#4} } - } - } + \bool_set_eq:NN \l__kernel_keyval_allow_blank_keys_bool \c_true_bool + \keyval_parse:nnn \@@_missing_eq:n { #2 #3 } {#4} + \bool_set_eq:NN \l__kernel_keyval_allow_blank_keys_bool #1 } % \end{macrocode} % \end{macro} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx b/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx index a2d10803561..907bd9453eb 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2021-10-18} +% \date{Released 2021-11-12} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx b/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx index db1ddee2457..ac70e76eeab 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2021-10-18} +% \date{Released 2021-11-12} % % \maketitle % @@ -83,11 +83,12 @@ % % If a regular expression is to be used several times, % it can be compiled once, and stored in a regex -% variable using \cs{regex_const:Nn}. For example, +% variable using \cs{regex_set:Nn}. For example, % \begin{verbatim} -% \regex_const:Nn \c_foo_regex { \c{begin} \cB. (\c[^BE].*) \cE. } +% \regex_new:N \l_foo_regex +% \regex_set:Nn \l_foo_regex { \c{begin} \cB. (\c[^BE].*) \cE. } % \end{verbatim} -% stores in \cs[no-index]{c_foo_regex} a regular expression which matches the +% stores in \cs[no-index]{l_foo_regex} a regular expression which matches the % starting marker for an environment: \cs[no-index]{begin}, followed by a % begin-group token (|\cB.|), then any number of tokens which are % neither begin-group nor end-group character tokens (|\c[^BE].*|), @@ -164,7 +165,7 @@ % |\A|, |\B|, \ldots{} have special meanings; % \item non-alphanumeric printable ascii characters can (and should) % always be escaped: many of them have special meanings (\emph{e.g.}, -% use |\(|, |\)|, |\?|, |\.|); +% use |\(|, |\)|, |\?|, |\.|, |\^|); % \item spaces should always be escaped (even in character % classes); % \item any other character may be escaped or not, without any @@ -335,11 +336,14 @@ % \meta{regex}, anchored at the beginning and end, so that |\c{begin}| % matches exactly \cs[no-index]{begin}, and nothing else. % \item[\\cX] Applies to the next object, which can be a character, -% character property, class, or group, and forces this object to -% only match tokens with category |X| (any of |CBEMTPUDSLOA|. For -% instance, |\cL[A-Z\d]| matches uppercase letters and digits of -% category code letter, |\cC.| matches any control sequence, and -% |\cO(abc)| matches |abc| where each character has category other. +% escape character sequence such as |\x{0A}|, character class, or +% group, and forces this object to only match tokens with category +% |X| (any of |CBEMTPUDSLOA|. For instance, |\cL[A-Z\d]| matches +% uppercase letters and digits of category code letter, |\cC.| +% matches any control sequence, and |\cO(abc)| matches |abc| where +% each character has category other.\footnote{This last example also +% captures \enquote{\texttt{abc}} as a regex group; to avoid this +% use a non-capturing group \texttt{\textbackslash cO(?:abc)}.} % \item[{\\c[XYZ]}] Applies to the next object, and forces it to only % match tokens with category |X|, |Y|, or |Z| (each being any of % |CBEMTPUDSLOA|). For instance, |\c[LSO](..)| matches two tokens of @@ -531,21 +535,27 @@ % \meta{regex~var} is initially such that it never matches. % \end{function} % -% \begin{function}[added = 2017-05-26] -% {\regex_set:Nn, \regex_gset:Nn, \regex_const:Nn} +% \begin{function}[added = 2017-05-26]{\regex_set:Nn, \regex_gset:Nn} % \begin{syntax} % \cs{regex_set:Nn} \meta{regex~var} \Arg{regex} % \end{syntax} -% Stores a compiled version of the \meta{regular expression} -% in the \meta{regex~var}. For instance, this function can be used -% as +% Stores a compiled version of the \meta{regular expression} in the +% \meta{regex~var}. The assignment is local for \cs{regex_set:Nn} and +% global for \cs{regex_gset:Nn}. For instance, this function can be +% used as % \begin{verbatim} % \regex_new:N \l_my_regex % \regex_set:Nn \l_my_regex { my\ (simple\ )? reg(ex|ular\ expression) } % \end{verbatim} -% The assignment is local for \cs{regex_set:Nn} and global for -% \cs{regex_gset:Nn}. Use \cs{regex_const:Nn} for compiled expressions -% which never change. +% \end{function} +% +% \begin{function}[added = 2017-05-26]{\regex_const:Nn} +% \begin{syntax} +% \cs{regex_const:Nn} \meta{regex~var} \Arg{regex} +% \end{syntax} +% Creates a new constant \meta{regex~var} or raises an error if the name +% is already taken. The value of the \meta{regex~var} is set +% globally to the compiled version of the \meta{regular expression}. % \end{function} % % \begin{function}[added = 2021-04-26, updated = 2021-04-29] @@ -722,7 +732,7 @@ % locally to \meta{tl~var}. % \end{function} % -% \section{Constants and variables} +% \section{Scratch regular expressions} % % \begin{variable}[added = 2017-12-11]{\l_tmpa_regex, \l_tmpb_regex} % Scratch regex for local assignment. These are never used by diff --git a/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx b/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx index 5585aa3ddb2..5420a6df3ea 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2021-10-18} +% \date{Released 2021-11-12} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx b/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx index 1556f14ed86..ef814af3f9f 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2021-10-18} +% \date{Released 2021-11-12} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx b/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx index 8261afa0886..6315417c351 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2021-10-18} +% \date{Released 2021-11-12} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx b/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx index 72c260cdc01..edc2dd3cf50 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2021-10-18} +% \date{Released 2021-11-12} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3str.dtx b/Master/texmf-dist/source/latex/l3kernel/l3str.dtx index e84e2162a28..40fd7437f07 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3str.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3str.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2021-10-18} +% \date{Released 2021-11-12} % % \maketitle % @@ -95,7 +95,7 @@ % appropriately. % \end{itemize} % -% \section{Building strings} +% \section{Creating and initialising string variables} % % \begin{function}[added = 2015-09-18]{\str_new:N, \str_new:c} % \begin{syntax} @@ -164,6 +164,16 @@ % this function does not convert their contents to a string. % \end{function} % +% \begin{function}[EXP, pTF, added = 2015-09-18] +% {\str_if_exist:N, \str_if_exist:c} +% \begin{syntax} +% \cs{str_if_exist_p:N} \meta{str~var} +% \cs{str_if_exist:NTF} \meta{str~var} \Arg{true code} \Arg{false code} +% \end{syntax} +% Tests whether the \meta{str~var} is currently defined. This does not +% check that the \meta{str~var} really is a string. +% \end{function} +% % \section{Adding data to string variables} % % \begin{function}[added = 2015-09-18, updated = 2018-07-28] @@ -210,84 +220,8 @@ % var} are not automatically converted to a string. % \end{function} % -% \section{Modifying string variables} -% -% \begin{function}[added = 2017-10-08] -% { -% \str_replace_once:Nnn, \str_replace_once:cnn, -% \str_greplace_once:Nnn, \str_greplace_once:cnn -% } -% \begin{syntax} -% \cs{str_replace_once:Nnn} \meta{str~var} \Arg{old} \Arg{new} -% \end{syntax} -% Converts the \meta{old} and \meta{new} token lists to strings, then -% replaces the first (leftmost) occurrence of \meta{old string} in the -% \meta{str~var} with \meta{new string}. -% \end{function} -% -% \begin{function}[added = 2017-10-08] -% { -% \str_replace_all:Nnn, \str_replace_all:cnn, -% \str_greplace_all:Nnn, \str_greplace_all:cnn -% } -% \begin{syntax} -% \cs{str_replace_all:Nnn} \meta{str~var} \Arg{old} \Arg{new} -% \end{syntax} -% Converts the \meta{old} and \meta{new} token lists to strings, then -% replaces all occurrences of \meta{old string} in the -% \meta{str~var} with \meta{new string}. -% As this function -% operates from left to right, the pattern \meta{old string} -% may remain after the replacement (see \cs{str_remove_all:Nn} -% for an example). -% \end{function} -% -% \begin{function}[added = 2017-10-08] -% { -% \str_remove_once:Nn, \str_remove_once:cn, -% \str_gremove_once:Nn, \str_gremove_once:cn -% } -% \begin{syntax} -% \cs{str_remove_once:Nn} \meta{str~var} \Arg{token list} -% \end{syntax} -% Converts the \meta{token list} to a \meta{string} then -% removes the first (leftmost) occurrence of \meta{string} from the -% \meta{str~var}. -% \end{function} -% -% \begin{function}[added = 2017-10-08] -% { -% \str_remove_all:Nn, \str_remove_all:cn, -% \str_gremove_all:Nn, \str_gremove_all:cn -% } -% \begin{syntax} -% \cs{str_remove_all:Nn} \meta{str~var} \Arg{token list} -% \end{syntax} -% Converts the \meta{token list} to a \meta{string} then -% removes all occurrences of \meta{string} from the -% \meta{str~var}. -% As this function -% operates from left to right, the pattern \meta{string} -% may remain after the removal, for instance, -% \begin{quote} -% \cs{str_set:Nn} \cs{l_tmpa_str} |{abbccd}| -% \cs{str_remove_all:Nn} \cs{l_tmpa_str} |{bc}| -% \end{quote} -% results in \cs{l_tmpa_str} containing \texttt{abcd}. -% \end{function} -% % \section{String conditionals} % -% \begin{function}[EXP, pTF, added = 2015-09-18] -% {\str_if_exist:N, \str_if_exist:c} -% \begin{syntax} -% \cs{str_if_exist_p:N} \meta{str~var} -% \cs{str_if_exist:NTF} \meta{str~var} \Arg{true code} \Arg{false code} -% \end{syntax} -% Tests whether the \meta{str~var} is currently defined. This does not -% check that the \meta{str~var} really is a string. -% \end{function} -% % \begin{function}[EXP,pTF, added = 2015-09-18] % {\str_if_empty:N, \str_if_empty:c} % \begin{syntax} @@ -459,6 +393,19 @@ % receives the \meta{character} as |#1|. % \end{function} % +% \begin{function}[rEXP, added = 2021-05-05] +% {\str_map_tokens:nn, \str_map_tokens:Nn, \str_map_tokens:cn} +% \begin{syntax} +% \cs{str_map_tokens:nn} \Arg{token list} \Arg{code} +% \cs{str_map_tokens:Nn} \meta{str~var} \Arg{code} +% \end{syntax} +% Converts the \meta{token list} to a \meta{string} then applies +% \meta{code} to every \meta{character} in the \meta{string} including +% spaces. The \meta{code} receives each character as a trailing brace +% group. This is equivalent to \cs{str_map_function:nN} if the +% \meta{code} consists of a single function. +% \end{function} +% % \begin{function}[added = 2017-11-14] % {\str_map_variable:nNn, \str_map_variable:NNn, \str_map_variable:cNn} % \begin{syntax} @@ -475,19 +422,6 @@ % \meta{string} is empty. See also \cs{str_map_inline:Nn}. % \end{function} % -% \begin{function}[rEXP, added = 2021-05-05] -% {\str_map_tokens:nn, \str_map_tokens:Nn, \str_map_tokens:cn} -% \begin{syntax} -% \cs{str_map_tokens:nn} \Arg{token list} \Arg{code} -% \cs{str_map_tokens:Nn} \meta{str~var} \Arg{code} -% \end{syntax} -% Converts the \meta{token list} to a \meta{string} then applies -% \meta{code} to every \meta{character} in the \meta{string} including -% spaces. The \meta{code} receives each character as a trailing brace -% group. This is equivalent to \cs{str_map_function:nN} if the -% \meta{code} consists of a single function. -% \end{function} -% % \begin{function}[added = 2017-10-08, rEXP]{\str_map_break:} % \begin{syntax} % \cs{str_map_break:} @@ -698,6 +632,72 @@ % instances of |bcde|. % ^^A\end{function} % +% \section{Modifying string variables} +% +% \begin{function}[added = 2017-10-08] +% { +% \str_replace_once:Nnn, \str_replace_once:cnn, +% \str_greplace_once:Nnn, \str_greplace_once:cnn +% } +% \begin{syntax} +% \cs{str_replace_once:Nnn} \meta{str~var} \Arg{old} \Arg{new} +% \end{syntax} +% Converts the \meta{old} and \meta{new} token lists to strings, then +% replaces the first (leftmost) occurrence of \meta{old string} in the +% \meta{str~var} with \meta{new string}. +% \end{function} +% +% \begin{function}[added = 2017-10-08] +% { +% \str_replace_all:Nnn, \str_replace_all:cnn, +% \str_greplace_all:Nnn, \str_greplace_all:cnn +% } +% \begin{syntax} +% \cs{str_replace_all:Nnn} \meta{str~var} \Arg{old} \Arg{new} +% \end{syntax} +% Converts the \meta{old} and \meta{new} token lists to strings, then +% replaces all occurrences of \meta{old string} in the +% \meta{str~var} with \meta{new string}. +% As this function +% operates from left to right, the pattern \meta{old string} +% may remain after the replacement (see \cs{str_remove_all:Nn} +% for an example). +% \end{function} +% +% \begin{function}[added = 2017-10-08] +% { +% \str_remove_once:Nn, \str_remove_once:cn, +% \str_gremove_once:Nn, \str_gremove_once:cn +% } +% \begin{syntax} +% \cs{str_remove_once:Nn} \meta{str~var} \Arg{token list} +% \end{syntax} +% Converts the \meta{token list} to a \meta{string} then +% removes the first (leftmost) occurrence of \meta{string} from the +% \meta{str~var}. +% \end{function} +% +% \begin{function}[added = 2017-10-08] +% { +% \str_remove_all:Nn, \str_remove_all:cn, +% \str_gremove_all:Nn, \str_gremove_all:cn +% } +% \begin{syntax} +% \cs{str_remove_all:Nn} \meta{str~var} \Arg{token list} +% \end{syntax} +% Converts the \meta{token list} to a \meta{string} then +% removes all occurrences of \meta{string} from the +% \meta{str~var}. +% As this function +% operates from left to right, the pattern \meta{string} +% may remain after the removal, for instance, +% \begin{quote} +% \cs{str_set:Nn} \cs{l_tmpa_str} |{abbccd}| +% \cs{str_remove_all:Nn} \cs{l_tmpa_str} |{bc}| +% \end{quote} +% results in \cs{l_tmpa_str} containing \texttt{abcd}. +% \end{function} +% % \section{String manipulation} % % \begin{function}[EXP, added = 2019-11-26] @@ -1163,22 +1163,23 @@ % \str_if_eq:ee % } % Modern engines provide a direct way of comparing two token lists, -% but returning a number. This set of conditionals therefore make life -% a bit clearer. The \texttt{nn} and \texttt{xx} versions are created -% directly as this is most efficient. +% but returning a number. This set of conditionals therefore makes life +% a bit clearer. The \texttt{nn} and \texttt{ee} versions are created +% directly as this is most efficient. Since \cs{@@_if_eq:nn} will expand to +% |0| as an explicit character with category 12 if the two lists match (and +% either |-1| or |1| if they don't) we can use \cs{if:w} here which is faster +% than using \cs{if_int_compare:w}. % \begin{macrocode} \prg_new_conditional:Npnn \str_if_eq:nn #1#2 { p , T , F , TF } { - \if_int_compare:w - \@@_if_eq:nn { \exp_not:n {#1} } { \exp_not:n {#2} } - = \c_zero_int + \if:w 0 \@@_if_eq:nn { \exp_not:n {#1} } { \exp_not:n {#2} } \prg_return_true: \else: \prg_return_false: \fi: } \prg_generate_conditional_variant:Nnn \str_if_eq:nn { V , v , o , nV , no , VV , nv } { p , T , F , TF } \prg_new_conditional:Npnn \str_if_eq:ee #1#2 { p , T , F , TF } { - \if_int_compare:w \@@_if_eq:nn {#1} {#2} = \c_zero_int + \if:w 0 \@@_if_eq:nn {#1} {#2} \prg_return_true: \else: \prg_return_false: \fi: } % \end{macrocode} @@ -1186,14 +1187,13 @@ % % \begin{macro}[EXP, pTF] % {\str_if_eq:NN, \str_if_eq:Nc, \str_if_eq:cN, \str_if_eq:cc} -% Note that \cs{str_if_eq:NN} is different from -% \cs{tl_if_eq:NN} because it needs to ignore category codes. +% Note that \cs{str_if_eq:NNTF} is different from +% \cs{tl_if_eq:NNTF} because it needs to ignore category codes. % \begin{macrocode} \prg_new_conditional:Npnn \str_if_eq:NN #1#2 { p , TF , T , F } { - \if_int_compare:w - \@@_if_eq:nn { \tl_to_str:N #1 } { \tl_to_str:N #2 } - = \c_zero_int \prg_return_true: \else: \prg_return_false: \fi: + \if:w 0 \@@_if_eq:nn { \tl_to_str:N #1 } { \tl_to_str:N #2 } + \prg_return_true: \else: \prg_return_false: \fi: } \prg_generate_conditional_variant:Nnn \str_if_eq:NN { c , Nc , cc } { T , F , TF , p } diff --git a/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx b/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx index 6aab0ca25f1..39b091d7df5 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2021-10-18} +% \date{Released 2021-11-12} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx b/Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx index 4647339a813..d27bae37d2b 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2021-10-18} +% \date{Released 2021-11-12} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3text-purify.dtx b/Master/texmf-dist/source/latex/l3kernel/l3text-purify.dtx index 5655cc757cc..f1ad3be0fc5 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3text-purify.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3text-purify.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2021-10-18} +% \date{Released 2021-11-12} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3text.dtx b/Master/texmf-dist/source/latex/l3kernel/l3text.dtx index defd0585f45..0fa054cceee 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3text.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3text.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2021-10-18} +% \date{Released 2021-11-12} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx b/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx index 84d740e6df6..70522a9aac2 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2021-10-18} +% \date{Released 2021-11-12} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx b/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx index 13625c2542e..bda39b5cf09 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2021-10-18} +% \date{Released 2021-11-12} % % \maketitle % @@ -205,159 +205,6 @@ % \meta{tl~var}. % \end{function} % -% \section{Modifying token list variables} -% -% \begin{function}[updated = 2011-08-11] -% { -% \tl_replace_once:Nnn, \tl_replace_once:cnn, -% \tl_greplace_once:Nnn, \tl_greplace_once:cnn -% } -% \begin{syntax} -% \cs{tl_replace_once:Nnn} \meta{tl~var} \Arg{old tokens} \Arg{new tokens} -% \end{syntax} -% Replaces the first (leftmost) occurrence of \meta{old tokens} in the -% \meta{tl~var} with \meta{new tokens}. \meta{Old tokens} -% cannot contain |{|, |}| or |#| -% (more precisely, explicit character tokens with category code $1$ -% (begin-group) or $2$ (end-group), and tokens with category code $6$). -% \end{function} -% -% \begin{function}[updated = 2011-08-11] -% { -% \tl_replace_all:Nnn, \tl_replace_all:cnn, -% \tl_greplace_all:Nnn, \tl_greplace_all:cnn -% } -% \begin{syntax} -% \cs{tl_replace_all:Nnn} \meta{tl~var} \Arg{old tokens} \Arg{new tokens} -% \end{syntax} -% Replaces all occurrences of \meta{old tokens} in the -% \meta{tl~var} with \meta{new tokens}. \meta{Old tokens} -% cannot contain |{|, |}| or |#| -% (more precisely, explicit character tokens with category code $1$ -% (begin-group) or $2$ (end-group), and tokens with category code $6$). -% As this function -% operates from left to right, the pattern \meta{old tokens} -% may remain after the replacement (see \cs{tl_remove_all:Nn} -% for an example). -% \end{function} -% -% \begin{function}[updated = 2011-08-11] -% { -% \tl_remove_once:Nn, \tl_remove_once:cn, -% \tl_gremove_once:Nn, \tl_gremove_once:cn -% } -% \begin{syntax} -% \cs{tl_remove_once:Nn} \meta{tl~var} \Arg{tokens} -% \end{syntax} -% Removes the first (leftmost) occurrence of \meta{tokens} from the -% \meta{tl~var}. \meta{Tokens} cannot contain |{|, |}| or |#| -% (more precisely, explicit character tokens with category code $1$ -% (begin-group) or $2$ (end-group), and tokens with category code $6$). -% \end{function} -% -% \begin{function}[updated = 2011-08-11] -% { -% \tl_remove_all:Nn, \tl_remove_all:cn, -% \tl_gremove_all:Nn, \tl_gremove_all:cn -% } -% \begin{syntax} -% \cs{tl_remove_all:Nn} \meta{tl~var} \Arg{tokens} -% \end{syntax} -% Removes all occurrences of \meta{tokens} from the -% \meta{tl~var}. \meta{Tokens} cannot contain |{|, |}| or |#| -% (more precisely, explicit character tokens with category code $1$ -% (begin-group) or $2$ (end-group), and tokens with category code $6$). -% As this function -% operates from left to right, the pattern \meta{tokens} -% may remain after the removal, for instance, -% \begin{quote} -% \cs{tl_set:Nn} \cs{l_tmpa_tl} |{abbccd}| -% \cs{tl_remove_all:Nn} \cs{l_tmpa_tl} |{bc}| -% \end{quote} -% results in \cs{l_tmpa_tl} containing \texttt{abcd}. -% \end{function} -% -% \section{Reassigning token list category codes} -% -% These functions allow the rescanning of tokens: re-apply \TeX{}'s -% tokenization process to apply category codes different from those -% in force when the tokens were absorbed. Whilst this functionality is -% supported, it is often preferable to find alternative approaches -% to achieving outcomes rather than rescanning tokens (for example -% construction of token lists token-by-token with intervening category -% code changes or using \cs{char_generate:nn}). -% -% \begin{function}[updated = 2015-08-11] -% { -% \tl_set_rescan:Nnn, \tl_set_rescan:Nno, \tl_set_rescan:Nnx, -% \tl_set_rescan:cnn, \tl_set_rescan:cno, \tl_set_rescan:cnx, -% \tl_gset_rescan:Nnn, \tl_gset_rescan:Nno, \tl_gset_rescan:Nnx, -% \tl_gset_rescan:cnn, \tl_gset_rescan:cno, \tl_gset_rescan:cnx -% } -% \begin{syntax} -% \cs{tl_set_rescan:Nnn} \meta{tl~var} \Arg{setup} \Arg{tokens} -% \end{syntax} -% Sets \meta{tl~var} to contain \meta{tokens}, applying the category -% code r\'{e}gime specified in the \meta{setup} before carrying out -% the assignment. (Category codes applied to tokens not explicitly covered -% by the \meta{setup} are those in force at the point of use of -% \cs{tl_set_rescan:Nnn}.) -% This allows the \meta{tl~var} to contain material -% with category codes other than those that apply when \meta{tokens} -% are absorbed. The \meta{setup} is run within a group and may -% contain any valid input, although only changes in category codes, -% such as uses of \cs{cctab_select:N}, -% are relevant. See also \cs{tl_rescan:nn}. -% \begin{texnote} -% The \meta{tokens} are first turned into a string (using -% \cs{tl_to_str:n}). If the string contains one or more characters -% with character code \tn{newlinechar} (set equal to -% \tn{endlinechar} unless that is equal to $32$, before the user -% \meta{setup}), then it is split into lines at these characters, -% then read as if reading multiple lines from a file, ignoring -% spaces (catcode $10$) at the beginning and spaces and tabs -% (character code $32$ or $9$) at the end of every line. -% Otherwise, spaces (and tabs) are retained at both ends of the -% single-line string, as if it appeared in the middle of a line -% read from a file. -% \end{texnote} -% \end{function} -% -% \begin{function}[updated = 2015-08-11]{\tl_rescan:nn} -% \begin{syntax} -% \cs{tl_rescan:nn} \Arg{setup} \Arg{tokens} -% \end{syntax} -% Rescans \meta{tokens} applying the category code r\'{e}gime -% specified in the \meta{setup}, and leaves the resulting tokens in -% the input stream. (Category codes applied to tokens not explicitly covered -% by the \meta{setup} are those in force at the point of use of -% \cs{tl_rescan:nn}.) -% The \meta{setup} is run within a group and may -% contain any valid input, although only changes in category codes, -% such as uses of \cs{cctab_select:N}, -% are relevant. See also \cs{tl_set_rescan:Nnn}, which is more -% robust than using \cs{tl_set:Nn} in the \meta{tokens} argument of -% \cs{tl_rescan:nn}. -% \begin{texnote} -% The \meta{tokens} are first turned into a string (using -% \cs{tl_to_str:n}). If the string contains one or more characters -% with character code \tn{newlinechar} (set equal to -% \tn{endlinechar} unless that is equal to $32$, before the user -% \meta{setup}), then it is split into lines at these characters, -% then read as if reading multiple lines from a file, ignoring -% spaces (catcode $10$) at the beginning and spaces and tabs -% (character code $32$ or $9$) at the end of every line. -% Otherwise, spaces (and tabs) are retained at both ends of the -% single-line string, as if it appeared in the middle of a line -% read from a file. -% -% Contrarily to the \tn{scantokens} primitive, \cs{tl_rescan:nn} -% tokenizes the whole string in the same category code regime rather -% than one token at a time, so that directives such as \tn{verb} -% that rely on changing category codes will not function properly. -% \end{texnote} -% \end{function} -% % \section{Token list conditionals} % % \begin{function}[EXP,pTF, updated = 2019-09-04] @@ -473,7 +320,7 @@ % \cs{tl_if_single_p:N} \meta{tl~var} % \cs{tl_if_single:NTF} \meta{tl~var} \Arg{true code} \Arg{false code} % \end{syntax} -% Tests if the content of the \meta{tl~var} consists of a single item, +% Tests if the content of the \meta{tl~var} consists of a single \meta{item}, % \emph{i.e.}~is a single normal token (neither an explicit space % character nor a begin-group character) or a single brace group, % surrounded by optional spaces on both sides. In other words, such a @@ -485,7 +332,7 @@ % \cs{tl_if_single_p:n} \Arg{token list} % \cs{tl_if_single:nTF} \Arg{token list} \Arg{true code} \Arg{false code} % \end{syntax} -% Tests if the \meta{token list} has exactly one item, \emph{i.e.}~is +% Tests if the \meta{token list} has exactly one \meta{item}, \emph{i.e.}~is % a single normal token (neither an explicit space character nor a % begin-group character) or a single brace group, surrounded by % optional spaces on both sides. In other words, such a token list has @@ -498,7 +345,7 @@ % \cs{tl_if_single_token:nTF} \Arg{token list} \Arg{true code} \Arg{false code} % \end{syntax} % Tests if the token list consists of exactly one token, \emph{i.e.}~is -% either a single space character or a single \enquote{normal} token. +% either a single space character or a single normal token. % Token groups (|{|\ldots|}|) are not single tokens. % \end{function} % @@ -526,152 +373,93 @@ % available. % \end{function} % -% \section{Mapping over token lists} +% \subsection{Testing the first token} % -% All mappings are done at the current group level, \emph{i.e.}~any -% local assignments made by the \meta{function} or \meta{code} discussed -% below remain in effect after the loop. -% -% \begin{function}[updated = 2012-06-29, rEXP] -% {\tl_map_function:NN, \tl_map_function:cN} -% \begin{syntax} -% \cs{tl_map_function:NN} \meta{tl~var} \meta{function} -% \end{syntax} -% Applies \meta{function} to every \meta{item} in the \meta{tl~var}. -% The \meta{function} receives one argument for each iteration. -% This may be a number of tokens if the \meta{item} was stored within -% braces. Hence the \meta{function} should anticipate receiving -% \texttt{n}-type arguments. See also \cs{tl_map_function:nN}. -% \end{function} -% -% \begin{function}[updated = 2012-06-29, rEXP]{\tl_map_function:nN} -% \begin{syntax} -% \cs{tl_map_function:nN} \Arg{token list} \meta{function} -% \end{syntax} -% Applies \meta{function} to every \meta{item} in the \meta{token list}, -% The \meta{function} receives one argument for each iteration. -% This may be a number of tokens if the \meta{item} was stored within -% braces. Hence the \meta{function} should anticipate receiving -% \texttt{n}-type arguments. See also \cs{tl_map_function:NN}. -% \end{function} -% -% \begin{function}[updated = 2012-06-29] -% {\tl_map_inline:Nn, \tl_map_inline:cn} +% \begin{function}[updated = 2012-07-09, EXP, pTF] +% {\tl_if_head_eq_catcode:nN, \tl_if_head_eq_catcode:oN} % \begin{syntax} -% \cs{tl_map_inline:Nn} \meta{tl~var} \Arg{inline function} +% \cs{tl_if_head_eq_catcode_p:nN} \Arg{token list} \meta{test token} +% \cs{tl_if_head_eq_catcode:nNTF} \Arg{token list} \meta{test token} +% ~~\Arg{true code} \Arg{false code} % \end{syntax} -% Applies the \meta{inline function} to every \meta{item} stored within the -% \meta{tl~var}. The \meta{inline function} should consist of code which -% receives the \meta{item} as |#1|. See also \cs{tl_map_function:NN}. +% Tests if the first \meta{token} in the \meta{token list} has the +% same category code as the \meta{test token}. In the case where the +% \meta{token list} is empty, the test is always \texttt{false}. % \end{function} % -% \begin{function}[updated = 2012-06-29]{\tl_map_inline:nn} +% \begin{function}[updated = 2012-07-09, EXP, pTF] +% {\tl_if_head_eq_charcode:nN, \tl_if_head_eq_charcode:fN} % \begin{syntax} -% \cs{tl_map_inline:nn} \Arg{token list} \Arg{inline function} +% \cs{tl_if_head_eq_charcode_p:nN} \Arg{token list} \meta{test token} +% \cs{tl_if_head_eq_charcode:nNTF} \Arg{token list} \meta{test token} +% ~~\Arg{true code} \Arg{false code} % \end{syntax} -% Applies the \meta{inline function} to every \meta{item} stored within the -% \meta{token list}. The \meta{inline function} should consist of code which -% receives the \meta{item} as |#1|. See also \cs{tl_map_function:nN}. +% Tests if the first \meta{token} in the \meta{token list} has the +% same character code as the \meta{test token}. In the case where the +% \meta{token list} is empty, the test is always \texttt{false}. % \end{function} % -% \begin{function}[rEXP, added = 2019-09-02] -% {\tl_map_tokens:Nn, \tl_map_tokens:cn, \tl_map_tokens:nn} +% \begin{function}[updated = 2012-07-09, EXP, pTF]{\tl_if_head_eq_meaning:nN} % \begin{syntax} -% \cs{tl_map_tokens:Nn} \meta{tl~var} \Arg{code} -% \cs{tl_map_tokens:nn} \Arg{tokens} \Arg{code} +% \cs{tl_if_head_eq_meaning_p:nN} \Arg{token list} \meta{test token} +% \cs{tl_if_head_eq_meaning:nNTF} \Arg{token list} \meta{test token} +% ~~\Arg{true code} \Arg{false code} % \end{syntax} -% Analogue of \cs{tl_map_function:NN} which maps several tokens -% instead of a single function. The \meta{code} receives each item in -% the \meta{tl~var} or in \meta{tokens} as a trailing brace group. For -% instance, -% \begin{verbatim} -% \tl_map_tokens:Nn \l_my_tl { \prg_replicate:nn { 2 } } -% \end{verbatim} -% expands to twice each item in the \meta{tl~var}: for each item in -% \cs[no-index]{l_my_tl} the function \cs{prg_replicate:nn} receives |2| and -% \meta{item} as its two arguments. The function -% \cs{tl_map_inline:Nn} is typically faster but is not expandable. +% Tests if the first \meta{token} in the \meta{token list} has the +% same meaning as the \meta{test token}. In the case where +% \meta{token list} is empty, the test is always \texttt{false}. % \end{function} % -% \begin{function}[updated = 2012-06-29] -% {\tl_map_variable:NNn, \tl_map_variable:cNn} +% \begin{function}[added = 2012-07-08, EXP, pTF]{\tl_if_head_is_group:n} % \begin{syntax} -% \cs{tl_map_variable:NNn} \meta{tl~var} \meta{variable} \Arg{code} +% \cs{tl_if_head_is_group_p:n} \Arg{token list} +% \cs{tl_if_head_is_group:nTF} \Arg{token list} \Arg{true code} \Arg{false code} % \end{syntax} -% Stores each \meta{item} of the \meta{tl~var} in turn in the (token -% list) \meta{variable} and applies the \meta{code}. The \meta{code} -% will usually make use of the \meta{variable}, but this is not -% enforced. The assignments to the \meta{variable} are local. Its -% value after the loop is the last \meta{item} in the \meta{tl~var}, -% or its original value if the \meta{tl~var} is blank. See also -% \cs{tl_map_inline:Nn}. +% Tests if the first \meta{token} in the \meta{token list} +% is an explicit begin-group character (with category code~$1$ +% and any character code), in other words, if the \meta{token list} +% starts with a brace group. In particular, the test is \texttt{false} +% if the \meta{token list} starts with an implicit token such as +% \cs{c_group_begin_token}, or if it is empty. +% This function is useful to implement actions on token lists on +% a token by token basis. % \end{function} % -% \begin{function}[updated = 2012-06-29]{\tl_map_variable:nNn} +% \begin{function}[added = 2012-07-08, EXP, pTF]{\tl_if_head_is_N_type:n} % \begin{syntax} -% \cs{tl_map_variable:nNn} \Arg{token list} \meta{variable} \Arg{code} +% \cs{tl_if_head_is_N_type_p:n} \Arg{token list} +% \cs{tl_if_head_is_N_type:nTF} \Arg{token list} \Arg{true code} \Arg{false code} % \end{syntax} -% Stores each \meta{item} of the \meta{token list} in turn in the -% (token list) \meta{variable} and applies the \meta{code}. The -% \meta{code} will usually make use of the \meta{variable}, but this -% is not enforced. The assignments to the \meta{variable} are local. -% Its value after the loop is the last \meta{item} in the -% \meta{tl~var}, or its original value if the \meta{tl~var} is blank. -% See also \cs{tl_map_inline:nn}. +% Tests if the first \meta{token} in the \meta{token list} +% is a normal \texttt{N}-type argument. In other words, +% it is neither an explicit space character +% (explicit token with character code~$32$ and category code~$10$) +% nor an explicit begin-group character +% (with category code~1 and any character code). An empty +% argument yields \texttt{false}, as it does not have a normal +% first token. +% This function is useful to implement actions on token lists on +% a token by token basis. % \end{function} % -% \begin{function}[updated = 2012-06-29, rEXP]{\tl_map_break:} +% \begin{function}[updated = 2012-07-08, EXP, pTF]{\tl_if_head_is_space:n} % \begin{syntax} -% \cs{tl_map_break:} +% \cs{tl_if_head_is_space_p:n} \Arg{token list} +% \cs{tl_if_head_is_space:nTF} \Arg{token list} \Arg{true code} \Arg{false code} % \end{syntax} -% Used to terminate a \cs[no-index]{tl_map_\ldots} function before all -% entries in the \meta{token list variable} have been processed. This -% normally takes place within a conditional statement, for example -% \begin{verbatim} -% \tl_map_inline:Nn \l_my_tl -% { -% \str_if_eq:nnT { #1 } { bingo } { \tl_map_break: } -% % Do something useful -% } -% \end{verbatim} -% See also \cs{tl_map_break:n}. -% Use outside of a \cs[no-index]{tl_map_\ldots} scenario leads to low -% level \TeX{} errors. -% \begin{texnote} -% When the mapping is broken, additional tokens may be inserted -% before the \meta{tokens} are -% inserted into the input stream. -% This depends on the design of the mapping function. -% \end{texnote} +% Tests if the first \meta{token} in the \meta{token list} +% is an explicit space character +% (explicit token with character code~$12$ and category code~$10$). +% In particular, the test is \texttt{false} if the \meta{token list} +% starts with an implicit token such as \cs{c_space_token}, or if it +% is empty. +% This function is useful to implement actions on token lists on +% a token by token basis. % \end{function} % -% \begin{function}[updated = 2012-06-29, rEXP]{\tl_map_break:n} -% \begin{syntax} -% \cs{tl_map_break:n} \Arg{code} -% \end{syntax} -% Used to terminate a \cs[no-index]{tl_map_\ldots} function before all -% entries in the \meta{token list variable} have been processed, inserting -% the \meta{code} after the mapping has ended. This -% normally takes place within a conditional statement, for example -% \begin{verbatim} -% \tl_map_inline:Nn \l_my_tl -% { -% \str_if_eq:nnT { #1 } { bingo } -% { \tl_map_break:n { <code> } } -% % Do something useful -% } -% \end{verbatim} -% Use outside of a \cs[no-index]{tl_map_\ldots} scenario leads to low -% level \TeX{} errors. -% \begin{texnote} -% When the mapping is broken, additional tokens may be inserted -% before the \meta{code} is -% inserted into the input stream. -% This depends on the design of the mapping function. -% \end{texnote} -% \end{function} +% \section{Working with token lists as a whole} % -% \section{Using token lists} +% \subsection{Using token lists} % % \begin{function}[EXP]{\tl_to_str:n, \tl_to_str:V} % \begin{syntax} @@ -733,7 +521,7 @@ % a \meta{tl~var} directly without an accessor function. % \end{function} % -% \section{Working with the content of token lists} +% \subsection{Counting and reversing token lists} % % \begin{function}[added = 2012-05-13, EXP] % {\tl_count:n, \tl_count:V, \tl_count:o} @@ -752,7 +540,7 @@ % \begin{syntax} % \cs{tl_count:N} \meta{tl~var} % \end{syntax} -% Counts the number of token groups in the \meta{tl~var} +% Counts the number of \meta{items} in the \meta{tl~var} % and leaves this information in the input stream. Unbraced tokens % count as one element as do each token group (|{|\ldots|}|). This % process ignores any unprotected spaces within the \meta{tl~var}. @@ -867,36 +655,194 @@ % \emph{resets} the content of the variable. % \end{function} % -% \begin{function}[added = 2017-02-06] -% {\tl_sort:Nn, \tl_sort:cn, \tl_gsort:Nn, \tl_gsort:cn} +% \subsection{Viewing token lists} +% +% \begin{function}[updated = 2021-04-29]{\tl_show:N, \tl_show:c} % \begin{syntax} -% \cs{tl_sort:Nn} \meta{tl var} \Arg{comparison code} +% \cs{tl_show:N} \meta{tl~var} % \end{syntax} -% Sorts the items in the \meta{tl var} according to the -% \meta{comparison code}, and assigns the result to -% \meta{tl var}. The details of sorting comparison are -% described in Section~\ref{sec:l3sort:mech}. +% Displays the content of the \meta{tl~var} on the terminal. +% \begin{texnote} +% This is similar to the \TeX{} primitive \tn{show}, wrapped to a +% fixed number of characters per line. +% \end{texnote} % \end{function} % -% \begin{function}[added = 2017-02-06, EXP]{\tl_sort:nN} +% \begin{function}[updated = 2015-08-07]{\tl_show:n} % \begin{syntax} -% \cs{tl_sort:nN} \Arg{token list} \meta{conditional} +% \cs{tl_show:n} \Arg{token list} % \end{syntax} -% Sorts the items in the \meta{token list}, using the -% \meta{conditional} to compare items, and leaves the result in the -% input stream. The \meta{conditional} should have signature |:nnTF|, -% and return \texttt{true} if the two items being compared should be -% left in the same order, and \texttt{false} if the items should be -% swapped. The details of sorting comparison are -% described in Section~\ref{sec:l3sort:mech}. +% Displays the \meta{token list} on the terminal. % \begin{texnote} -% The result is returned within \cs{exp_not:n}, which means that the -% token list does not expand further when appearing in an -% \texttt{x}-type or \texttt{e}-type argument expansion. +% This is similar to the \eTeX{} primitive \tn{showtokens}, wrapped +% to a fixed number of characters per line. +% \end{texnote} +% \end{function} +% +% \begin{function}[added = 2014-08-22, updated = 2021-04-29]{\tl_log:N, \tl_log:c} +% \begin{syntax} +% \cs{tl_log:N} \meta{tl~var} +% \end{syntax} +% Writes the content of the \meta{tl~var} in the log file. See also +% \cs{tl_show:N} which displays the result in the terminal. +% \end{function} +% +% \begin{function}[added = 2014-08-22, updated = 2015-08-07]{\tl_log:n} +% \begin{syntax} +% \cs{tl_log:n} \Arg{token list} +% \end{syntax} +% Writes the \meta{token list} in the log file. See also +% \cs{tl_show:n} which displays the result in the terminal. +% \end{function} +% +% \section{Manipulating items in token lists} +% +% \subsection{Mapping over token lists} +% +% All mappings are done at the current group level, \emph{i.e.}~any +% local assignments made by the \meta{function} or \meta{code} discussed +% below remain in effect after the loop. +% +% \begin{function}[updated = 2012-06-29, rEXP] +% {\tl_map_function:NN, \tl_map_function:cN} +% \begin{syntax} +% \cs{tl_map_function:NN} \meta{tl~var} \meta{function} +% \end{syntax} +% Applies \meta{function} to every \meta{item} in the \meta{tl~var}. +% The \meta{function} receives one argument for each iteration. +% This may be a number of tokens if the \meta{item} was stored within +% braces. Hence the \meta{function} should anticipate receiving +% \texttt{n}-type arguments. See also \cs{tl_map_function:nN}. +% \end{function} +% +% \begin{function}[updated = 2012-06-29, rEXP]{\tl_map_function:nN} +% \begin{syntax} +% \cs{tl_map_function:nN} \Arg{token list} \meta{function} +% \end{syntax} +% Applies \meta{function} to every \meta{item} in the \meta{token list}, +% The \meta{function} receives one argument for each iteration. +% This may be a number of tokens if the \meta{item} was stored within +% braces. Hence the \meta{function} should anticipate receiving +% \texttt{n}-type arguments. See also \cs{tl_map_function:NN}. +% \end{function} +% +% \begin{function}[updated = 2012-06-29] +% {\tl_map_inline:Nn, \tl_map_inline:cn} +% \begin{syntax} +% \cs{tl_map_inline:Nn} \meta{tl~var} \Arg{inline function} +% \end{syntax} +% Applies the \meta{inline function} to every \meta{item} stored within the +% \meta{tl~var}. The \meta{inline function} should consist of code which +% receives the \meta{item} as |#1|. See also \cs{tl_map_function:NN}. +% \end{function} +% +% \begin{function}[updated = 2012-06-29]{\tl_map_inline:nn} +% \begin{syntax} +% \cs{tl_map_inline:nn} \Arg{token list} \Arg{inline function} +% \end{syntax} +% Applies the \meta{inline function} to every \meta{item} stored within the +% \meta{token list}. The \meta{inline function} should consist of code which +% receives the \meta{item} as |#1|. See also \cs{tl_map_function:nN}. +% \end{function} +% +% \begin{function}[rEXP, added = 2019-09-02] +% {\tl_map_tokens:Nn, \tl_map_tokens:cn, \tl_map_tokens:nn} +% \begin{syntax} +% \cs{tl_map_tokens:Nn} \meta{tl~var} \Arg{code} +% \cs{tl_map_tokens:nn} \Arg{tokens} \Arg{code} +% \end{syntax} +% Analogue of \cs{tl_map_function:NN} which maps several tokens +% instead of a single function. The \meta{code} receives each \meta{item} in +% the \meta{tl~var} or in \meta{tokens} as a trailing brace group. For +% instance, +% \begin{verbatim} +% \tl_map_tokens:Nn \l_my_tl { \prg_replicate:nn { 2 } } +% \end{verbatim} +% expands to twice each \meta{item} in the \meta{tl~var}: for each \meta{item} in +% \cs[no-index]{l_my_tl} the function \cs{prg_replicate:nn} receives |2| and +% \meta{item} as its two arguments. The function +% \cs{tl_map_inline:Nn} is typically faster but is not expandable. +% \end{function} +% +% \begin{function}[updated = 2012-06-29] +% {\tl_map_variable:NNn, \tl_map_variable:cNn} +% \begin{syntax} +% \cs{tl_map_variable:NNn} \meta{tl~var} \meta{variable} \Arg{code} +% \end{syntax} +% Stores each \meta{item} of the \meta{tl~var} in turn in the (token +% list) \meta{variable} and applies the \meta{code}. The \meta{code} +% will usually make use of the \meta{variable}, but this is not +% enforced. The assignments to the \meta{variable} are local. Its +% value after the loop is the last \meta{item} in the \meta{tl~var}, +% or its original value if the \meta{tl~var} is blank. See also +% \cs{tl_map_inline:Nn}. +% \end{function} +% +% \begin{function}[updated = 2012-06-29]{\tl_map_variable:nNn} +% \begin{syntax} +% \cs{tl_map_variable:nNn} \Arg{token list} \meta{variable} \Arg{code} +% \end{syntax} +% Stores each \meta{item} of the \meta{token list} in turn in the +% (token list) \meta{variable} and applies the \meta{code}. The +% \meta{code} will usually make use of the \meta{variable}, but this +% is not enforced. The assignments to the \meta{variable} are local. +% Its value after the loop is the last \meta{item} in the +% \meta{tl~var}, or its original value if the \meta{tl~var} is blank. +% See also \cs{tl_map_inline:nn}. +% \end{function} +% +% \begin{function}[updated = 2012-06-29, rEXP]{\tl_map_break:} +% \begin{syntax} +% \cs{tl_map_break:} +% \end{syntax} +% Used to terminate a \cs[no-index]{tl_map_\ldots} function before all +% entries in the \meta{token list variable} have been processed. This +% normally takes place within a conditional statement, for example +% \begin{verbatim} +% \tl_map_inline:Nn \l_my_tl +% { +% \str_if_eq:nnT { #1 } { bingo } { \tl_map_break: } +% % Do something useful +% } +% \end{verbatim} +% See also \cs{tl_map_break:n}. +% Use outside of a \cs[no-index]{tl_map_\ldots} scenario leads to low +% level \TeX{} errors. +% \begin{texnote} +% When the mapping is broken, additional tokens may be inserted +% before the \meta{tokens} are +% inserted into the input stream. +% This depends on the design of the mapping function. % \end{texnote} % \end{function} % -% \section{The first token from a token list} +% \begin{function}[updated = 2012-06-29, rEXP]{\tl_map_break:n} +% \begin{syntax} +% \cs{tl_map_break:n} \Arg{code} +% \end{syntax} +% Used to terminate a \cs[no-index]{tl_map_\ldots} function before all +% entries in the \meta{token list variable} have been processed, inserting +% the \meta{code} after the mapping has ended. This +% normally takes place within a conditional statement, for example +% \begin{verbatim} +% \tl_map_inline:Nn \l_my_tl +% { +% \str_if_eq:nnT { #1 } { bingo } +% { \tl_map_break:n { <code> } } +% % Do something useful +% } +% \end{verbatim} +% Use outside of a \cs[no-index]{tl_map_\ldots} scenario leads to low +% level \TeX{} errors. +% \begin{texnote} +% When the mapping is broken, additional tokens may be inserted +% before the \meta{code} is +% inserted into the input stream. +% This depends on the design of the mapping function. +% \end{texnote} +% \end{function} +% +% \subsection{Head and tail of token lists} % % Functions which deal with either only the very first item (balanced % text or single normal token) in a token list, or the remaining tokens. @@ -979,89 +925,7 @@ % \end{texnote} % \end{function} % -% \begin{function}[updated = 2012-07-09, EXP, pTF] -% {\tl_if_head_eq_catcode:nN, \tl_if_head_eq_catcode:oN} -% \begin{syntax} -% \cs{tl_if_head_eq_catcode_p:nN} \Arg{token list} \meta{test token} -% \cs{tl_if_head_eq_catcode:nNTF} \Arg{token list} \meta{test token} -% ~~\Arg{true code} \Arg{false code} -% \end{syntax} -% Tests if the first \meta{token} in the \meta{token list} has the -% same category code as the \meta{test token}. In the case where the -% \meta{token list} is empty, the test is always \texttt{false}. -% \end{function} -% -% \begin{function}[updated = 2012-07-09, EXP, pTF] -% {\tl_if_head_eq_charcode:nN, \tl_if_head_eq_charcode:fN} -% \begin{syntax} -% \cs{tl_if_head_eq_charcode_p:nN} \Arg{token list} \meta{test token} -% \cs{tl_if_head_eq_charcode:nNTF} \Arg{token list} \meta{test token} -% ~~\Arg{true code} \Arg{false code} -% \end{syntax} -% Tests if the first \meta{token} in the \meta{token list} has the -% same character code as the \meta{test token}. In the case where the -% \meta{token list} is empty, the test is always \texttt{false}. -% \end{function} -% -% \begin{function}[updated = 2012-07-09, EXP, pTF]{\tl_if_head_eq_meaning:nN} -% \begin{syntax} -% \cs{tl_if_head_eq_meaning_p:nN} \Arg{token list} \meta{test token} -% \cs{tl_if_head_eq_meaning:nNTF} \Arg{token list} \meta{test token} -% ~~\Arg{true code} \Arg{false code} -% \end{syntax} -% Tests if the first \meta{token} in the \meta{token list} has the -% same meaning as the \meta{test token}. In the case where -% \meta{token list} is empty, the test is always \texttt{false}. -% \end{function} -% -% \begin{function}[added = 2012-07-08, EXP, pTF]{\tl_if_head_is_group:n} -% \begin{syntax} -% \cs{tl_if_head_is_group_p:n} \Arg{token list} -% \cs{tl_if_head_is_group:nTF} \Arg{token list} \Arg{true code} \Arg{false code} -% \end{syntax} -% Tests if the first \meta{token} in the \meta{token list} -% is an explicit begin-group character (with category code~$1$ -% and any character code), in other words, if the \meta{token list} -% starts with a brace group. In particular, the test is \texttt{false} -% if the \meta{token list} starts with an implicit token such as -% \cs{c_group_begin_token}, or if it is empty. -% This function is useful to implement actions on token lists on -% a token by token basis. -% \end{function} -% -% \begin{function}[added = 2012-07-08, EXP, pTF]{\tl_if_head_is_N_type:n} -% \begin{syntax} -% \cs{tl_if_head_is_N_type_p:n} \Arg{token list} -% \cs{tl_if_head_is_N_type:nTF} \Arg{token list} \Arg{true code} \Arg{false code} -% \end{syntax} -% Tests if the first \meta{token} in the \meta{token list} -% is a normal \texttt{N}-type argument. In other words, -% it is neither an explicit space character -% (explicit token with character code~$32$ and category code~$10$) -% nor an explicit begin-group character -% (with category code~1 and any character code). An empty -% argument yields \texttt{false}, as it does not have a \enquote{normal} -% first token. -% This function is useful to implement actions on token lists on -% a token by token basis. -% \end{function} -% -% \begin{function}[updated = 2012-07-08, EXP, pTF]{\tl_if_head_is_space:n} -% \begin{syntax} -% \cs{tl_if_head_is_space_p:n} \Arg{token list} -% \cs{tl_if_head_is_space:nTF} \Arg{token list} \Arg{true code} \Arg{false code} -% \end{syntax} -% Tests if the first \meta{token} in the \meta{token list} -% is an explicit space character -% (explicit token with character code~$12$ and category code~$10$). -% In particular, the test is \texttt{false} if the \meta{token list} -% starts with an implicit token such as \cs{c_space_token}, or if it -% is empty. -% This function is useful to implement actions on token lists on -% a token by token basis. -% \end{function} -% -% \section{Using a single item} +% \subsection{Items and ranges in token lists} % % \begin{function}[added = 2014-07-17, EXP] % {\tl_item:nn, \tl_item:Nn, \tl_item:cn} @@ -1172,44 +1036,190 @@ % \end{texnote} % \end{function} % -% \section{Viewing token lists} +% \subsection{Sorting token lists} % -% \begin{function}[updated = 2021-04-29]{\tl_show:N, \tl_show:c} +% \begin{function}[added = 2017-02-06] +% {\tl_sort:Nn, \tl_sort:cn, \tl_gsort:Nn, \tl_gsort:cn} % \begin{syntax} -% \cs{tl_show:N} \meta{tl~var} +% \cs{tl_sort:Nn} \meta{tl var} \Arg{comparison code} % \end{syntax} -% Displays the content of the \meta{tl~var} on the terminal. -% \begin{texnote} -% This is similar to the \TeX{} primitive \tn{show}, wrapped to a -% fixed number of characters per line. -% \end{texnote} +% Sorts the items in the \meta{tl var} according to the +% \meta{comparison code}, and assigns the result to +% \meta{tl var}. The details of sorting comparison are +% described in Section~\ref{sec:l3sort:mech}. % \end{function} % -% \begin{function}[updated = 2015-08-07]{\tl_show:n} +% \begin{function}[added = 2017-02-06, EXP]{\tl_sort:nN} % \begin{syntax} -% \cs{tl_show:n} \Arg{token list} +% \cs{tl_sort:nN} \Arg{token list} \meta{conditional} % \end{syntax} -% Displays the \meta{token list} on the terminal. +% Sorts the items in the \meta{token list}, using the +% \meta{conditional} to compare items, and leaves the result in the +% input stream. The \meta{conditional} should have signature |:nnTF|, +% and return \texttt{true} if the two items being compared should be +% left in the same order, and \texttt{false} if the items should be +% swapped. The details of sorting comparison are +% described in Section~\ref{sec:l3sort:mech}. % \begin{texnote} -% This is similar to the \eTeX{} primitive \tn{showtokens}, wrapped -% to a fixed number of characters per line. +% The result is returned within \cs{exp_not:n}, which means that the +% token list does not expand further when appearing in an +% \texttt{x}-type or \texttt{e}-type argument expansion. % \end{texnote} % \end{function} % -% \begin{function}[added = 2014-08-22, updated = 2021-04-29]{\tl_log:N, \tl_log:c} +% \section{Manipulating tokens in token lists} +% +% \subsection{Replacing tokens} +% +% \begin{function}[updated = 2011-08-11] +% { +% \tl_replace_once:Nnn, \tl_replace_once:cnn, +% \tl_greplace_once:Nnn, \tl_greplace_once:cnn +% } % \begin{syntax} -% \cs{tl_log:N} \meta{tl~var} +% \cs{tl_replace_once:Nnn} \meta{tl~var} \Arg{old tokens} \Arg{new tokens} % \end{syntax} -% Writes the content of the \meta{tl~var} in the log file. See also -% \cs{tl_show:N} which displays the result in the terminal. +% Replaces the first (leftmost) occurrence of \meta{old tokens} in the +% \meta{tl~var} with \meta{new tokens}. \meta{Old tokens} +% cannot contain |{|, |}| or |#| +% (more precisely, explicit character tokens with category code $1$ +% (begin-group) or $2$ (end-group), and tokens with category code $6$). % \end{function} % -% \begin{function}[added = 2014-08-22, updated = 2015-08-07]{\tl_log:n} +% \begin{function}[updated = 2011-08-11] +% { +% \tl_replace_all:Nnn, \tl_replace_all:cnn, +% \tl_greplace_all:Nnn, \tl_greplace_all:cnn +% } % \begin{syntax} -% \cs{tl_log:n} \Arg{token list} +% \cs{tl_replace_all:Nnn} \meta{tl~var} \Arg{old tokens} \Arg{new tokens} % \end{syntax} -% Writes the \meta{token list} in the log file. See also -% \cs{tl_show:n} which displays the result in the terminal. +% Replaces all occurrences of \meta{old tokens} in the +% \meta{tl~var} with \meta{new tokens}. \meta{Old tokens} +% cannot contain |{|, |}| or |#| +% (more precisely, explicit character tokens with category code $1$ +% (begin-group) or $2$ (end-group), and tokens with category code $6$). +% As this function +% operates from left to right, the pattern \meta{old tokens} +% may remain after the replacement (see \cs{tl_remove_all:Nn} +% for an example). +% \end{function} +% +% \begin{function}[updated = 2011-08-11] +% { +% \tl_remove_once:Nn, \tl_remove_once:cn, +% \tl_gremove_once:Nn, \tl_gremove_once:cn +% } +% \begin{syntax} +% \cs{tl_remove_once:Nn} \meta{tl~var} \Arg{tokens} +% \end{syntax} +% Removes the first (leftmost) occurrence of \meta{tokens} from the +% \meta{tl~var}. \meta{Tokens} cannot contain |{|, |}| or |#| +% (more precisely, explicit character tokens with category code $1$ +% (begin-group) or $2$ (end-group), and tokens with category code $6$). +% \end{function} +% +% \begin{function}[updated = 2011-08-11] +% { +% \tl_remove_all:Nn, \tl_remove_all:cn, +% \tl_gremove_all:Nn, \tl_gremove_all:cn +% } +% \begin{syntax} +% \cs{tl_remove_all:Nn} \meta{tl~var} \Arg{tokens} +% \end{syntax} +% Removes all occurrences of \meta{tokens} from the +% \meta{tl~var}. \meta{Tokens} cannot contain |{|, |}| or |#| +% (more precisely, explicit character tokens with category code $1$ +% (begin-group) or $2$ (end-group), and tokens with category code $6$). +% As this function +% operates from left to right, the pattern \meta{tokens} +% may remain after the removal, for instance, +% \begin{quote} +% \cs{tl_set:Nn} \cs{l_tmpa_tl} |{abbccd}| +% \cs{tl_remove_all:Nn} \cs{l_tmpa_tl} |{bc}| +% \end{quote} +% results in \cs{l_tmpa_tl} containing \texttt{abcd}. +% \end{function} +% +% \subsection{Reassigning category codes} +% +% These functions allow the rescanning of tokens: re-apply \TeX{}'s +% tokenization process to apply category codes different from those +% in force when the tokens were absorbed. Whilst this functionality is +% supported, it is often preferable to find alternative approaches +% to achieving outcomes rather than rescanning tokens (for example +% construction of token lists token-by-token with intervening category +% code changes or using \cs{char_generate:nn}). +% +% \begin{function}[updated = 2015-08-11] +% { +% \tl_set_rescan:Nnn, \tl_set_rescan:Nno, \tl_set_rescan:Nnx, +% \tl_set_rescan:cnn, \tl_set_rescan:cno, \tl_set_rescan:cnx, +% \tl_gset_rescan:Nnn, \tl_gset_rescan:Nno, \tl_gset_rescan:Nnx, +% \tl_gset_rescan:cnn, \tl_gset_rescan:cno, \tl_gset_rescan:cnx +% } +% \begin{syntax} +% \cs{tl_set_rescan:Nnn} \meta{tl~var} \Arg{setup} \Arg{tokens} +% \end{syntax} +% Sets \meta{tl~var} to contain \meta{tokens}, applying the category +% code r\'{e}gime specified in the \meta{setup} before carrying out +% the assignment. (Category codes applied to tokens not explicitly covered +% by the \meta{setup} are those in force at the point of use of +% \cs{tl_set_rescan:Nnn}.) +% This allows the \meta{tl~var} to contain material +% with category codes other than those that apply when \meta{tokens} +% are absorbed. The \meta{setup} is run within a group and may +% contain any valid input, although only changes in category codes, +% such as uses of \cs{cctab_select:N}, +% are relevant. See also \cs{tl_rescan:nn}. +% \begin{texnote} +% The \meta{tokens} are first turned into a string (using +% \cs{tl_to_str:n}). If the string contains one or more characters +% with character code \tn{newlinechar} (set equal to +% \tn{endlinechar} unless that is equal to $32$, before the user +% \meta{setup}), then it is split into lines at these characters, +% then read as if reading multiple lines from a file, ignoring +% spaces (catcode $10$) at the beginning and spaces and tabs +% (character code $32$ or $9$) at the end of every line. +% Otherwise, spaces (and tabs) are retained at both ends of the +% single-line string, as if it appeared in the middle of a line +% read from a file. +% \end{texnote} +% \end{function} +% +% \begin{function}[updated = 2015-08-11]{\tl_rescan:nn} +% \begin{syntax} +% \cs{tl_rescan:nn} \Arg{setup} \Arg{tokens} +% \end{syntax} +% Rescans \meta{tokens} applying the category code r\'{e}gime +% specified in the \meta{setup}, and leaves the resulting tokens in +% the input stream. (Category codes applied to tokens not explicitly covered +% by the \meta{setup} are those in force at the point of use of +% \cs{tl_rescan:nn}.) +% The \meta{setup} is run within a group and may +% contain any valid input, although only changes in category codes, +% such as uses of \cs{cctab_select:N}, +% are relevant. See also \cs{tl_set_rescan:Nnn}, which is more +% robust than using \cs{tl_set:Nn} in the \meta{tokens} argument of +% \cs{tl_rescan:nn}. +% \begin{texnote} +% The \meta{tokens} are first turned into a string (using +% \cs{tl_to_str:n}). If the string contains one or more characters +% with character code \tn{newlinechar} (set equal to +% \tn{endlinechar} unless that is equal to $32$, before the user +% \meta{setup}), then it is split into lines at these characters, +% then read as if reading multiple lines from a file, ignoring +% spaces (catcode $10$) at the beginning and spaces and tabs +% (character code $32$ or $9$) at the end of every line. +% Otherwise, spaces (and tabs) are retained at both ends of the +% single-line string, as if it appeared in the middle of a line +% read from a file. +% +% Contrarily to the \tn{scantokens} primitive, \cs{tl_rescan:nn} +% tokenizes the whole string in the same category code regime rather +% than one token at a time, so that directives such as \tn{verb} +% that rely on changing category codes will not function properly. +% \end{texnote} % \end{function} % % \section{Constant token lists} @@ -1442,7 +1452,7 @@ % By using \cs{exp_not:n} token list variables can contain |#| tokens, % which makes the token list registers provided by \TeX{} % more or less redundant. The \cs{tl_set:No} version is done -% \enquote{by hand} as it is used quite a lot. +% by hand as it is used quite a lot. % \begin{macrocode} \cs_new_protected:Npn \tl_set:Nn #1#2 { \__kernel_tl_set:Nx #1 { \__kernel_exp_not:w {#2} } } @@ -2289,7 +2299,7 @@ % The \cs{if_false:} constructions are a faster way to do % \cs{group_align_safe_begin:} and \cs{group_align_safe_end:}. % The \cs{scan_stop:} ensures that \texttt{f}-expanding -% \cs{tl_if_in:nn} does not lead to unbalanced braces. +% \cs{tl_if_in:nnTF} does not lead to unbalanced braces. % \begin{macrocode} \prg_new_protected_conditional:Npnn \tl_if_in:nn #1#2 { T , F , TF } { @@ -2335,7 +2345,7 @@ % \end{macro} % % \begin{macro}[EXP,pTF]{\tl_if_single:N} -% Expand the token list and feed it to \cs{tl_if_single:n}. +% Expand the token list and feed it to \cs{tl_if_single:nTF}. % \begin{macrocode} \cs_new:Npn \tl_if_single_p:N { \exp_args:No \tl_if_single_p:n } \cs_new:Npn \tl_if_single:NT { \exp_args:No \tl_if_single:nT } diff --git a/Master/texmf-dist/source/latex/l3kernel/l3token.dtx b/Master/texmf-dist/source/latex/l3kernel/l3token.dtx index 33960f4ec04..527ce36e080 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3token.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3token.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2021-10-18} +% \date{Released 2021-11-12} % % \maketitle % @@ -541,7 +541,7 @@ % \begin{function}[EXP,pTF]{\token_if_parameter:N} % \begin{syntax} % \cs{token_if_parameter_p:N} \meta{token} \\ -% \cs{token_if_alignment:NTF} \meta{token} \Arg{true code} \Arg{false code} +% \cs{token_if_parameter:NTF} \meta{token} \Arg{true code} \Arg{false code} % \end{syntax} % Tests if \meta{token} has the category code of a macro parameter token % (|#| when normal \TeX{} category codes are in force). diff --git a/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx b/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx index 38f142f04ff..5aa2987d19d 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2021-10-18} +% \date{Released 2021-11-12} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx b/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx index f10eb7e8ce8..6aeaba3229a 100644 --- a/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx +++ b/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx @@ -62,7 +62,7 @@ % }^^A % } % -% \date{Released 2021-08-27} +% \date{Released 2021-11-12} % % \maketitle % @@ -139,7 +139,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3keys2e}{2021-08-27}{} +\ProvidesExplPackage{l3keys2e}{2021-11-12}{} {LaTeX2e option processing using LaTeX3 keys} % \end{macrocode} % diff --git a/Master/texmf-dist/source/latex/l3packages/xfp/xfp.dtx b/Master/texmf-dist/source/latex/l3packages/xfp/xfp.dtx index cef3891fe20..c3ba90bb149 100644 --- a/Master/texmf-dist/source/latex/l3packages/xfp/xfp.dtx +++ b/Master/texmf-dist/source/latex/l3packages/xfp/xfp.dtx @@ -63,7 +63,7 @@ % }^^A % } % -% \date{Released 2021-08-27} +% \date{Released 2021-11-12} % % \maketitle % @@ -166,7 +166,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{xfp}{2021-08-27}{} +\ProvidesExplPackage{xfp}{2021-11-12}{} {L3 Floating point unit} % \end{macrocode} % diff --git a/Master/texmf-dist/source/latex/l3packages/xfrac/xfrac.dtx b/Master/texmf-dist/source/latex/l3packages/xfrac/xfrac.dtx index 2840b4318ae..efe75c161a7 100644 --- a/Master/texmf-dist/source/latex/l3packages/xfrac/xfrac.dtx +++ b/Master/texmf-dist/source/latex/l3packages/xfrac/xfrac.dtx @@ -65,7 +65,7 @@ % }^^A % } % -% \date{Released 2021-08-27} +% \date{Released 2021-11-12} % % \maketitle % @@ -535,7 +535,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{xfrac}{2021-08-27}{} +\ProvidesExplPackage{xfrac}{2021-11-12}{} {L3 Experimental split-level fractions} % \end{macrocode} % diff --git a/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx b/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx index fd4b615e150..f601bd9c5f2 100644 --- a/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx +++ b/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx @@ -67,7 +67,7 @@ % }^^A % } % -% \date{Released 2021-08-27} +% \date{Released 2021-11-12} % % \maketitle % @@ -1064,7 +1064,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{xparse}{2021-08-27}{} +\ProvidesExplPackage{xparse}{2021-11-12}{} {L3 Experimental document command parser} % \end{macrocode} % @@ -1249,6 +1249,39 @@ % \end{macrocode} % \end{macro} % +% \subsection{Copying a command and its internal structure} +% +% The apparatus for copying commands is almost entirely in |ltcmd.dtx|, +% preloaded in the \LaTeXe{} kernel. The missing parts, regarding +% copying the deprecated argument types |G|, |l| and |u| boil down to +% copying the expandable grabber for |u|. +% +% \begin{macro}{\@@_copy_grabber_u:w} +% An expandable |u|-type uses a dedicated grabber just like a +% |D|-type, except that both its delimiter tokens are omitted, so to +% copy that we just copy a |D|-type and leave the last two arguments +% empty: +% \begin{macrocode} +\cs_new_protected:Npn \@@_copy_grabber_u:w #1 #2 #3 + { \@@_copy_grabber_D:w {#1} {#2} {#3} { } { } } +% \end{macrocode} +% \end{macro} +% +% \subsubsection{Showing the definition of a command} +% +% \begin{macro}{\c_@@_show_type_u_tl,\c_@@_show_type_G_tl} +% Same as for copying, only small bits are missing here. Namely, two +% token lists that tell the \pkg{ltcmd} mechanism how to deal with the +% argument types defined here. Both |G| and |u| are classified +% as~|3|: commands that take a default value. That's not really true +% for~|u|, but it's a close enough approximation to get the output we +% want. +% \begin{macrocode} +\tl_const:Nn \c_@@_show_type_u_tl { 3 } +\tl_const:Nn \c_@@_show_type_G_tl { 3 } +% \end{macrocode} +% \end{macro} +% % \subsection{Grabbing arguments} % % \begin{macro}{\@@_grab_G:w} diff --git a/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx b/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx index 9c038494f38..8dfe79ec343 100644 --- a/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx +++ b/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx @@ -63,7 +63,7 @@ % }^^A % } % -% \date{Released 2021-08-27} +% \date{Released 2021-11-12} % % \maketitle % @@ -682,7 +682,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{xtemplate}{2021-08-27}{} +\ProvidesExplPackage{xtemplate}{2021-11-12}{} {L3 Experimental prototype document functions} % \end{macrocode} % @@ -1280,7 +1280,7 @@ \seq_put_right:No \l_@@_key_order_seq \l_@@_key_name_tl \str_if_eq:onT \l_@@_keytype_tl { choice } { - \clist_if_in:NnT \l_@@_keytype_arg_tl { unknown } + \exp_args:No \clist_if_in:nnT \l_@@_keytype_arg_tl { unknown } { \msg_error:nn { xtemplate } { choice-unknown-reserved } } } } @@ -1446,95 +1446,50 @@ % \end{macrocode} % \end{macro} % -% \begin{macro}{\@@_store_value_code:n} -% \begin{macro}{\@@_store_value_choice:n} -% \begin{macro}{\@@_store_value_commalist:n} -% \begin{macro}{\@@_store_value_function:n} -% \begin{macro}{\@@_store_value_instance:n} -% \begin{macro}{\@@_store_value_real:n} -% \begin{macro}{\@@_store_value_tokenlist:n} +% \begin{macro}{\@@_store_value_code:n, \@@_store_value_choice:n, +% \@@_store_value_function:n, \@@_store_value_instance:n} % With no need to worry about delayed evaluation, these keytypes all % just store the input directly. % \begin{macrocode} \cs_new_protected:Npn \@@_store_value_code:n #1 { \prop_put:Non \l_@@_values_prop \l_@@_key_name_tl {#1} } \cs_new_eq:NN \@@_store_value_choice:n \@@_store_value_code:n -\cs_new_eq:NN \@@_store_value_commalist:n \@@_store_value_code:n \cs_new_eq:NN \@@_store_value_function:n \@@_store_value_code:n \cs_new_eq:NN \@@_store_value_instance:n \@@_store_value_code:n -\cs_new_eq:NN \@@_store_value_real:n \@@_store_value_code:n -\cs_new_eq:NN \@@_store_value_tokenlist:n \@@_store_value_code:n % \end{macrocode} % \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} % -% \begin{macro}{\@@_store_value_integer:n} -% \begin{macro}{\@@_store_value_length:n} -% \begin{macro}{\@@_store_value_muskip:n} -% \begin{macro}{\@@_store_value_skip:n} -% Storing the value of a number is in all cases more or less the same. -% If evaluation is taking place now, assignment is made to a scratch -% variable, and this result is then stored. On the other hand, if -% evaluation is delayed the current data is simply stored \enquote{as is}. +% \begin{macro}{\@@_store_value_aux:Nn, \@@_store_value_integer:n, +% \@@_store_value_length:n, \@@_store_value_muskip:n, +% \@@_store_value_real:n, \@@_store_value_skip:n, +% \@@_store_value_tokenlist:n, \@@_store_value_commalist:n} +% Storing values in \cs{l_@@_values_prop} is in most cases the same. +% If evaluation is taking place now, one \texttt{x}-expands an +% evaluation function and the result is then stored. On the other +% hand, if evaluation is delayed the current data is simply stored +% \enquote{as is}. % \begin{macrocode} -\cs_new_protected:Npn \@@_store_value_integer:n #1 - { - \@@_if_eval_now:nTF {#1} - { - \int_set:Nn \l_@@_tmp_int {#1} - \prop_put:NVV \l_@@_values_prop \l_@@_key_name_int - \l_@@_tmp_int - } - { - \prop_put:Non \l_@@_values_prop \l_@@_key_name_tl {#1} - } - } -\cs_new_protected:Npn \@@_store_value_length:n #1 - { - \@@_if_eval_now:nTF {#1} - { - \dim_set:Nn \l_@@_tmp_dim {#1} - \prop_put:NVV \l_@@_values_prop \l_@@_key_name_tl - \l_@@_tmp_dim - } - { - \prop_put:Non \l_@@_values_prop \l_@@_key_name_tl {#1} - } - } -\cs_new_protected:Npn \@@_store_value_muskip:n #1 - { - \@@_if_eval_now:nTF {#1} - { - \muskip_set:Nn \l_@@_tmp_muskip {#1} - \prop_put:NVV \l_@@_values_prop \l_@@_key_name_tl - \l_@@_tmp_muskip - } - { - \prop_put:Non \l_@@_values_prop \l_@@_key_name_tl {#1} - } - } -\cs_new_protected:Npn \@@_store_value_skip:n #1 +\cs_new_protected:Npn \@@_store_value_aux:Nn #1#2 { - \@@_if_eval_now:nTF {#1} - { - \skip_set:Nn \l_@@_tmp_skip {#1} - \prop_put:NVV \l_@@_values_prop \l_@@_key_name_tl - \l_@@_tmp_skip - } - { - \prop_put:Non \l_@@_values_prop \l_@@_key_name_tl {#1} - } + \@@_if_eval_now:nTF {#2} + { \prop_put:NVx \l_@@_values_prop \l_@@_key_name_tl { #1 {#2} } } + { \prop_put:Non \l_@@_values_prop \l_@@_key_name_tl {#2} } } +\cs_new_protected:Npn \@@_store_value_integer:n + { \@@_store_value_aux:Nn \int_eval:n } +\cs_new_protected:Npn \@@_store_value_length:n + { \@@_store_value_aux:Nn \dim_eval:n } +\cs_new_protected:Npn \@@_store_value_muskip:n + { \@@_store_value_aux:Nn \muskip_eval:n } +\cs_new_protected:Npn \@@_store_value_real:n + { \@@_store_value_aux:Nn \fp_eval:n } +\cs_new_protected:Npn \@@_store_value_skip:n + { \@@_store_value_aux:Nn \skip_eval:n } +\cs_new_protected:Npn \@@_store_value_tokenlist:n + { \@@_store_value_aux:Nn \use:n } +\cs_new_eq:NN \@@_store_value_commalist:n \@@_store_value_tokenlist:n % \end{macrocode} % \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} % % \subsection{Implementation part of template declaration} % @@ -1713,7 +1668,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_implement_choices:n #1 { - \clist_set_eq:NN \l_@@_tmp_clist \l_@@_keytype_arg_tl + \clist_set:No \l_@@_tmp_clist { \l_@@_keytype_arg_tl } \prop_put:Non \l_@@_vars_prop \l_@@_key_name_tl { } \keyval_parse:NNn \@@_implement_choice_elt:n \@@_implement_choice_elt:nn diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3benchmark/l3benchmark.sty b/Master/texmf-dist/tex/latex/l3experimental/l3benchmark/l3benchmark.sty index 933d7bba7fd..4ae4d86161f 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3benchmark/l3benchmark.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3benchmark/l3benchmark.sty @@ -20,7 +20,7 @@ %% %% File: l3benchmark.dtx \RequirePackage{expl3} -\ProvidesExplPackage{l3benchmark}{2021-08-27}{} +\ProvidesExplPackage{l3benchmark}{2021-11-12}{} {L3 Experimental benchmarking} \fp_new:N \g_benchmark_duration_target_fp \fp_gset:Nn \g_benchmark_duration_target_fp { 1 } diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3bitset/l3bitset.sty b/Master/texmf-dist/tex/latex/l3experimental/l3bitset/l3bitset.sty index 96effe254fe..b6984dc454c 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3bitset/l3bitset.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3bitset/l3bitset.sty @@ -19,7 +19,7 @@ %% and all files in that bundle must be distributed together. %% %% File: l3bitset.dtx -\ProvidesExplPackage{l3bitset}{2021-08-27}{} +\ProvidesExplPackage{l3bitset}{2021-11-12}{} {L3 Experimental bitset support} \cs_new_protected:Npn \bitset_new:N #1 { diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty b/Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty index 619596801dc..4a5d2b8eb92 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty @@ -28,7 +28,7 @@ %% %% File: l3draw.dtx \RequirePackage{expl3} -\ProvidesExplPackage{l3draw}{2021-08-27}{} +\ProvidesExplPackage{l3draw}{2021-11-12}{} {L3 Experimental core drawing support} \scan_new:N \s__draw_mark \scan_new:N \s__draw_stop @@ -963,6 +963,47 @@ { #6 + #4 * #1 + #2 * #3 * #5 , #7 + #5 * #1 + -1 * #2 * #3 * #4 } } \cs_generate_variant:Nn \__draw_point_intersect_circles_auxvii:nnnnnnn { fff } +\cs_new:Npn \draw_point_intersect_line_circle:nnnnn #1#2#3#4#5 + { + \__draw_point_process:nnnn + { \__draw_point_intersect_line_circle_auxi:nnnnnnnn {#4} {#5} } + {#1} {#2} {#3} + } +\cs_new:Npn \__draw_point_intersect_line_circle_auxi:nnnnnnnn #1#2#3#4#5#6#7#8 + { + \__draw_point_intersect_line_circle_auxii:fnnnnnnn + { \fp_eval:n {#1} } {#3} {#4} {#5} {#6} {#7} {#8} {#2} + } +\cs_new:Npn \__draw_point_intersect_line_circle_auxii:nnnnnnnn #1#2#3#4#5#6#7#8 + { + \__draw_point_intersect_line_circle_auxiii:fffnnnnn + { \fp_eval:n { (#4-#2)*(#4-#2)+(#5-#3)*(#5-#3) } } + { \fp_eval:n { 2*((#4-#2)*(#2-#6)+(#5-#3)*(#3-#7)) } } + { \fp_eval:n { (#6*#6+#7*#7)+(#2*#2+#3*#3)-(2*(#6*#2+#7*#3))-(#1*#1) } } + {#2} {#3} {#4} {#5} {#8} + } +\cs_generate_variant:Nn \__draw_point_intersect_line_circle_auxii:nnnnnnnn { f } +\cs_new:Npn \__draw_point_intersect_line_circle_auxiii:nnnnnnnn #1#2#3#4#5#6#7#8 + { + \__draw_point_intersect_line_circle_auxiv:ffnnnnnn + { \fp_eval:n { #2 * #2 - 4 * #1 * #3 } } + { \int_if_odd:nTF {#8} { 1 } { -1 } } + {#1} {#2} {#4} {#5} {#6} {#7} + } +\cs_generate_variant:Nn \__draw_point_intersect_line_circle_auxiii:nnnnnnnn { fff } +\cs_new:Npn \__draw_point_intersect_line_circle_auxiv:nnnnnnnn #1#2#3#4#5#6#7#8 + { + \__draw_point_intersect_line_circle_auxv:fnnnn + { \fp_eval:n { (-1 * #4 + #2 * sqrt(#1)) / (2 * #3) } } + {#5} {#6} {#7} {#8} + } +\cs_generate_variant:Nn \__draw_point_intersect_line_circle_auxiv:nnnnnnnn { ff } +\cs_new:Npn \__draw_point_intersect_line_circle_auxv:nnnnn #1#2#3#4#5 + { + \draw_point:n + { #2 + #1 * (#4 - #2), #3 + #1 * (#5 - #3) } + } +\cs_generate_variant:Nn \__draw_point_intersect_line_circle_auxv:nnnnn { f } \cs_new:Npn \draw_point_interpolate_line:nnn #1#2#3 { \__draw_point_process:nnn diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3graphics/l3graphics.sty b/Master/texmf-dist/tex/latex/l3experimental/l3graphics/l3graphics.sty index b01be499824..913a74aaa7f 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3graphics/l3graphics.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3graphics/l3graphics.sty @@ -20,7 +20,7 @@ %% %% File: l3graphics.dtx \RequirePackage{expl3} -\ProvidesExplPackage{l3graphics}{2021-08-27}{} +\ProvidesExplPackage{l3graphics}{2021-11-12}{} {L3 Experimental graphics inclusion support} \ior_new:N \l__graphics_tmp_ior \tl_new:N \l__graphics_tmp_tl diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3opacity/l3opacity.sty b/Master/texmf-dist/tex/latex/l3experimental/l3opacity/l3opacity.sty index f131b24753e..25a405a27f5 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3opacity/l3opacity.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3opacity/l3opacity.sty @@ -20,7 +20,7 @@ %% %% File: l3opacity.dtx \RequirePackage{expl3} -\ProvidesExplPackage{l3opacity}{2021-08-27}{} +\ProvidesExplPackage{l3opacity}{2021-11-12}{} {L3 Experimental opacity support} \cs_new_protected:Npn \opacity_select:n #1 { \__opacity_select:nN {#1} \__opacity_backend_select:n } diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty index da52a3b082a..3f2bb4309a7 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty @@ -20,7 +20,7 @@ %% %% File: l3str-format.dtx \RequirePackage{expl3} -\ProvidesExplPackage{l3str-format}{2021-08-27}{} +\ProvidesExplPackage{l3str-format}{2021-11-12}{} {L3 Experimental string formatting} \cs_generate_variant:Nn \use:nn { nf } \cs_generate_variant:Nn \use:nnn { fnf } diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3sys-shell/l3sys-shell.sty b/Master/texmf-dist/tex/latex/l3experimental/l3sys-shell/l3sys-shell.sty index 14753c8cd24..d0d5e2bca72 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3sys-shell/l3sys-shell.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3sys-shell/l3sys-shell.sty @@ -20,7 +20,7 @@ %% %% File: l3sys-shell.dtx \RequirePackage{expl3} -\ProvidesExplPackage{l3sys-shell}{2021-08-27}{} +\ProvidesExplPackage{l3sys-shell}{2021-11-12}{} {L3 Experimental system shell functions} \scan_new:N \s__sys_stop \quark_new:N \q__sys_nil diff --git a/Master/texmf-dist/tex/latex/l3experimental/xcoffins/xcoffins.sty b/Master/texmf-dist/tex/latex/l3experimental/xcoffins/xcoffins.sty index 97edbff9cd9..38442e8587f 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/xcoffins/xcoffins.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/xcoffins/xcoffins.sty @@ -19,7 +19,7 @@ %% and all files in that bundle must be distributed together. %% %% File: xcoffins.dtx -\ProvidesExplPackage{xcoffins}{2021-08-27}{} +\ProvidesExplPackage{xcoffins}{2021-11-12}{} {L3 Experimental design level coffins} \keys_define:nn { coffin } { diff --git a/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty b/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty index aa9975fc5c7..07ab8d0ab38 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty @@ -32,7 +32,7 @@ }% \endinput } -\ProvidesExplPackage{l3galley}{2021-08-27}{} +\ProvidesExplPackage{l3galley}{2021-11-12}{} {L3 Experimental galley code} \int_new:N \l__galley_tmp_int \seq_new:N \g__galley_tmpa_seq diff --git a/Master/texmf-dist/tex/latex/l3experimental/xgalley/xgalley.sty b/Master/texmf-dist/tex/latex/l3experimental/xgalley/xgalley.sty index 0f4b7f5fb8d..b4ac834f378 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/xgalley/xgalley.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/xgalley/xgalley.sty @@ -19,7 +19,7 @@ %% and all files in that bundle must be distributed together. %% %% File: xgalley.dtx -\ProvidesExplPackage{xgalley}{2021-08-27}{} +\ProvidesExplPackage{xgalley}{2021-11-12}{} {L3 Experimental galley} \RequirePackage{xtemplate,l3galley} \clist_new:N \l__galley_tmpa_clist diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex b/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex index 65bd533c8b8..acd7546557c 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex +++ b/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex @@ -70,7 +70,7 @@ %% and all files in that bundle must be distributed together. %% %% File: expl3.dtx -\def\ExplFileDate{2021-10-18}% +\def\ExplFileDate{2021-11-12}% \begingroup \def\next{\endgroup}% \expandafter\ifx\csname PackageError\endcsname\relax @@ -4962,23 +4962,20 @@ } \prg_new_conditional:Npnn \str_if_eq:nn #1#2 { p , T , F , TF } { - \if_int_compare:w - \__str_if_eq:nn { \exp_not:n {#1} } { \exp_not:n {#2} } - = \c_zero_int + \if:w 0 \__str_if_eq:nn { \exp_not:n {#1} } { \exp_not:n {#2} } \prg_return_true: \else: \prg_return_false: \fi: } \prg_generate_conditional_variant:Nnn \str_if_eq:nn { V , v , o , nV , no , VV , nv } { p , T , F , TF } \prg_new_conditional:Npnn \str_if_eq:ee #1#2 { p , T , F , TF } { - \if_int_compare:w \__str_if_eq:nn {#1} {#2} = \c_zero_int + \if:w 0 \__str_if_eq:nn {#1} {#2} \prg_return_true: \else: \prg_return_false: \fi: } \prg_new_conditional:Npnn \str_if_eq:NN #1#2 { p , TF , T , F } { - \if_int_compare:w - \__str_if_eq:nn { \tl_to_str:N #1 } { \tl_to_str:N #2 } - = \c_zero_int \prg_return_true: \else: \prg_return_false: \fi: + \if:w 0 \__str_if_eq:nn { \tl_to_str:N #1 } { \tl_to_str:N #2 } + \prg_return_true: \else: \prg_return_false: \fi: } \prg_generate_conditional_variant:Nnn \str_if_eq:NN { c , Nc , cc } { T , F , TF , p } @@ -7117,12 +7114,13 @@ \fi: } \prg_generate_conditional_variant:Nnn \bool_if:N { c } { p , T , F , TF } +\cs_new:Npn \bool_to_str:N #1 { \bool_if:NTF #1 { true } { false } } +\cs_generate_variant:Nn \bool_to_str:N { c } +\cs_new:Npn \bool_to_str:n #1 { \bool_if:nTF {#1} { true } { false } } \cs_new_protected:Npn \bool_show:n - { \msg_show_eval:Nn \__bool_to_str:n } + { \msg_show_eval:Nn \bool_to_str:n } \cs_new_protected:Npn \bool_log:n - { \msg_log_eval:Nn \__bool_to_str:n } -\cs_new:Npn \__bool_to_str:n #1 - { \bool_if:nTF {#1} { true } { false } } + { \msg_log_eval:Nn \bool_to_str:n } \cs_new_protected:Npn \bool_show:N { \__bool_show:NN \tl_show:n } \cs_generate_variant:Nn \bool_show:N { c } \cs_new_protected:Npn \bool_log:N { \__bool_show:NN \tl_log:n } @@ -9493,83 +9491,51 @@ \cs_new_protected:Npn \__prop_concat:NNNN #1#2#3#4 { \prop_set_eq:NN \l__prop_internal_prop #3 - \prop_map_tokens:Nn #4 { \prop_put:Nnn \l__prop_internal_prop } + \prop_map_inline:Nn #4 { \prop_put:Nnn \l__prop_internal_prop {##1} {##2} } #1 #2 \l__prop_internal_prop } -\cs_new_protected:Npn \prop_set_from_keyval:Nn #1#2 +\cs_new_protected:Npn \prop_set_from_keyval:Nn #1 { - \prop_clear:N \l__prop_internal_prop - \__prop_from_keyval:n {#2} - \prop_set_eq:NN #1 \l__prop_internal_prop - \prop_clear:N \l__prop_internal_prop + \prop_clear:N #1 + \prop_put_from_keyval:Nn #1 } \cs_generate_variant:Nn \prop_set_from_keyval:Nn { c } -\cs_new_protected:Npn \prop_gset_from_keyval:Nn #1#2 +\cs_new_protected:Npn \prop_gset_from_keyval:Nn #1 { - \prop_clear:N \l__prop_internal_prop - \__prop_from_keyval:n {#2} - \prop_gset_eq:NN #1 \l__prop_internal_prop - \prop_clear:N \l__prop_internal_prop + \prop_gclear:N #1 + \prop_gput_from_keyval:Nn #1 } \cs_generate_variant:Nn \prop_gset_from_keyval:Nn { c } \cs_new_protected:Npn \prop_const_from_keyval:Nn #1#2 { - \prop_clear:N \l__prop_internal_prop - \__prop_from_keyval:n {#2} + \prop_set_from_keyval:Nn \l__prop_internal_prop {#2} \tl_const:Nx #1 { \exp_not:o \l__prop_internal_prop } \prop_clear:N \l__prop_internal_prop } \cs_generate_variant:Nn \prop_const_from_keyval:Nn { c } -\cs_new_protected:Npn \prop_put_from_keyval:Nn #1#2 +\cs_new_protected:Npn \prop_put_from_keyval:Nn { - \prop_set_eq:NN \l__prop_internal_prop #1 - \__prop_from_keyval:n {#2} - \prop_set_eq:NN #1 \l__prop_internal_prop - \prop_clear:N \l__prop_internal_prop + \bool_if:NTF \l__kernel_keyval_allow_blank_keys_bool + { \__prop_keyval_parse:NNNn \c_true_bool } + { \__prop_keyval_parse:NNNn \c_false_bool } + \prop_put:Nnn } \cs_generate_variant:Nn \prop_put_from_keyval:Nn { c } -\cs_new_protected:Npn \prop_gput_from_keyval:Nn #1#2 +\cs_new_protected:Npn \prop_gput_from_keyval:Nn { - \prop_set_eq:NN \l__prop_internal_prop #1 - \__prop_from_keyval:n {#2} - \prop_gset_eq:NN #1 \l__prop_internal_prop - \prop_clear:N \l__prop_internal_prop + \bool_if:NTF \l__kernel_keyval_allow_blank_keys_bool + { \__prop_keyval_parse:NNNn \c_true_bool } + { \__prop_keyval_parse:NNNn \c_false_bool } + \prop_gput:Nnn } \cs_generate_variant:Nn \prop_gput_from_keyval:Nn { c } -\cs_new_protected:Npn \__prop_from_keyval:n #1 - { - \__prop_from_keyval_loop:w \prg_do_nothing: #1 , - \q__prop_recursion_tail , \q__prop_recursion_stop - } -\cs_new_protected:Npn \__prop_from_keyval_loop:w #1 , - { - \__prop_if_recursion_tail_stop:o {#1} - \__prop_from_keyval_split:Nw \__prop_from_keyval_key:n - #1 = = \s__prop_stop {#1} - \__prop_from_keyval_loop:w \prg_do_nothing: - } -\cs_new_protected:Npn \__prop_from_keyval_split:Nw #1#2 = - { \tl_trim_spaces_apply:oN {#2} #1 } -\cs_new_protected:Npn \__prop_from_keyval_key:n #1 - { \__prop_from_keyval_key:w #1 \s__prop_mark } -\cs_new_protected:Npn \__prop_from_keyval_key:w #1 \s__prop_mark #2 \s__prop_stop +\cs_new_protected:Npn \__prop_missing_eq:n + { \msg_error:nnn { prop } { prop-keyval } } +\cs_new_protected:Npn \__prop_keyval_parse:NNNn #1#2#3#4 { - \__prop_from_keyval_split:Nw \__prop_from_keyval_value:n - \prg_do_nothing: #2 \s__prop_stop {#1} - } -\cs_new_protected:Npn \__prop_from_keyval_value:n #1 - { \__prop_from_keyval_value:w #1 \s__prop_mark } -\cs_new_protected:Npn \__prop_from_keyval_value:w #1 \s__prop_mark #2 \s__prop_stop #3#4 - { - \tl_if_single:nTF {#2} - { \prop_put:Nnn \l__prop_internal_prop {#3} {#1} } - { - \tl_if_empty:nF { #3 #1 #2 } - { - \msg_error:nnx { prop } { prop-keyval } - { \exp_not:o {#4} } - } - } + \bool_set_eq:NN \l__kernel_keyval_allow_blank_keys_bool \c_true_bool + \keyval_parse:nnn \__prop_missing_eq:n { #2 #3 } {#4} + \bool_set_eq:NN \l__kernel_keyval_allow_blank_keys_bool #1 } \cs_new_protected:Npn \__prop_split:NnTF #1#2 { \exp_args:NNo \__prop_split_aux:NnTF #1 { \tl_to_str:n {#2} } } @@ -10640,7 +10606,7 @@ \msg_new:nnn { prg } { negative-replication } { Negative~argument~for~\iow_char:N\\prg_replicate:nn. } \msg_new:nnn { prop } { prop-keyval } - { Missing/extra~'='~in~'#1'~(in~'..._keyval:Nn') } + { Missing~'='~in~'#1'~(in~'..._keyval:Nn') } \msg_new:nnn { kernel } { unknown-comparison } { Relation~'#1'~not~among~=,<,>,==,!=,<=,>=. } \msg_new:nnn { kernel } { zero-step } @@ -12776,6 +12742,7 @@ \scan_new:N \s__keyval_mark \scan_new:N \s__keyval_stop \scan_new:N \s__keyval_tail +\bool_new:N \l__kernel_keyval_allow_blank_keys_bool \group_begin: \cs_set_protected:Npn \__keyval_tmp:w #1#2 { @@ -12946,9 +12913,11 @@ \cs_new:Npn \__keyval_if_recursion_tail:w \s__keyval_mark #1 \s__keyval_tail { } \cs_new:Npn \__keyval_blank_true:w \s__keyval_mark \s__keyval_stop \__keyval_trim:nN #1 \__keyval_key:nn { \__keyval_loop_other:nnw } -\cs_new:Npn \__keyval_blank_key_error:w #1 \__keyval_loop_other:nnw +\cs_new:Npn \__keyval_blank_key_error:w \s__keyval_mark \s__keyval_stop #1 \__keyval_loop_other:nnw { - \msg_expandable_error:nn { keyval } { blank-key-name } + \bool_if:NTF \l__kernel_keyval_allow_blank_keys_bool + { #1 } + { \msg_expandable_error:nn { keyval } { blank-key-name } } \__keyval_loop_other:nnw } \msg_new:nnn { keyval } { misplaced-equals-sign } @@ -13316,7 +13285,7 @@ } { \msg_error:nnx { keys } - { property-boolean-values-only } + { boolean-values-only } { .value_ #1 :n } } } @@ -13489,6 +13458,22 @@ { \__keys_variable_set_required:NnnN #1 { skip } { g } n } \cs_new_protected:cpn { \c__keys_props_root_str .skip_gset:c } #1 { \__keys_variable_set_required:cnnN {#1} { skip } { g } n } +\cs_new_protected:cpn { \c__keys_props_root_str .str_set:N } #1 + { \__keys_variable_set:NnnN #1 { str } { } n } +\cs_new_protected:cpn { \c__keys_props_root_str .str_set:c } #1 + { \__keys_variable_set:cnnN {#1} { str } { } n } +\cs_new_protected:cpn { \c__keys_props_root_str .str_set_x:N } #1 + { \__keys_variable_set:NnnN #1 { str } { } x } +\cs_new_protected:cpn { \c__keys_props_root_str .str_set_x:c } #1 + { \__keys_variable_set:cnnN {#1} { str } { } x } +\cs_new_protected:cpn { \c__keys_props_root_str .str_gset:N } #1 + { \__keys_variable_set:NnnN #1 { str } { g } n } +\cs_new_protected:cpn { \c__keys_props_root_str .str_gset:c } #1 + { \__keys_variable_set:cnnN {#1} { str } { g } n } +\cs_new_protected:cpn { \c__keys_props_root_str .str_gset_x:N } #1 + { \__keys_variable_set:NnnN #1 { str } { g } x } +\cs_new_protected:cpn { \c__keys_props_root_str .str_gset_x:c } #1 + { \__keys_variable_set:cnnN {#1} { str } { g } x } \cs_new_protected:cpn { \c__keys_props_root_str .tl_set:N } #1 { \__keys_variable_set:NnnN #1 { tl } { } n } \cs_new_protected:cpn { \c__keys_props_root_str .tl_set:c } #1 @@ -15782,9 +15767,7 @@ { \if_catcode:w \scan_stop: \exp_not:N #1 \if_meaning:w \scan_stop: #1 - \if_int_compare:w - \__fp_str_if_eq:nn { \s__fp } { \exp_not:N #1 } - = \c_zero_int + \if:w 0 \__fp_str_if_eq:nn { \s__fp } { \exp_not:N #1 } 0 \msg_expandable_error:nnn { fp } { after-e } { floating~point~ } @@ -15796,9 +15779,7 @@ \prg_return_false: \fi: \else: - \if_int_compare:w - \__fp_str_if_eq:nn { \int_value:w #1 } { \tex_the:D #1 } - = \c_zero_int + \if:w 0 \__fp_str_if_eq:nn { \int_value:w #1 } { \tex_the:D #1 } \int_value:w #1 \else: 0 @@ -16084,9 +16065,7 @@ \cs_new:Npn \__fp_parse_infix:NN #1 #2 { \if_catcode:w \scan_stop: \exp_not:N #2 - \if_int_compare:w - \__fp_str_if_eq:nn { \s__fp_expr_mark } { \exp_not:N #2 } - = \c_zero_int + \if:w 0 \__fp_str_if_eq:nn { \s__fp_expr_mark } { \exp_not:N #2 } \exp_after:wN \exp_after:wN \exp_after:wN \__fp_parse_infix_mark:NNN \else: @@ -16128,9 +16107,7 @@ \cs_new:Npn \__fp_parse_infix_after_paren:NN #1 #2 { \if_catcode:w \scan_stop: \exp_not:N #2 - \if_int_compare:w - \__fp_str_if_eq:nn { \s__fp_expr_mark } { \exp_not:N #2 } - = \c_zero_int + \if:w 0 \__fp_str_if_eq:nn { \s__fp_expr_mark } { \exp_not:N #2 } \exp_after:wN \exp_after:wN \exp_after:wN \__fp_parse_infix_mark:NNN \else: @@ -18769,8 +18746,7 @@ \cs_new:Npn \__fp_pow_normal_o:ww \s__fp \__fp_chk:w 1 #1#2#3; \s__fp \__fp_chk:w #4#5 { - \if_int_compare:w \__fp_str_if_eq:nn { #2 #3 } - { 1 {1000} {0000} {0000} {0000} } = \c_zero_int + \if:w 0 \__fp_str_if_eq:nn { #2 #3 } { 1 {1000} {0000} {0000} {0000} } \if_int_compare:w #4 #1 = 32 \exp_stop_f: \exp_after:wN \__fp_case_return_ii_o:ww \fi: @@ -27973,18 +27949,18 @@ \tl_set:Nx #4 { \cs_if_exist:cTF { __color_convert_ #1 _ #2 :w } - { \use:c { __color_convert_ #1 _ #2 :w } #3 ~ 0 ~ 0 ~ 0 \s__color_stop } + { \use:c { __color_convert_ #1 _ #2 :w } #3 \s__color_stop } { \use:c { c__color_fallback_ #2 _tl } } } } \cs_generate_variant:Nn \__color_convert:nnnN { nV , nnV } -\cs_new:Npn \__color_convert_gray_rgb:w #1 ~ #2 \s__color_stop +\cs_new:Npn \__color_convert_gray_rgb:w #1 \s__color_stop { #1 ~ #1 ~ #1 } -\cs_new:Npn \__color_convert_gray_cmyk:w #1 ~ #2 \s__color_stop +\cs_new:Npn \__color_convert_gray_cmyk:w #1 \s__color_stop { 0 ~ 0 ~ 0 ~ \fp_eval:n { 1 - #1 } } -\cs_new:Npn \__color_convert_rgb_gray:w #1 ~ #2 ~ #3 ~ #4 \s__color_stop +\cs_new:Npn \__color_convert_rgb_gray:w #1 ~ #2 ~ #3 \s__color_stop { \fp_eval:n { 0.3 * #1 + 0.59 * #2 + 0.11 * #3 } } -\cs_new:Npn \__color_convert_rgb_cmyk:w #1 ~ #2 ~ #3 ~ #4 \s__color_stop +\cs_new:Npn \__color_convert_rgb_cmyk:w #1 ~ #2 ~ #3 \s__color_stop { \exp_args:Nf \__color_convert_rgb_cmyk:nnnn { \fp_eval:n { min ( 1 - #1 , 1 - #2 , 1 - #3 ) } } {#1} {#2} {#3} @@ -27996,9 +27972,9 @@ \fp_eval:n { min ( 1 , max ( 0 , 1 - #4 - #1 ) ) } \c_space_tl #1 } -\cs_new:Npn \__color_convert_cmyk_gray:w #1 ~ #2 ~ #3 ~ #4 ~ #5 \s__color_stop +\cs_new:Npn \__color_convert_cmyk_gray:w #1 ~ #2 ~ #3 ~ #4 \s__color_stop { \fp_eval:n { 1 - min ( 1 , 0.3 * #1 + 0.59 * #2 + 0.11 * #3 + #4 ) } } -\cs_new:Npn \__color_convert_cmyk_rgb:w #1 ~ #2 ~ #3 ~ #4 ~ #5 \s__color_stop +\cs_new:Npn \__color_convert_cmyk_rgb:w #1 ~ #2 ~ #3 ~ #4 \s__color_stop { \fp_eval:n { 1 - min ( 1 , #1 + #4 ) } \c_space_tl \fp_eval:n { 1 - min ( 1 , #2 + #4 ) } \c_space_tl @@ -28636,7 +28612,10 @@ { \fp_compare:nNnTF {#1} = { 0 } { 00 } - { \int_to_Hex:n { \fp_to_int:n { #1 * 255 } } } + { + \fp_compare:nNnT { #1 * 255 } < { 16 } { 0 } + \int_to_Hex:n { \fp_to_int:n { #1 * 255 } } + } } \cs_new_protected:cpn { __color_export_space-sep-rgb:Nw } #1#2 \s__color_stop { \tl_set:Nn #1 {#2} } @@ -28791,7 +28770,7 @@ } \cs_new_protected:Npn \__color_model_separation_cmyk:nnnnnn #1#2#3#4#5#6 { - \cs_new:cpn { __color_convert_ #1 _cmyk:w } ##1 ~ ##2 \s__color_stop + \cs_new:cpn { __color_convert_ #1 _cmyk:w } ##1 \s__color_stop { \fp_eval:n {##1 * #3} ~ \fp_eval:n {##1 * #4} ~ @@ -28806,7 +28785,7 @@ } \cs_new_protected:Npn \__color_model_separation_rgb:nnnnnn #1#2#3#4#5#6 { - \cs_new:cpn { __color_convert_ #1 _rgb:w } ##1 ~ ##2 \s__color_stop + \cs_new:cpn { __color_convert_ #1 _rgb:w } ##1 \s__color_stop { \fp_eval:n {##1 * #3} ~ \fp_eval:n {##1 * #4} ~ @@ -28820,16 +28799,16 @@ } \cs_new_protected:Npn \__color_model_separation_gray:nnnnnn #1#2#3#4#5#6 { - \cs_new:cpn { __color_convert_ #1 _cmyk:w } ##1 ~ ##2 \s__color_stop + \cs_new:cpn { __color_convert_ #1 _cmyk:w } ##1 \s__color_stop { \fp_eval:n {##1 * #3} ~ \fp_eval:n {##1 * #3} ~ \fp_eval:n {##1 * #3} ~ \fp_eval:n {##1 * #3} } - \cs_new:cpn { __color_convert_ #1 _gray:w } ##1 ~ ##2 \s__color_stop + \cs_new:cpn { __color_convert_ #1 _gray:w } ##1 \s__color_stop { \fp_eval:n {##1 * #3} } - \cs_new:cpn { __color_convert_ #1 _rgb:w } ##1 ~ ##2 \s__color_stop + \cs_new:cpn { __color_convert_ #1 _rgb:w } ##1 \s__color_stop { \fp_eval:n {##1 * #3} ~ \fp_eval:n {##1 * #3} ~ @@ -28840,11 +28819,11 @@ } \cs_new_protected:Npn \__color_model_convert:nnn #1#2#3 { - \cs_new:cpx { __color_convert_ #1 _ #3 :w } ##1 ~ ##2 \s__color_stop + \cs_new:cpx { __color_convert_ #1 _ #3 :w } ##1 \s__color_stop { \exp_not:N \exp_args:NNe \exp_not:N \use:nn \exp_not:c { __color_convert_ #2 _ #3 :w } - { \exp_not:c { __color_convert_ #1 _ #2 :w } ##1 ~ ##2 \s__color_stop } + { \exp_not:c { __color_convert_ #1 _ #2 :w } ##1 \s__color_stop } \c_space_tl \exp_not:N \s__color_stop } } @@ -28865,11 +28844,11 @@ \tl_if_exist:cTF { c__color_model_whitepoint_CIELAB_ #1 _tl } { \__color_backend_separation_init_CIELAB:nnn {#1} {#3} { #4 ~ #5 ~ #6 } - \cs_new:cpn { __color_convert_ #2 _cmyk:w } ##1 ~ ##2 \s__color_stop + \cs_new:cpn { __color_convert_ #2 _cmyk:w } ##1 \s__color_stop { 0 ~ 0 ~ 0 ~ 1 } - \cs_new:cpn { __color_convert_ #2 _rgb:w } ##1 ~ ##2 \s__color_stop + \cs_new:cpn { __color_convert_ #2 _rgb:w } ##1 \s__color_stop { 1 ~ 1 ~ 1 } - \cs_new:cpn { __color_convert_ #2 _gray:w } ##1 ~ ##2 \s__color_stop + \cs_new:cpn { __color_convert_ #2 _gray:w } ##1 \s__color_stop { 1 } } { @@ -29047,7 +29026,7 @@ \prop_get:NnN \g__color_alternative_values_prop {##1} \l__color_value_tl \exp_after:wN \__color_model_devicen_transform:w - \l__color_value_tl , 0 , 0 , 0 \s__color_stop {#1} {#2} + \l__color_value_tl , 0 , 0 , 0 , \s__color_stop {#1} {#2} } \tl_put_right:Nx \l__color_internal_tl { @@ -29085,7 +29064,7 @@ { \__color_model_devicen_transform:nnn {#5} { 1 } {#1} } \cs_new_protected:cpn { __color_model_devicen_transform_3:nnnnn } #1#2#3#4#5 { - \clist_map_inline { #1 , #2 , #3 } + \clist_map_inline:nn { #1 , #2 , #3 } { \__color_model_devicen_transform:nnn {#5} { 3 } {##1} } } \cs_new_protected:cpn { __color_model_devicen_transform_4:nnnnn } #1#2#3#4#5 @@ -29137,8 +29116,9 @@ { \exp_not:c { __color_convert_devicen_ #2 : \prg_replicate:nn {#3} { n } w } \prg_replicate:nn {#3} { { 1 } } - ##1 \exp_not:N \s__color_mark + ##1 ~ \exp_not:N \s__color_mark \clist_map_function:nN {#4} \__color_model_devicen_convert:n + {} \exp_not:N \s__color_stop } } @@ -29220,7 +29200,7 @@ \cs_new:Npn \__color_convert_devicen_rgb:nnnw #1#2#3#4 ~ #5 \s__color_mark #6#7 \s__color_stop { - \__color_convert_devicen_cmyk:nnnnnn {#4} {#1} {#2} {#3} #6 + \__color_convert_devicen_rgb:nnnnnnn {#4} {#1} {#2} {#3} #6 #5 \s__color_mark #7 \s__color_stop } \cs_new:Npn \__color_convert_devicen_rgb:nnnnnnn #1#2#3#4#5#6#7 diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex b/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex index 3d1e1a7dd99..3e0a8141cb7 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex +++ b/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex @@ -19,7 +19,7 @@ %% and all files in that bundle must be distributed together. %% %% File: expl3.dtx -\def\ExplFileDate{2021-10-18}% +\def\ExplFileDate{2021-11-12}% \let\ExplLoaderFileDate\ExplFileDate \begingroup \catcode`\_=11 diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3.ltx b/Master/texmf-dist/tex/latex/l3kernel/expl3.ltx index 64ef124ddf7..b581aa5d546 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/expl3.ltx +++ b/Master/texmf-dist/tex/latex/l3kernel/expl3.ltx @@ -19,7 +19,7 @@ %% and all files in that bundle must be distributed together. %% %% File: expl3.dtx -\def\ExplFileDate{2021-10-18}% +\def\ExplFileDate{2021-11-12}% \let\ExplLoaderFileDate\ExplFileDate \begingroup \catcode`\_=11 diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3.sty b/Master/texmf-dist/tex/latex/l3kernel/expl3.sty index a76be7b8562..068438f51d7 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/expl3.sty +++ b/Master/texmf-dist/tex/latex/l3kernel/expl3.sty @@ -19,7 +19,7 @@ %% and all files in that bundle must be distributed together. %% %% File: expl3.dtx -\def\ExplFileDate{2021-10-18}% +\def\ExplFileDate{2021-11-12}% \let\ExplLoaderFileDate\ExplFileDate \ProvidesPackage{expl3} [% diff --git a/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty b/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty index b98278e301a..7cd68c95998 100644 --- a/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty +++ b/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty @@ -32,7 +32,7 @@ }% \endinput } -\ProvidesExplPackage{l3keys2e}{2021-08-27}{} +\ProvidesExplPackage{l3keys2e}{2021-11-12}{} {LaTeX2e option processing using LaTeX3 keys} \cs_if_exist:NT \ProcessKeysOptions { \file_input_stop: } diff --git a/Master/texmf-dist/tex/latex/l3packages/xfp/xfp.sty b/Master/texmf-dist/tex/latex/l3packages/xfp/xfp.sty index 06dd1db9e51..56ee80febaa 100644 --- a/Master/texmf-dist/tex/latex/l3packages/xfp/xfp.sty +++ b/Master/texmf-dist/tex/latex/l3packages/xfp/xfp.sty @@ -32,7 +32,7 @@ }% \endinput } -\ProvidesExplPackage{xfp}{2021-08-27}{} +\ProvidesExplPackage{xfp}{2021-11-12}{} {L3 Floating point unit} \NewExpandableDocumentCommand \fpeval { m } { \fp_eval:n {#1} } \NewExpandableDocumentCommand \inteval { m } { \int_eval:n {#1} } diff --git a/Master/texmf-dist/tex/latex/l3packages/xfrac/xfrac.sty b/Master/texmf-dist/tex/latex/l3packages/xfrac/xfrac.sty index 4273d2e8807..33a82a10a75 100644 --- a/Master/texmf-dist/tex/latex/l3packages/xfrac/xfrac.sty +++ b/Master/texmf-dist/tex/latex/l3packages/xfrac/xfrac.sty @@ -34,7 +34,7 @@ \endinput } \RequirePackage{amstext,graphicx,l3keys2e,textcomp,xparse,xtemplate} -\ProvidesExplPackage{xfrac}{2021-08-27}{} +\ProvidesExplPackage{xfrac}{2021-11-12}{} {L3 Experimental split-level fractions} \keys_define:nn { xfrac } { diff --git a/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty b/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty index 1dcf1ecb4b9..9e84418e118 100644 --- a/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty +++ b/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty @@ -60,7 +60,7 @@ } } \ExplSyntaxOff -\ProvidesExplPackage{xparse}{2021-08-27}{} +\ProvidesExplPackage{xparse}{2021-11-12}{} {L3 Experimental document command parser} \clist_new:N \l__cmd_options_clist \DeclareOption* { \clist_put_right:NV \l__cmd_options_clist \CurrentOption } @@ -153,6 +153,10 @@ { \exp_not:c { \l__cmd_expandable_aux_name_tl } } \__cmd_prepare_signature:N } +\cs_new_protected:Npn \__cmd_copy_grabber_u:w #1 #2 #3 + { \__cmd_copy_grabber_D:w {#1} {#2} {#3} { } { } } +\tl_const:Nn \c__cmd_show_type_u_tl { 3 } +\tl_const:Nn \c__cmd_show_type_G_tl { 3 } \cs_new_protected:Npn \__cmd_grab_G:w #1 \__cmd_run_code: { \__cmd_grab_G_aux:nNN {#1} \cs_set_protected_nopar:Npn diff --git a/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty b/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty index 81e7dbb1072..ed9eda1608d 100644 --- a/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty +++ b/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty @@ -32,7 +32,7 @@ }% \endinput } -\ProvidesExplPackage{xtemplate}{2021-08-27}{} +\ProvidesExplPackage{xtemplate}{2021-11-12}{} {L3 Experimental prototype document functions} \tl_const:Nn \c__xtemplate_code_root_tl { template~code~>~ } \tl_const:Nn \c__xtemplate_defaults_root_tl { template~defaults~>~ } @@ -313,7 +313,7 @@ \seq_put_right:No \l__xtemplate_key_order_seq \l__xtemplate_key_name_tl \str_if_eq:onT \l__xtemplate_keytype_tl { choice } { - \clist_if_in:NnT \l__xtemplate_keytype_arg_tl { unknown } + \exp_args:No \clist_if_in:nnT \l__xtemplate_keytype_arg_tl { unknown } { \msg_error:nn { xtemplate } { choice-unknown-reserved } } } } @@ -413,59 +413,27 @@ \cs_new_protected:Npn \__xtemplate_store_value_code:n #1 { \prop_put:Non \l__xtemplate_values_prop \l__xtemplate_key_name_tl {#1} } \cs_new_eq:NN \__xtemplate_store_value_choice:n \__xtemplate_store_value_code:n -\cs_new_eq:NN \__xtemplate_store_value_commalist:n \__xtemplate_store_value_code:n \cs_new_eq:NN \__xtemplate_store_value_function:n \__xtemplate_store_value_code:n \cs_new_eq:NN \__xtemplate_store_value_instance:n \__xtemplate_store_value_code:n -\cs_new_eq:NN \__xtemplate_store_value_real:n \__xtemplate_store_value_code:n -\cs_new_eq:NN \__xtemplate_store_value_tokenlist:n \__xtemplate_store_value_code:n -\cs_new_protected:Npn \__xtemplate_store_value_integer:n #1 - { - \__xtemplate_if_eval_now:nTF {#1} - { - \int_set:Nn \l__xtemplate_tmp_int {#1} - \prop_put:NVV \l__xtemplate_values_prop \l__xtemplate_key_name_int - \l__xtemplate_tmp_int - } - { - \prop_put:Non \l__xtemplate_values_prop \l__xtemplate_key_name_tl {#1} - } - } -\cs_new_protected:Npn \__xtemplate_store_value_length:n #1 - { - \__xtemplate_if_eval_now:nTF {#1} - { - \dim_set:Nn \l__xtemplate_tmp_dim {#1} - \prop_put:NVV \l__xtemplate_values_prop \l__xtemplate_key_name_tl - \l__xtemplate_tmp_dim - } - { - \prop_put:Non \l__xtemplate_values_prop \l__xtemplate_key_name_tl {#1} - } - } -\cs_new_protected:Npn \__xtemplate_store_value_muskip:n #1 - { - \__xtemplate_if_eval_now:nTF {#1} - { - \muskip_set:Nn \l__xtemplate_tmp_muskip {#1} - \prop_put:NVV \l__xtemplate_values_prop \l__xtemplate_key_name_tl - \l__xtemplate_tmp_muskip - } - { - \prop_put:Non \l__xtemplate_values_prop \l__xtemplate_key_name_tl {#1} - } - } -\cs_new_protected:Npn \__xtemplate_store_value_skip:n #1 - { - \__xtemplate_if_eval_now:nTF {#1} - { - \skip_set:Nn \l__xtemplate_tmp_skip {#1} - \prop_put:NVV \l__xtemplate_values_prop \l__xtemplate_key_name_tl - \l__xtemplate_tmp_skip - } - { - \prop_put:Non \l__xtemplate_values_prop \l__xtemplate_key_name_tl {#1} - } - } +\cs_new_protected:Npn \__xtemplate_store_value_aux:Nn #1#2 + { + \__xtemplate_if_eval_now:nTF {#2} + { \prop_put:NVx \l__xtemplate_values_prop \l__xtemplate_key_name_tl { #1 {#2} } } + { \prop_put:Non \l__xtemplate_values_prop \l__xtemplate_key_name_tl {#2} } + } +\cs_new_protected:Npn \__xtemplate_store_value_integer:n + { \__xtemplate_store_value_aux:Nn \int_eval:n } +\cs_new_protected:Npn \__xtemplate_store_value_length:n + { \__xtemplate_store_value_aux:Nn \dim_eval:n } +\cs_new_protected:Npn \__xtemplate_store_value_muskip:n + { \__xtemplate_store_value_aux:Nn \muskip_eval:n } +\cs_new_protected:Npn \__xtemplate_store_value_real:n + { \__xtemplate_store_value_aux:Nn \fp_eval:n } +\cs_new_protected:Npn \__xtemplate_store_value_skip:n + { \__xtemplate_store_value_aux:Nn \skip_eval:n } +\cs_new_protected:Npn \__xtemplate_store_value_tokenlist:n + { \__xtemplate_store_value_aux:Nn \use:n } +\cs_new_eq:NN \__xtemplate_store_value_commalist:n \__xtemplate_store_value_tokenlist:n \cs_new_protected:Npn \__xtemplate_declare_template_code:nnnnn #1#2#3#4#5 { \__xtemplate_execute_if_type_exist:nT {#1} @@ -582,7 +550,7 @@ } \cs_new_protected:Npn \__xtemplate_implement_choices:n #1 { - \clist_set_eq:NN \l__xtemplate_tmp_clist \l__xtemplate_keytype_arg_tl + \clist_set:No \l__xtemplate_tmp_clist { \l__xtemplate_keytype_arg_tl } \prop_put:Non \l__xtemplate_vars_prop \l__xtemplate_key_name_tl { } \keyval_parse:NNn \__xtemplate_implement_choice_elt:n \__xtemplate_implement_choice_elt:nn |