From 36afb13206c5cf659854dce54a7e001273ca71e9 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Tue, 27 Oct 2020 20:55:42 +0000 Subject: l3 (27oct20) git-svn-id: svn://tug.org/texlive/trunk@56785 c570f23f-e606-0410-a88d-b1316a301751 --- .../doc/latex/l3experimental/CHANGELOG.md | 5 +- .../texmf-dist/doc/latex/l3experimental/README.md | 2 +- .../l3experimental/l3benchmark/l3benchmark.pdf | Bin 314283 -> 314157 bytes .../doc/latex/l3experimental/l3color/l3color.pdf | Bin 369239 -> 369116 bytes .../latex/l3experimental/l3draw/l3draw-code.pdf | Bin 606612 -> 606608 bytes .../doc/latex/l3experimental/l3draw/l3draw.pdf | Bin 489845 -> 489723 bytes .../latex/l3experimental/l3graphics/l3graphics.pdf | Bin 363142 -> 363017 bytes .../doc/latex/l3experimental/l3pdf/l3pdf-code.pdf | Bin 276912 -> 276676 bytes .../doc/latex/l3experimental/l3pdf/l3pdf.pdf | Bin 350809 -> 350697 bytes .../latex/l3experimental/l3str/l3str-format.pdf | Bin 344919 -> 344795 bytes .../l3experimental/l3sys-shell/l3sys-shell.pdf | Bin 311752 -> 311621 bytes .../doc/latex/l3experimental/xcoffins/xcoffins.pdf | Bin 372906 -> 372787 bytes .../doc/latex/l3experimental/xgalley/l3galley.pdf | Bin 385778 -> 385657 bytes .../doc/latex/l3experimental/xgalley/xgalley.pdf | Bin 285694 -> 285576 bytes Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md | 20 +- Master/texmf-dist/doc/latex/l3kernel/README.md | 2 +- Master/texmf-dist/doc/latex/l3kernel/expl3.pdf | Bin 585263 -> 585109 bytes .../texmf-dist/doc/latex/l3kernel/interface3.pdf | Bin 1558337 -> 1558149 bytes .../texmf-dist/doc/latex/l3kernel/interface3.tex | 2 +- .../texmf-dist/doc/latex/l3kernel/l3docstrip.pdf | Bin 263355 -> 263178 bytes Master/texmf-dist/doc/latex/l3kernel/l3news.pdf | Bin 379235 -> 384356 bytes Master/texmf-dist/doc/latex/l3kernel/l3news01.pdf | Bin 113527 -> 113527 bytes Master/texmf-dist/doc/latex/l3kernel/l3news02.pdf | Bin 140776 -> 140776 bytes Master/texmf-dist/doc/latex/l3kernel/l3news03.pdf | Bin 144785 -> 144785 bytes Master/texmf-dist/doc/latex/l3kernel/l3news04.pdf | Bin 107115 -> 107115 bytes Master/texmf-dist/doc/latex/l3kernel/l3news05.pdf | Bin 105090 -> 105090 bytes Master/texmf-dist/doc/latex/l3kernel/l3news06.pdf | Bin 140795 -> 140795 bytes Master/texmf-dist/doc/latex/l3kernel/l3news07.pdf | Bin 119094 -> 119094 bytes Master/texmf-dist/doc/latex/l3kernel/l3news08.pdf | Bin 152413 -> 152413 bytes Master/texmf-dist/doc/latex/l3kernel/l3news09.pdf | Bin 235322 -> 235322 bytes Master/texmf-dist/doc/latex/l3kernel/l3news10.pdf | Bin 147097 -> 147097 bytes Master/texmf-dist/doc/latex/l3kernel/l3news11.pdf | Bin 165946 -> 165946 bytes Master/texmf-dist/doc/latex/l3kernel/l3news12.pdf | Bin 199139 -> 199139 bytes .../texmf-dist/doc/latex/l3kernel/l3prefixes.pdf | Bin 75933 -> 75933 bytes .../texmf-dist/doc/latex/l3kernel/l3styleguide.pdf | Bin 280099 -> 279954 bytes .../texmf-dist/doc/latex/l3kernel/l3styleguide.tex | 2 +- .../doc/latex/l3kernel/l3syntax-changes.pdf | Bin 228396 -> 228250 bytes .../doc/latex/l3kernel/l3syntax-changes.tex | 2 +- .../doc/latex/l3kernel/l3term-glossary.pdf | Bin 217769 -> 217627 bytes .../doc/latex/l3kernel/l3term-glossary.tex | 2 +- Master/texmf-dist/doc/latex/l3kernel/source3.pdf | Bin 5871958 -> 5903982 bytes Master/texmf-dist/doc/latex/l3kernel/source3.tex | 2 +- .../texmf-dist/doc/latex/l3packages/CHANGELOG.md | 8 +- Master/texmf-dist/doc/latex/l3packages/README.md | 2 +- .../doc/latex/l3packages/l3keys2e/l3keys2e.pdf | Bin 347610 -> 347471 bytes Master/texmf-dist/doc/latex/l3packages/xfp/xfp.pdf | Bin 309970 -> 309802 bytes .../doc/latex/l3packages/xfrac/xfrac.pdf | Bin 454380 -> 481205 bytes .../doc/latex/l3packages/xparse/xparse.pdf | Bin 505943 -> 505768 bytes .../doc/latex/l3packages/xtemplate/xtemplate.pdf | Bin 416501 -> 416314 bytes .../l3experimental/l3benchmark/l3benchmark.dtx | 4 +- .../latex/l3experimental/l3color/l3color.dtx | 4 +- .../latex/l3experimental/l3draw/l3draw-boxes.dtx | 2 +- .../latex/l3experimental/l3draw/l3draw-layers.dtx | 2 +- .../latex/l3experimental/l3draw/l3draw-paths.dtx | 2 +- .../latex/l3experimental/l3draw/l3draw-points.dtx | 2 +- .../latex/l3experimental/l3draw/l3draw-scopes.dtx | 2 +- .../l3experimental/l3draw/l3draw-softpath.dtx | 2 +- .../latex/l3experimental/l3draw/l3draw-state.dtx | 2 +- .../l3experimental/l3draw/l3draw-transforms.dtx | 2 +- .../source/latex/l3experimental/l3draw/l3draw.dtx | 4 +- .../latex/l3experimental/l3graphics/l3graphics.dtx | 4 +- .../source/latex/l3experimental/l3pdf/l3pdf.dtx | 4 +- .../latex/l3experimental/l3str/l3str-format.dtx | 4 +- .../l3experimental/l3sys-shell/l3sys-shell.dtx | 4 +- .../latex/l3experimental/xcoffins/xcoffins.dtx | 4 +- .../latex/l3experimental/xgalley/l3galley.dtx | 4 +- .../latex/l3experimental/xgalley/xgalley.dtx | 4 +- Master/texmf-dist/source/latex/l3kernel/expl3.dtx | 6 +- .../texmf-dist/source/latex/l3kernel/l3basics.dtx | 2 +- .../source/latex/l3kernel/l3bootstrap.dtx | 2 +- Master/texmf-dist/source/latex/l3kernel/l3box.dtx | 2 +- .../source/latex/l3kernel/l3candidates.dtx | 16 +- .../texmf-dist/source/latex/l3kernel/l3cctab.dtx | 7 +- .../texmf-dist/source/latex/l3kernel/l3clist.dtx | 30 +- .../texmf-dist/source/latex/l3kernel/l3coffins.dtx | 4 +- .../source/latex/l3kernel/l3color-base.dtx | 2 +- .../texmf-dist/source/latex/l3kernel/l3debug.dtx | 26 +- .../source/latex/l3kernel/l3deprecation.dtx | 6 +- Master/texmf-dist/source/latex/l3kernel/l3doc.dtx | 32 +- .../source/latex/l3kernel/l3docstrip.dtx | 2 +- .../texmf-dist/source/latex/l3kernel/l3expan.dtx | 2 +- Master/texmf-dist/source/latex/l3kernel/l3file.dtx | 38 +- Master/texmf-dist/source/latex/l3kernel/l3flag.dtx | 2 +- .../source/latex/l3kernel/l3fp-assign.dtx | 6 +- .../texmf-dist/source/latex/l3kernel/l3fp-aux.dtx | 2 +- .../source/latex/l3kernel/l3fp-basics.dtx | 2 +- .../source/latex/l3kernel/l3fp-convert.dtx | 2 +- .../texmf-dist/source/latex/l3kernel/l3fp-expo.dtx | 2 +- .../source/latex/l3kernel/l3fp-extended.dtx | 2 +- .../source/latex/l3kernel/l3fp-logic.dtx | 2 +- .../source/latex/l3kernel/l3fp-parse.dtx | 2 +- .../source/latex/l3kernel/l3fp-random.dtx | 2 +- .../source/latex/l3kernel/l3fp-round.dtx | 2 +- .../source/latex/l3kernel/l3fp-traps.dtx | 2 +- .../texmf-dist/source/latex/l3kernel/l3fp-trig.dtx | 2 +- Master/texmf-dist/source/latex/l3kernel/l3fp.dtx | 6 +- .../texmf-dist/source/latex/l3kernel/l3fparray.dtx | 2 +- Master/texmf-dist/source/latex/l3kernel/l3int.dtx | 2 +- .../source/latex/l3kernel/l3intarray.dtx | 2 +- .../source/latex/l3kernel/l3kernel-functions.dtx | 11 +- Master/texmf-dist/source/latex/l3kernel/l3keys.dtx | 10 +- .../texmf-dist/source/latex/l3kernel/l3legacy.dtx | 2 +- .../texmf-dist/source/latex/l3kernel/l3luatex.dtx | 2 +- Master/texmf-dist/source/latex/l3kernel/l3msg.dtx | 2 +- .../texmf-dist/source/latex/l3kernel/l3names.dtx | 2 +- Master/texmf-dist/source/latex/l3kernel/l3prg.dtx | 2 +- Master/texmf-dist/source/latex/l3kernel/l3prop.dtx | 10 +- .../texmf-dist/source/latex/l3kernel/l3quark.dtx | 2 +- .../texmf-dist/source/latex/l3kernel/l3regex.dtx | 22 +- Master/texmf-dist/source/latex/l3kernel/l3seq.dtx | 50 +- Master/texmf-dist/source/latex/l3kernel/l3skip.dtx | 2 +- Master/texmf-dist/source/latex/l3kernel/l3sort.dtx | 4 +- .../source/latex/l3kernel/l3str-convert.dtx | 30 +- Master/texmf-dist/source/latex/l3kernel/l3str.dtx | 10 +- Master/texmf-dist/source/latex/l3kernel/l3sys.dtx | 4 +- .../source/latex/l3kernel/l3text-case.dtx | 693 +++++++++-- .../source/latex/l3kernel/l3text-purify.dtx | 9 +- Master/texmf-dist/source/latex/l3kernel/l3text.dtx | 5 +- .../source/latex/l3kernel/l3tl-analysis.dtx | 4 +- Master/texmf-dist/source/latex/l3kernel/l3tl.dtx | 860 +++++++------ .../texmf-dist/source/latex/l3kernel/l3token.dtx | 24 +- .../texmf-dist/source/latex/l3kernel/l3unicode.dtx | 2 +- .../source/latex/l3packages/l3keys2e/l3keys2e.dtx | 4 +- .../texmf-dist/source/latex/l3packages/xfp/xfp.dtx | 4 +- .../source/latex/l3packages/xfrac/xfrac.dtx | 4 +- .../source/latex/l3packages/xparse/xparse.dtx | 6 +- .../latex/l3packages/xtemplate/xtemplate.dtx | 4 +- .../l3experimental/l3benchmark/l3benchmark.sty | 2 +- .../tex/latex/l3experimental/l3color/l3color.sty | 2 +- .../tex/latex/l3experimental/l3draw/l3draw.sty | 2 +- .../latex/l3experimental/l3graphics/l3graphics.sty | 2 +- .../tex/latex/l3experimental/l3pdf/l3pdf.sty | 2 +- .../latex/l3experimental/l3str/l3str-format.sty | 2 +- .../l3experimental/l3sys-shell/l3sys-shell.sty | 2 +- .../tex/latex/l3experimental/xcoffins/xcoffins.sty | 2 +- .../tex/latex/l3experimental/xgalley/l3galley.sty | 2 +- .../tex/latex/l3experimental/xgalley/xgalley.sty | 2 +- .../texmf-dist/tex/latex/l3kernel/expl3-code.tex | 1283 ++++++++++++++------ .../tex/latex/l3kernel/expl3-generic.tex | 2 +- Master/texmf-dist/tex/latex/l3kernel/expl3.ltx | 4 +- Master/texmf-dist/tex/latex/l3kernel/expl3.sty | 4 +- Master/texmf-dist/tex/latex/l3kernel/l3debug.def | 20 +- .../tex/latex/l3kernel/l3deprecation.def | 4 +- Master/texmf-dist/tex/latex/l3kernel/l3doc.cls | 30 +- .../tex/latex/l3packages/l3keys2e/l3keys2e.sty | 2 +- Master/texmf-dist/tex/latex/l3packages/xfp/xfp.sty | 2 +- .../tex/latex/l3packages/xfrac/xfrac.sty | 2 +- .../tex/latex/l3packages/xparse/xparse.ltx | 2 +- .../tex/latex/l3packages/xparse/xparse.sty | 4 +- .../tex/latex/l3packages/xtemplate/xtemplate.sty | 2 +- 150 files changed, 2380 insertions(+), 1109 deletions(-) diff --git a/Master/texmf-dist/doc/latex/l3experimental/CHANGELOG.md b/Master/texmf-dist/doc/latex/l3experimental/CHANGELOG.md index a5931d997c7..ddb78d83f9e 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/CHANGELOG.md +++ b/Master/texmf-dist/doc/latex/l3experimental/CHANGELOG.md @@ -7,6 +7,8 @@ this project uses date-based 'snapshot' version identifiers. ## [Unreleased] +## [2020-10-27] + ### Changed - Use Lua pseudo-primitives instead of `\directlua` @@ -182,7 +184,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/2020-09-24...HEAD +[Unreleased]: https://github.com/latex3/latex3/compare/2020-10-27...HEAD +[2020-10-27]: https://github.com/latex3/latex3/compare/2020-09-24...2020-10-27 [2020-09-24]: https://github.com/latex3/latex3/compare/2020-09-11...2020-09-24 [2020-09-11]: https://github.com/latex3/latex3/compare/2020-09-01...2020-09-11 [2020-09-01]: https://github.com/latex3/latex3/compare/2020-08-07...2020-09-01 diff --git a/Master/texmf-dist/doc/latex/l3experimental/README.md b/Master/texmf-dist/doc/latex/l3experimental/README.md index ec0cabe5024..16f95a9bf06 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 2020-09-24 +Release 2020-10-27 Overview -------- diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3benchmark/l3benchmark.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3benchmark/l3benchmark.pdf index 277dab2a22f..972ae840fdc 100644 Binary files a/Master/texmf-dist/doc/latex/l3experimental/l3benchmark/l3benchmark.pdf and b/Master/texmf-dist/doc/latex/l3experimental/l3benchmark/l3benchmark.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3color/l3color.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3color/l3color.pdf index e6704028328..6aafcd28098 100644 Binary files a/Master/texmf-dist/doc/latex/l3experimental/l3color/l3color.pdf and b/Master/texmf-dist/doc/latex/l3experimental/l3color/l3color.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw-code.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw-code.pdf index 95ef0c0c736..9a4abc8d423 100644 Binary files a/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw-code.pdf and b/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw-code.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw.pdf index 6e4e62367ee..2e125d5b9e4 100644 Binary files a/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw.pdf and b/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3graphics/l3graphics.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3graphics/l3graphics.pdf index 74a9c730773..f36e0411314 100644 Binary files a/Master/texmf-dist/doc/latex/l3experimental/l3graphics/l3graphics.pdf and b/Master/texmf-dist/doc/latex/l3experimental/l3graphics/l3graphics.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3pdf/l3pdf-code.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3pdf/l3pdf-code.pdf index e73f7fb4648..a2c44a18a04 100644 Binary files a/Master/texmf-dist/doc/latex/l3experimental/l3pdf/l3pdf-code.pdf and b/Master/texmf-dist/doc/latex/l3experimental/l3pdf/l3pdf-code.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3pdf/l3pdf.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3pdf/l3pdf.pdf index cede734c74d..91f5aab0cfc 100644 Binary files a/Master/texmf-dist/doc/latex/l3experimental/l3pdf/l3pdf.pdf and b/Master/texmf-dist/doc/latex/l3experimental/l3pdf/l3pdf.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.pdf index 75bdb6272d7..aa121323d47 100644 Binary files a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.pdf and b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.pdf differ 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 index a01691cf7e8..bc87e9cf634 100644 Binary files a/Master/texmf-dist/doc/latex/l3experimental/l3sys-shell/l3sys-shell.pdf and b/Master/texmf-dist/doc/latex/l3experimental/l3sys-shell/l3sys-shell.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3experimental/xcoffins/xcoffins.pdf b/Master/texmf-dist/doc/latex/l3experimental/xcoffins/xcoffins.pdf index 6843289a1b8..4376d735902 100644 Binary files a/Master/texmf-dist/doc/latex/l3experimental/xcoffins/xcoffins.pdf and b/Master/texmf-dist/doc/latex/l3experimental/xcoffins/xcoffins.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3experimental/xgalley/l3galley.pdf b/Master/texmf-dist/doc/latex/l3experimental/xgalley/l3galley.pdf index d23ea467fca..9e1a0bd2639 100644 Binary files a/Master/texmf-dist/doc/latex/l3experimental/xgalley/l3galley.pdf and b/Master/texmf-dist/doc/latex/l3experimental/xgalley/l3galley.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3experimental/xgalley/xgalley.pdf b/Master/texmf-dist/doc/latex/l3experimental/xgalley/xgalley.pdf index 1bd85f608d2..56fe6499fd9 100644 Binary files a/Master/texmf-dist/doc/latex/l3experimental/xgalley/xgalley.pdf and b/Master/texmf-dist/doc/latex/l3experimental/xgalley/xgalley.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md b/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md index 3e416742d99..cfca3155d03 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md +++ b/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md @@ -7,13 +7,26 @@ this project uses date-based 'snapshot' version identifiers. ## [Unreleased] +## [2020-10-27] + +### Added + +- `\token_if_font_selection:N(TF)` (see #806) + ### Fixed -- Correctly detect LaTeX when pre-loading expl3 and setting up - case changer +- Avoid relying on braced `\input` primitive syntax +- Correct expansion of environments in `\text_purify:n` +- Some aspects of `cctab` setup with 8-bit engines(issue #814) + +### Changed +- Improved performance for `tl` functions +- Extend case changer to cover all of Greek with pdfTeX ## [2020-10-05] ### Fixed +- Correctly detect LaTeX when pre-loading expl3 and setting up + case changer - Lua emulation of \strcmp (issue #813) ## [2020-09-24] @@ -780,7 +793,8 @@ this project uses date-based 'snapshot' version identifiers. - Step func­tions have been added for dim vari­ables, e.g. `\dim_step_in­line:nnnn` -[Unreleased]: https://github.com/latex3/latex3/compare/2020-10-05...HEAD +[Unreleased]: https://github.com/latex3/latex3/compare/2020-10-27...HEAD +[2020-10-27]: https://github.com/latex3/latex3/compare/2020-10-05...2020-10-27 [2020-10-05]: https://github.com/latex3/latex3/compare/2020-09-24...2020-10-05 [2020-09-24]: https://github.com/latex3/latex3/compare/2020-09-06...2020-09-24 [2020-09-06]: https://github.com/latex3/latex3/compare/2020-09-03...2020-09-06 diff --git a/Master/texmf-dist/doc/latex/l3kernel/README.md b/Master/texmf-dist/doc/latex/l3kernel/README.md index 8fabd3e1679..2361e047a8a 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 2020-10-05 +Release 2020-10-27 Overview -------- diff --git a/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf b/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf index 9291487c4b7..c2499563315 100644 Binary files a/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf and b/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf b/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf index 36f3ab7387d..b7b0dbf9a91 100644 Binary files a/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf and b/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3kernel/interface3.tex b/Master/texmf-dist/doc/latex/l3kernel/interface3.tex index 87fea02ba40..071ddd4bdf8 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 2020-10-05} +\date{Released 2020-10-27} \pagenumbering{roman} \maketitle diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf index 55a73b91763..9a63be0ebe2 100644 Binary files a/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf and b/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3news.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3news.pdf index f9308d56e2d..cd9eead890f 100644 Binary files a/Master/texmf-dist/doc/latex/l3kernel/l3news.pdf and b/Master/texmf-dist/doc/latex/l3kernel/l3news.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3news01.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3news01.pdf index b03a1bb3058..4919fac2b16 100644 Binary files a/Master/texmf-dist/doc/latex/l3kernel/l3news01.pdf and b/Master/texmf-dist/doc/latex/l3kernel/l3news01.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3news02.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3news02.pdf index dfa67fdf1fb..f5a33f51b42 100644 Binary files a/Master/texmf-dist/doc/latex/l3kernel/l3news02.pdf and b/Master/texmf-dist/doc/latex/l3kernel/l3news02.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3news03.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3news03.pdf index bdb7487e3e8..9ee630bddb2 100644 Binary files a/Master/texmf-dist/doc/latex/l3kernel/l3news03.pdf and b/Master/texmf-dist/doc/latex/l3kernel/l3news03.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3news04.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3news04.pdf index 7c1df5cdbfd..843b757d416 100644 Binary files a/Master/texmf-dist/doc/latex/l3kernel/l3news04.pdf and b/Master/texmf-dist/doc/latex/l3kernel/l3news04.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3news05.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3news05.pdf index 9987dcd1eb2..b6e9ce58cf5 100644 Binary files a/Master/texmf-dist/doc/latex/l3kernel/l3news05.pdf and b/Master/texmf-dist/doc/latex/l3kernel/l3news05.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3news06.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3news06.pdf index 82f432de522..0a9530e337e 100644 Binary files a/Master/texmf-dist/doc/latex/l3kernel/l3news06.pdf and b/Master/texmf-dist/doc/latex/l3kernel/l3news06.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3news07.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3news07.pdf index fde7e247a08..2a946711ea8 100644 Binary files a/Master/texmf-dist/doc/latex/l3kernel/l3news07.pdf and b/Master/texmf-dist/doc/latex/l3kernel/l3news07.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3news08.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3news08.pdf index aba29f06bf2..b4e91f3196d 100644 Binary files a/Master/texmf-dist/doc/latex/l3kernel/l3news08.pdf and b/Master/texmf-dist/doc/latex/l3kernel/l3news08.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3news09.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3news09.pdf index 9ab6e1c83aa..43ee33b1487 100644 Binary files a/Master/texmf-dist/doc/latex/l3kernel/l3news09.pdf and b/Master/texmf-dist/doc/latex/l3kernel/l3news09.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3news10.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3news10.pdf index 31d2e513d88..d8cbe38b333 100644 Binary files a/Master/texmf-dist/doc/latex/l3kernel/l3news10.pdf and b/Master/texmf-dist/doc/latex/l3kernel/l3news10.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3news11.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3news11.pdf index a5ba6e366bf..65240af456c 100644 Binary files a/Master/texmf-dist/doc/latex/l3kernel/l3news11.pdf and b/Master/texmf-dist/doc/latex/l3kernel/l3news11.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3news12.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3news12.pdf index 043c4361778..37d8e10aa1a 100644 Binary files a/Master/texmf-dist/doc/latex/l3kernel/l3news12.pdf and b/Master/texmf-dist/doc/latex/l3kernel/l3news12.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3prefixes.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3prefixes.pdf index 820a86d56f9..50089cf13c3 100644 Binary files a/Master/texmf-dist/doc/latex/l3kernel/l3prefixes.pdf and b/Master/texmf-dist/doc/latex/l3kernel/l3prefixes.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf index 500dc3de312..6969a153b80 100644 Binary files a/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf and b/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex b/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex index 05b109dd10b..c94f8239f8a 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 2020-10-05} +\date{Released 2020-10-27} \begin{document} diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf index 51984523976..f191cd2bdc0 100644 Binary files a/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf and b/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex b/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex index da8657d5847..d1ac2146512 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 2020-10-05} +\date{Released 2020-10-27} \newcommand{\TF}{\textit{(TF)}} diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.pdf index 44bdf57b858..ce59abacbe6 100644 Binary files a/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.pdf and b/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.tex b/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.tex index 42efb4ad300..051c23c1bbd 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 2020-10-05} +\date{Released 2020-10-27} \newcommand{\TF}{\textit{(TF)}} diff --git a/Master/texmf-dist/doc/latex/l3kernel/source3.pdf b/Master/texmf-dist/doc/latex/l3kernel/source3.pdf index 43709c4c565..43048251a43 100644 Binary files a/Master/texmf-dist/doc/latex/l3kernel/source3.pdf and b/Master/texmf-dist/doc/latex/l3kernel/source3.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3kernel/source3.tex b/Master/texmf-dist/doc/latex/l3kernel/source3.tex index 2d31c20423d..f47fbf0233e 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 2020-10-05} +\date{Released 2020-10-27} \pagenumbering{roman} \maketitle diff --git a/Master/texmf-dist/doc/latex/l3packages/CHANGELOG.md b/Master/texmf-dist/doc/latex/l3packages/CHANGELOG.md index 4ea7d2c4bc3..cc4089d0a40 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] +## [2020-10-27] + +### Changed +- Avoid relying on braced `\input` primitive syntax + ## [2020-10-05] ### Changed @@ -108,7 +113,8 @@ this project uses date-based 'snapshot' version identifiers. - Switch to ISO date format - Improve cross-module use of internal functions -[Unreleased]: https://github.com/latex3/latex3/compare/2020-10-05...HEAD +[Unreleased]: https://github.com/latex3/latex3/compare/2020-10-27...HEAD +[2020-10-27]: https://github.com/latex3/latex3/compare/2020-10-05...2020-10-27 [2020-10-05]: https://github.com/latex3/latex3/compare/2020-05-15...2020-10-05 [2020-05-15]: https://github.com/latex3/latex3/compare/2020-05-14...2020-05-15 [2020-05-14]: https://github.com/latex3/latex3/compare/2020-03-06...2020-05-14 diff --git a/Master/texmf-dist/doc/latex/l3packages/README.md b/Master/texmf-dist/doc/latex/l3packages/README.md index 0e62682ca9b..4e93c60b23b 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 2020-10-05 +Release 2020-10-27 Overview -------- diff --git a/Master/texmf-dist/doc/latex/l3packages/l3keys2e/l3keys2e.pdf b/Master/texmf-dist/doc/latex/l3packages/l3keys2e/l3keys2e.pdf index 5e1361961de..b2b2017b57c 100644 Binary files a/Master/texmf-dist/doc/latex/l3packages/l3keys2e/l3keys2e.pdf and b/Master/texmf-dist/doc/latex/l3packages/l3keys2e/l3keys2e.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3packages/xfp/xfp.pdf b/Master/texmf-dist/doc/latex/l3packages/xfp/xfp.pdf index 7aa7032aed0..eff2203dc90 100644 Binary files a/Master/texmf-dist/doc/latex/l3packages/xfp/xfp.pdf and b/Master/texmf-dist/doc/latex/l3packages/xfp/xfp.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3packages/xfrac/xfrac.pdf b/Master/texmf-dist/doc/latex/l3packages/xfrac/xfrac.pdf index 696c5f1ca47..3861a6848a5 100644 Binary files a/Master/texmf-dist/doc/latex/l3packages/xfrac/xfrac.pdf and b/Master/texmf-dist/doc/latex/l3packages/xfrac/xfrac.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3packages/xparse/xparse.pdf b/Master/texmf-dist/doc/latex/l3packages/xparse/xparse.pdf index e7eb1fd4a48..4331d6c3f01 100644 Binary files a/Master/texmf-dist/doc/latex/l3packages/xparse/xparse.pdf and b/Master/texmf-dist/doc/latex/l3packages/xparse/xparse.pdf differ diff --git a/Master/texmf-dist/doc/latex/l3packages/xtemplate/xtemplate.pdf b/Master/texmf-dist/doc/latex/l3packages/xtemplate/xtemplate.pdf index 36331ecb243..8afc1d87b84 100644 Binary files a/Master/texmf-dist/doc/latex/l3packages/xtemplate/xtemplate.pdf and b/Master/texmf-dist/doc/latex/l3packages/xtemplate/xtemplate.pdf differ diff --git a/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.dtx b/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.dtx index eb67ec98760..6842fff3c7e 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 2020-09-24} +% \date{Released 2020-10-27} % % \maketitle % @@ -129,7 +129,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3benchmark}{2020-09-24}{} +\ProvidesExplPackage{l3benchmark}{2020-10-27}{} {L3 Experimental benchmarking} % \end{macrocode} % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.dtx b/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.dtx index 88129ca31ee..9b81f5403c7 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.dtx @@ -46,7 +46,7 @@ % }^^A % } % -% \date{Released 2020-09-24} +% \date{Released 2020-10-27} % % \maketitle % @@ -421,7 +421,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3color}{2020-09-24}{} +\ProvidesExplPackage{l3color}{2020-10-27}{} {L3 Experimental color support} % \end{macrocode} % 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 029f7918136..fc0e64eae04 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 2020-09-24} +% \date{Released 2020-10-27} % % \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 19898aee89e..4b676ece844 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 2020-09-24} +% \date{Released 2020-10-27} % % \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 5ca8e42688e..b43f3b93b5f 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 2020-09-24} +% \date{Released 2020-10-27} % % \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 7537ffb85ad..3900b98f4d9 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 2020-09-24} +% \date{Released 2020-10-27} % % \maketitle % 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 c35149facbe..6a828302e81 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 2020-09-24} +% \date{Released 2020-10-27} % % \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 b0e003b844b..626a45736ad 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 2020-09-24} +% \date{Released 2020-10-27} % % \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 1af7a525b9b..c74d9ecbb0d 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 2020-09-24} +% \date{Released 2020-10-27} % % \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 6bb90111e19..82f31a9e600 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 2020-09-24} +% \date{Released 2020-10-27} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx index 69f322a0fad..eef0412c736 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 2020-09-24} +% \date{Released 2020-10-27} % % \maketitle % @@ -1136,7 +1136,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3draw}{2020-09-24}{} +\ProvidesExplPackage{l3draw}{2020-10-27}{} {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 9a449734172..0f8a52c0097 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 2020-09-24} +% \date{Released 2020-10-27} % % \maketitle % @@ -240,7 +240,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3graphics}{2020-09-24}{} +\ProvidesExplPackage{l3graphics}{2020-10-27}{} {L3 Experimental graphics inclusion support} % \end{macrocode} % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3pdf/l3pdf.dtx b/Master/texmf-dist/source/latex/l3experimental/l3pdf/l3pdf.dtx index 4eec458dcee..e51606a1301 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3pdf/l3pdf.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3pdf/l3pdf.dtx @@ -46,7 +46,7 @@ % }^^A % } % -% \date{Released 2020-09-24} +% \date{Released 2020-10-27} % % \maketitle % @@ -190,7 +190,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3pdf}{2020-09-24}{} +\ProvidesExplPackage{l3pdf}{2020-10-27}{} {L3 Experimental core PDF 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 da524edf580..a3171be0b65 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 2020-09-24} +% \date{Released 2020-10-27} % % \maketitle % @@ -166,7 +166,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3str-format}{2020-09-24}{} +\ProvidesExplPackage{l3str-format}{2020-10-27}{} {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 40b52017676..bf3ba7b058d 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 2020-09-24} +% \date{Released 2020-10-27} % % \maketitle % @@ -135,7 +135,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3sys-shell}{2020-09-24}{} +\ProvidesExplPackage{l3sys-shell}{2020-10-27}{} {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 9985fbb3936..ec5ffab7e4a 100644 --- a/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx @@ -56,7 +56,7 @@ % }^^A % } % -% \date{Released 2020-09-24} +% \date{Released 2020-10-27} % % \maketitle % @@ -675,7 +675,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{xcoffins}{2020-09-24}{} +\ProvidesExplPackage{xcoffins}{2020-10-27}{} {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 212d9e63209..5f1fa260303 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 2020-09-24} +% \date{Released 2020-10-27} % % \maketitle % @@ -686,7 +686,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3galley}{2020-09-24}{} +\ProvidesExplPackage{l3galley}{2020-10-27}{} {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 06c7f3c3716..936b2a37bb4 100644 --- a/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx @@ -47,7 +47,7 @@ % }^^A % } % -% \date{Released 2020-09-24} +% \date{Released 2020-10-27} % % \maketitle % @@ -734,7 +734,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{xgalley}{2020-09-24}{} +\ProvidesExplPackage{xgalley}{2020-10-27}{} {L3 Experimental galley} \RequirePackage{xparse,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 c42fffb6b23..59b8cad3a78 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> % -\def\ExplFileDate{2020-10-05}% +\def\ExplFileDate{2020-10-27}% %<*driver> \documentclass[full]{l3doc} \usepackage{graphicx} @@ -51,7 +51,7 @@ % }^^A % } % -% \date{Released 2020-10-05} +% \date{Released 2020-10-27} % % \maketitle % @@ -1242,7 +1242,7 @@ \else \expandafter\@gobble \fi - {\input{expl3-code.tex}}% + {\input expl3-code.tex }% % \end{macrocode} % % A check that the bootstrap code did not abort loading: if it did, diff --git a/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx b/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx index 7f06398f70e..e7f2c4fd634 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 2020-10-05} +% \date{Released 2020-10-27} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx b/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx index fd354ab438e..eba03dca568 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 2020-10-05} +% \date{Released 2020-10-27} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3box.dtx b/Master/texmf-dist/source/latex/l3kernel/l3box.dtx index 5412fab14cd..a866d6324b2 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 2020-10-05} +% \date{Released 2020-10-27} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx b/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx index dc33f6abcac..17f7f33891d 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 2020-10-05} +% \date{Released 2020-10-27} % % \maketitle % @@ -1115,9 +1115,9 @@ % hence in the \texttt{x}-expanding assignment. % \begin{macrocode} \cs_new_protected:Npn \seq_set_filter:NNn - { \@@_set_filter:NNNn \tl_set:Nx } + { \@@_set_filter:NNNn \__kernel_tl_set:Nx } \cs_new_protected:Npn \seq_gset_filter:NNn - { \@@_set_filter:NNNn \tl_gset:Nx } + { \@@_set_filter:NNNn \__kernel_tl_gset:Nx } \cs_new_protected:Npn \@@_set_filter:NNNn #1#2#3#4 { \@@_push_item_def:n { \bool_if:nT {#4} { \@@_wrap_item:n {##1} } } @@ -1133,9 +1133,9 @@ % Set \cs{@@_item:n} then map it using the loop code. % \begin{macrocode} \cs_new_protected:Npn \seq_set_from_inline_x:Nnn - { \@@_set_from_inline_x:NNnn \tl_set:Nx } + { \@@_set_from_inline_x:NNnn \__kernel_tl_set:Nx } \cs_new_protected:Npn \seq_gset_from_inline_x:Nnn - { \@@_set_from_inline_x:NNnn \tl_gset:Nx } + { \@@_set_from_inline_x:NNnn \__kernel_tl_gset:Nx } \cs_new_protected:Npn \@@_set_from_inline_x:NNnn #1#2#3#4 { \@@_push_item_def:n { \exp_not:N \@@_item:n {#4} } @@ -1438,7 +1438,7 @@ % trick to wrap all the \meta{right} parts together. % \begin{macrocode} \cs_new_protected:Npn \tl_build_get:NN - { \@@_build_get:NNN \tl_set:Nx } + { \@@_build_get:NNN \__kernel_tl_set:Nx } \cs_new_protected:Npn \@@_build_get:NNN #1#2#3 { #1 #3 { \if_false: { \fi: \exp_after:wN \@@_build_get:w #2 } } } \cs_new:Npn \@@_build_get:w #1 \@@_build_last:NNn #2#3#4 @@ -1463,12 +1463,12 @@ % \begin{macrocode} \cs_new_protected:Npn \tl_build_end:N #1 { - \@@_build_get:NNN \tl_set:Nx #1 #1 + \@@_build_get:NNN \__kernel_tl_set:Nx #1 #1 \exp_args:Nc \@@_build_end_loop:NN { \cs_to_str:N #1 ' } \tl_clear:N } \cs_new_protected:Npn \tl_build_gend:N #1 { - \@@_build_get:NNN \tl_gset:Nx #1 #1 + \@@_build_get:NNN \__kernel_tl_gset:Nx #1 #1 \exp_args:Nc \@@_build_end_loop:NN { \cs_to_str:N #1 ' } \tl_gclear:N } \cs_new_protected:Npn \@@_build_end_loop:NN #1#2 diff --git a/Master/texmf-dist/source/latex/l3kernel/l3cctab.dtx b/Master/texmf-dist/source/latex/l3kernel/l3cctab.dtx index 68077601932..6e57d4a1bf0 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 2020-10-05} +% \date{Released 2020-10-27} % % \maketitle % @@ -766,7 +766,7 @@ % \end{macrocode} % \end{variable} % -% \begin{variable}{\c_document_cctab, \c_other_cctab} +% \begin{variable}{\c_code_cctab, \c_document_cctab} % To pick up document-level category codes, we need to delay set up to the % end of the format, where that's possible. Also, as there are a \emph{lot} % of category codes to set, we avoid using the official interface and store the @@ -808,6 +808,9 @@ \char_set_catcode_group_end:n { 125 } % right brace \char_set_catcode_space:n { 126 } % tilde \char_set_catcode_invalid:n { 127 } % ^^? + \bool_lazy_or:nnF + { \sys_if_engine_xetex_p: } { \sys_if_engine_luatex_p: } + { \int_step_function:nnN { 128 } { 255 } \char_set_catcode_active:n } \@@_gset:n { \c_code_cctab } \group_end: \cctab_const:Nn \c_document_cctab diff --git a/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx b/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx index 622966bffbe..779062a3cff 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 2020-10-05} +% \date{Released 2020-10-27} % % \maketitle % @@ -1026,9 +1026,9 @@ % in the case of an empty comma-list. % \begin{macrocode} \cs_new_protected:Npn \clist_set_from_seq:NN - { \@@_set_from_seq:NNNN \clist_clear:N \tl_set:Nx } + { \@@_set_from_seq:NNNN \clist_clear:N \__kernel_tl_set:Nx } \cs_new_protected:Npn \clist_gset_from_seq:NN - { \@@_set_from_seq:NNNN \clist_gclear:N \tl_gset:Nx } + { \@@_set_from_seq:NNNN \clist_gclear:N \__kernel_tl_gset:Nx } \cs_new_protected:Npn \@@_set_from_seq:NNNN #1#2#3#4 { \seq_if_empty:NTF #4 @@ -1067,9 +1067,9 @@ % a little work to do. % \begin{macrocode} \cs_new_protected:Npn \clist_concat:NNN - { \@@_concat:NNNN \tl_set:Nx } + { \@@_concat:NNNN \__kernel_tl_set:Nx } \cs_new_protected:Npn \clist_gconcat:NNN - { \@@_concat:NNNN \tl_gset:Nx } + { \@@_concat:NNNN \__kernel_tl_gset:Nx } \cs_new_protected:Npn \@@_concat:NNNN #1#2#3#4 { #1 #2 @@ -1114,9 +1114,9 @@ % } % \begin{macrocode} \cs_new_protected:Npn \clist_set:Nn #1#2 - { \tl_set:Nx #1 { \@@_sanitize:n {#2} } } + { \__kernel_tl_set:Nx #1 { \@@_sanitize:n {#2} } } \cs_new_protected:Npn \clist_gset:Nn #1#2 - { \tl_gset:Nx #1 { \@@_sanitize:n {#2} } } + { \__kernel_tl_gset:Nx #1 { \@@_sanitize:n {#2} } } \cs_generate_variant:Nn \clist_set:Nn { NV , No , Nx , c , cV , co , cx } \cs_generate_variant:Nn \clist_gset:Nn { NV , No , Nx , c , cV , co , cx } % \end{macrocode} @@ -1240,9 +1240,9 @@ % result can safely be an empty comma list. % \begin{macrocode} \cs_new_protected:Npn \clist_pop:NN - { \@@_pop:NNN \tl_set:Nx } + { \@@_pop:NNN \__kernel_tl_set:Nx } \cs_new_protected:Npn \clist_gpop:NN - { \@@_pop:NNN \tl_gset:Nx } + { \@@_pop:NNN \__kernel_tl_gset:Nx } \cs_new_protected:Npn \@@_pop:NNN #1#2#3 { \if_meaning:w #2 \c_empty_clist @@ -1287,9 +1287,9 @@ } \prg_generate_conditional_variant:Nnn \clist_get:NN { c } { T , F , TF } \prg_new_protected_conditional:Npnn \clist_pop:NN #1#2 { T , F , TF } - { \@@_pop_TF:NNN \tl_set:Nx #1 #2 } + { \@@_pop_TF:NNN \__kernel_tl_set:Nx #1 #2 } \prg_new_protected_conditional:Npnn \clist_gpop:NN #1#2 { T , F , TF } - { \@@_pop_TF:NNN \tl_gset:Nx #1 #2 } + { \@@_pop_TF:NNN \__kernel_tl_gset:Nx #1 #2 } \cs_new_protected:Npn \@@_pop_TF:NNN #1#2#3 { \if_meaning:w #2 \c_empty_clist @@ -1416,9 +1416,9 @@ % the second step removes it. % \begin{macrocode} \cs_new_protected:Npn \clist_remove_all:Nn - { \@@_remove_all:NNNn \clist_set_from_seq:NN \tl_set:Nx } + { \@@_remove_all:NNNn \clist_set_from_seq:NN \__kernel_tl_set:Nx } \cs_new_protected:Npn \clist_gremove_all:Nn - { \@@_remove_all:NNNn \clist_gset_from_seq:NN \tl_gset:Nx } + { \@@_remove_all:NNNn \clist_gset_from_seq:NN \__kernel_tl_gset:Nx } \cs_new_protected:Npn \@@_remove_all:NNNn #1#2#3#4 { \@@_if_wrap:nTF {#4} @@ -1472,9 +1472,9 @@ % \texttt{N}-type comma lists, but the slow-down is not too bad. % \begin{macrocode} \cs_new_protected:Npn \clist_reverse:N #1 - { \tl_set:Nx #1 { \exp_args:No \clist_reverse:n {#1} } } + { \__kernel_tl_set:Nx #1 { \exp_args:No \clist_reverse:n {#1} } } \cs_new_protected:Npn \clist_greverse:N #1 - { \tl_gset:Nx #1 { \exp_args:No \clist_reverse:n {#1} } } + { \__kernel_tl_gset:Nx #1 { \exp_args:No \clist_reverse:n {#1} } } \cs_generate_variant:Nn \clist_reverse:N { c } \cs_generate_variant:Nn \clist_greverse:N { c } % \end{macrocode} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx b/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx index a69d7b25e32..0c0c3c776c0 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 2020-10-05} +% \date{Released 2020-10-27} % % \maketitle % @@ -2240,7 +2240,7 @@ { \AtBeginDocument } { \use:n } { - \tl_set:Nx \l_@@_display_font_tl + \__kernel_tl_set:Nx \l_@@_display_font_tl { \cs_if_exist:NT \sffamily { \exp_not:N \sffamily } \cs_if_exist:NT \tiny { \exp_not:N \tiny } diff --git a/Master/texmf-dist/source/latex/l3kernel/l3color-base.dtx b/Master/texmf-dist/source/latex/l3kernel/l3color-base.dtx index fd517b1e2e4..1d88e3d6ff4 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3color-base.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3color-base.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2020-10-05} +% \date{Released 2020-10-27} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3debug.dtx b/Master/texmf-dist/source/latex/l3kernel/l3debug.dtx index 1b98b61667e..30f0f78b5eb 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 2020-10-05} +% \date{Released 2020-10-27} % % \maketitle % @@ -220,7 +220,7 @@ } \cs_set_protected:Npn \debug_resume: { - \tl_set:Nx \l_@@_suspended_tl + \__kernel_tl_set:Nx \l_@@_suspended_tl { \tl_tail:N \l_@@_suspended_tl } \tl_if_empty:NT \l_@@_suspended_tl { @@ -510,11 +510,11 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_generate_parameter_list:NNN #1#2#3 { - \tl_set:Nx \l_@@_internal_tl + \__kernel_tl_set:Nx \l_@@_internal_tl { \exp_last_unbraced:Nf \use_ii:nnn \cs_split_function:N #1 } - \tl_set:Nx #2 + \__kernel_tl_set:Nx #2 { \exp_args:NV \@@_build_parm_text:n \l_@@_internal_tl } - \tl_set:Nx #3 + \__kernel_tl_set:Nx #3 { \exp_args:NV \@@_build_arg_list:n \l_@@_internal_tl } } \cs_new:Npn \@@_build_parm_text:n #1 @@ -788,6 +788,12 @@ % \tracingnone % \end{macrocode} % +% +% \begin{macrocode} +\cs_gset_protected:Npn \__kernel_tl_set:Nx { \cs_set_nopar:Npx } +\cs_gset_protected:Npn \__kernel_tl_gset:Nx { \cs_gset_nopar:Npx } +% \end{macrocode} +% % Patching where the first argument to a function needs scope-checking: % either local or global (so two lists). % \begin{macrocode} @@ -831,9 +837,7 @@ \skip_set_eq:NN \skip_add:Nn \skip_sub:Nn - \tl_set:Nn - \tl_set:No - \tl_set:Nx + \__kernel_tl_set:Nx \tl_set_eq:NN \tl_put_left:Nn \tl_put_left:NV @@ -895,9 +899,7 @@ \skip_gset_eq:NN \skip_gadd:Nn \skip_gsub:Nn - \tl_gset:Nn - \tl_gset:No - \tl_gset:Nx + \__kernel_tl_gset:Nx \tl_gset_eq:NN \tl_gput_left:Nn \tl_gput_left:NV @@ -1053,7 +1055,7 @@ { \@@_trace_push:nnN { regex } { 1 } \@@_escape_use:nnnn \group_begin: - \tl_set:Nx \l_@@_internal_a_tl + \__kernel_tl_set:Nx \l_@@_internal_a_tl { \@@_trace_pop:nnN { regex } { 1 } \@@_escape_use:nnnn } \use_none:nnn } diff --git a/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx b/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx index c7c4d91c448..6d13ae1b38c 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 2020-10-05} +% \date{Released 2020-10-27} % % \maketitle % @@ -747,7 +747,7 @@ \group_begin: \file_get:nnN {#3} {#2} \l_@@_internal_a_tl #2 \scan_stop: - \tl_set:Nx \l_@@_internal_a_tl { \l_@@_internal_a_tl } + \__kernel_tl_set:Nx \l_@@_internal_a_tl { \l_@@_internal_a_tl } \exp_args:NNNo \group_end: \tl_set:Nn #1 \l_@@_internal_a_tl } @@ -758,7 +758,7 @@ \group_begin: \file_get:nnN {#3} {#2} \l_@@_internal_a_tl #2 \scan_stop: - \tl_gset:Nx #1 { \l_@@_internal_a_tl } + \__kernel_tl_gset:Nx #1 { \l_@@_internal_a_tl } \group_end: } \cs_generate_variant:Nn \tl_gset_from_file_x:Nnn { c } diff --git a/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx b/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx index 0a4b2c4550c..25ad20f7ddf 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 2020-10-05} +% \date{Released 2020-10-27} % \maketitle % \tableofcontents % @@ -1008,7 +1008,7 @@ and all files in that bundle must be distributed together. \cs_new_protected:Npn \@@_trim_right:Nn #1#2 { \cs_set:Npn \@@_tmp:w ##1 #2 ##2 \q_stop { \exp_not:n {##1} } - \tl_set:Nx #1 { \exp_after:wN \@@_tmp:w #1 #2 \q_stop } + \__kernel_tl_set:Nx #1 { \exp_after:wN \@@_tmp:w #1 #2 \q_stop } } \cs_generate_variant:Nn \@@_trim_right:Nn { No } % \end{macrocode} @@ -1228,14 +1228,14 @@ and all files in that bundle must be distributed together. \@@_if_almost_str:nTF {#1} { \@@_key_get_base_TF:nN {#1} \l_@@_tmpa_tl - \tl_set:Nx #2 + \__kernel_tl_set:Nx #2 { \@@_split_function_do:on \l_@@_tmpa_tl { \@@_base_form_aux:nnN } } } { \tl_set:Nn #2 {#1} } } \cs_new:Npx \@@_key_get_base_TF:nN #1#2 { - \tl_set:Nx #2 { \exp_not:N \tl_to_str:n {#1} } + \__kernel_tl_set:Nx #2 { \exp_not:N \tl_to_str:n {#1} } \tl_if_in:NoF #2 { \tl_to_str:n {:} } { \exp_not:N \prg_break: } \tl_if_in:onT { #2 z } { \tl_to_str:n {TF} z } @@ -1992,7 +1992,7 @@ and all files in that bundle must be distributed together. \verbatim@font \@@_if_almost_str:VT \l_@@_cmd_tl { - \tl_set:Nx \l_@@_cmd_tl { \tl_to_str:N \l_@@_cmd_tl } + \__kernel_tl_set:Nx \l_@@_cmd_tl { \tl_to_str:N \l_@@_cmd_tl } \bool_if:NT \g_@@_cs_break_bool { \regex_replace_all:nnN @@ -2012,14 +2012,14 @@ and all files in that bundle must be distributed together. { \quark_if_no_value:NF \l_@@_cmd_index_tl { - \tl_set:Nx \l_@@_cmd_tl + \__kernel_tl_set:Nx \l_@@_cmd_tl { \c_backslash_str \exp_not:o { \l_@@_cmd_index_tl } } } \exp_args:No \@@_key_get:n { \l_@@_cmd_tl } \quark_if_no_value:NF \l_@@_cmd_module_tl { - \tl_set:Nx \l_@@_index_module_tl + \__kernel_tl_set:Nx \l_@@_index_module_tl { \tl_to_str:N \l_@@_cmd_module_tl } } \@@_special_index_module:ooonN @@ -2134,7 +2134,7 @@ and all files in that bundle must be distributed together. % \begin{macrocode} \cs_new_protected:Npn \@@_get_hyper_target:nN #1#2 { - \tl_set:Nx #2 { \tl_to_str:n {#1} } + \__kernel_tl_set:Nx #2 { \tl_to_str:n {#1} } \tl_replace_all:Nxn #2 { \c_underscore_str } { / } \tl_remove_all:Nx #2 { \c_backslash_str } \tl_put_left:Nn #2 { doc/function// } @@ -2157,7 +2157,7 @@ and all files in that bundle must be distributed together. % \begin{macrocode} \cs_new_protected:Npn \@@_names_get_seq:nN #1#2 { - \tl_set:Nx \l_@@_tmpa_tl { \tl_to_str:n {#1} } + \__kernel_tl_set:Nx \l_@@_tmpa_tl { \tl_to_str:n {#1} } \bool_if:NTF \l_@@_names_verb_bool { \seq_clear:N #2 @@ -3045,7 +3045,7 @@ and all files in that bundle must be distributed together. \l_@@_macro_do_not_index_tl \exp_args:NNV \seq_set_from_clist:Nn \l_@@_tmpa_seq \l_@@_macro_do_not_index_tl - \tl_set:Nx \l_@@_macro_do_not_index_tl + \__kernel_tl_set:Nx \l_@@_macro_do_not_index_tl { \seq_use:Nn \l_@@_tmpa_seq { , } } \exp_args:NV \DoNotIndex \l_@@_macro_do_not_index_tl } @@ -4228,7 +4228,7 @@ and all files in that bundle must be distributed together. % \begin{macrocode} \cs_new_protected:Npn \@@_special_index_set:Nn #1#2 { - \tl_set:Nx #1 { \tl_to_str:n {#2} } + \__kernel_tl_set:Nx #1 { \tl_to_str:n {#2} } \@@_if_almost_str:nTF {#2} { \tl_replace_all:Non #1 { \tl_to_str:n { __ } } @@ -4246,7 +4246,7 @@ and all files in that bundle must be distributed together. \token_to_str:N \verb * \verbatimchar } } - \tl_set:Nx #1 + \__kernel_tl_set:Nx #1 { \token_to_str:N \verb * \verbatimchar #1 \verbatimchar @@ -4297,7 +4297,7 @@ and all files in that bundle must be distributed together. \cs_new_protected:Npn \@@_key_get:n #1 { \@@_key_get_base:nN {#1} \l_@@_index_macro_tl - \tl_set:Nx \l_@@_index_key_tl + \__kernel_tl_set:Nx \l_@@_index_key_tl { \tl_to_str:N \l_@@_index_macro_tl } \tl_clear:N \l_@@_index_module_tl \tl_if_in:NoTF \l_@@_index_key_tl { \tl_to_str:n { __ } } @@ -4320,7 +4320,7 @@ and all files in that bundle must be distributed together. } \cs_new_protected:Npn \@@_key_pop: { - \tl_set:Nx \l_@@_index_key_tl + \__kernel_tl_set:Nx \l_@@_index_key_tl { \tl_tail:N \l_@@_index_key_tl } } % \end{macrocode} @@ -4335,7 +4335,7 @@ and all files in that bundle must be distributed together. { \cs_set:Npn \@@_tmpa:w ##1 #1 ##2 \q_stop { \exp_not:n {##1} } - \tl_set:Nx \l_@@_index_module_tl + \__kernel_tl_set:Nx \l_@@_index_module_tl { \exp_after:wN \@@_tmpa:w \l_@@_index_module_tl #1 \q_stop } } \cs_new_protected:Npn \@@_key_drop_underscores: @@ -4396,7 +4396,7 @@ and all files in that bundle must be distributed together. { \seq_set_split:NoV \l_@@_tmpa_seq { \token_to_str:N _ } \l_@@_index_key_tl - \tl_set:Nx \l_@@_index_module_tl + \__kernel_tl_set:Nx \l_@@_index_module_tl { \int_case:nnF { \seq_count:N \l_@@_tmpa_seq } { diff --git a/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx b/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx index c68ad1c17b9..2e455845db1 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 2020-10-05} +% \date{Released 2020-10-27} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx b/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx index 2d950678a89..49fafac2964 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 2020-10-05} +% \date{Released 2020-10-27} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3file.dtx b/Master/texmf-dist/source/latex/l3kernel/l3file.dtx index 844e4c8fca8..fc6f7260a0b 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 2020-10-05} +% \date{Released 2020-10-27} % % \maketitle % @@ -1074,7 +1074,7 @@ { \@@_open_stream:Nn #1 {#2} } { \@@_new:N #1 - \tl_set:Nx \l_@@_stream_tl { \int_eval:n {#1} } + \__kernel_tl_set:Nx \l_@@_stream_tl { \int_eval:n {#1} } \@@_open_stream:Nn #1 {#2} } } @@ -1475,14 +1475,14 @@ % \begin{macrocode} \cs_new_protected:Npn \iow_open:Nn #1#2 { - \tl_set:Nx \l_@@_file_name_tl + \__kernel_tl_set:Nx \l_@@_file_name_tl { \__kernel_file_name_sanitize:n {#2} } \iow_close:N #1 \seq_gpop:NNTF \g_@@_streams_seq \l_@@_stream_tl { \@@_open_stream:NV #1 \l_@@_file_name_tl } { \@@_new:N #1 - \tl_set:Nx \l_@@_stream_tl { \int_eval:n {#1} } + \__kernel_tl_set:Nx \l_@@_stream_tl { \int_eval:n {#1} } \@@_open_stream:NV #1 \l_@@_file_name_tl } } @@ -1684,7 +1684,7 @@ \cs_new:Npn \@@_unindent:w { } \cs_new_protected:Npn \@@_set_indent:n #1 { - \tl_set:Nx \l_@@_one_indent_tl + \__kernel_tl_set:Nx \l_@@_one_indent_tl { \exp_args:No \__kernel_str_to_other_fast:n { \tl_to_str:n {#1} } } \int_set:Nn \l_@@_one_indent_int { \str_count:N \l_@@_one_indent_tl } @@ -1861,7 +1861,7 @@ % \cs{iow_wrap:nnnN}. % \begin{macrocode} \cs_set_eq:NN \protect \token_to_str:N - \tl_set:Nx \l_@@_wrap_tl {#1} + \__kernel_tl_set:Nx \l_@@_wrap_tl {#1} \cs_set_eq:NN \iow_allow_break: \@@_allow_break_error: \cs_set_eq:NN \iow_indent:n \@@_indent_error:n % \end{macrocode} @@ -1869,8 +1869,8 @@ % then convert to a string) and initialize the target count for lines % (the first line has target count \cs{l_iow_line_count_int} instead). % \begin{macrocode} - \tl_set:Nx \l_@@_newline_tl { \iow_newline: #2 } - \tl_set:Nx \l_@@_newline_tl { \tl_to_str:N \l_@@_newline_tl } + \__kernel_tl_set:Nx \l_@@_newline_tl { \iow_newline: #2 } + \__kernel_tl_set:Nx \l_@@_newline_tl { \tl_to_str:N \l_@@_newline_tl } \int_set:Nn \l_@@_line_target_int { \l_iow_line_count_int - \str_count:N \l_@@_newline_tl + 1 } % \end{macrocode} @@ -1910,12 +1910,12 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_wrap_do: { - \tl_set:Nx \l_@@_wrap_tl + \__kernel_tl_set:Nx \l_@@_wrap_tl { \exp_args:No \__kernel_str_to_other_fast:n \l_@@_wrap_tl \c_@@_wrap_end_marker_tl } - \tl_set:Nx \l_@@_wrap_tl + \__kernel_tl_set:Nx \l_@@_wrap_tl { \exp_after:wN \@@_wrap_fix_newline:w \l_@@_wrap_tl ^^J \q_@@_nil ^^J \s_@@_stop @@ -2179,7 +2179,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_wrap_allow_break:n #1 { - \tl_set:Nx \l_@@_line_tl + \__kernel_tl_set:Nx \l_@@_line_tl { \l_@@_line_tl \@@_wrap_trim:N \l_@@_line_part_tl } \bool_set_false:N \l_@@_line_break_bool \tl_if_empty:NTF \l_@@_line_part_tl @@ -2210,7 +2210,7 @@ \tl_put_right:Nx \l_@@_line_tl { \l_@@_line_part_tl } \bool_set_false:N \l_@@_line_break_bool \int_sub:Nn \l_@@_indent_int { \l_@@_one_indent_int } - \tl_set:Nx \l_@@_indent_tl + \__kernel_tl_set:Nx \l_@@_indent_tl { \exp_after:wN \@@_unindent:w \l_@@_indent_tl } \@@_wrap_chunk:nw {#1} } @@ -2249,9 +2249,9 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_wrap_store_do:n #1 { - \tl_set:Nx \l_@@_line_tl + \__kernel_tl_set:Nx \l_@@_line_tl { \l_@@_line_tl \l_@@_line_part_tl } - \tl_set:Nx \l_@@_wrap_tl + \__kernel_tl_set:Nx \l_@@_wrap_tl { \l_@@_wrap_tl \l_@@_newline_tl @@ -2785,7 +2785,7 @@ \cs_generate_variant:Nn \file_get_full_name:nN { V } \prg_new_protected_conditional:Npnn \file_get_full_name:nN #1#2 { T , F , TF } { - \tl_set:Nx #2 + \__kernel_tl_set:Nx #2 { \file_full_name:n {#1} } \tl_if_empty:NTF #2 { \prg_return_false: } @@ -2810,7 +2810,7 @@ { \prg_set_protected_conditional:Npnn \file_get_full_name:nN #1#2 { T , F , TF } { - \tl_set:Nx \l_@@_base_name_tl + \__kernel_tl_set:Nx \l_@@_base_name_tl { \__kernel_file_name_sanitize:n {#1} } \@@_get_full_name_search:nN { } \use:n \seq_map_inline:Nn \l_file_search_path_seq @@ -2845,7 +2845,7 @@ } \cs_new_protected:Npn \@@_get_full_name_search:nN #1#2 { - \tl_set:Nx \l_@@_full_name_tl + \__kernel_tl_set:Nx \l_@@_full_name_tl { \tl_to_str:n {#1} \l_@@_base_name_tl } \__kernel_ior_open:No \g_@@_internal_ior \l_@@_full_name_tl \ior_if_eof:NF \g_@@_internal_ior { #2 { \prg_break: } } @@ -3000,7 +3000,7 @@ { \@@_get_details:nnN {#1} { timestamp } #2 } \cs_new_protected:Npn \@@_get_details:nnN #1#2#3 { - \tl_set:Nx #3 + \__kernel_tl_set:Nx #3 { \use:c { file_ #2 :n } {#1} } \tl_if_empty:NTF #3 { \prg_return_false: } @@ -3045,7 +3045,7 @@ \prg_new_protected_conditional:Npnn \file_get_hex_dump:nnnN #1#2#3#4 { T , F , TF } { - \tl_set:Nx #4 + \__kernel_tl_set:Nx #4 { \file_hex_dump:nnn {#1} {#2} {#3} } \tl_if_empty:NTF #4 { \prg_return_false: } diff --git a/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx b/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx index 5e4e998873b..2475241f91c 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 2020-10-05} +% \date{Released 2020-10-27} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx index e6360615a89..918c7b9941b 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 2020-10-05} +% \date{Released 2020-10-27} % \maketitle % % \begin{documentation} @@ -80,9 +80,9 @@ % assignments. % \begin{macrocode} \cs_new_protected:Npn \fp_set:Nn #1#2 - { \tl_set:Nx #1 { \exp_not:f { \@@_parse:n {#2} } } } + { \__kernel_tl_set:Nx #1 { \exp_not:f { \@@_parse:n {#2} } } } \cs_new_protected:Npn \fp_gset:Nn #1#2 - { \tl_gset:Nx #1 { \exp_not:f { \@@_parse:n {#2} } } } + { \__kernel_tl_gset:Nx #1 { \exp_not:f { \@@_parse:n {#2} } } } \cs_new_protected:Npn \fp_const:Nn #1#2 { \tl_const:Nx #1 { \exp_not:f { \@@_parse:n {#2} } } } \cs_generate_variant:Nn \fp_set:Nn {c} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx index 103b75417cd..60662e35601 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 2020-10-05} +% \date{Released 2020-10-27} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx index 1dbebe5909b..4fa89b63556 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 2020-10-05} +% \date{Released 2020-10-27} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx index 5532e1e8574..1b28754a82d 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 2020-10-05} +% \date{Released 2020-10-27} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx index 85819137524..b30fd883bd1 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 2020-10-05} +% \date{Released 2020-10-27} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx index 571d9b8d9c5..2ff5305b4c8 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 2020-10-05} +% \date{Released 2020-10-27} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx index d879f37c4c6..28ed6bba76e 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 2020-10-05} +% \date{Released 2020-10-27} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx index eec6d0e6fce..894cf439d97 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 2020-10-05} +% \date{Released 2020-10-27} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx index 0fd6de01af7..e8682c57a8f 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 2020-10-05} +% \date{Released 2020-10-27} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx index d2bb632e591..03de976829f 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 2020-10-05} +% \date{Released 2020-10-27} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx index 1f297f069a8..377596fb595 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 2020-10-05} +% \date{Released 2020-10-27} % \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 3cea7ebdb62..eefc4c7ccb0 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 2020-10-05} +% \date{Released 2020-10-27} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx index 34d87040f0e..51f1a30c184 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 2020-10-05} +% \date{Released 2020-10-27} % % \maketitle % @@ -1364,7 +1364,7 @@ % % \begin{variable}[tested = m3fp-parse001] % {em, ex, in, pt, pc, cm, mm, dd, cc, nd, nc, bp, sp} -% \newcommand{\unit}[1]{\text{\texttt{#1}}} +% \newcommand{\unit}[1]{\ifmmode\,\fi\text{\texttt{#1}}} % Those units of measurement are equal to their values in \unit{pt}, % namely % \begin{align*} @@ -1378,7 +1378,7 @@ % 1 \unit{nd} & = 0.375 \unit{mm} = 1.066978346456693 \unit{pt} \\ % 1 \unit{nc} & = 12 \unit{nd} = 12.80374015748031 \unit{pt} \\ % 1 \unit{bp} & = \frac{1}{72} \unit{in} = 1.00375 \unit{pt} \\ -% 1 \unit{sp} & = 2^{-16} \unit{pt} = 1.52587890625e-5 \unit{pt}. +% 1 \unit{sp} & = 2^{-16} \unit{pt} = 1.52587890625 \times 10^{-5} \unit{pt}. % \end{align*} % The values of the (font-dependent) units \unit{em} and \unit{ex} are % gathered from \TeX{} when the surrounding floating point expression diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx index 4a521269bbd..5d48154ae8c 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 2020-10-05} +% \date{Released 2020-10-27} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3int.dtx b/Master/texmf-dist/source/latex/l3kernel/l3int.dtx index b4624576bee..f246d8400be 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 2020-10-05} +% \date{Released 2020-10-27} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx b/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx index 022e084f53f..7c9d2372d99 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 2020-10-05} +% \date{Released 2020-10-27} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx b/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx index 81c9ca1e054..b844c89385a 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 2020-10-05} +% \date{Released 2020-10-27} % % \maketitle % @@ -569,6 +569,15 @@ % only a single expansion. % \end{function} % +% \begin{function}{\__kernel_tl_set:Nx, \__kernel_tl_gset:Nx} +% \begin{syntax} +% \cs{__kernel_tl_set:Nx} \meta{tl~var} \Arg{tokens} +% \end{syntax} +% Fully expands \meta{tokens} and assigns the result to \meta{tl~var}. +% \meta{tokens} must be given in braces and there must be no token between +% \meta{tl~var} and \meta{tokens}. +% \end{function} +% % \section{Kernel backend functions} % % These functions are required to pass information to the backend. The nature diff --git a/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx b/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx index f512bd25173..ea9b1f9d04f 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 2020-10-05} +% \date{Released 2020-10-27} % % \maketitle % @@ -2445,7 +2445,7 @@ { \clist_clear:N \l_@@_unused_clist \@@_set_known:nnn {#2} {#3} {#4} - \tl_set:Nx #5 { \exp_not:o \l_@@_unused_clist } + \__kernel_tl_set:Nx #5 { \exp_not:o \l_@@_unused_clist } \tl_set:Nn \l_@@_unused_clist {#1} } \cs_new_protected:Npn \keys_set_known:nn #1#2 @@ -2523,7 +2523,7 @@ { \clist_clear:N \l_@@_unused_clist \@@_set_filter:nnnn {#2} {#3} {#4} {#5} - \tl_set:Nx #6 { \exp_not:o \l_@@_unused_clist } + \__kernel_tl_set:Nx #6 { \exp_not:o \l_@@_unused_clist } \tl_set:Nn \l_@@_unused_clist {#1} } \cs_new_protected:Npn \keys_set_filter:nnn #1#2#3 @@ -2622,7 +2622,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_set_keyval:nnn #1#2#3 { - \tl_set:Nx \l_keys_path_str + \__kernel_tl_set:Nx \l_keys_path_str { \tl_if_blank:nF {#1} { #1 / } @@ -2887,7 +2887,7 @@ } \cs_new_protected:Npn \@@_store_unused_aux: { - \tl_set:Nx \l_@@_relative_tl + \__kernel_tl_set:Nx \l_@@_relative_tl { \exp_args:No \@@_trim_spaces:n \l_@@_relative_tl } \use:x { diff --git a/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx b/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx index 872d9b5aa48..041c39c3335 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 2020-10-05} +% \date{Released 2020-10-27} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx b/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx index 60fd7e22fb5..880eb79f9e1 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 2020-10-05} +% \date{Released 2020-10-27} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx b/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx index 7e2c59a7129..cde386e371f 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 2020-10-05} +% \date{Released 2020-10-27} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3names.dtx b/Master/texmf-dist/source/latex/l3kernel/l3names.dtx index 0a4fe07d505..b75c20eb08a 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 2020-10-05} +% \date{Released 2020-10-27} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx b/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx index 704612a0f9e..3f1280f23e9 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 2020-10-05} +% \date{Released 2020-10-27} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx b/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx index 4d2c6cbe05f..9419a5ce6c3 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 2020-10-05} +% \date{Released 2020-10-27} % % \maketitle % @@ -1071,8 +1071,8 @@ % updated entry is placed at the same spot as the original \meta{key} % in the property list, preserving the order of entries. % \begin{macrocode} -\cs_new_protected:Npn \prop_put:Nnn { \@@_put:NNnn \tl_set:Nx } -\cs_new_protected:Npn \prop_gput:Nnn { \@@_put:NNnn \tl_gset:Nx } +\cs_new_protected:Npn \prop_put:Nnn { \@@_put:NNnn \__kernel_tl_set:Nx } +\cs_new_protected:Npn \prop_gput:Nnn { \@@_put:NNnn \__kernel_tl_gset:Nx } \cs_new_protected:Npn \@@_put:NNnn #1#2#3#4 { \tl_set:Nn \l_@@_internal_tl @@ -1108,9 +1108,9 @@ % convert the key to a string using \cs{tl_to_str:n}. % \begin{macrocode} \cs_new_protected:Npn \prop_put_if_new:Nnn - { \@@_put_if_new:NNnn \tl_set:Nx } + { \@@_put_if_new:NNnn \__kernel_tl_set:Nx } \cs_new_protected:Npn \prop_gput_if_new:Nnn - { \@@_put_if_new:NNnn \tl_gset:Nx } + { \@@_put_if_new:NNnn \__kernel_tl_gset:Nx } \cs_new_protected:Npn \@@_put_if_new:NNnn #1#2#3#4 { \tl_set:Nn \l_@@_internal_tl diff --git a/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx b/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx index 6827debe15a..16a9b0c447c 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 2020-10-05} +% \date{Released 2020-10-27} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx b/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx index 62fd8c4e94d..2086b5c3ec0 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 2020-10-05} +% \date{Released 2020-10-27} % % \maketitle % @@ -1322,7 +1322,7 @@ { \int_compare:nNnTF \l_@@_curr_catcode_int = 0 { - \tl_set:Nx \l_@@_internal_a_tl + \__kernel_tl_set:Nx \l_@@_internal_a_tl { \scan_stop: \@@_curr_cs_to_str: \scan_stop: } \tl_if_in:noTF { \scan_stop: #1 \scan_stop: } \l_@@_internal_a_tl @@ -1348,7 +1348,7 @@ \int_compare:nNnT \l_@@_curr_catcode_int = 0 { \group_begin: - \tl_set:Nx \l_@@_cs_name_tl { \@@_curr_cs_to_str: } + \__kernel_tl_set:Nx \l_@@_cs_name_tl { \@@_curr_cs_to_str: } \@@_single_match: \@@_disable_submatches: \@@_build_for_cs:n {#1} @@ -1515,7 +1515,7 @@ \cs_set:Npn \@@_escape_escaped:N ##1 { #2 } \cs_set:Npn \@@_escape_raw:N ##1 { #3 } \@@_standard_escapechar: - \tl_gset:Nx \g_@@_internal_tl + \__kernel_tl_gset:Nx \g_@@_internal_tl { \__kernel_str_to_other_fast:n {#4} } \tl_put_right:Nx \l_@@_internal_a_tl { @@ -2888,12 +2888,12 @@ \@@_two_if_eq:NNNNTF #5 #6 \@@_compile_special:N ^ { \bool_set_false:N \l_@@_internal_bool - \tl_set:Nx \l_@@_internal_a_tl { \if_false: } \fi: + \__kernel_tl_set:Nx \l_@@_internal_a_tl { \if_false: } \fi: \@@_compile_class_posix_loop:w } { \bool_set_true:N \l_@@_internal_bool - \tl_set:Nx \l_@@_internal_a_tl { \if_false: } \fi: + \__kernel_tl_set:Nx \l_@@_internal_a_tl { \if_false: } \fi: \@@_compile_class_posix_loop:w #5 #6 } } @@ -3274,7 +3274,7 @@ { \@@_compile_end: \flag_clear:n { @@_cs } - \tl_set:Nx \l_@@_internal_a_tl + \__kernel_tl_set:Nx \l_@@_internal_a_tl { \exp_after:wN \@@_compile_cs_aux:Nn \l_@@_internal_regex \q_@@_nil \q_@@_nil \q_@@_recursion_stop @@ -3354,7 +3354,7 @@ { \@@_two_if_eq:NNNNTF #1 #2 \@@_compile_special:N \c_left_brace_str { - \tl_set:Nx \l_@@_internal_a_tl { \if_false: } \fi: + \__kernel_tl_set:Nx \l_@@_internal_a_tl { \if_false: } \fi: \@@_compile_u_loop:NN } { @@ -3411,7 +3411,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_compile_u_in_cs: { - \tl_gset:Nx \g_@@_internal_tl + \__kernel_tl_gset:Nx \g_@@_internal_tl { \exp_args:No \__kernel_str_to_other_fast:n { \l_@@_internal_a_tl } @@ -6225,7 +6225,7 @@ \@@_replacement_balance_one_match:n { \l_@@_zeroth_submatch_int } } - \tl_set:Nx \l_@@_internal_a_tl + \__kernel_tl_set:Nx \l_@@_internal_a_tl { \@@_replacement_do_one_match:n { \l_@@_zeroth_submatch_int } @@ -6270,7 +6270,7 @@ { \l_@@_submatch_int - 1 } \@@_replacement_balance_one_match:n } - \tl_set:Nx \l_@@_internal_a_tl + \__kernel_tl_set:Nx \l_@@_internal_a_tl { \int_step_function:nnnN { \l_@@_min_submatch_int } diff --git a/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx b/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx index 51c9ec07a19..737a4c776af 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 2020-10-05} +% \date{Released 2020-10-27} % % \maketitle % @@ -1165,22 +1165,22 @@ % \begin{macrocode} \cs_new_protected:Npn \seq_set_from_clist:NN #1#2 { - \tl_set:Nx #1 + \__kernel_tl_set:Nx #1 { \s_@@ \clist_map_function:NN #2 \@@_wrap_item:n } } \cs_new_protected:Npn \seq_set_from_clist:Nn #1#2 { - \tl_set:Nx #1 + \__kernel_tl_set:Nx #1 { \s_@@ \clist_map_function:nN {#2} \@@_wrap_item:n } } \cs_new_protected:Npn \seq_gset_from_clist:NN #1#2 { - \tl_gset:Nx #1 + \__kernel_tl_gset:Nx #1 { \s_@@ \clist_map_function:NN #2 \@@_wrap_item:n } } \cs_new_protected:Npn \seq_gset_from_clist:Nn #1#2 { - \tl_gset:Nx #1 + \__kernel_tl_gset:Nx #1 { \s_@@ \clist_map_function:nN {#2} \@@_wrap_item:n } } \cs_generate_variant:Nn \seq_set_from_clist:NN { Nc } @@ -1238,9 +1238,9 @@ % braces which are outermost after space trimming. % \begin{macrocode} \cs_new_protected:Npn \seq_set_split:Nnn - { \@@_set_split:NNnn \tl_set:Nx } + { \@@_set_split:NNnn \__kernel_tl_set:Nx } \cs_new_protected:Npn \seq_gset_split:Nnn - { \@@_set_split:NNnn \tl_gset:Nx } + { \@@_set_split:NNnn \__kernel_tl_gset:Nx } \cs_new_protected:Npn \@@_set_split:NNnn #1#2#3#4 { \tl_if_empty:nTF {#3} @@ -1260,7 +1260,7 @@ \@@_set_split_end: \@@_set_split_auxi:w \prg_do_nothing: } - \tl_set:Nx \l_@@_internal_a_tl { \l_@@_internal_a_tl } + \__kernel_tl_set:Nx \l_@@_internal_a_tl { \l_@@_internal_a_tl } } #1 #2 { \s_@@ \l_@@_internal_a_tl } } @@ -1329,7 +1329,7 @@ % \begin{macrocode} \cs_new_protected:Npn \seq_put_left:Nn #1#2 { - \tl_set:Nx #1 + \__kernel_tl_set:Nx #1 { \exp_not:n { \s_@@ \@@_item:n {#2} } \exp_not:f { \exp_after:wN \@@_put_left_aux:w #1 } @@ -1337,7 +1337,7 @@ } \cs_new_protected:Npn \seq_gput_left:Nn #1#2 { - \tl_gset:Nx #1 + \__kernel_tl_gset:Nx #1 { \exp_not:n { \s_@@ \@@_item:n {#2} } \exp_not:f { \exp_after:wN \@@_put_left_aux:w #1 } @@ -1448,9 +1448,9 @@ % \texttt{x}-type expansion (|#1 #2 {#2}|) ensures that nothing is lost. % \begin{macrocode} \cs_new_protected:Npn \seq_remove_all:Nn - { \@@_remove_all_aux:NNn \tl_set:Nx } + { \@@_remove_all_aux:NNn \__kernel_tl_set:Nx } \cs_new_protected:Npn \seq_gremove_all:Nn - { \@@_remove_all_aux:NNn \tl_gset:Nx } + { \@@_remove_all_aux:NNn \__kernel_tl_gset:Nx } \cs_new_protected:Npn \@@_remove_all_aux:NNn #1#2#3 { \@@_push_item_def:n @@ -1515,9 +1515,9 @@ % from the stack, and the memory consumption becomes linear. % \begin{macrocode} \cs_new_protected:Npn \seq_reverse:N - { \@@_reverse:NN \tl_set:Nx } + { \@@_reverse:NN \__kernel_tl_set:Nx } \cs_new_protected:Npn \seq_greverse:N - { \@@_reverse:NN \tl_gset:Nx } + { \@@_reverse:NN \__kernel_tl_gset:Nx } \cs_new_protected:Npn \@@_reverse:NN #1 #2 { \cs_set_eq:NN \@@_tmp:w \@@_item:n @@ -1704,7 +1704,7 @@ % \begin{macrocode} \cs_new_protected:Npn \seq_get_left:NN #1#2 { - \tl_set:Nx #2 + \__kernel_tl_set:Nx #2 { \exp_after:wN \@@_get_left:wnw #1 \@@_item:n { \q_no_value } \s_@@_stop @@ -1756,7 +1756,7 @@ % \begin{macrocode} \cs_new_protected:Npn \seq_get_right:NN #1#2 { - \tl_set:Nx #2 + \__kernel_tl_set:Nx #2 { \exp_after:wN \use_i_ii:nnn \exp_after:wN \@@_get_right_loop:nw @@ -1797,9 +1797,9 @@ % finally stops the loop. % \begin{macrocode} \cs_new_protected:Npn \seq_pop_right:NN - { \@@_pop:NNNN \@@_pop_right:NNN \tl_set:Nx } + { \@@_pop:NNNN \@@_pop_right:NNN \__kernel_tl_set:Nx } \cs_new_protected:Npn \seq_gpop_right:NN - { \@@_pop:NNNN \@@_pop_right:NNN \tl_gset:Nx } + { \@@_pop:NNNN \@@_pop_right:NNN \__kernel_tl_gset:Nx } \cs_new_protected:Npn \@@_pop_right:NNN #1#2#3 { \cs_set_eq:NN \@@_tmp:w \@@_item:n @@ -1811,7 +1811,7 @@ #2 { \if_false: { \fi: } - \tl_set:Nx #3 + \__kernel_tl_set:Nx #3 } { } \use_none:nn \cs_set_eq:NN \@@_item:n \@@_tmp:w @@ -1859,10 +1859,10 @@ { \@@_pop_TF:NNNN \@@_pop_left:NNN \tl_gset:Nn #1 #2 } \prg_new_protected_conditional:Npnn \seq_pop_right:NN #1#2 { T , F , TF } - { \@@_pop_TF:NNNN \@@_pop_right:NNN \tl_set:Nx #1 #2 } + { \@@_pop_TF:NNNN \@@_pop_right:NNN \__kernel_tl_set:Nx #1 #2 } \prg_new_protected_conditional:Npnn \seq_gpop_right:NN #1#2 { T , F , TF } - { \@@_pop_TF:NNNN \@@_pop_right:NNN \tl_gset:Nx #1 #2 } + { \@@_pop_TF:NNNN \@@_pop_right:NNN \__kernel_tl_gset:Nx #1 #2 } \prg_generate_conditional_variant:Nnn \seq_pop_left:NN { c } { T , F , TF } \prg_generate_conditional_variant:Nnn \seq_gpop_left:NN { c } @@ -2123,9 +2123,9 @@ % semantics. % \begin{macrocode} \cs_new_protected:Npn \seq_set_map_x:NNn - { \@@_set_map_x:NNNn \tl_set:Nx } + { \@@_set_map_x:NNNn \__kernel_tl_set:Nx } \cs_new_protected:Npn \seq_gset_map_x:NNn - { \@@_set_map_x:NNNn \tl_gset:Nx } + { \@@_set_map_x:NNNn \__kernel_tl_gset:Nx } \cs_new_protected:Npn \@@_set_map_x:NNNn #1#2#3#4 { \@@_push_item_def:n { \exp_not:N \@@_item:n {#4} } @@ -2142,9 +2142,9 @@ % . % \begin{macrocode} \cs_new_protected:Npn \seq_set_map:NNn - { \@@_set_map:NNNn \tl_set:Nx } + { \@@_set_map:NNNn \__kernel_tl_set:Nx } \cs_new_protected:Npn \seq_gset_map:NNn - { \@@_set_map:NNNn \tl_gset:Nx } + { \@@_set_map:NNNn \__kernel_tl_gset:Nx } \cs_new_protected:Npn \@@_set_map:NNNn #1#2#3#4 { \@@_push_item_def:n { \exp_not:n { \@@_item:n {#4} } } diff --git a/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx b/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx index 41ee426e402..aeef5ae45c4 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 2020-10-05} +% \date{Released 2020-10-27} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx b/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx index 58fa850b36c..30d2b9737ed 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 2020-10-05} +% \date{Released 2020-10-27} % % \maketitle % @@ -376,7 +376,7 @@ { \group_begin: \@@_main:NNNn \tl_map_inline:Nn \tl_map_break:n #2 {#3} - \tl_gset:Nx \g_@@_internal_tl + \__kernel_tl_gset:Nx \g_@@_internal_tl { \@@_tl_toks:w \l_@@_min_int ; } \group_end: #1 #2 \g_@@_internal_tl diff --git a/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx b/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx index ee01d9e5b0e..2acfdcf0aa1 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 2020-10-05} +% \date{Released 2020-10-27} % % \maketitle % @@ -455,7 +455,7 @@ % an empty result for the input $-1$. % \begin{macrocode} \group_begin: - \tl_set:Nx \l_@@_internal_tl { \tl_to_str:n { 0123456789ABCDEF } } + \__kernel_tl_set:Nx \l_@@_internal_tl { \tl_to_str:n { 0123456789ABCDEF } } \tl_map_inline:Nn \l_@@_internal_tl { \tl_map_inline:Nn \l_@@_internal_tl @@ -541,7 +541,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_convert_gmap:N #1 { - \tl_gset:Nx \g_@@_result_tl + \__kernel_tl_gset:Nx \g_@@_result_tl { \exp_after:wN \@@_convert_gmap_loop:NN \exp_after:wN #1 @@ -566,7 +566,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_convert_gmap_internal:N #1 { - \tl_gset:Nx \g_@@_result_tl + \__kernel_tl_gset:Nx \g_@@_result_tl { \exp_after:wN \@@_convert_gmap_internal_loop:Nww \exp_after:wN #1 @@ -690,7 +690,7 @@ { \group_begin: #1 - \tl_gset:Nx \g_@@_result_tl { \__kernel_str_to_other_fast:n {#4} } + \__kernel_tl_gset:Nx \g_@@_result_tl { \__kernel_str_to_other_fast:n {#4} } \exp_after:wN \@@_convert:wwwnn \tl_to_str:n {#5} /// \s_@@_stop { decode } { unescape } @@ -949,7 +949,7 @@ \cs_new_protected:Npn \@@_convert_unescape_: { \flag_clear:n { str_byte } - \tl_gset:Nx \g_@@_result_tl + \__kernel_tl_gset:Nx \g_@@_result_tl { \exp_args:No \@@_filter_bytes:n \g_@@_result_tl } \@@_if_flag_error:nnx { str_byte } { non-byte } { bytes } } @@ -1045,7 +1045,7 @@ \cs_new_protected:Npn \@@_convert_decode_clist: { \clist_gset:No \g_@@_result_tl \g_@@_result_tl - \tl_gset:Nx \g_@@_result_tl + \__kernel_tl_gset:Nx \g_@@_result_tl { \exp_args:No \clist_map_function:nN \g_@@_result_tl \@@_decode_clist_char:n @@ -1068,7 +1068,7 @@ \cs_new_protected:Npn \@@_convert_encode_clist: { \@@_convert_gmap_internal:N \@@_encode_clist_char:n - \tl_gset:Nx \g_@@_result_tl { \tl_tail:N \g_@@_result_tl } + \__kernel_tl_gset:Nx \g_@@_result_tl { \tl_tail:N \g_@@_result_tl } } \cs_new:Npn \@@_encode_clist_char:n #1 { , #1 } % \end{macrocode} @@ -1362,7 +1362,7 @@ \group_begin: \flag_clear:n { str_error } \int_set:Nn \tex_escapechar:D { 92 } - \tl_gset:Nx \g_@@_result_tl + \__kernel_tl_gset:Nx \g_@@_result_tl { \@@_output_byte:w " \exp_last_unbraced:Nf \@@_unescape_hex_auxi:N @@ -1441,7 +1441,7 @@ \flag_clear:n { str_byte } \flag_clear:n { str_error } \int_set:Nn \tex_escapechar:D { 92 } - \tl_gset:Nx \g_@@_result_tl + \__kernel_tl_gset:Nx \g_@@_result_tl { \exp_after:wN #3 \g_@@_result_tl #1 ? { ? \prg_break: } @@ -1527,13 +1527,13 @@ \flag_clear:n { str_byte } \flag_clear:n { str_error } \int_set:Nn \tex_escapechar:D { 92 } - \tl_gset:Nx \g_@@_result_tl + \__kernel_tl_gset:Nx \g_@@_result_tl { \exp_after:wN \@@_unescape_string_newlines:wN \g_@@_result_tl \prg_break: ^^M ? \prg_break_point: } - \tl_gset:Nx \g_@@_result_tl + \__kernel_tl_gset:Nx \g_@@_result_tl { \exp_after:wN \@@_unescape_string_loop:wNNN \g_@@_result_tl #1 ?? { ? \prg_break: } @@ -1984,7 +1984,7 @@ \flag_clear:n { str_extra } \flag_clear:n { str_overlong } \flag_clear:n { str_overflow } - \tl_gset:Nx \g_@@_result_tl + \__kernel_tl_gset:Nx \g_@@_result_tl { \exp_after:wN \@@_decode_utf_viii_start:N \g_@@_result_tl { \prg_break: \@@_decode_utf_viii_end: } @@ -2274,7 +2274,7 @@ \flag_clear:n { str_extra } \flag_clear:n { str_end } \cs_set:Npn \@@_tmp:w ##1 ##2 { ` ## #1 } - \tl_gset:Nx \g_@@_result_tl + \__kernel_tl_gset:Nx \g_@@_result_tl { \exp_after:wN \@@_decode_utf_xvi_pair:NN #2 \q_@@_nil \q_@@_nil @@ -2562,7 +2562,7 @@ \flag_clear:n { str_end } \flag_clear:n { str_error } \cs_set:Npn \@@_tmp:w ##1 ##2 { ` ## #1 } - \tl_gset:Nx \g_@@_result_tl + \__kernel_tl_gset:Nx \g_@@_result_tl { \exp_after:wN \@@_decode_utf_xxxii_loop:NNNN #2 \s_@@_stop \s_@@_stop \s_@@_stop \s_@@_stop diff --git a/Master/texmf-dist/source/latex/l3kernel/l3str.dtx b/Master/texmf-dist/source/latex/l3kernel/l3str.dtx index 7a992f4cffd..bdde8616550 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 2020-10-05} +% \date{Released 2020-10-27} % % \maketitle % @@ -1027,13 +1027,13 @@ % hide in braces. % \begin{macrocode} \cs_new_protected:Npn \str_replace_once:Nnn - { \@@_replace:NNNnn \prg_do_nothing: \tl_set:Nx } + { \@@_replace:NNNnn \prg_do_nothing: \__kernel_tl_set:Nx } \cs_new_protected:Npn \str_greplace_once:Nnn - { \@@_replace:NNNnn \prg_do_nothing: \tl_gset:Nx } + { \@@_replace:NNNnn \prg_do_nothing: \__kernel_tl_gset:Nx } \cs_new_protected:Npn \str_replace_all:Nnn - { \@@_replace:NNNnn \@@_replace_next:w \tl_set:Nx } + { \@@_replace:NNNnn \@@_replace_next:w \__kernel_tl_set:Nx } \cs_new_protected:Npn \str_greplace_all:Nnn - { \@@_replace:NNNnn \@@_replace_next:w \tl_gset:Nx } + { \@@_replace:NNNnn \@@_replace_next:w \__kernel_tl_gset:Nx } \cs_generate_variant:Nn \str_replace_once:Nnn { c } \cs_generate_variant:Nn \str_greplace_once:Nnn { c } \cs_generate_variant:Nn \str_replace_all:Nnn { c } diff --git a/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx b/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx index ff694adb606..4e5e3816c7a 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 2020-10-05} +% \date{Released 2020-10-27} % % \maketitle % @@ -972,7 +972,7 @@ end \tl_new:N \g_@@_backend_tl \@@_finalise:n { - \tl_gset:Nx \g_@@_backend_tl + \__kernel_tl_gset:Nx \g_@@_backend_tl { \sys_if_engine_xetex:TF { xdvipdfmx } diff --git a/Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx b/Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx index 3f8f381063f..fd41c6bdd31 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 2020-10-05} +% \date{Released 2020-10-27} % % \maketitle % @@ -155,6 +155,9 @@ % \begin{macro}[EXP]{\@@_change_case_lower_sigma:nnnN} % \begin{macro}[EXP]{\@@_change_case_lower_sigma:nnNw} % \begin{macro}[EXP]{\@@_change_case_lower_sigma:NnnN} +% \begin{macro}[EXP]{\@@_change_case_lower_sigma:nnnNN} +% \begin{macro}[EXP]{\@@_change_case_lower_sigma:nnw} +% \begin{macro}[EXP]{\@@_change_case_lower_sigma:nnN} % \begin{macro}[EXP] % {\@@_change_case_char_title:nnN, \@@_change_case_char_titleonly:nnN} % \begin{macro}[EXP] @@ -206,6 +209,7 @@ \cs_new:Npn \@@_change_case_aux:nnn #1#2#3 { \group_align_safe_begin: + \cs_if_exist_use:c { @@_change_case_boundary_ #2 _ #3 :Nnnw } \@@_change_case_loop:nnw {#2} {#3} #1 \q_@@_recursion_tail \q_@@_recursion_stop \@@_change_case_result:n { } @@ -296,6 +300,7 @@ } { \@@_change_case_store:n { ~ } + \cs_if_exist_use:c { @@_change_case_boundary_ #1 _ #2 :Nnnw } \@@_change_case_loop:nnw {#1} {#2} } % \end{macrocode} @@ -461,16 +466,10 @@ % is there the special case of a terminal sigma. If not, then we pass to % a simple character mapping. % \begin{macrocode} -\cs_new:Npx \@@_change_case_char_lower:nnN #1#2#3 +\cs_new:Npn \@@_change_case_char_lower:nnN #1#2#3 { - \exp_not:N \cs_if_exist_use:cF { @@_change_case_lower_ #2 :nnnN } - { - \bool_lazy_or:nnTF - { \sys_if_engine_luatex_p: } - { \sys_if_engine_xetex_p: } - { \exp_not:N \@@_change_case_lower_sigma:nnnN } - { \exp_not:N \@@_change_case_char:nnnN } - } + \cs_if_exist_use:cF { @@_change_case_lower_ #2 :nnnN } + { \@@_change_case_lower_sigma:nnnN } {#1} {#1} {#2} #3 } \cs_new:Npn \@@_change_case_char_upper:nnN #1#2#3 @@ -485,7 +484,7 @@ % then there is a look-ahead phase: the logic here is simply based on letters. % The one exception is Dutch: see below. % \begin{macrocode} -\bool_lazy_or:nnT +\bool_lazy_or:nnTF { \sys_if_engine_luatex_p: } { \sys_if_engine_xetex_p: } { @@ -518,6 +517,48 @@ } } % \end{macrocode} +% In the $8$-bit engines, we have to look ahead once we find the first byte of the +% possible hit. +% \begin{macrocode} + { + \cs_new:Npn \@@_change_case_lower_sigma:nnnN #1#2#3#4 + { + \int_compare:nNnTF { `#4 } = { "CE } + { \@@_change_case_lower_sigma:nnnNN } + { \@@_change_case_char:nnnN } + {#1} {#2} {#3} #4 + } + \cs_new:Npn \@@_change_case_lower_sigma:nnnNN #1#2#3#4#5 + { + \int_compare:nNnTF { `#5 } = { "A3 } + { \@@_change_case_lower_sigma:nnw {#2} {#3} } + { \@@_change_case_char:nnnN {#1} {#2} {#3} #4#5 } + } + \cs_new:Npn \@@_change_case_lower_sigma:nnw #1#2#3 \q_@@_recursion_stop + { + \tl_if_head_is_N_type:nTF {#3} + { \@@_change_case_lower_sigma:nnN } + { + \@@_change_case_store:V \c_@@_final_sigma_tl + \@@_change_case_loop:nnw + } + {#1} {#2} #3 \q_@@_recursion_stop + } + \cs_new:Npn \@@_change_case_lower_sigma:nnN #1#2#3 + { + \bool_lazy_or:nnTF + { \token_if_letter_p:N #3 } + { + \bool_lazy_and_p:nn + { \token_if_active_p:N #3 } + { \int_compare_p:nNn { `#3 } > { "80 } } + } + { \@@_change_case_store:V \c_@@_sigma_tl } + { \@@_change_case_store:V \c_@@_final_sigma_tl } + \@@_change_case_loop:nnw {#1} {#2} #3 + } + } +% \end{macrocode} % For titlecasing, we need to fully expand the new character to see if it % is a letter (or active) But that means looking ahead in the $8$-bit case, so % we have to grab the required tokens up-front. Life is a lot easier for Unicode @@ -664,6 +705,9 @@ % \end{macro} % \end{macro} % \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} % % \begin{macro}[EXP]{\@@_change_case_upper_de-alt:nnnN} % \begin{macro}[EXP]{\@@_change_case_upper_de-alt:nnnNN} @@ -710,16 +754,28 @@ % \end{macro} % % \begin{macro}[EXP]{\@@_change_case_upper_el:nnnN} -% \begin{macro}[EXP]{\@@_change_case_upper_el:nnnn} -% \begin{macro}[EXP]{\@@_change_case_upper_el_aux:nnnN} -% \begin{macro}[EXP]{\@@_change_case_upper_el_loop:nnw} -% \begin{macro}[EXP]{\@@_change_case_upper_el:nnN} -% \begin{macro}[EXP]{\@@_change_case_if_greek:nTF} +% \begin{macro}[EXP]{\@@_change_case_upper_el:nnn} +% \begin{macro}[EXP]{\@@_change_case_upper_el:nnNw} +% \begin{macro}[EXP]{\@@_change_case_upper_el:NnnN} +% \begin{macro}[EXP]{\@@_change_case_upper_el_dialytika:nnN} +% \begin{macro}[EXP]{\@@_change_case_upper_el_dialytika:N} +% \begin{macro}[EXP]{\@@_change_case_upper_el_hiatus:nnNw} +% \begin{macro}[EXP]{\@@_change_case_upper_el_hiatus:nnN} +% \begin{macro}[EXP]{\@@_change_case_upper_el_gobble:nnw} +% \begin{macro}[EXP]{\@@_change_case_upper_el_gobble:nnN} +% \begin{macro}[EXP,TF]{\@@_change_case_if_greek:n} +% \begin{macro}[EXP,pTF]{\@@_change_case_if_greek:n} +% \begin{macro}[EXP,pTF]{\@@_change_case_if_greek_accent:n} +% \begin{macro}[EXP,pTF]{\@@_change_case_if_greek_diacritic:n} +% \begin{macro}[EXP,TF]{\@@_change_case_if_takes_dialytika:n} % For Greek uppercasing, we need to know if characters \emph{in the Greek % range} have accents. That means doing a \textsc{nfd} conversion first, then % starting a search. As described by the Unicode \textsc{cldr}, Greek accents % need to be found \emph{after} any U+0308 (diaeresis) and are done in two -% groups to allow for the canonical ordering. +% groups to allow for the canonical ordering. The implementation here follows +% the data and examples from ICU +% (\url{https://sites.google.com/site/icusite/design/case/greek-upper}), +% although necessarily the implementation is somewhat different. % \begin{macrocode} \bool_lazy_or:nnT { \sys_if_engine_luatex_p: } @@ -729,97 +785,233 @@ { \@@_change_case_if_greek:nTF { `#4 } { - \exp_args:Ne \@@_change_case_upper_el:nnnn - { \char_to_nfd:N #4 } {#1} {#2} {#3} + \exp_args:Ne \@@_change_case_upper_el:nnn + { \char_to_nfd:N #4 } {#2} {#3} } { \@@_change_case_char:nnnN {#1} {#2} {#3} #4 } } - \cs_new:Npn \@@_change_case_upper_el:nnnn #1#2#3#4 - { \@@_change_case_upper_el_aux:nnnN {#2} {#3} {#4} #1 } - \cs_new:Npn \@@_change_case_upper_el_aux:nnnN #1#2#3#4 - { - \@@_change_case_store:e { \use:c { char_ #1 case:N } #4 } - \@@_change_case_upper_el_loop:nnw {#2} {#3} - } - \cs_new:Npn \@@_change_case_upper_el_loop:nnw - #1#2#3 \q_@@_recursion_stop + \cs_new:Npn \@@_change_case_upper_el:nnn #1#2#3 + { \@@_change_case_upper_el:nnNw {#2} {#3} #1 } +% \end{macrocode} +% At this stage we have the first NFD codepoint as |#3|. What we need to know +% is whether after that we have another character token, either from the NFD or +% directly in the input. If not, we store the changed character at this stage. +% \begin{macrocode} + \cs_new:Npn \@@_change_case_upper_el:nnNw #1#2#3#4 \q_@@_recursion_stop { - \tl_if_head_is_N_type:nTF {#3} - { \@@_change_case_upper_el:nnN } - { \@@_change_case_loop:nnw } - {#1} {#2} #3 \q_@@_recursion_stop + \tl_if_head_is_N_type:nTF {#4} + { \@@_change_case_upper_el:NnnN #3 } + { + \@@_change_case_store:e { \char_uppercase:N #3 } + \@@_change_case_loop:nnw + } + {#1} {#2} #4 \q_@@_recursion_stop } % \end{macrocode} -% In addition to the Greek accents, we list three cases here where an -% accent outside the Greek range has a \text{nfd} that would make it -% equivalent. That includes U+0344, which has to insert U+0308. +% Now, we check the detail of the next codepoint: again we filter out the +% not-a-char cases, before checking if it's an dialytika, accent or diacritic. +% (The latter do not have the same hiatus behavior as accents.) % \begin{macrocode} - \cs_new:Npn \@@_change_case_upper_el:nnN #1#2#3 + \cs_new:Npn \@@_change_case_upper_el:NnnN #1#2#3#4 { - \token_if_cs:NTF #3 - { \@@_change_case_loop:nnw {#1} {#2} #3 } + \token_if_cs:NTF #4 { - \int_compare:nNnTF { `#3 } = { "0308 } - { - \@@_change_case_store:n {#3} - \@@_change_case_upper_el_loop:nnw {#1} {#2} - } + \@@_change_case_store:e { \char_uppercase:N #1 } + \@@_change_case_loop:nnw {#2} {#3} #4 + } + { + \int_compare:nNnTF { `#4 } = { "0308 } + { \@@_change_case_upper_el_dialytika:nnN {#2} {#3} #1 } { - \bool_lazy_any:nTF + \@@_change_case_if_greek_accent:nTF { `#4 } + { \@@_change_case_upper_el_hiatus:nnNw {#2} {#3} #1 } { - { \int_compare_p:nNn { `#3 } = { "0300 } } - { \int_compare_p:nNn { `#3 } = { "0301 } } - { \int_compare_p:nNn { `#3 } = { "0304 } } - { \int_compare_p:nNn { `#3 } = { "0306 } } - { \int_compare_p:nNn { `#3 } = { "0308 } } - { \int_compare_p:nNn { `#3 } = { "0313 } } - { \int_compare_p:nNn { `#3 } = { "0314 } } - { \int_compare_p:nNn { `#3 } = { "0342 } } - { \int_compare_p:nNn { `#3 } = { "0340 } } - { \int_compare_p:nNn { `#3 } = { "0341 } } - { \int_compare_p:nNn { `#3 } = { "0343 } } - } - { \@@_change_case_upper_el_loop:nnw {#1} {#2} } - { - \int_compare:nNnTF { `#3 } = { "0344 } + \@@_change_case_if_greek_diacritic:nTF { `#4 } { - \@@_change_case_store:e - { - \char_generate:nn { "0308 } - { \@@_char_catcode:N #3 } - } - \@@_change_case_upper_el_loop:nnw {#1} {#2} + \@@_change_case_store:e { \char_uppercase:N #1 } + \@@_change_case_loop:nnw {#2} {#3} } { - \int_compare:nNnTF { `#3 } = { "0345 } - { \@@_change_case_loop:nnw {#1} {#2} } - { \@@_change_case_loop:nnw {#1} {#2} #3 } + \@@_change_case_store:e { \char_uppercase:N #1 } + \@@_change_case_loop:nnw {#2} {#3} #4 } } } } } - \prg_new_conditional:Npnn \@@_change_case_if_greek:n #1 { TF } +% \end{macrocode} +% We handle \emph{dialytika} in parts as it's also needed for the hiatus. +% We know only two letters take it, so we can shortcut here on the second +% part of the tests. +% \begin{macrocode} + \cs_new:Npn \@@_change_case_upper_el_dialytika:nnN #1#2#3 + { + \@@_change_case_if_takes_dialytika:nTF { `#3 } + { \@@_change_case_upper_el_dialytika:N #3 } + { \@@_change_case_store:e { \char_uppercase:N #3 } } + \@@_change_case_upper_el_gobble:nnw {#1} {#2} + } + \cs_new:Npn \@@_change_case_upper_el_dialytika:N #1 + { + \@@_change_case_store:e + { + \bool_lazy_or:nnTF + { \int_compare_p:nNn { `#1 } = { "0399 } } + { \int_compare_p:nNn { `#1 } = { "03B9 } } + { \char_generate:nn { "03AA } { \@@_char_catcode:N #1 } } + { \char_generate:nn { "03AB } { \@@_char_catcode:N #1 } } + } + } +% \end{macrocode} +% Adding a hiatus needs some of the same ideas, but if there is not one we +% skip this code point, hence needing a separate function. +% \begin{macrocode} + \cs_new:Npn \@@_change_case_upper_el_hiatus:nnNw + #1#2#3#4 \q_@@_recursion_stop + { + \@@_change_case_store:e { \char_uppercase:N #3 } + \tl_if_head_is_N_type:nTF {#4} + { \@@_change_case_upper_el_hiatus:nnN } + { \@@_change_case_loop:nnw } + {#1} {#2} #4 \q_@@_recursion_stop + } + \cs_new:Npn \@@_change_case_upper_el_hiatus:nnN #1#2#3 + { + \token_if_cs:NTF #3 + { \@@_change_case_loop:nnw {#1} {#2} #3 } + { + \@@_change_case_if_takes_dialytika:nTF { `#3 } + { + \@@_change_case_upper_el_dialytika:N #3 + \@@_change_case_upper_el_gobble:nnw {#1} {#2} + } + { \@@_change_case_loop:nnw {#1} {#2} #3 } + } + } +% \end{macrocode} +% For clearing out trailing combining marks after we have dealt with +% the first one. +% \begin{macrocode} + \cs_new:Npn \@@_change_case_upper_el_gobble:nnw + #1#2#3 \q_@@_recursion_stop { - \if_int_compare:w #1 < "0370 \exp_stop_f: + \tl_if_head_is_N_type:nTF {#3} + { \@@_change_case_upper_el_gobble:nnN } + { \@@_change_case_loop:nnw } + {#1} {#2} #3 \q_@@_recursion_stop + } + \cs_new:Npn \@@_change_case_upper_el_gobble:nnN #1#2#3 + { + \bool_lazy_or:nnTF + { \token_if_cs_p:N #3 } + { + ! \bool_lazy_or_p:nn + { \@@_change_case_if_greek_accent_p:n { `#3 } } + { \@@_change_case_if_greek_diacritic_p:n { `#3 } } + } + { \@@_change_case_loop:nnw {#1} {#2} #3 } + { \@@_change_case_upper_el_gobble:nnw {#1} {#2} } + } + } +% \end{macrocode} +% Luckily the Greek range is limited and clear. +% \begin{macrocode} +\prg_new_conditional:Npnn \@@_change_case_if_greek:n #1 { TF } + { + \if_int_compare:w #1 < "0370 \exp_stop_f: + \prg_return_false: + \else: + \if_int_compare:w #1 > "03FF \exp_stop_f: + \if_int_compare:w #1 < "1F00 \exp_stop_f: \prg_return_false: \else: - \if_int_compare:w #1 > "03FF \exp_stop_f: - \if_int_compare:w #1 < "1F00 \exp_stop_f: - \prg_return_false: + \if_int_compare:w #1 > "1FFF \exp_stop_f: + \prg_return_false: + \else: + \prg_return_true: + \fi: + \fi: + \else: + \prg_return_true: + \fi: + \fi: + } +% \end{macrocode} +% We follow ICU in adding a few extras to the accent list here. +% \begin{macrocode} +\prg_new_conditional:Npnn \@@_change_case_if_greek_accent:n #1 { TF , p } + { + \if_int_compare:w #1 = "0300 \exp_stop_f: + \prg_return_true: + \else: + \if_int_compare:w #1 = "0301 \exp_stop_f: + \prg_return_true: + \else: + \if_int_compare:w #1 = "0342 \exp_stop_f: + \prg_return_true: + \else: + \if_int_compare:w #1 = "0302 \exp_stop_f: + \prg_return_true: + \else: + \if_int_compare:w #1 = "0303 \exp_stop_f: + \prg_return_true: \else: - \if_int_compare:w #1 > "1FFF \exp_stop_f: - \prg_return_false: - \else: + \if_int_compare:w #1 = "0311 \exp_stop_f: \prg_return_true: + \else: + \prg_return_false: \fi: \fi: - \else: + \fi: + \fi: + \fi: + \fi: + } +\prg_new_conditional:Npnn \@@_change_case_if_greek_diacritic:n + #1 { TF , p } + { + \if_int_compare:w #1 = "0304 \exp_stop_f: + \prg_return_true: + \else: + \if_int_compare:w #1 = "0306 \exp_stop_f: + \prg_return_true: + \else: + \if_int_compare:w #1 = "0313 \exp_stop_f: + \prg_return_true: + \else: + \if_int_compare:w #1 = "0314 \exp_stop_f: \prg_return_true: + \else: + \if_int_compare:w #1 = "0343 \exp_stop_f: + \prg_return_true: + \else: + \prg_return_false: + \fi: \fi: \fi: - } + \fi: + \fi: } +\prg_new_conditional:Npnn \@@_change_case_if_takes_dialytika:n #1 { TF } + { + \if_int_compare:w #1 = "0399 \exp_stop_f: + \prg_return_true: + \else: + \if_int_compare:w #1 = "03B9 \exp_stop_f: + \prg_return_true: + \else: + \if_int_compare:w #1 = "03A5 \exp_stop_f: + \prg_return_true: + \else: + \if_int_compare:w #1 = "03C5 \exp_stop_f: + \prg_return_true: + \else: + \prg_return_false: + \fi: + \fi: + \fi: + \fi: + } % \end{macrocode} % \end{macro} % \end{macro} @@ -827,6 +1019,76 @@ % \end{macro} % \end{macro} % \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \begin{macro}[EXP]{\@@_change_case_boundary_upper_el:Nnnw} +% \begin{macro}[EXP]{\@@_change_case_boundary_upper_el:nnN} +% \begin{macro}[EXP]{\@@_change_case_boundary_upper_el:nnNw} +% \begin{macro}[EXP]{\@@_change_case_boundary_upper_el:NnnN} +% There is one special case in Greek that needs to be picked up based on +% being an isolated letter. We do that using a test similar to final sigma, +% but it has to fire off from the space grabber. +% \begin{macrocode} +\bool_lazy_or:nnT + { \sys_if_engine_luatex_p: } + { \sys_if_engine_xetex_p: } + { + \cs_new:Npn \@@_change_case_boundary_upper_el:Nnnw + #1#2#3#4 \q_@@_recursion_stop + { + \tl_if_head_is_N_type:nTF {#4} + { \@@_change_case_boundary_upper_el:nnN } + { \@@_change_case_loop:nnw } + {#2} {#3} #4 \q_@@_recursion_stop + } + \cs_new:Npn \@@_change_case_boundary_upper_el:nnN #1#2#3 + { + \bool_lazy_or:nnTF + { \token_if_cs_p:N #3 } + { + ! \bool_lazy_or_p:nn + { \int_compare_p:nNn { `#3 } = { "03AE } } + { \int_compare_p:nNn { `#3 } = { "1F22 } } + } + { \@@_change_case_loop:nnw } + { \@@_change_case_boundary_upper_el:nnNw } + {#1} {#2} #3 + } + \cs_new:Npn \@@_change_case_boundary_upper_el:nnNw + #1#2#3#4 \q_@@_recursion_stop + { + \tl_if_head_is_N_type:nTF {#4} + { \@@_change_case_boundary_upper_el:NnnN #3 } + { + \@@_change_case_store:e + { \char_generate:nn { "0389 } { \@@_char_catcode:N #3 } } + \@@_change_case_loop:nnw + } + {#1} {#2} #4 \q_@@_recursion_stop + } + \cs_new:Npn \@@_change_case_boundary_upper_el:NnnN #1#2#3#4 + { + \token_if_letter:NTF #4 + { \@@_change_case_loop:nnw {#2} {#3} #1#4 } + { + \@@_change_case_store:e + { \char_generate:nn { "0389 } { \@@_char_catcode:N #1 } } + \@@_change_case_loop:nnw {#2} {#3} #4 + } + } + } +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} % \begin{macro}[EXP]{\@@_change_case_title_el:nnnN} % Titlecasing retains accents, but to prevent the uppercasing code % from kicking in, there has to be an explicit function here. @@ -1198,14 +1460,17 @@ % % \begin{variable} % { -% \c_@@_dotless_i_tl , -% \c_@@_dotted_I_tl , -% \c_@@_i_ogonek_tl , -% \c_@@_I_ogonek_tl , +% \c_@@_dotless_i_tl , +% \c_@@_dotted_I_tl , +% \c_@@_i_ogonek_tl , +% \c_@@_I_ogonek_tl , +% \c_@@_final_sigma_tl , +% \c_@@_sigma_tl , % \c_@@_grosses_Eszett_tl % } % For cases where there is an $8$-bit option in the |T1| font set up, -% a variant is provided in both cases. +% a variant is provided in both cases. There are also a few extras for +% |LGR|. % \begin{macrocode} \group_begin: \bool_lazy_or:nnF @@ -1238,6 +1503,8 @@ \@@_tmp:w \c_@@_dotted_I_tl { 0130 } \@@_tmp:w \c_@@_i_ogonek_tl { 012F } \@@_tmp:w \c_@@_I_ogonek_tl { 012E } + \@@_tmp:w \c_@@_final_sigma_tl { 03C2 } + \@@_tmp:w \c_@@_sigma_tl { 03C3 } \@@_tmp:w \c_@@_grosses_Eszett_tl { 1E9E } } \group_end: @@ -1245,7 +1512,9 @@ % \end{variable} % % For $8$-bit engines we now need to define the case-change data for -% the multi-octet mappings. These need a list of what code points are +% the multi-octet mappings. This data is here not in the \pkg{char} module +% as the multi-byte nature means they are never |N|-type. +% These need a list of what code points are % doable in |T1| so the list is hard coded (there's no saving in loading % the mappings dynamically). All of the straight-forward ones have two % octets, so that is taken as read. @@ -1454,9 +1723,18 @@ { 042E } { 044E } { 042F } { 044F } % \end{macrocode} -% Core Greek support: there may need to be a little more work here to -% deal completely with accents. +% Greek support: everything in the two-octet range. % \begin{macrocode} + { 0370 } { 0371 } + { 0372 } { 0373 } + { 0376 } { 0377 } + { 03FD } { 037B } + { 03FE } { 037C } + { 03FF } { 037D } + { 0386 } { 03AC } + { 0388 } { 03AD } + { 0389 } { 03AE } + { 038A } { 03AF } { 0391 } { 03B1 } { 0392 } { 03B2 } { 0393 } { 03B3 } @@ -1481,19 +1759,82 @@ { 03A7 } { 03C7 } { 03A8 } { 03C8 } { 03A9 } { 03C9 } + { 03AA } { 03CA } + { 03AB } { 03CB } + { 038C } { 03CC } + { 038E } { 03CD } + { 038F } { 03CE } + { 03CF } { 03D7 } { 03D8 } { 03D9 } { 03DA } { 03DB } { 03DC } { 03DD } { 03DE } { 03DF } { 03E0 } { 03E1 } + { 03E2 } { 03E3 } + { 03E4 } { 03E5 } + { 03E6 } { 03E7 } + { 03E8 } { 03E9 } + { 03EA } { 03EB } + { 03EC } { 03ED } + { 03EE } { 03EF } + { 03F9 } { 03F2 } + { 037F } { 03F3 } + { 03F7 } { 03F8 } + { 03FA } { 03FB } \q_recursion_tail ? \q_recursion_stop +% \end{macrocode} +% Odds and ends for Greek; mainly symbols that are for compatibility, +% but also things like the terminal sigma. Almost all are uppercase +% mappings, but there is one that is not! +% \begin{macrocode} \cs_set_protected:Npn \@@_tmp:w #1#2#3 { \group_begin: - \cs_set_protected:Npn \@@_tmp:w ##1##2##3##4 + \cs_set_protected:Npn \@@_tmp:w ##1##2##3##4##5##6##7##8 { \tl_const:cx + { + c_@@_ #3 case_ + \char_generate:nn {##1} { 12 } + \char_generate:nn {##2} { 12 } + _tl + } + { + \exp_after:wN \exp_after:wN \exp_after:wN + \exp_not:N \char_generate:nn {##5} { 13 } + \exp_after:wN \exp_after:wN \exp_after:wN + \exp_not:N \char_generate:nn {##6} { 13 } + } + } + \use:x + { + \@@_tmp:w + \char_to_utfviii_bytes:n { "#1 } + \char_to_utfviii_bytes:n { "#2 } + } + \group_end: + } + \@@_tmp:w { 0345 } { 0399 } { upper } + \@@_tmp:w { 03C2 } { 03A3 } { upper } + \@@_tmp:w { 03D0 } { 0392 } { upper } + \@@_tmp:w { 03D1 } { 0398 } { upper } + \@@_tmp:w { 03D5 } { 03A6 } { upper } + \@@_tmp:w { 03D6 } { 03A0 } { upper } + \@@_tmp:w { 03F0 } { 039A } { upper } + \@@_tmp:w { 03F1 } { 03A1 } { upper } + \@@_tmp:w { 03F4 } { 03B8 } { lower } + \@@_tmp:w { 03F5 } { 0395 } { upper } +% \end{macrocode} +% Odds and ends that are not simple one-to-one mappings. These +% are still two-octet code points. +% \begin{macrocode} + \cs_set_protected:Npn \@@_tmp:w #1#2#3 + { + \group_begin: + \cs_set_protected:Npn \@@_tmp:w ##1##2##3##4 + { + \tl_const:cn { c_@@_ #3 case_ \char_generate:nn {##1} { 12 } @@ -1509,8 +1850,182 @@ \@@_tmp:w { 00DF } { SS } { upper } \@@_tmp:w { 00DF } { Ss } { title } \@@_tmp:w { 0131 } { I } { upper } - } - \group_end: +% \end{macrocode} +% Greek support: the three-octet code points. +% \begin{macrocode} + \cs_set_protected:Npn \@@_tmp:nnnnnn #1#2#3#4#5#6#7 + { + \tl_const:cx + { + c_@@_ #1 case_ + \char_generate:nn {#2} { 12 } + \char_generate:nn {#3} { 12 } + \char_generate:nn {#4} { 12 } + _tl + } + { + \exp_after:wN \exp_after:wN \exp_after:wN + \exp_not:N \char_generate:nn {#5} { 13 } + \exp_after:wN \exp_after:wN \exp_after:wN + \exp_not:N \char_generate:nn {#6} { 13 } + \exp_after:wN \exp_after:wN \exp_after:wN + \exp_not:N \char_generate:nn {#7} { 13 } + } + } + \cs_set_protected:Npn \@@_tmp:w #1#2#3#4#5#6#7#8 + { + \tl_const:cx + { + c_@@_lowercase_ + \char_generate:nn {#1} { 12 } + \char_generate:nn {#2} { 12 } + \char_generate:nn {#3} { 12 } + _tl + } + { + \exp_after:wN \exp_after:wN \exp_after:wN + \exp_not:N \char_generate:nn {#5} { 13 } + \exp_after:wN \exp_after:wN \exp_after:wN + \exp_not:N \char_generate:nn {#6} { 13 } + \exp_after:wN \exp_after:wN \exp_after:wN + \exp_not:N \char_generate:nn {#7} { 13 } + } + \@@_tmp:nnnnnn { upper } {#5} {#6} {#7} {#1} {#2} {#3} + \@@_tmp:nnnnnn { title } {#5} {#6} {#7} {#1} {#2} {#3} + } + \@@_loop:nn + { 1F08 } { 1F00 } + { 1F09 } { 1F01 } + { 1F0A } { 1F02 } + { 1F0B } { 1F03 } + { 1F0C } { 1F04 } + { 1F0D } { 1F05 } + { 1F0E } { 1F06 } + { 1F0F } { 1F07 } + { 1F18 } { 1F10 } + { 1F19 } { 1F11 } + { 1F1A } { 1F12 } + { 1F1B } { 1F13 } + { 1F1C } { 1F14 } + { 1F1D } { 1F15 } + { 1F28 } { 1F20 } + { 1F29 } { 1F21 } + { 1F2A } { 1F22 } + { 1F2B } { 1F23 } + { 1F2C } { 1F24 } + { 1F2D } { 1F25 } + { 1F2E } { 1F26 } + { 1F2F } { 1F27 } + { 1F38 } { 1F30 } + { 1F39 } { 1F31 } + { 1F3A } { 1F32 } + { 1F3B } { 1F33 } + { 1F3C } { 1F34 } + { 1F3D } { 1F35 } + { 1F3E } { 1F36 } + { 1F3F } { 1F37 } + { 1F48 } { 1F40 } + { 1F49 } { 1F41 } + { 1F4A } { 1F42 } + { 1F4B } { 1F43 } + { 1F4C } { 1F44 } + { 1F4D } { 1F45 } + { 1F59 } { 1F51 } + { 1F5B } { 1F53 } + { 1F5D } { 1F55 } + { 1F5F } { 1F57 } + { 1F68 } { 1F60 } + { 1F69 } { 1F61 } + { 1F6A } { 1F62 } + { 1F6B } { 1F63 } + { 1F6C } { 1F64 } + { 1F6D } { 1F65 } + { 1F6E } { 1F66 } + { 1F6F } { 1F67 } + { 1FBA } { 1F70 } + { 1FBB } { 1F71 } + { 1FC8 } { 1F72 } + { 1FC9 } { 1F73 } + { 1FCA } { 1F74 } + { 1FCB } { 1F75 } + { 1FDA } { 1F76 } + { 1FDB } { 1F77 } + { 1FF8 } { 1F78 } + { 1FF9 } { 1F79 } + { 1FEA } { 1F7A } + { 1FEB } { 1F7B } + { 1FFA } { 1F7C } + { 1FFB } { 1F7D } + { 1F88 } { 1F80 } + { 1F89 } { 1F81 } + { 1F8A } { 1F82 } + { 1F8B } { 1F83 } + { 1F8C } { 1F84 } + { 1F8D } { 1F85 } + { 1F8E } { 1F86 } + { 1F8F } { 1F87 } + { 1F98 } { 1F90 } + { 1F99 } { 1F91 } + { 1F9A } { 1F92 } + { 1F9B } { 1F93 } + { 1F9C } { 1F94 } + { 1F9D } { 1F95 } + { 1F9E } { 1F96 } + { 1F9F } { 1F97 } + { 1FA8 } { 1FA0 } + { 1FA9 } { 1FA1 } + { 1FAA } { 1FA2 } + { 1FAB } { 1FA3 } + { 1FAC } { 1FA4 } + { 1FAD } { 1FA5 } + { 1FAE } { 1FA6 } + { 1FAF } { 1FA7 } + { 1FB8 } { 1FB0 } + { 1FB9 } { 1FB1 } + { 1FBC } { 1FB3 } + { 1FCC } { 1FC3 } + { 1FD8 } { 1FD0 } + { 1FD9 } { 1FD1 } + { 1FE8 } { 1FE0 } + { 1FE9 } { 1FE1 } + { 1FEC } { 1FE5 } + { 1FFC } { 1FF3 } + \q_recursion_tail ? + \q_recursion_stop +% \end{macrocode} +% One three-octet special case for Greek: it also moves to two-octets! +% \begin{macrocode} + \cs_set_protected:Npn \@@_tmp:w #1#2#3 + { + \group_begin: + \cs_set_protected:Npn \@@_tmp:w ##1##2##3##4##5##6##7##8 + { + \tl_const:cx + { + c_@@_ #3 case_ + \char_generate:nn {##1} { 12 } + \char_generate:nn {##2} { 12 } + \char_generate:nn {##3} { 12 } + _tl + } + { + \exp_after:wN \exp_after:wN \exp_after:wN + \exp_not:N \char_generate:nn {##5} { 13 } + \exp_after:wN \exp_after:wN \exp_after:wN + \exp_not:N \char_generate:nn {##6} { 13 } + } + } + \use:x + { + \@@_tmp:w + \char_to_utfviii_bytes:n { "#1 } + \char_to_utfviii_bytes:n { "#2 } + } + \group_end: + } + \@@_tmp:w { 1FBE } { 0399 } { upper } + } +\group_end: % \end{macrocode} % % The (fixed) look-up mappings for letter-like control sequences. diff --git a/Master/texmf-dist/source/latex/l3kernel/l3text-purify.dtx b/Master/texmf-dist/source/latex/l3kernel/l3text-purify.dtx index b2f0b59fab1..1bc377ed02a 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 2020-10-05} +% \date{Released 2020-10-27} % % \maketitle % @@ -398,10 +398,15 @@ { \text_declare_purify_equivalent:Nn #1 { } } % \end{macrocode} % Environments have to be handled by pure expansion. +% +% \begin{macro}{\@@_end_env:n} % \begin{macrocode} \text_declare_purify_equivalent:Nn \begin { \use:c } -\text_declare_purify_equivalent:Nn \end { \use:c } +\text_declare_purify_equivalent:Nn \end { \@@_end_env:n } +\cs_new:Npn \@@_end_env:n #1 { \cs:w end #1 \cs_end: } % \end{macrocode} +% \end{macro} +% % Some common symbols and similar ideas. % \begin{macrocode} \text_declare_purify_equivalent:Nn \\ { } diff --git a/Master/texmf-dist/source/latex/l3kernel/l3text.dtx b/Master/texmf-dist/source/latex/l3kernel/l3text.dtx index 3672f461770..893c43da59a 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 2020-10-05} +% \date{Released 2020-10-27} % % \maketitle % @@ -163,7 +163,8 @@ % Unicode \TeX{} engines. % \item Greek (\texttt{el}). % Removes accents from Greek letters when uppercasing; titlecasing -% leaves accents in place. +% leaves accents in place. (At present this is implemented only +% for Unicode engines.) % \item Lithuanian (\texttt{lt}). % The lowercase letters i and j should retain a dot above when the % accents grave, acute or tilde are present. This is implemented for diff --git a/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx b/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx index 3f87c17abb1..be4bd2406e8 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 2020-10-05} +% \date{Released 2020-10-27} % % \maketitle % @@ -721,7 +721,7 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_analysis_b:n #1 { - \tl_gset:Nx \g_@@_analysis_result_tl + \__kernel_tl_gset:Nx \g_@@_analysis_result_tl { \@@_analysis_b_loop:w 0; #1 \prg_break_point: diff --git a/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx b/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx index 2ef110b3838..b942e97703c 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 2020-10-05} +% \date{Released 2020-10-27} % % \maketitle % @@ -1269,6 +1269,15 @@ % % \subsection{Functions} % +% \begin{macro}{\__kernel_tl_set:Nx,\__kernel_tl_gset:Nx} +% These two are supplied to get better performance for macros which would +% otherwise use \cs{tl_set:Nx} or \cs{tl_gset:Nx} internally. +% \begin{macrocode} +\cs_new_eq:NN \__kernel_tl_set:Nx \cs_set_nopar:Npx +\cs_new_eq:NN \__kernel_tl_gset:Nx \cs_gset_nopar:Npx +% \end{macrocode} +% \end{macro} +% % \begin{macro}{\tl_new:N, \tl_new:c} % Creating new token list variables is a case of checking for an % existing definition and doing the definition. @@ -1283,12 +1292,14 @@ % \end{macro} % % \begin{macro}{\tl_const:Nn, \tl_const:Nx, \tl_const:cn, \tl_const:cx} -% Constants are also easy to generate. +% Constants are also easy to generate. They use \cs{cs_gset_nopar:Npx} instead +% of \cs{__kernel_tl_gset:Nx} so that the correct scope checking is applied if +% \pkg{l3debug} is used. % \begin{macrocode} \cs_new_protected:Npn \tl_const:Nn #1#2 { \__kernel_chk_if_free_cs:N #1 - \cs_gset_nopar:Npx #1 { \exp_not:n {#2} } + \cs_gset_nopar:Npx #1 { \__kernel_exp_not:w {#2} } } \cs_new_protected:Npn \tl_const:Nx #1#2 { @@ -1350,9 +1361,21 @@ % \cs{scan_stop:} would lead to problems later on. % \begin{macrocode} \cs_new_protected:Npn \tl_concat:NNN #1#2#3 - { \tl_set:Nx #1 { \exp_not:o {#2} \exp_not:o {#3} } } + { + \__kernel_tl_set:Nx #1 + { + \__kernel_exp_not:w \exp_after:wN {#2} + \__kernel_exp_not:w \exp_after:wN {#3} + } + } \cs_new_protected:Npn \tl_gconcat:NNN #1#2#3 - { \tl_gset:Nx #1 { \exp_not:o {#2} \exp_not:o {#3} } } + { + \__kernel_tl_gset:Nx #1 + { + \__kernel_exp_not:w \exp_after:wN {#2} + \__kernel_exp_not:w \exp_after:wN {#3} + } + } \cs_generate_variant:Nn \tl_concat:NNN { ccc } \cs_generate_variant:Nn \tl_gconcat:NNN { ccc } % \end{macrocode} @@ -1419,17 +1442,17 @@ % \enquote{by hand} as it is used quite a lot. % \begin{macrocode} \cs_new_protected:Npn \tl_set:Nn #1#2 - { \cs_set_nopar:Npx #1 { \exp_not:n {#2} } } + { \__kernel_tl_set:Nx #1 { \__kernel_exp_not:w {#2} } } \cs_new_protected:Npn \tl_set:No #1#2 - { \cs_set_nopar:Npx #1 { \exp_not:o {#2} } } + { \__kernel_tl_set:Nx #1 { \__kernel_exp_not:w \exp_after:wN {#2} } } \cs_new_protected:Npn \tl_set:Nx #1#2 - { \cs_set_nopar:Npx #1 {#2} } + { \__kernel_tl_set:Nx #1 {#2} } \cs_new_protected:Npn \tl_gset:Nn #1#2 - { \cs_gset_nopar:Npx #1 { \exp_not:n {#2} } } + { \__kernel_tl_gset:Nx #1 { \__kernel_exp_not:w {#2} } } \cs_new_protected:Npn \tl_gset:No #1#2 - { \cs_gset_nopar:Npx #1 { \exp_not:o {#2} } } + { \__kernel_tl_gset:Nx #1 { \__kernel_exp_not:w \exp_after:wN {#2} } } \cs_new_protected:Npn \tl_gset:Nx #1#2 - { \cs_gset_nopar:Npx #1 {#2} } + { \__kernel_tl_gset:Nx #1 {#2} } \cs_generate_variant:Nn \tl_set:Nn { NV , Nv , Nf } \cs_generate_variant:Nn \tl_set:Nx { c } \cs_generate_variant:Nn \tl_set:Nn { c, co , cV , cv , cf } @@ -1453,21 +1476,45 @@ % Adding to the left is done directly to gain a little performance. % \begin{macrocode} \cs_new_protected:Npn \tl_put_left:Nn #1#2 - { \cs_set_nopar:Npx #1 { \exp_not:n {#2} \exp_not:o #1 } } + { + \__kernel_tl_set:Nx #1 + { \__kernel_exp_not:w {#2} \__kernel_exp_not:w \exp_after:wN {#1} } + } \cs_new_protected:Npn \tl_put_left:NV #1#2 - { \cs_set_nopar:Npx #1 { \exp_not:V #2 \exp_not:o #1 } } + { + \__kernel_tl_set:Nx #1 + { \exp_not:V #2 \__kernel_exp_not:w \exp_after:wN {#1} } + } \cs_new_protected:Npn \tl_put_left:No #1#2 - { \cs_set_nopar:Npx #1 { \exp_not:o {#2} \exp_not:o #1 } } + { + \__kernel_tl_set:Nx #1 + { + \__kernel_exp_not:w \exp_after:wN {#2} + \__kernel_exp_not:w \exp_after:wN {#1} + } + } \cs_new_protected:Npn \tl_put_left:Nx #1#2 - { \cs_set_nopar:Npx #1 { #2 \exp_not:o #1 } } + { \__kernel_tl_set:Nx #1 { #2 \__kernel_exp_not:w \exp_after:wN {#1} } } \cs_new_protected:Npn \tl_gput_left:Nn #1#2 - { \cs_gset_nopar:Npx #1 { \exp_not:n {#2} \exp_not:o #1 } } + { + \__kernel_tl_gset:Nx #1 + { \__kernel_exp_not:w {#2} \__kernel_exp_not:w \exp_after:wN {#1} } + } \cs_new_protected:Npn \tl_gput_left:NV #1#2 - { \cs_gset_nopar:Npx #1 { \exp_not:V #2 \exp_not:o #1 } } + { + \__kernel_tl_gset:Nx #1 + { \exp_not:V #2 \__kernel_exp_not:w \exp_after:wN {#1} } + } \cs_new_protected:Npn \tl_gput_left:No #1#2 - { \cs_gset_nopar:Npx #1 { \exp_not:o {#2} \exp_not:o #1 } } + { + \__kernel_tl_gset:Nx #1 + { + \__kernel_exp_not:w \exp_after:wN {#2} + \__kernel_exp_not:w \exp_after:wN {#1} + } + } \cs_new_protected:Npn \tl_gput_left:Nx #1#2 - { \cs_gset_nopar:Npx #1 { #2 \exp_not:o {#1} } } + { \__kernel_tl_gset:Nx #1 { #2 \__kernel_exp_not:w \exp_after:wN {#1} } } \cs_generate_variant:Nn \tl_put_left:Nn { c } \cs_generate_variant:Nn \tl_put_left:NV { c } \cs_generate_variant:Nn \tl_put_left:No { c } @@ -1495,21 +1542,39 @@ % The same on the right. % \begin{macrocode} \cs_new_protected:Npn \tl_put_right:Nn #1#2 - { \cs_set_nopar:Npx #1 { \exp_not:o #1 \exp_not:n {#2} } } + { \__kernel_tl_set:Nx #1 { \__kernel_exp_not:w \exp_after:wN { #1 #2 } } } \cs_new_protected:Npn \tl_put_right:NV #1#2 - { \cs_set_nopar:Npx #1 { \exp_not:o #1 \exp_not:V #2 } } + { + \__kernel_tl_set:Nx #1 + { \__kernel_exp_not:w \exp_after:wN {#1} \exp_not:V #2 } + } \cs_new_protected:Npn \tl_put_right:No #1#2 - { \cs_set_nopar:Npx #1 { \exp_not:o #1 \exp_not:o {#2} } } + { + \__kernel_tl_set:Nx #1 + { + \__kernel_exp_not:w \exp_after:wN {#1} + \__kernel_exp_not:w \exp_after:wN {#2} + } + } \cs_new_protected:Npn \tl_put_right:Nx #1#2 - { \cs_set_nopar:Npx #1 { \exp_not:o #1 #2 } } + { \__kernel_tl_set:Nx #1 { \__kernel_exp_not:w \exp_after:wN {#1} #2 } } \cs_new_protected:Npn \tl_gput_right:Nn #1#2 - { \cs_gset_nopar:Npx #1 { \exp_not:o #1 \exp_not:n {#2} } } + { \__kernel_tl_gset:Nx #1 { \__kernel_exp_not:w \exp_after:wN { #1 #2 } } } \cs_new_protected:Npn \tl_gput_right:NV #1#2 - { \cs_gset_nopar:Npx #1 { \exp_not:o #1 \exp_not:V #2 } } + { + \__kernel_tl_gset:Nx #1 + { \__kernel_exp_not:w \exp_after:wN {#1} \exp_not:V #2 } + } \cs_new_protected:Npn \tl_gput_right:No #1#2 - { \cs_gset_nopar:Npx #1 { \exp_not:o #1 \exp_not:o {#2} } } + { + \__kernel_tl_gset:Nx #1 + { + \__kernel_exp_not:w \exp_after:wN {#1} + \__kernel_exp_not:w \exp_after:wN {#2} + } + } \cs_new_protected:Npn \tl_gput_right:Nx #1#2 - { \cs_gset_nopar:Npx #1 { \exp_not:o {#1} #2 } } + { \__kernel_tl_gset:Nx #1 { \__kernel_exp_not:w \exp_after:wN {#1} #2 } } \cs_generate_variant:Nn \tl_put_right:Nn { c } \cs_generate_variant:Nn \tl_put_right:NV { c } \cs_generate_variant:Nn \tl_put_right:No { c } @@ -1574,6 +1639,7 @@ % \tl_gset_rescan:cnn, \tl_gset_rescan:cno, \tl_gset_rescan:cnx % } % \begin{macro}{\tl_rescan:nn} +% \begin{macro}{\@@_rescan_aux:} % \begin{macro}{\@@_set_rescan:NNnn, \@@_set_rescan_multi:nNN} % \begin{macro}[EXP]{\@@_rescan:NNw} % In a group, after some initial setup explained below and the user @@ -1632,9 +1698,11 @@ \cs_new_protected:Npn \tl_rescan:nn #1#2 { \tl_set_rescan:Nnn \l_@@_internal_a_tl {#1} {#2} - \exp_after:wN \tl_clear:N \exp_after:wN \l_@@_internal_a_tl + \exp_after:wN \@@_rescan_aux: \l_@@_internal_a_tl } +\exp_args:NNo \cs_new_protected:Npn \@@_rescan_aux: + { \tl_clear:N \l_@@_internal_a_tl } \cs_new_protected:Npn \tl_set_rescan:Nnn { \@@_set_rescan:NNnn \tl_set:No } \cs_new_protected:Npn \tl_gset_rescan:Nnn @@ -1653,7 +1721,7 @@ } \cs_new_protected:Npn \@@_set_rescan_multi:nNN #1#2#3 { - \exp_args:No \tex_everyeof:D { \c_@@_rescan_marker_tl } + \tex_everyeof:D \exp_after:wN { \c_@@_rescan_marker_tl } \exp_after:wN \@@_rescan:NNw \exp_after:wN #2 \exp_after:wN #3 @@ -1676,6 +1744,7 @@ % \end{macro} % \end{macro} % \end{macro} +% \end{macro} % % \begin{macro}{\@@_set_rescan:nNN} % \begin{macro}{\@@_set_rescan_single:nnNN, \@@_set_rescan_single_aux:nnnNN} @@ -1802,13 +1871,13 @@ % the \meta{tl~var} by \meta{token list}. % \begin{macrocode} \cs_new_protected:Npn \tl_replace_once:Nnn - { \@@_replace:NnNNNnn \q_@@_mark ? \@@_replace_wrap:w \tl_set:Nx } + { \@@_replace:NnNNNnn \q_@@_mark ? \@@_replace_wrap:w \__kernel_tl_set:Nx } \cs_new_protected:Npn \tl_greplace_once:Nnn - { \@@_replace:NnNNNnn \q_@@_mark ? \@@_replace_wrap:w \tl_gset:Nx } + { \@@_replace:NnNNNnn \q_@@_mark ? \@@_replace_wrap:w \__kernel_tl_gset:Nx } \cs_new_protected:Npn \tl_replace_all:Nnn - { \@@_replace:NnNNNnn \q_@@_mark ? \@@_replace_next:w \tl_set:Nx } + { \@@_replace:NnNNNnn \q_@@_mark ? \@@_replace_next:w \__kernel_tl_set:Nx } \cs_new_protected:Npn \tl_greplace_all:Nnn - { \@@_replace:NnNNNnn \q_@@_mark ? \@@_replace_next:w \tl_gset:Nx } + { \@@_replace:NnNNNnn \q_@@_mark ? \@@_replace_next:w \__kernel_tl_gset:Nx } \cs_generate_variant:Nn \tl_replace_once:Nnn { c } \cs_generate_variant:Nn \tl_greplace_once:Nnn { c } \cs_generate_variant:Nn \tl_replace_all:Nnn { c } @@ -1825,6 +1894,7 @@ % \@@_replace_auxi:NnnNNNnn, % \@@_replace_auxii:nNNNnn, % \@@_replace_next:w, +% \@@_replace_next_aux:w, % \@@_replace_wrap:w, % } % To implement the actual replacement auxiliary @@ -1969,7 +2039,7 @@ { \group_align_safe_begin: \cs_set:Npn \@@_replace_wrap:w ##1 #1 ##2 - { \exp_not:o { \use_none:nn ##1 } ##2 } + { \__kernel_exp_not:w \exp_after:wN { \use_none:nn ##1 } ##2 } \cs_set:Npx \@@_replace_next:w ##1 #5 { \exp_not:N \@@_replace_wrap:w ##1 @@ -1979,9 +2049,7 @@ } #3 #4 { - \exp_after:wN \@@_replace_next:w - \exp_after:wN { \exp_after:wN } - \exp_after:wN { \exp_after:wN } + \exp_after:wN \@@_replace_next_aux:w #4 #1 { @@ -1992,6 +2060,7 @@ } \group_align_safe_end: } +\cs_new:Npn \@@_replace_next_aux:w { \@@_replace_next:w { } { } } \cs_new_eq:NN \@@_replace_wrap:w ? \cs_new_eq:NN \@@_replace_next:w ? % \end{macrocode} @@ -2027,29 +2096,6 @@ % % \subsection{Token list conditionals} % -% \begin{macro}[pTF]{\tl_if_blank:n, \tl_if_blank:V, \tl_if_blank:o} -% \begin{macro}{\@@_if_blank_p:NNw} -% \TeX{} skips spaces when reading a non-delimited arguments. Thus, -% a \meta{token list} is blank if and only if \cs{use_none:n} -% \meta{token list} |?| is empty after one expansion. The auxiliary -% \cs{@@_if_empty_if:o} is a fast emptyness test, converting its -% argument to a string (after one expansion) and using the test -% \cs{if_meaning:w} \cs{q_@@_nil} |...| \cs{q_@@_nil}. -% \begin{macrocode} -\prg_new_conditional:Npnn \tl_if_blank:n #1 { p , T , F , TF } - { - \@@_if_empty_if:o { \use_none:n #1 ? } - \prg_return_true: - \else: - \prg_return_false: - \fi: - } -\prg_generate_conditional_variant:Nnn \tl_if_blank:n - { e , V , o } { p , T , F , TF } -% \end{macrocode} -% \end{macro} -% \end{macro} -% % \begin{macro}[pTF]{\tl_if_empty:N, \tl_if_empty:c} % These functions check whether the token list in the argument is % empty and execute the proper code from their argument(s). @@ -2068,23 +2114,17 @@ % \end{macro} % % \begin{macro}[pTF]{\tl_if_empty:n, \tl_if_empty:V} -% Convert the argument to a string: this is empty if and only if -% the argument is. Then |\if_meaning:w \q_@@_nil ... \q_@@_nil| is -% \texttt{true} if and only if the string |...| is empty. -% It could be tempting to use |\if_meaning:w \q_@@_nil #1 \q_@@_nil| directly. -% This fails on a token -% list starting with \cs{q_@@_nil} of course but more troubling is the -% case where argument is a complete conditional such as \cs{if_true:} -% a \cs{else:} b \cs{fi:} because then \cs{if_true:} is used by -% \cs{if_meaning:w}, the test turns out \texttt{false}, the \cs{else:} -% executes the \texttt{false} branch, the \cs{fi:} ends it and the -% \cs{q_@@_nil} at the end -% starts executing\dots{} +% The \cs{if:w} triggers the expansion of \cs{tl_to_str:n} which converts the +% argument to a string: this is empty if and only if the argument is. Then +% |\if:w \scan_stop: ... \scan_stop:| is \texttt{true} if and only if the +% string |...| is empty. +% It could be tempting to use |\if:w \scan_stop: #1 \scan_stop:| directly. +% But this fails on a token list expanding to anything starting with +% \cs{scan_stop:} leaving everything that follows in the input stream. % \begin{macrocode} \prg_new_conditional:Npnn \tl_if_empty:n #1 { p , TF , T , F } { - \exp_after:wN \if_meaning:w \exp_after:wN \q_@@_nil - \tl_to_str:n {#1} \q_@@_nil + \if:w \scan_stop: \tl_to_str:n {#1} \scan_stop: \prg_return_true: \else: \prg_return_false: @@ -2107,13 +2147,15 @@ % We don't put \cs{prg_return_true:} and so on in the definition of % the auxiliary, because that would prevent an optimization applied to % conditionals that end with this code. +% Also the |\@@_if_empty_if:o| is expanded once in |\tl_if_empty:oTF| for +% efficiency as well (and to reduce code doubling). % \begin{macrocode} \cs_new:Npn \@@_if_empty_if:o #1 { - \exp_after:wN \if_meaning:w \exp_after:wN \q_@@_nil - \__kernel_tl_to_str:w \exp_after:wN {#1} \q_@@_nil + \if:w \scan_stop: \__kernel_tl_to_str:w \exp_after:wN {#1} \scan_stop: } -\prg_new_conditional:Npnn \tl_if_empty:o #1 { p , TF , T , F } +\exp_args:Nno \use:n + { \prg_new_conditional:Npnn \tl_if_empty:o #1 { p , TF , T , F } } { \@@_if_empty_if:o {#1} \prg_return_true: @@ -2125,6 +2167,30 @@ % \end{macro} % \end{macro} % +% \begin{macro}[pTF]{\tl_if_blank:n, \tl_if_blank:V, \tl_if_blank:o} +% \begin{macro}{\@@_if_blank_p:NNw} +% \TeX{} skips spaces when reading a non-delimited arguments. Thus, +% a \meta{token list} is blank if and only if \cs{use_none:n} +% \meta{token list} |?| is empty after one expansion. The auxiliary +% \cs{@@_if_empty_if:o} is a fast emptyness test, converting its +% argument to a string (after one expansion) and using the test +% \cs{if:w} \cs{scan_stop:} |...| \cs{scan_stop:}. +% \begin{macrocode} +\exp_args:Nno \use:n + { \prg_new_conditional:Npnn \tl_if_blank:n #1 { p , T , F , TF } } + { + \@@_if_empty_if:o { \use_none:n #1 ? } + \prg_return_true: + \else: + \prg_return_false: + \fi: + } +\prg_generate_conditional_variant:Nnn \tl_if_blank:n + { e , V , o } { p , T , F , TF } +% \end{macrocode} +% \end{macro} +% \end{macro} +% % \begin{macro}[pTF]{\tl_if_eq:NN, \tl_if_eq:Nc, \tl_if_eq:cN, \tl_if_eq:cc} % Returns \cs{c_true_bool} if and only if the two token list variables are % equal. @@ -2269,28 +2335,28 @@ % \end{macro} % % \begin{macro}[EXP,pTF]{\tl_if_single:n} -% \begin{macro}[EXP,pTF]{\@@_if_single:n} +% \begin{macro}[EXP]{\@@_if_single:nnw} % This test is similar to \cs{tl_if_empty:nTF}. Expanding % \cs{use_none:nn} |#1| |??| once yields an empty result if |#1| is % blank, a single~|?| if |#1| has a single item, and otherwise yields -% some tokens ending with |??|. Then, \cs{tl_to_str:n} makes sure +% some tokens ending with |??|. Then, \cs{__kernel_tl_to_str:w} makes sure % there are no odd category codes. An earlier version would compare % the result to a single~|?| using string comparison, but the Lua call % is slow in \LuaTeX{}. Instead, \cs{@@_if_single:nnw} picks the % second token in front of it. If |#1| is empty, this token is -% the trailing~|?| and the catcode test yields \texttt{false}. If -% |#1| has a single item, the token is~|^| and the catcode test +% the trailing~|?| and the |\if:w| test yields \texttt{false}. If +% |#1| has a single item, the token is~|\scan_stop:| and the |\if:w| test % yields \texttt{true}. Otherwise, it is one of the characters -% resulting from \cs{tl_to_str:n}, and the catcode test yields -% \texttt{false}. Note that \cs{if_catcode:w} and +% resulting from \cs{tl_to_str:n}, and the |\if:w| test yields +% \texttt{false}. Note that \cs{if:w} and % \cs{__kernel_tl_to_str:w} are primitives that take care of % expansion. % \begin{macrocode} \prg_new_conditional:Npnn \tl_if_single:n #1 { p , T , F , TF } { - \if_catcode:w ^ \exp_after:wN \@@_if_single:nnw + \if:w \scan_stop: \exp_after:wN \@@_if_single:nnw \__kernel_tl_to_str:w - \exp_after:wN { \use_none:nn #1 ?? } ^ ? \s_@@_stop + \exp_after:wN { \use_none:nn #1 ?? } \scan_stop: ? \s_@@_stop \prg_return_true: \else: \prg_return_false: @@ -2587,18 +2653,16 @@ { \int_eval:n { - \@@_act:NNNnn - \@@_act_count_normal:nN - \@@_act_count_group:nn - \@@_act_count_space:n - { } + \@@_act:NNNn + \@@_act_count_normal:N + \@@_act_count_group:n + \@@_act_count_space: {#1} } } -\cs_new:Npn \@@_act_count_normal:nN #1 #2 { 1 + } -\cs_new:Npn \@@_act_count_space:n #1 { 1 + } -\cs_new:Npn \@@_act_count_group:nn #1 #2 - { 2 + \tl_count_tokens:n {#2} + } +\cs_new:Npn \@@_act_count_normal:N #1 { 1 + } +\cs_new:Npn \@@_act_count_space: { 1 + } +\cs_new:Npn \@@_act_count_group:n #1 { 2 + \tl_count_tokens:n {#1} + } % \end{macrocode} % \end{macro} % \end{macro} @@ -2624,7 +2688,7 @@ \s_@@_stop { {#1} #5 } } \cs_new:Npn \@@_reverse_items:wn #1 \s_@@_stop #2 - { \exp_not:o { \use_none:nn #2 } } + { \__kernel_exp_not:w \exp_after:wN { \use_none:nn #2 } } % \end{macrocode} % \end{macro} % \end{macro} @@ -2639,22 +2703,28 @@ % } % Trimming spaces from around the input is deferred to an internal % function whose first argument is the token list to trim, augmented -% by an initial \cs{s_@@_mark}, and whose second argument is a +% by an initial \cs{@@_trim_mark:}, and whose second argument is a % \meta{continuation}, which receives as a braced argument -% \cs{use_none:n} \cs{s_@@_mark} \meta{trimmed token list}. In the case -% at hand, we take \cs{exp_not:o} as our continuation, so that space -% trimming behaves correctly within an \texttt{x}-type expansion. +% \cs{@@_trim_mark:} \meta{trimmed token list}. The control sequence +% \cs{@@_trim_mark:} expands to nothing in a single expansion. In the case +% at hand, we take \cs{__kernel_exp_not:w} \cs{exp_after:wN} as our +% continuation, so that space trimming behaves correctly within an +% \texttt{x}-type expansion. % \begin{macrocode} \cs_new:Npn \tl_trim_spaces:n #1 - { \@@_trim_spaces:nn { \s_@@_mark #1 } \exp_not:o } + { + \@@_trim_spaces:nn + { \@@_trim_mark: #1 } + { \__kernel_exp_not:w \exp_after:wN } + } \cs_generate_variant:Nn \tl_trim_spaces:n { o } \cs_new:Npn \tl_trim_spaces_apply:nN #1#2 - { \@@_trim_spaces:nn { \s_@@_mark #1 } { \exp_args:No #2 } } + { \@@_trim_spaces:nn { \@@_trim_mark: #1 } { \exp_args:No #2 } } \cs_generate_variant:Nn \tl_trim_spaces_apply:nN { o } \cs_new_protected:Npn \tl_trim_spaces:N #1 - { \tl_set:Nx #1 { \exp_args:No \tl_trim_spaces:n {#1} } } + { \__kernel_tl_set:Nx #1 { \exp_args:No \tl_trim_spaces:n {#1} } } \cs_new_protected:Npn \tl_gtrim_spaces:N #1 - { \tl_gset:Nx #1 { \exp_args:No \tl_trim_spaces:n {#1} } } + { \__kernel_tl_gset:Nx #1 { \exp_args:No \tl_trim_spaces:n {#1} } } \cs_generate_variant:Nn \tl_trim_spaces:N { c } \cs_generate_variant:Nn \tl_gtrim_spaces:N { c } % \end{macrocode} @@ -2667,45 +2737,48 @@ % \@@_trim_spaces_auxi:w, \@@_trim_spaces_auxii:w, % \@@_trim_spaces_auxiii:w, \@@_trim_spaces_auxiv:w % } +% \begin{macro}{\@@_trim_mark:} % Trimming spaces from around the input is done using delimited % arguments and quarks, and to get spaces at odd places in the % definitions, we nest those in \cs{@@_tmp:w}, which then receives % a single space as its argument: |#1| is \verb*+ +. % Removing leading spaces is done with \cs{@@_trim_spaces_auxi:w}, -% which loops until \cs{s_@@_mark}\verb*+ + matches the end of the token +% which loops until \cs{@@_trim_mark:}\verb*+ + matches the end of the token % list: then |##1| is the token list and |##3| is % \cs{@@_trim_spaces_auxii:w}. This hands the relevant tokens to the % loop \cs{@@_trim_spaces_auxiii:w}, responsible for trimming % trailing spaces. The end is reached when \verb*+ + \cs{s_@@_nil} -% matches the one present in the definition of \cs{tl_trim_spacs:n}. +% matches the one present in the definition of \cs{tl_trim_spaces:n}. % Then \cs{@@_trim_spaces_auxiv:w} puts the token list into a group, -% with \cs{use_none:n} placed there to gobble a lingering \cs{s_@@_mark}, -% and feeds this to the \meta{continuation}. +% with a lingering \cs{@@_trim_mark:} at the start (which will expand to +% nothing in one step of expansion), and feeds this to the +% \meta{continuation}. % \begin{macrocode} -\cs_set:Npn \@@_tmp:w #1 +\cs_set_protected:Npn \@@_tmp:w #1 { \cs_new:Npn \@@_trim_spaces:nn ##1 { \@@_trim_spaces_auxi:w ##1 \s_@@_nil - \s_@@_mark #1 { } - \s_@@_mark \@@_trim_spaces_auxii:w + \@@_trim_mark: #1 { } + \@@_trim_mark: \@@_trim_spaces_auxii:w \@@_trim_spaces_auxiii:w #1 \s_@@_nil \@@_trim_spaces_auxiv:w \s_@@_stop } - \cs_new:Npn \@@_trim_spaces_auxi:w ##1 \s_@@_mark #1 ##2 \s_@@_mark ##3 + \cs_new:Npn + \@@_trim_spaces_auxi:w ##1 \@@_trim_mark: #1 ##2 \@@_trim_mark: ##3 { ##3 \@@_trim_spaces_auxi:w - \s_@@_mark + \@@_trim_mark: ##2 - \s_@@_mark #1 {##1} + \@@_trim_mark: #1 {##1} } \cs_new:Npn \@@_trim_spaces_auxii:w - \@@_trim_spaces_auxi:w \s_@@_mark \s_@@_mark ##1 + \@@_trim_spaces_auxi:w \@@_trim_mark: \@@_trim_mark: ##1 { \@@_trim_spaces_auxiii:w ##1 @@ -2717,172 +2790,21 @@ \@@_trim_spaces_auxiii:w } \cs_new:Npn \@@_trim_spaces_auxiv:w ##1 \s_@@_nil ##2 \s_@@_stop ##3 - { ##3 { \use_none:n ##1 } } + { ##3 { ##1 } } + \cs_new:Npn \@@_trim_mark: {} } \@@_tmp:w { ~ } % \end{macrocode} % \end{macro} % \end{macro} % \end{macro} +% \end{macro} % % \begin{macro} % {\tl_sort:Nn, \tl_sort:cn, \tl_gsort:Nn, \tl_gsort:cn, \tl_sort:nN} % Implemented in \pkg{l3sort}. % \end{macro} % -% \subsection{Token by token changes} -% -% \begin{variable}{\q_@@_act_mark, \q_@@_act_stop} -% The \cs[no-index]{@@_act_\ldots{}} functions may be applied to any token list. -% Hence, we use two private quarks, to allow any token, even quarks, -% in the token list. -% Only \cs{q_@@_act_mark} and \cs{q_@@_act_stop} may not appear -% in the token lists manipulated by \cs{@@_act:NNNnn} functions. -% \begin{macrocode} -\quark_new:N \q_@@_act_mark -\quark_new:N \q_@@_act_stop -% \end{macrocode} -% \end{variable} -% -% \begin{macro}[EXP]{\@@_act:NNNnn} -% \begin{macro}[EXP]{\@@_act_output:n, \@@_act_reverse_output:n} -% \begin{macro}[EXP]{\@@_act_loop:w} -% \begin{macro}[EXP]{\@@_act_normal:NwnNNN} -% \begin{macro}[EXP]{\@@_act_group:nwnNNN} -% \begin{macro}[EXP]{\@@_act_space:wwnNNN} -% \begin{macro}[EXP]{\@@_act_end:w} -% To help control the expansion, \cs{@@_act:NNNnn} should always -% be proceeded by \cs{exp:w} and ends by producing \cs{exp_end:} -% once the result has been obtained. Then loop over tokens, -% groups, and spaces in |#5|. The marker \cs{q_@@_act_mark} -% is used both to avoid losing outer braces and to detect the -% end of the token list more easily. The result is stored -% as an argument for the dummy function \cs{@@_act_result:n}. -% \begin{macrocode} -\cs_new:Npn \@@_act:NNNnn #1#2#3#4#5 - { - \group_align_safe_begin: - \@@_act_loop:w #5 \q_@@_act_mark \q_@@_act_stop - {#4} #1 #2 #3 - \@@_act_result:n { } - } -% \end{macrocode} -% In the loop, we check how the token list begins and act -% accordingly. In the \enquote{normal} case, we may have -% reached \cs{q_@@_act_mark}, the end of the list. Then -% leave \cs{exp_end:} and the result in the input stream, -% to terminate the expansion of \cs{exp:w}. -% Otherwise, apply the relevant function to the -% \enquote{arguments}, |#3| -% and to the head of the token list. Then repeat the loop. -% The scheme is the same if the token list starts with a -% group or with a space. Some extra work is needed to -% make \cs{@@_act_space:wwnNNN} gobble the space. -% \begin{macrocode} -\cs_new:Npn \@@_act_loop:w #1 \q_@@_act_stop - { - \tl_if_head_is_N_type:nTF {#1} - { \@@_act_normal:NwnNNN } - { - \tl_if_head_is_group:nTF {#1} - { \@@_act_group:nwnNNN } - { \@@_act_space:wwnNNN } - } - #1 \q_@@_act_stop - } -\cs_new:Npn \@@_act_normal:NwnNNN #1 #2 \q_@@_act_stop #3#4 - { - \if_meaning:w \q_@@_act_mark #1 - \exp_after:wN \@@_act_end:wn - \fi: - #4 {#3} #1 - \@@_act_loop:w #2 \q_@@_act_stop - {#3} #4 - } -\cs_new:Npn \@@_act_end:wn #1 \@@_act_result:n #2 - { \group_align_safe_end: \exp_end: #2 } -\cs_new:Npn \@@_act_group:nwnNNN #1 #2 \q_@@_act_stop #3#4#5 - { - #5 {#3} {#1} - \@@_act_loop:w #2 \q_@@_act_stop - {#3} #4 #5 - } -\exp_last_unbraced:NNo - \cs_new:Npn \@@_act_space:wwnNNN \c_space_tl #1 \q_@@_act_stop #2#3#4#5 - { - #5 {#2} - \@@_act_loop:w #1 \q_@@_act_stop - {#2} #3 #4 #5 - } -% \end{macrocode} -% Typically, the output is done to the right of what was already output, -% using \cs{@@_act_output:n}, but for the \cs{@@_act_reverse} functions, -% it should be done to the left. -% \begin{macrocode} -\cs_new:Npn \@@_act_output:n #1 #2 \@@_act_result:n #3 - { #2 \@@_act_result:n { #3 #1 } } -\cs_new:Npn \@@_act_reverse_output:n #1 #2 \@@_act_result:n #3 - { #2 \@@_act_result:n { #1 #3 } } -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}[EXP]{\tl_reverse:n, \tl_reverse:o, \tl_reverse:V} -% \begin{macro}[EXP]{\@@_reverse_normal:nN} -% \begin{macro}[EXP]{\@@_reverse_group_preserve:nn} -% \begin{macro}[EXP]{\@@_reverse_space:n} -% The goal here is to reverse without losing spaces nor braces. -% This is done using the general internal function \cs{@@_act:NNNnn}. -% Spaces and \enquote{normal} tokens are output on the left of the current -% output. Grouped tokens are output to the left but without any reversal -% within the group. All of the internal functions here drop one argument: -% this is needed by \cs{@@_act:NNNnn} when changing case (to record -% which direction the change is in), but not when reversing the tokens. -% \begin{macrocode} -\cs_new:Npn \tl_reverse:n #1 - { - \__kernel_exp_not:w \exp_after:wN - { - \exp:w - \@@_act:NNNnn - \@@_reverse_normal:nN - \@@_reverse_group_preserve:nn - \@@_reverse_space:n - { } - {#1} - } - } -\cs_generate_variant:Nn \tl_reverse:n { o , V } -\cs_new:Npn \@@_reverse_normal:nN #1#2 - { \@@_act_reverse_output:n {#2} } -\cs_new:Npn \@@_reverse_group_preserve:nn #1#2 - { \@@_act_reverse_output:n { {#2} } } -\cs_new:Npn \@@_reverse_space:n #1 - { \@@_act_reverse_output:n { ~ } } -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\tl_reverse:N, \tl_reverse:c, \tl_greverse:N, \tl_greverse:c} -% This reverses the list, leaving \cs{exp_stop_f:} in front, -% which stops the \texttt{f}-expansion. -% \begin{macrocode} -\cs_new_protected:Npn \tl_reverse:N #1 - { \tl_set:Nx #1 { \exp_args:No \tl_reverse:n { #1 } } } -\cs_new_protected:Npn \tl_greverse:N #1 - { \tl_gset:Nx #1 { \exp_args:No \tl_reverse:n { #1 } } } -\cs_generate_variant:Nn \tl_reverse:N { c } -\cs_generate_variant:Nn \tl_greverse:N { c } -% \end{macrocode} -% \end{macro} -% % \subsection{The first token from a token list} % % \begin{macro}{\tl_head:N, \tl_head:n, \tl_head:V, \tl_head:v, \tl_head:f} @@ -2895,32 +2817,49 @@ % empty result. The result is returned within the \tn{unexpanded} primitive. % The approach here is to use \cs{if_false:} to allow us to use |}| as % the closing delimiter: this is the only safe choice, as any other token -% would not be able to parse it's own code. Using a marker, we can see if -% what we are grabbing is exactly the marker, or there is anything else to -% deal with. Is there is, there is a loop. If not, tidy up and leave the -% item in the output stream. More detail in +% would not be able to parse it's own code. If the \tn{expanded} primitive +% is available it is used to get a fast and safe code variant in which we +% don't have to ensure that the left-most token is an internal to not break +% in an |f|-type expansion. If \tn{expanded} isn't available, using a marker, +% we can see if what we are grabbing is exactly the marker, or there is +% anything else to deal with. If there is, there is a loop. If not, tidy up +% and leave the item in the output stream. More detail in % \url{http://tex.stackexchange.com/a/70168}. % \begin{macrocode} -\cs_new:Npn \tl_head:n #1 - { - \__kernel_exp_not:w - \if_false: { \fi: \@@_head_auxi:nw #1 { } \s_@@_stop } - } -\cs_new:Npn \@@_head_auxi:nw #1#2 \s_@@_stop +\cs_if_exist:NTF \tex_expanded:D { - \exp_after:wN \@@_head_auxii:n \exp_after:wN { - \if_false: } \fi: {#1} + \cs_new:Npn \tl_head:n #1 + { + \__kernel_exp_not:w \tex_expanded:D + { { \if_false: { \fi: \@@_head_aux:n #1 { } } } } + } + \cs_new:Npn \@@_head_aux:n #1 + { + \__kernel_exp_not:w {#1} + \exp_after:wN \use_none:n \exp_after:wN { \if_false: } \fi: + } } -\cs_new:Npn \@@_head_auxii:n #1 { - \exp_after:wN \if_meaning:w \exp_after:wN \q_@@_nil - \__kernel_tl_to_str:w \exp_after:wN { \use_none:n #1 } \q_@@_nil - \exp_after:wN \use_i:nn - \else: - \exp_after:wN \use_ii:nn - \fi: - {#1} - { \if_false: { \fi: \@@_head_auxi:nw #1 } } + \cs_new:Npn \tl_head:n #1 + { + \__kernel_exp_not:w + \if_false: { \fi: \@@_head_auxi:nw #1 { } \s_@@_stop } + } + \cs_new:Npn \@@_head_auxi:nw #1#2 \s_@@_stop + { + \exp_after:wN \@@_head_auxii:n \exp_after:wN { + \if_false: } \fi: {#1} + } + \exp_args:Nno \use:n + { \cs_new:Npn \@@_head_auxii:n #1 } + { + \@@_if_empty_if:o { \use_none:n #1 } + \exp_after:wN \use_ii:nnn + \fi: + \use_ii:nn + {#1} + { \if_false: { \fi: \@@_head_auxi:nw #1 } } + } } \cs_generate_variant:Nn \tl_head:n { V , v , f } \cs_new:Npn \tl_head:w #1#2 \q_stop {#1} @@ -2942,9 +2881,9 @@ % While we could optimise the test here, this would leave some tokens % \enquote{banned} in the input, which we do not have with this definition. % \begin{macrocode} -\cs_new:Npn \tl_tail:n #1 +\exp_args:Nno \use:n { \cs_new:Npn \tl_tail:n #1 } { - \__kernel_exp_not:w + \exp_after:wN \__kernel_exp_not:w \tl_if_blank:nTF {#1} { { } } { \exp_after:wN { \use_none:n #1 } } @@ -2961,6 +2900,9 @@ % \begin{macro}[pTF]{\tl_if_head_eq_charcode:nN} % \begin{macro}[pTF]{\tl_if_head_eq_charcode:fN} % \begin{macro}[pTF]{\tl_if_head_eq_catcode:nN} +% \begin{macro}[pTF]{\tl_if_head_eq_catcode:oN} +% \begin{macro}[EXP]{\@@_head_exp_not:w} +% \begin{macro}[EXP]{\@@_if_head_eq_empty_arg:w} % Accessing the first token of a token list is tricky in three cases: % when it has category code $1$ (begin-group token), when it is an % explicit space, with category code $10$ and character code $32$, or @@ -2980,21 +2922,17 @@ % cases, the first token is a character, and since we only care about % its character code, we can use \cs{str_head:n} to access it (this % works even if it is a space character). An empty argument -% results in \cs{tl_head:w} leaving two tokens: |?| which is taken in -% the \cs{if_charcode:w} test, and \cs{use_none:nn}, which ensures -% that \cs{prg_return_false:} is returned regardless of whether the -% charcode test was \texttt{true} or \texttt{false}. +% results in \cs{tl_head:w} leaving two token: |^| and +% \cs{@@_if_head_eq_empty_arg:w} which will result in the \cs{if_charcode:w} +% test being false and remove \cs{exp_not:N} and |#2|. % \begin{macrocode} \prg_new_conditional:Npnn \tl_if_head_eq_charcode:nN #1#2 { p , T , F , TF } { \if_charcode:w - \exp_not:N #2 \tl_if_head_is_N_type:nTF { #1 ? } - { - \exp_after:wN \exp_not:N - \@@_tl_head:w #1 { ? \use_none:nn } \s_@@_stop - } + { \@@_head_exp_not:w #1 { ^ \@@_if_head_eq_empty_arg:w } \s_@@_stop } { \str_head:n {#1} } + \exp_not:N #2 \prg_return_true: \else: \prg_return_false: @@ -3008,24 +2946,20 @@ % first token is a begin-group token or an explicit space token, and % produce the relevant token, either \cs{c_group_begin_token} or % \cs{c_space_token}. Again, for an empty argument, a hack is used, -% removing \cs{prg_return_true:} and \cs{else:} with \cs{use_none:nn} -% in case the catcode test with the (arbitrarily chosen) |?| is -% \texttt{true}. +% removing the token given by the user and leaving two tokens in the input +% stream which will make the \cs{if_catcode:w} test return \texttt{false}. % \begin{macrocode} \prg_new_conditional:Npnn \tl_if_head_eq_catcode:nN #1 #2 { p , T , F , TF } { \if_catcode:w - \exp_not:N #2 \tl_if_head_is_N_type:nTF { #1 ? } - { - \exp_after:wN \exp_not:N - \@@_tl_head:w #1 { ? \use_none:nn } \s_@@_stop - } + { \@@_head_exp_not:w #1 { ^ \@@_if_head_eq_empty_arg:w } \s_@@_stop } { \tl_if_head_is_group:nTF {#1} - { \c_group_begin_token } - { \c_space_token } + \c_group_begin_token + \c_space_token } + \exp_not:N #2 \prg_return_true: \else: \prg_return_false: @@ -3038,7 +2972,8 @@ % the normal case, use \cs{tl_head:w}, with no \cs{exp_not:N} this % time, since \cs{if_meaning:w} causes no expansion. With an empty % argument, the test is \texttt{true}, and \cs{use_none:nnn} removes -% |#2| and the usual \cs{prg_return_true:} and \cs{else:}. +% |#2| and \cs{prg_return_true:} and \cs{else:} (it is safe this way here as +% in this case \cs{prg_new_conditional:Npnn} didn't optimize these two away). % In the special cases, we know that the first token is a character, % hence \cs{if_charcode:w} and \cs{if_catcode:w} together are enough. % We combine them in some order, hopefully faster than the reverse. @@ -3048,8 +2983,8 @@ \prg_new_conditional:Npnn \tl_if_head_eq_meaning:nN #1#2 { p , T , F , TF } { \tl_if_head_is_N_type:nTF { #1 ? } - { \@@_if_head_eq_meaning_normal:nN } - { \@@_if_head_eq_meaning_special:nN } + \@@_if_head_eq_meaning_normal:nN + \@@_if_head_eq_meaning_special:nN {#1} #2 } \cs_new:Npn \@@_if_head_eq_meaning_normal:nN #1 #2 @@ -3064,11 +2999,11 @@ \cs_new:Npn \@@_if_head_eq_meaning_special:nN #1 #2 { \if_charcode:w \str_head:n {#1} \exp_not:N #2 - \exp_after:wN \use:n + \exp_after:wN \use_ii:nn \else: \prg_return_false: - \exp_after:wN \use_none:n \fi: + \use_none:n { \if_catcode:w \exp_not:N #2 \tl_if_head_is_group:nTF {#1} @@ -3081,48 +3016,79 @@ } } % \end{macrocode} +% +% Both \cs{tl_if_head_eq_charcode:nN} and \cs{tl_if_head_eq_catcode:nN} will +% need to get the first token of their argument and apply \cs{exp_not:N} to +% it. \cs{@@_head_exp_not:w} does exactly that. +% \begin{macrocode} +\cs_new:Npn \@@_head_exp_not:w #1 #2 \s_@@_stop + { \exp_not:N #1 } +% \end{macrocode} +% +% If the argument of \cs{tl_if_head_eq_charcode:nN} and +% \cs{tl_if_head_eq_catcode:nN} was empty \cs{@@_if_head_eq_empty_arg:w} will +% be left in the input stream. This macro has to remove \cs{exp_not:N} and +% the following token from the input stream to make sure no unbalanced +% if-construct is created and leave tokens there which make the two tests +% return \texttt{false}. +% \begin{macrocode} +\cs_new:Npn \@@_if_head_eq_empty_arg:w \exp_not:N #1 + { ? } +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} % \end{macro} % \end{macro} % \end{macro} % \end{macro} % % \begin{macro}[pTF]{\tl_if_head_is_N_type:n} -% \begin{macro}[EXP]{\@@_if_head_is_N_type:w} +% \begin{macro}[EXP] +% { +% \@@_if_head_is_N_type_auxi:w , +% \@@_if_head_is_N_type_auxii:nn , +% \@@_if_head_is_N_type_auxiii:n +% } % A token list can be empty, can start with an explicit space % character (catcode 10 and charcode 32), can start with a begin-group % token (catcode 1), or start with an \texttt{N}-type argument. In -% the first two cases, the line involving \cs{@@_if_head_is_N_type:w} -% produces~|^| (and otherwise nothing). In the third case -% (begin-group token), the lines involving \cs{exp_after:wN} produce a +% the first two cases, the line involving \cs{@@_if_head_is_N_type_auxi:w} +% produces~|f| (and otherwise nothing). In the third case +% (begin-group token), the lines involving \cs{token_to_str:N} produce a % single closing brace. The category code test is thus true exactly % in the fourth case, which is what we want. One cannot optimize by -% moving one of the |*| to the beginning: if |#1| contains primitive -% conditionals, all of its occurrences must be dealt with before the -% \cs{if_catcode:w} tries to skip the \texttt{true} branch of the +% moving one of the \cs{scan_stop:} to the beginning: if |#1| contains +% primitive conditionals, all of its occurrences must be dealt with before +% the \cs{if:w} tries to skip the \texttt{true} branch of the % conditional. % \begin{macrocode} \prg_new_conditional:Npnn \tl_if_head_is_N_type:n #1 { p , T , F , TF } { - \if_catcode:w - \if_false: { \fi: \@@_if_head_is_N_type:w ? #1 ~ } - \exp_after:wN \use_none:n - \exp_after:wN { \exp_after:wN { \token_to_str:N #1 ? } } - * * + \if:w + \if_false: { \fi: \@@_if_head_is_N_type_auxi:w \prg_do_nothing: #1 ~ } + { \exp_after:wN { \token_to_str:N #1 } } + \scan_stop: \scan_stop: \prg_return_true: \else: \prg_return_false: \fi: } -\cs_new:Npn \@@_if_head_is_N_type:w #1 ~ +\exp_args:Nno \use:n { \cs_new:Npn \@@_if_head_is_N_type_auxi:w #1 ~ } { - \tl_if_empty:oTF { \use_none:n #1 } { ^ } { } - \exp_after:wN \use_none:n \exp_after:wN { \if_false: } \fi: + \tl_if_empty:oTF { #1 } + { f \exp_after:wN \use_none:nn } + { \exp_after:wN \@@_if_head_is_N_type_auxii:n } + \exp_after:wN { \if_false: } \fi: } +\cs_new:Npn \@@_if_head_is_N_type_auxii:n #1 + { \exp_after:wN \use_none:n \exp_after:wN } % \end{macrocode} % \end{macro} % \end{macro} % % \begin{macro}[EXP,pTF]{\tl_if_head_is_group:n} +% \begin{macro}[EXP]{\@@_if_head_is_group_fi_false:w} % Pass the first token of |#1| through \cs{token_to_str:N}, then check % for the brace balance. The extra \texttt{?} caters for an empty % argument. This could be made faster, but we need all brace tricks @@ -3131,47 +3097,236 @@ % \begin{macrocode} \prg_new_conditional:Npnn \tl_if_head_is_group:n #1 { p , T , F , TF } { - \if_catcode:w + \if:w \exp_after:wN \use_none:n \exp_after:wN { \exp_after:wN { \token_to_str:N #1 ? } } - * * - \prg_return_false: - \else: + \scan_stop: \scan_stop: + \@@_if_head_is_group_fi_false:w + \fi: + \if_true: \prg_return_true: + \else: + \prg_return_false: \fi: } +\cs_new:Npn \@@_if_head_is_group_fi_false:w \fi: \if_true: { \fi: \if_false: } % \end{macrocode} % \end{macro} +% \end{macro} % % \begin{macro}[EXP,pTF]{\tl_if_head_is_space:n} % \begin{macro}[EXP]{\@@_if_head_is_space:w} % The auxiliary's argument is all that is before the first explicit -% space in |?#1?~|. If that is a single~|?| the test yields -% \texttt{true}. Otherwise, that is more than one token, and the test -% yields \texttt{false}. The work is done within braces (with an +% space in |\prg_do_nothing:#1?~|. If that is a single~|\prg_do_nothing:| the +% test yields \texttt{true}. Otherwise, that is more than one token, and the +% test yields \texttt{false}. The work is done within braces (with an % |\if_false: { \fi: ... }| construction) both to hide potential % alignment tab characters from \TeX{} in a table, and to allow for -% removing what remains of the token list after its first space. The -% \cs{exp:w} and \cs{exp_end:} ensure that the result of a -% single step of expansion directly yields a balanced token list (no -% trailing closing brace). +% removing what remains of the token list after its first space. The use of +% \cs{if:w} ensures that the result of a single step of expansion directly +% yields a balanced token list (no trailing closing brace). % \begin{macrocode} \prg_new_conditional:Npnn \tl_if_head_is_space:n #1 { p , T , F , TF } { - \exp:w \if_false: { \fi: - \@@_if_head_is_space:w ? #1 ? ~ } + \if:w + \if_false: { \fi: \@@_if_head_is_space:w \prg_do_nothing: #1 ? ~ } + \scan_stop: \scan_stop: + \prg_return_true: + \else: + \prg_return_false: + \fi: } -\cs_new:Npn \@@_if_head_is_space:w #1 ~ +\exp_args:Nno \use:n { \cs_new:Npn \@@_if_head_is_space:w #1 ~ } { - \tl_if_empty:oTF { \use_none:n #1 } - { \exp_after:wN \exp_end: \exp_after:wN \prg_return_true: } - { \exp_after:wN \exp_end: \exp_after:wN \prg_return_false: } + \@@_if_empty_if:o {#1} \else: f \fi: \exp_after:wN \use_none:n \exp_after:wN { \if_false: } \fi: } % \end{macrocode} % \end{macro} % \end{macro} % +% \subsection{Token by token changes} +% +% \begin{variable}{\s_@@_act_stop} +% The \cs[no-index]{@@_act_\ldots{}} functions may be applied to any token list. +% Hence, we use a private quark, to allow any token, even quarks, +% in the token list. +% Only \cs{s_@@_act_stop} may not appear in the token lists manipulated by +% \cs{@@_act:NNNn} functions. +% \begin{macrocode} +\scan_new:N \s_@@_act_stop +% \end{macrocode} +% \end{variable} +% +% \begin{macro}[EXP]{\@@_act:NNNn} +% \begin{macro}[EXP]{\@@_act_output:n, \@@_act_reverse_output:n} +% \begin{macro}[EXP]{\@@_act_loop:w} +% \begin{macro}[EXP]{\@@_act_normal:NwNNN} +% \begin{macro}[EXP]{\@@_act_group:nwNNN} +% \begin{macro}[EXP]{\@@_act_space:wwNNN} +% \begin{macro}[EXP]{\@@_act_end:w} +% \begin{macro}[EXP] +% { +% \@@_act_if_head_is_space:nTF, +% \@@_act_if_head_is_space:w, +% \@@_act_if_head_is_space_true:w +% } +% \begin{macro}[EXP]{\@@_use_none_delimit_by_q_act_stop:w} +% To help control the expansion, \cs{@@_act:NNNn} should always +% be preceeded by \cs{exp:w} and ends by producing \cs{exp_end:} +% once the result has been obtained. This way no internal token of it can be +% accidentally end up in the input stream. +% Because \cs{s_@@_act_stop} can't appear without braces around it in the +% argument~|#1| of \cs{@@_act_loop:w}, we can use this marker to set up a fast +% test for leading spaces. +% \begin{macrocode} +\cs_set_protected:Npn \@@_tmp:w #1 + { + \cs_new:Npn \@@_act_if_head_is_space:nTF ##1 + { + \@@_act_if_head_is_space:w + \s_@@_act_stop ##1 \s_@@_act_stop \@@_act_if_head_is_space_true:w + \s_@@_act_stop #1 \s_@@_act_stop \use_ii:nn + } + \cs_new:Npn \@@_act_if_head_is_space:w + ##1 \s_@@_act_stop #1 ##2 \s_@@_act_stop + {} + \cs_new:Npn \@@_act_if_head_is_space_true:w + \s_@@_act_stop #1 \s_@@_act_stop \use_ii:nn ##1 ##2 + {##1} + } +\@@_tmp:w { ~ } +% \end{macrocode} +% (We expand the definition \cs{@@_act_if_head_is_space:nTF} when +% setting up \cs{@@_act_loop:w}, so we can then undefine the auxiliary.) +% In the loop, we check how the token list begins and act +% accordingly. In the \enquote{group} case, we may have +% reached \cs{s_@@_act_stop}, the end of the list. Then +% leave \cs{exp_end:} and the result in the input stream, +% to terminate the expansion of \cs{exp:w}. +% Otherwise, apply the relevant function to the +% \enquote{arguments}, |#3| +% and to the head of the token list. Then repeat the loop. +% The scheme is the same if the token list starts with an |N|-type +% or with a space, making sure that +% \cs{@@_act_space:wwNNN} gobbles the space. +% \begin{macrocode} +\exp_args:Nnx \use:n { \cs_new:Npn \@@_act_loop:w #1 \s_@@_act_stop } + { + \exp_not:o { \@@_act_if_head_is_space:nTF {#1} } + \exp_not:N \@@_act_space:wwNNN + { + \exp_not:o { \tl_if_head_is_group:nTF {#1} } + \exp_not:N \@@_act_group:nwNNN + \exp_not:N \@@_act_normal:NwNNN + } + \exp_not:n {#1} \s_@@_act_stop + } +\cs_undefine:N \@@_act_if_head_is_space:nTF +\cs_new:Npn \@@_act_normal:NwNNN #1 #2 \s_@@_act_stop #3 + { + #3 #1 + \@@_act_loop:w #2 \s_@@_act_stop + #3 + } +\cs_new:Npn \@@_use_none_delimit_by_s_act_stop:w #1 \s_@@_act_stop { } +\cs_new:Npn \@@_act_end:wn #1 \@@_act_result:n #2 + { \group_align_safe_end: \exp_end: #2 } +\cs_new:Npn \@@_act_group:nwNNN #1 #2 \s_@@_act_stop #3#4#5 + { + \@@_use_none_delimit_by_s_act_stop:w #1 \@@_act_end:wn \s_@@_act_stop + #5 {#1} + \@@_act_loop:w #2 \s_@@_act_stop + #3 #4 #5 + } +\exp_last_unbraced:NNo + \cs_new:Npn \@@_act_space:wwNNN \c_space_tl #1 \s_@@_act_stop #2#3 + { + #3 + \@@_act_loop:w #1 \s_@@_act_stop + #2 #3 + } +% \end{macrocode} +% \cs{@@_act:NNNn} loops over tokens, groups, and spaces in |#4|. +% |{\s_@@_act_stop}| serves as the end of token list marker, the |?| after it +% avoids losing outer braces. The result is stored as an argument for the +% dummy function \cs{@@_act_result:n}. +% \begin{macrocode} +\cs_new:Npn \@@_act:NNNn #1#2#3#4 + { + \group_align_safe_begin: + \@@_act_loop:w #4 { \s_@@_act_stop } ? \s_@@_act_stop + #1 #3 #2 + \@@_act_result:n { } + } +% \end{macrocode} +% Typically, the output is done to the right of what was already output, +% using \cs{@@_act_output:n}, but for the \cs{@@_act_reverse} functions, +% it should be done to the left. +% \begin{macrocode} +\cs_new:Npn \@@_act_output:n #1 #2 \@@_act_result:n #3 + { #2 \@@_act_result:n { #3 #1 } } +\cs_new:Npn \@@_act_reverse_output:n #1 #2 \@@_act_result:n #3 + { #2 \@@_act_result:n { #1 #3 } } +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}[EXP]{\tl_reverse:n, \tl_reverse:o, \tl_reverse:V} +% \begin{macro}[EXP]{\@@_reverse_normal:nN} +% \begin{macro}[EXP]{\@@_reverse_group_preserve:nn} +% \begin{macro}[EXP]{\@@_reverse_space:n} +% The goal here is to reverse without losing spaces nor braces. +% This is done using the general internal function \cs{@@_act:NNNn}. +% Spaces and \enquote{normal} tokens are output on the left of the current +% output. Grouped tokens are output to the left but without any reversal +% within the group. +% \begin{macrocode} +\cs_new:Npn \tl_reverse:n #1 + { + \__kernel_exp_not:w \exp_after:wN + { + \exp:w + \@@_act:NNNn + \@@_reverse_normal:N + \@@_reverse_group_preserve:n + \@@_reverse_space: + {#1} + } + } +\cs_generate_variant:Nn \tl_reverse:n { o , V } +\cs_new:Npn \@@_reverse_normal:N + { \@@_act_reverse_output:n } +\cs_new:Npn \@@_reverse_group_preserve:n #1 + { \@@_act_reverse_output:n { {#1} } } +\cs_new:Npn \@@_reverse_space: + { \@@_act_reverse_output:n { ~ } } +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\tl_reverse:N, \tl_reverse:c, \tl_greverse:N, \tl_greverse:c} +% This reverses the list, leaving \cs{exp_stop_f:} in front, +% which stops the \texttt{f}-expansion. +% \begin{macrocode} +\cs_new_protected:Npn \tl_reverse:N #1 + { \__kernel_tl_set:Nx #1 { \exp_args:No \tl_reverse:n { #1 } } } +\cs_new_protected:Npn \tl_greverse:N #1 + { \__kernel_tl_gset:Nx #1 { \exp_args:No \tl_reverse:n { #1 } } } +\cs_generate_variant:Nn \tl_reverse:N { c } +\cs_generate_variant:Nn \tl_greverse:N { c } +% \end{macrocode} +% \end{macro} +% % \subsection{Using a single item} % % \begin{macro}{\tl_item:nn, \tl_item:Nn, \tl_item:cn} @@ -3373,7 +3528,10 @@ \cs_new_protected:Npn \@@_show:NN #1#2 { \__kernel_chk_defined:NT #2 - { \exp_args:Nx #1 { \token_to_str:N #2 = \exp_not:o {#2} } } + { + \exp_args:Ne #1 + { \token_to_str:N #2 = \__kernel_exp_not:w \exp_after:wN {#2} } + } } % \end{macrocode} % \end{macro} @@ -3459,6 +3617,12 @@ % \end{macrocode} % \end{variable} % +% We finally clean up a temporary control sequence that we have used at +% various points to set up some definitions. +% \begin{macrocode} +\cs_undefine:N \@@_tmp:w +% \end{macrocode} +% % \begin{macrocode} % % \end{macrocode} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3token.dtx b/Master/texmf-dist/source/latex/l3kernel/l3token.dtx index dabd6ea6aca..676c55747ae 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 2020-10-05} +% \date{Released 2020-10-27} % % \maketitle % @@ -692,6 +692,14 @@ % Tests if the \meta{token} is defined to be a mathchardef. % \end{function} % +% \begin{function}[EXP,pTF, added=2020-10-27]{\token_if_font_selection:N} +% \begin{syntax} +% \cs{token_if_font_selection_p:N} \meta{token} \\ +% \cs{token_if_font_selection:NTF} \meta{token} \Arg{true code} \Arg{false code} +% \end{syntax} +% Tests if the \meta{token} is defined to be a font selection command. +% \end{function} +% % \begin{function}[EXP,pTF, updated=2012-01-20]{\token_if_dim_register:N} % \begin{syntax} % \cs{token_if_dim_register_p:N} \meta{token} \\ @@ -1496,7 +1504,7 @@ \tl_put_right:Nn \l_@@_tmp_tl { ^^@ \if_false: } } \char_set_catcode_group_end:n { 0 } \tl_put_right:Nn \l_@@_tmp_tl { { \fi: \exp_not:N \or: ^^@ } % } - \tl_set:Nx \l_@@_tmp_tl { \l_@@_tmp_tl } + \__kernel_tl_set:Nx \l_@@_tmp_tl { \l_@@_tmp_tl } \char_set_catcode_math_toggle:n { 0 } \tl_put_right:Nn \l_@@_tmp_tl { \or: ^^@ } \char_set_catcode_alignment:n { 0 } @@ -2222,6 +2230,7 @@ % \@@_delimit_by_char":w, % \@@_delimit_by_count:w, % \@@_delimit_by_dimen:w, +% \@@_delimit_by_ font:w, % \@@_delimit_by_macro:w, % \@@_delimit_by_muskip:w, % \@@_delimit_by_skip:w, @@ -2233,6 +2242,9 @@ % argument delimited by a string, a second one delimited by % \cs{s_@@_stop}, and returns the first one and its delimiter. % This result is eventually compared to another string. +% Note that the ``font'' auxiliary is delimited by a space followed by +% ``\texttt{font}''. This avoids an unnecessary check for the +% \tn{font} primitive below. % \begin{macrocode} \group_begin: \cs_set_protected:Npn \@@_tmp:w #1 @@ -2247,6 +2259,7 @@ \@@_tmp:w { char" } \@@_tmp:w { count } \@@_tmp:w { dimen } +\@@_tmp:w { ~ font } \@@_tmp:w { macro } \@@_tmp:w { muskip } \@@_tmp:w { skip } @@ -2260,6 +2273,7 @@ % \token_if_chardef:N, \token_if_mathchardef:N, % \token_if_long_macro:N, % \token_if_protected_macro:N, \token_if_protected_long_macro:N, +% \token_if_font_selection:N, % \token_if_dim_register:N, \token_if_int_register:N, % \token_if_muskip_register:N, % \token_if_skip_register:N, \token_if_toks_register:N, @@ -2292,8 +2306,9 @@ % space after |\protected| but a space after |\long|, hence the % mixture of \cs{token_to_str:N} and \cs{tl_to_str:n}. % -% For the first five conditionals, \cs{cs_if_exist:cT} turns out to -% be \texttt{false}, and the code boils down to a string comparison +% For the first six conditionals, \cs{cs_if_exist:cT} turns out to +% be \texttt{false} (thanks to the leading space for \texttt{font}), +% and the code boils down to a string comparison % between the result of the auxiliary on the \tn{meaning} of the % conditional's argument~|####1|, and~|#3|. Both are evaluated at % run-time, as this is important to get the correct escape character. @@ -2348,6 +2363,7 @@ { \tl_to_str:n { \protected } macro } \@@_tmp:w { protected_long_macro } { macro } { \token_to_str:N \protected \tl_to_str:n { \long } macro } +\@@_tmp:w { font_selection } { ~ font } { select ~ font } \@@_tmp:w { dim_register } { dimen } { \token_to_str:N \dimen } \@@_tmp:w { int_register } { count } { \token_to_str:N \count } \@@_tmp:w { muskip_register } { muskip } { \token_to_str:N \muskip } diff --git a/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx b/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx index 644d30f90fc..14467d96177 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 2020-10-05} +% \date{Released 2020-10-27} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx b/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx index 0e9a03e2f0d..b182df9e3ba 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 2020-10-05} +% \date{Released 2020-10-27} % % \maketitle % @@ -139,7 +139,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{l3keys2e}{2020-10-05}{} +\ProvidesExplPackage{l3keys2e}{2020-10-27}{} {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 1169bf76895..6a0b66ef5a3 100644 --- a/Master/texmf-dist/source/latex/l3packages/xfp/xfp.dtx +++ b/Master/texmf-dist/source/latex/l3packages/xfp/xfp.dtx @@ -64,7 +64,7 @@ % }^^A % } % -% \date{Released 2020-10-05} +% \date{Released 2020-10-27} % % \maketitle % @@ -167,7 +167,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{xfp}{2020-10-05}{} +\ProvidesExplPackage{xfp}{2020-10-27}{} {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 5c6fcbbb993..c7fe59aba81 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 2020-10-05} +% \date{Released 2020-10-27} % % \maketitle % @@ -535,7 +535,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{xfrac}{2020-10-05}{} +\ProvidesExplPackage{xfrac}{2020-10-27}{} {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 dd40f2c2add..b6c490df177 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 2020-10-05} +% \date{Released 2020-10-27} % % \maketitle % @@ -984,7 +984,7 @@ % % \begin{macrocode} %<*package> -\ProvidesExplPackage{xparse}{2020-10-05}{} +\ProvidesExplPackage{xparse}{2020-10-27}{} {L3 Experimental document command parser} % \end{macrocode} % @@ -1038,7 +1038,7 @@ % an issue if the user has |openin_any = p| with older binaries. % \begin{macrocode} %<*2ekernel|package> -\input { xparse-generic.tex } +\input xparse-generic.tex ~ % % \end{macrocode} % diff --git a/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx b/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx index e4b23c0eb78..7ea561b199e 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 2020-10-05} +% \date{Released 2020-10-27} % % \maketitle % @@ -682,7 +682,7 @@ % \end{macrocode} % % \begin{macrocode} -\ProvidesExplPackage{xtemplate}{2020-10-05}{} +\ProvidesExplPackage{xtemplate}{2020-10-27}{} {L3 Experimental prototype document functions} % \end{macrocode} % diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3benchmark/l3benchmark.sty b/Master/texmf-dist/tex/latex/l3experimental/l3benchmark/l3benchmark.sty index c037a40a41e..f25673ab551 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}{2020-09-24}{} +\ProvidesExplPackage{l3benchmark}{2020-10-27}{} {L3 Experimental benchmarking} \sys_if_engine_luatex:TF { diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3color/l3color.sty b/Master/texmf-dist/tex/latex/l3experimental/l3color/l3color.sty index 8c291e4f258..6eb28eca242 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3color/l3color.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3color/l3color.sty @@ -20,7 +20,7 @@ %% %% File: l3color.dtx \RequirePackage{expl3} -\ProvidesExplPackage{l3color}{2020-09-24}{} +\ProvidesExplPackage{l3color}{2020-10-27}{} {L3 Experimental color support} \int_new:N \l__color_internal_int \tl_new:N \l__color_internal_tl diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty b/Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty index cb5bc61d7cf..ecc7791c0da 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}{2020-09-24}{} +\ProvidesExplPackage{l3draw}{2020-10-27}{} {L3 Experimental core drawing support} \RequirePackage { l3color } \scan_new:N \s__draw_mark diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3graphics/l3graphics.sty b/Master/texmf-dist/tex/latex/l3experimental/l3graphics/l3graphics.sty index 7a4f5a08c31..533b62e1b12 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}{2020-09-24}{} +\ProvidesExplPackage{l3graphics}{2020-10-27}{} {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/l3pdf/l3pdf.sty b/Master/texmf-dist/tex/latex/l3experimental/l3pdf/l3pdf.sty index 28d449e24c3..c7d232ad352 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3pdf/l3pdf.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3pdf/l3pdf.sty @@ -20,7 +20,7 @@ %% %% File: l3pdf.dtx \RequirePackage{expl3} -\ProvidesExplPackage{l3pdf}{2020-09-24}{} +\ProvidesExplPackage{l3pdf}{2020-10-27}{} {L3 Experimental core PDF support} \scan_new:N \s__pdf_stop \bool_new:N \g__pdf_init_bool 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 78c53b18789..3d392de62fc 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}{2020-09-24}{} +\ProvidesExplPackage{l3str-format}{2020-10-27}{} {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 016256ce53e..6aaa332685f 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}{2020-09-24}{} +\ProvidesExplPackage{l3sys-shell}{2020-10-27}{} {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 3f0b8650e6e..84a58c3a145 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/xcoffins/xcoffins.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/xcoffins/xcoffins.sty @@ -20,7 +20,7 @@ %% %% File: xcoffins.dtx \RequirePackage{xparse} -\ProvidesExplPackage{xcoffins}{2020-09-24}{} +\ProvidesExplPackage{xcoffins}{2020-10-27}{} {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 9c939bef3d5..8c1b8b6834a 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}{2020-09-24}{} +\ProvidesExplPackage{l3galley}{2020-10-27}{} {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 2dd1b612023..d040fcdbc45 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/xgalley/xgalley.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/xgalley/xgalley.sty @@ -20,7 +20,7 @@ %% %% File: xgalley.dtx \RequirePackage{xparse} -\ProvidesExplPackage{xgalley}{2020-09-24}{} +\ProvidesExplPackage{xgalley}{2020-10-27}{} {L3 Experimental galley} \RequirePackage{xparse,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 14b325957ff..ef1d0a3732c 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex +++ b/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex @@ -69,7 +69,7 @@ %% and all files in that bundle must be distributed together. %% %% File: expl3.dtx -\def\ExplFileDate{2020-10-05}% +\def\ExplFileDate{2020-10-27}% \begingroup \def\next{\endgroup}% \expandafter\ifx\csname PackageError\endcsname\relax @@ -3626,6 +3626,8 @@ } \cs_new:Npn \use_none_delimit_by_s_stop:w #1 \s_stop { } %% File: l3tl.dtx +\cs_new_eq:NN \__kernel_tl_set:Nx \cs_set_nopar:Npx +\cs_new_eq:NN \__kernel_tl_gset:Nx \cs_gset_nopar:Npx \cs_new_protected:Npn \tl_new:N #1 { \__kernel_chk_if_free_cs:N #1 @@ -3635,7 +3637,7 @@ \cs_new_protected:Npn \tl_const:Nn #1#2 { \__kernel_chk_if_free_cs:N #1 - \cs_gset_nopar:Npx #1 { \exp_not:n {#2} } + \cs_gset_nopar:Npx #1 { \__kernel_exp_not:w {#2} } } \cs_new_protected:Npn \tl_const:Nx #1#2 { @@ -3661,9 +3663,21 @@ \cs_generate_variant:Nn \tl_set_eq:NN { cN, Nc, cc } \cs_generate_variant:Nn \tl_gset_eq:NN { cN, Nc, cc } \cs_new_protected:Npn \tl_concat:NNN #1#2#3 - { \tl_set:Nx #1 { \exp_not:o {#2} \exp_not:o {#3} } } + { + \__kernel_tl_set:Nx #1 + { + \__kernel_exp_not:w \exp_after:wN {#2} + \__kernel_exp_not:w \exp_after:wN {#3} + } + } \cs_new_protected:Npn \tl_gconcat:NNN #1#2#3 - { \tl_gset:Nx #1 { \exp_not:o {#2} \exp_not:o {#3} } } + { + \__kernel_tl_gset:Nx #1 + { + \__kernel_exp_not:w \exp_after:wN {#2} + \__kernel_exp_not:w \exp_after:wN {#3} + } + } \cs_generate_variant:Nn \tl_concat:NNN { ccc } \cs_generate_variant:Nn \tl_gconcat:NNN { ccc } \prg_new_eq_conditional:NNn \tl_if_exist:N \cs_if_exist:N { TF , T , F , p } @@ -3680,17 +3694,17 @@ } \tl_const:Nn \c_space_tl { ~ } \cs_new_protected:Npn \tl_set:Nn #1#2 - { \cs_set_nopar:Npx #1 { \exp_not:n {#2} } } + { \__kernel_tl_set:Nx #1 { \__kernel_exp_not:w {#2} } } \cs_new_protected:Npn \tl_set:No #1#2 - { \cs_set_nopar:Npx #1 { \exp_not:o {#2} } } + { \__kernel_tl_set:Nx #1 { \__kernel_exp_not:w \exp_after:wN {#2} } } \cs_new_protected:Npn \tl_set:Nx #1#2 - { \cs_set_nopar:Npx #1 {#2} } + { \__kernel_tl_set:Nx #1 {#2} } \cs_new_protected:Npn \tl_gset:Nn #1#2 - { \cs_gset_nopar:Npx #1 { \exp_not:n {#2} } } + { \__kernel_tl_gset:Nx #1 { \__kernel_exp_not:w {#2} } } \cs_new_protected:Npn \tl_gset:No #1#2 - { \cs_gset_nopar:Npx #1 { \exp_not:o {#2} } } + { \__kernel_tl_gset:Nx #1 { \__kernel_exp_not:w \exp_after:wN {#2} } } \cs_new_protected:Npn \tl_gset:Nx #1#2 - { \cs_gset_nopar:Npx #1 {#2} } + { \__kernel_tl_gset:Nx #1 {#2} } \cs_generate_variant:Nn \tl_set:Nn { NV , Nv , Nf } \cs_generate_variant:Nn \tl_set:Nx { c } \cs_generate_variant:Nn \tl_set:Nn { c, co , cV , cv , cf } @@ -3698,21 +3712,45 @@ \cs_generate_variant:Nn \tl_gset:Nx { c } \cs_generate_variant:Nn \tl_gset:Nn { c, co , cV , cv , cf } \cs_new_protected:Npn \tl_put_left:Nn #1#2 - { \cs_set_nopar:Npx #1 { \exp_not:n {#2} \exp_not:o #1 } } + { + \__kernel_tl_set:Nx #1 + { \__kernel_exp_not:w {#2} \__kernel_exp_not:w \exp_after:wN {#1} } + } \cs_new_protected:Npn \tl_put_left:NV #1#2 - { \cs_set_nopar:Npx #1 { \exp_not:V #2 \exp_not:o #1 } } + { + \__kernel_tl_set:Nx #1 + { \exp_not:V #2 \__kernel_exp_not:w \exp_after:wN {#1} } + } \cs_new_protected:Npn \tl_put_left:No #1#2 - { \cs_set_nopar:Npx #1 { \exp_not:o {#2} \exp_not:o #1 } } + { + \__kernel_tl_set:Nx #1 + { + \__kernel_exp_not:w \exp_after:wN {#2} + \__kernel_exp_not:w \exp_after:wN {#1} + } + } \cs_new_protected:Npn \tl_put_left:Nx #1#2 - { \cs_set_nopar:Npx #1 { #2 \exp_not:o #1 } } + { \__kernel_tl_set:Nx #1 { #2 \__kernel_exp_not:w \exp_after:wN {#1} } } \cs_new_protected:Npn \tl_gput_left:Nn #1#2 - { \cs_gset_nopar:Npx #1 { \exp_not:n {#2} \exp_not:o #1 } } + { + \__kernel_tl_gset:Nx #1 + { \__kernel_exp_not:w {#2} \__kernel_exp_not:w \exp_after:wN {#1} } + } \cs_new_protected:Npn \tl_gput_left:NV #1#2 - { \cs_gset_nopar:Npx #1 { \exp_not:V #2 \exp_not:o #1 } } + { + \__kernel_tl_gset:Nx #1 + { \exp_not:V #2 \__kernel_exp_not:w \exp_after:wN {#1} } + } \cs_new_protected:Npn \tl_gput_left:No #1#2 - { \cs_gset_nopar:Npx #1 { \exp_not:o {#2} \exp_not:o #1 } } + { + \__kernel_tl_gset:Nx #1 + { + \__kernel_exp_not:w \exp_after:wN {#2} + \__kernel_exp_not:w \exp_after:wN {#1} + } + } \cs_new_protected:Npn \tl_gput_left:Nx #1#2 - { \cs_gset_nopar:Npx #1 { #2 \exp_not:o {#1} } } + { \__kernel_tl_gset:Nx #1 { #2 \__kernel_exp_not:w \exp_after:wN {#1} } } \cs_generate_variant:Nn \tl_put_left:Nn { c } \cs_generate_variant:Nn \tl_put_left:NV { c } \cs_generate_variant:Nn \tl_put_left:No { c } @@ -3722,21 +3760,39 @@ \cs_generate_variant:Nn \tl_gput_left:No { c } \cs_generate_variant:Nn \tl_gput_left:Nx { c } \cs_new_protected:Npn \tl_put_right:Nn #1#2 - { \cs_set_nopar:Npx #1 { \exp_not:o #1 \exp_not:n {#2} } } + { \__kernel_tl_set:Nx #1 { \__kernel_exp_not:w \exp_after:wN { #1 #2 } } } \cs_new_protected:Npn \tl_put_right:NV #1#2 - { \cs_set_nopar:Npx #1 { \exp_not:o #1 \exp_not:V #2 } } + { + \__kernel_tl_set:Nx #1 + { \__kernel_exp_not:w \exp_after:wN {#1} \exp_not:V #2 } + } \cs_new_protected:Npn \tl_put_right:No #1#2 - { \cs_set_nopar:Npx #1 { \exp_not:o #1 \exp_not:o {#2} } } + { + \__kernel_tl_set:Nx #1 + { + \__kernel_exp_not:w \exp_after:wN {#1} + \__kernel_exp_not:w \exp_after:wN {#2} + } + } \cs_new_protected:Npn \tl_put_right:Nx #1#2 - { \cs_set_nopar:Npx #1 { \exp_not:o #1 #2 } } + { \__kernel_tl_set:Nx #1 { \__kernel_exp_not:w \exp_after:wN {#1} #2 } } \cs_new_protected:Npn \tl_gput_right:Nn #1#2 - { \cs_gset_nopar:Npx #1 { \exp_not:o #1 \exp_not:n {#2} } } + { \__kernel_tl_gset:Nx #1 { \__kernel_exp_not:w \exp_after:wN { #1 #2 } } } \cs_new_protected:Npn \tl_gput_right:NV #1#2 - { \cs_gset_nopar:Npx #1 { \exp_not:o #1 \exp_not:V #2 } } + { + \__kernel_tl_gset:Nx #1 + { \__kernel_exp_not:w \exp_after:wN {#1} \exp_not:V #2 } + } \cs_new_protected:Npn \tl_gput_right:No #1#2 - { \cs_gset_nopar:Npx #1 { \exp_not:o #1 \exp_not:o {#2} } } + { + \__kernel_tl_gset:Nx #1 + { + \__kernel_exp_not:w \exp_after:wN {#1} + \__kernel_exp_not:w \exp_after:wN {#2} + } + } \cs_new_protected:Npn \tl_gput_right:Nx #1#2 - { \cs_gset_nopar:Npx #1 { \exp_not:o {#1} #2 } } + { \__kernel_tl_gset:Nx #1 { \__kernel_exp_not:w \exp_after:wN {#1} #2 } } \cs_generate_variant:Nn \tl_put_right:Nn { c } \cs_generate_variant:Nn \tl_put_right:NV { c } \cs_generate_variant:Nn \tl_put_right:No { c } @@ -3756,9 +3812,11 @@ \cs_new_protected:Npn \tl_rescan:nn #1#2 { \tl_set_rescan:Nnn \l__tl_internal_a_tl {#1} {#2} - \exp_after:wN \tl_clear:N \exp_after:wN \l__tl_internal_a_tl + \exp_after:wN \__tl_rescan_aux: \l__tl_internal_a_tl } +\exp_args:NNo \cs_new_protected:Npn \__tl_rescan_aux: + { \tl_clear:N \l__tl_internal_a_tl } \cs_new_protected:Npn \tl_set_rescan:Nnn { \__tl_set_rescan:NNnn \tl_set:No } \cs_new_protected:Npn \tl_gset_rescan:Nnn @@ -3777,7 +3835,7 @@ } \cs_new_protected:Npn \__tl_set_rescan_multi:nNN #1#2#3 { - \exp_args:No \tex_everyeof:D { \c__tl_rescan_marker_tl } + \tex_everyeof:D \exp_after:wN { \c__tl_rescan_marker_tl } \exp_after:wN \__tl_rescan:NNw \exp_after:wN #2 \exp_after:wN #3 @@ -3850,13 +3908,13 @@ \c__tl_rescan_marker_tl #2 { \use_i:nn \exp_end: #1 } \cs_new_protected:Npn \tl_replace_once:Nnn - { \__tl_replace:NnNNNnn \q__tl_mark ? \__tl_replace_wrap:w \tl_set:Nx } + { \__tl_replace:NnNNNnn \q__tl_mark ? \__tl_replace_wrap:w \__kernel_tl_set:Nx } \cs_new_protected:Npn \tl_greplace_once:Nnn - { \__tl_replace:NnNNNnn \q__tl_mark ? \__tl_replace_wrap:w \tl_gset:Nx } + { \__tl_replace:NnNNNnn \q__tl_mark ? \__tl_replace_wrap:w \__kernel_tl_gset:Nx } \cs_new_protected:Npn \tl_replace_all:Nnn - { \__tl_replace:NnNNNnn \q__tl_mark ? \__tl_replace_next:w \tl_set:Nx } + { \__tl_replace:NnNNNnn \q__tl_mark ? \__tl_replace_next:w \__kernel_tl_set:Nx } \cs_new_protected:Npn \tl_greplace_all:Nnn - { \__tl_replace:NnNNNnn \q__tl_mark ? \__tl_replace_next:w \tl_gset:Nx } + { \__tl_replace:NnNNNnn \q__tl_mark ? \__tl_replace_next:w \__kernel_tl_gset:Nx } \cs_generate_variant:Nn \tl_replace_once:Nnn { c } \cs_generate_variant:Nn \tl_greplace_once:Nnn { c } \cs_generate_variant:Nn \tl_replace_all:Nnn { c } @@ -3893,7 +3951,7 @@ { \group_align_safe_begin: \cs_set:Npn \__tl_replace_wrap:w ##1 #1 ##2 - { \exp_not:o { \use_none:nn ##1 } ##2 } + { \__kernel_exp_not:w \exp_after:wN { \use_none:nn ##1 } ##2 } \cs_set:Npx \__tl_replace_next:w ##1 #5 { \exp_not:N \__tl_replace_wrap:w ##1 @@ -3903,9 +3961,7 @@ } #3 #4 { - \exp_after:wN \__tl_replace_next:w - \exp_after:wN { \exp_after:wN } - \exp_after:wN { \exp_after:wN } + \exp_after:wN \__tl_replace_next_aux:w #4 #1 { @@ -3916,6 +3972,7 @@ } \group_align_safe_end: } +\cs_new:Npn \__tl_replace_next_aux:w { \__tl_replace_next:w { } { } } \cs_new_eq:NN \__tl_replace_wrap:w ? \cs_new_eq:NN \__tl_replace_next:w ? \cs_new_protected:Npn \tl_remove_once:Nn #1#2 @@ -3930,16 +3987,6 @@ { \tl_greplace_all:Nnn #1 {#2} { } } \cs_generate_variant:Nn \tl_remove_all:Nn { c } \cs_generate_variant:Nn \tl_gremove_all:Nn { c } -\prg_new_conditional:Npnn \tl_if_blank:n #1 { p , T , F , TF } - { - \__tl_if_empty_if:o { \use_none:n #1 ? } - \prg_return_true: - \else: - \prg_return_false: - \fi: - } -\prg_generate_conditional_variant:Nnn \tl_if_blank:n - { e , V , o } { p , T , F , TF } \prg_new_conditional:Npnn \tl_if_empty:N #1 { p , T , F , TF } { \if_meaning:w #1 \c_empty_tl @@ -3952,8 +3999,7 @@ { c } { p , T , F , TF } \prg_new_conditional:Npnn \tl_if_empty:n #1 { p , TF , T , F } { - \exp_after:wN \if_meaning:w \exp_after:wN \q__tl_nil - \tl_to_str:n {#1} \q__tl_nil + \if:w \scan_stop: \tl_to_str:n {#1} \scan_stop: \prg_return_true: \else: \prg_return_false: @@ -3963,10 +4009,10 @@ { V } { p , TF , T , F } \cs_new:Npn \__tl_if_empty_if:o #1 { - \exp_after:wN \if_meaning:w \exp_after:wN \q__tl_nil - \__kernel_tl_to_str:w \exp_after:wN {#1} \q__tl_nil + \if:w \scan_stop: \__kernel_tl_to_str:w \exp_after:wN {#1} \scan_stop: } -\prg_new_conditional:Npnn \tl_if_empty:o #1 { p , TF , T , F } +\exp_args:Nno \use:n + { \prg_new_conditional:Npnn \tl_if_empty:o #1 { p , TF , T , F } } { \__tl_if_empty_if:o {#1} \prg_return_true: @@ -3974,6 +4020,17 @@ \prg_return_false: \fi: } +\exp_args:Nno \use:n + { \prg_new_conditional:Npnn \tl_if_blank:n #1 { p , T , F , TF } } + { + \__tl_if_empty_if:o { \use_none:n #1 ? } + \prg_return_true: + \else: + \prg_return_false: + \fi: + } +\prg_generate_conditional_variant:Nnn \tl_if_blank:n + { e , V , o } { p , T , F , TF } \prg_new_conditional:Npnn \tl_if_eq:NN #1#2 { p , T , F , TF } { \if_meaning:w #1 #2 @@ -4048,9 +4105,9 @@ \cs_new:Npn \tl_if_single:NTF { \exp_args:No \tl_if_single:nTF } \prg_new_conditional:Npnn \tl_if_single:n #1 { p , T , F , TF } { - \if_catcode:w ^ \exp_after:wN \__tl_if_single:nnw + \if:w \scan_stop: \exp_after:wN \__tl_if_single:nnw \__kernel_tl_to_str:w - \exp_after:wN { \use_none:nn #1 ?? } ^ ? \s__tl_stop + \exp_after:wN { \use_none:nn #1 ?? } \scan_stop: ? \s__tl_stop \prg_return_true: \else: \prg_return_false: @@ -4196,18 +4253,16 @@ { \int_eval:n { - \__tl_act:NNNnn - \__tl_act_count_normal:nN - \__tl_act_count_group:nn - \__tl_act_count_space:n - { } + \__tl_act:NNNn + \__tl_act_count_normal:N + \__tl_act_count_group:n + \__tl_act_count_space: {#1} } } -\cs_new:Npn \__tl_act_count_normal:nN #1 #2 { 1 + } -\cs_new:Npn \__tl_act_count_space:n #1 { 1 + } -\cs_new:Npn \__tl_act_count_group:nn #1 #2 - { 2 + \tl_count_tokens:n {#2} + } +\cs_new:Npn \__tl_act_count_normal:N #1 { 1 + } +\cs_new:Npn \__tl_act_count_space: { 1 + } +\cs_new:Npn \__tl_act_count_group:n #1 { 2 + \tl_count_tokens:n {#1} + } \cs_new:Npn \tl_reverse_items:n #1 { \__tl_reverse_items:nwNwn #1 ? @@ -4223,43 +4278,48 @@ \s__tl_stop { {#1} #5 } } \cs_new:Npn \__tl_reverse_items:wn #1 \s__tl_stop #2 - { \exp_not:o { \use_none:nn #2 } } + { \__kernel_exp_not:w \exp_after:wN { \use_none:nn #2 } } \cs_new:Npn \tl_trim_spaces:n #1 - { \__tl_trim_spaces:nn { \s__tl_mark #1 } \exp_not:o } + { + \__tl_trim_spaces:nn + { \__tl_trim_mark: #1 } + { \__kernel_exp_not:w \exp_after:wN } + } \cs_generate_variant:Nn \tl_trim_spaces:n { o } \cs_new:Npn \tl_trim_spaces_apply:nN #1#2 - { \__tl_trim_spaces:nn { \s__tl_mark #1 } { \exp_args:No #2 } } + { \__tl_trim_spaces:nn { \__tl_trim_mark: #1 } { \exp_args:No #2 } } \cs_generate_variant:Nn \tl_trim_spaces_apply:nN { o } \cs_new_protected:Npn \tl_trim_spaces:N #1 - { \tl_set:Nx #1 { \exp_args:No \tl_trim_spaces:n {#1} } } + { \__kernel_tl_set:Nx #1 { \exp_args:No \tl_trim_spaces:n {#1} } } \cs_new_protected:Npn \tl_gtrim_spaces:N #1 - { \tl_gset:Nx #1 { \exp_args:No \tl_trim_spaces:n {#1} } } + { \__kernel_tl_gset:Nx #1 { \exp_args:No \tl_trim_spaces:n {#1} } } \cs_generate_variant:Nn \tl_trim_spaces:N { c } \cs_generate_variant:Nn \tl_gtrim_spaces:N { c } -\cs_set:Npn \__tl_tmp:w #1 +\cs_set_protected:Npn \__tl_tmp:w #1 { \cs_new:Npn \__tl_trim_spaces:nn ##1 { \__tl_trim_spaces_auxi:w ##1 \s__tl_nil - \s__tl_mark #1 { } - \s__tl_mark \__tl_trim_spaces_auxii:w + \__tl_trim_mark: #1 { } + \__tl_trim_mark: \__tl_trim_spaces_auxii:w \__tl_trim_spaces_auxiii:w #1 \s__tl_nil \__tl_trim_spaces_auxiv:w \s__tl_stop } - \cs_new:Npn \__tl_trim_spaces_auxi:w ##1 \s__tl_mark #1 ##2 \s__tl_mark ##3 + \cs_new:Npn + \__tl_trim_spaces_auxi:w ##1 \__tl_trim_mark: #1 ##2 \__tl_trim_mark: ##3 { ##3 \__tl_trim_spaces_auxi:w - \s__tl_mark + \__tl_trim_mark: ##2 - \s__tl_mark #1 {##1} + \__tl_trim_mark: #1 {##1} } \cs_new:Npn \__tl_trim_spaces_auxii:w - \__tl_trim_spaces_auxi:w \s__tl_mark \s__tl_mark ##1 + \__tl_trim_spaces_auxi:w \__tl_trim_mark: \__tl_trim_mark: ##1 { \__tl_trim_spaces_auxiii:w ##1 @@ -4271,111 +4331,52 @@ \__tl_trim_spaces_auxiii:w } \cs_new:Npn \__tl_trim_spaces_auxiv:w ##1 \s__tl_nil ##2 \s__tl_stop ##3 - { ##3 { \use_none:n ##1 } } + { ##3 { ##1 } } + \cs_new:Npn \__tl_trim_mark: {} } \__tl_tmp:w { ~ } -\quark_new:N \q__tl_act_mark -\quark_new:N \q__tl_act_stop -\cs_new:Npn \__tl_act:NNNnn #1#2#3#4#5 - { - \group_align_safe_begin: - \__tl_act_loop:w #5 \q__tl_act_mark \q__tl_act_stop - {#4} #1 #2 #3 - \__tl_act_result:n { } - } -\cs_new:Npn \__tl_act_loop:w #1 \q__tl_act_stop +\cs_if_exist:NTF \tex_expanded:D { - \tl_if_head_is_N_type:nTF {#1} - { \__tl_act_normal:NwnNNN } + \cs_new:Npn \tl_head:n #1 { - \tl_if_head_is_group:nTF {#1} - { \__tl_act_group:nwnNNN } - { \__tl_act_space:wwnNNN } + \__kernel_exp_not:w \tex_expanded:D + { { \if_false: { \fi: \__tl_head_aux:n #1 { } } } } + } + \cs_new:Npn \__tl_head_aux:n #1 + { + \__kernel_exp_not:w {#1} + \exp_after:wN \use_none:n \exp_after:wN { \if_false: } \fi: } - #1 \q__tl_act_stop - } -\cs_new:Npn \__tl_act_normal:NwnNNN #1 #2 \q__tl_act_stop #3#4 - { - \if_meaning:w \q__tl_act_mark #1 - \exp_after:wN \__tl_act_end:wn - \fi: - #4 {#3} #1 - \__tl_act_loop:w #2 \q__tl_act_stop - {#3} #4 - } -\cs_new:Npn \__tl_act_end:wn #1 \__tl_act_result:n #2 - { \group_align_safe_end: \exp_end: #2 } -\cs_new:Npn \__tl_act_group:nwnNNN #1 #2 \q__tl_act_stop #3#4#5 - { - #5 {#3} {#1} - \__tl_act_loop:w #2 \q__tl_act_stop - {#3} #4 #5 - } -\exp_last_unbraced:NNo - \cs_new:Npn \__tl_act_space:wwnNNN \c_space_tl #1 \q__tl_act_stop #2#3#4#5 - { - #5 {#2} - \__tl_act_loop:w #1 \q__tl_act_stop - {#2} #3 #4 #5 } -\cs_new:Npn \__tl_act_output:n #1 #2 \__tl_act_result:n #3 - { #2 \__tl_act_result:n { #3 #1 } } -\cs_new:Npn \__tl_act_reverse_output:n #1 #2 \__tl_act_result:n #3 - { #2 \__tl_act_result:n { #1 #3 } } -\cs_new:Npn \tl_reverse:n #1 { - \__kernel_exp_not:w \exp_after:wN + \cs_new:Npn \tl_head:n #1 { - \exp:w - \__tl_act:NNNnn - \__tl_reverse_normal:nN - \__tl_reverse_group_preserve:nn - \__tl_reverse_space:n - { } + \__kernel_exp_not:w + \if_false: { \fi: \__tl_head_auxi:nw #1 { } \s__tl_stop } + } + \cs_new:Npn \__tl_head_auxi:nw #1#2 \s__tl_stop + { + \exp_after:wN \__tl_head_auxii:n \exp_after:wN { + \if_false: } \fi: {#1} + } + \exp_args:Nno \use:n + { \cs_new:Npn \__tl_head_auxii:n #1 } + { + \__tl_if_empty_if:o { \use_none:n #1 } + \exp_after:wN \use_ii:nnn + \fi: + \use_ii:nn {#1} + { \if_false: { \fi: \__tl_head_auxi:nw #1 } } } } -\cs_generate_variant:Nn \tl_reverse:n { o , V } -\cs_new:Npn \__tl_reverse_normal:nN #1#2 - { \__tl_act_reverse_output:n {#2} } -\cs_new:Npn \__tl_reverse_group_preserve:nn #1#2 - { \__tl_act_reverse_output:n { {#2} } } -\cs_new:Npn \__tl_reverse_space:n #1 - { \__tl_act_reverse_output:n { ~ } } -\cs_new_protected:Npn \tl_reverse:N #1 - { \tl_set:Nx #1 { \exp_args:No \tl_reverse:n { #1 } } } -\cs_new_protected:Npn \tl_greverse:N #1 - { \tl_gset:Nx #1 { \exp_args:No \tl_reverse:n { #1 } } } -\cs_generate_variant:Nn \tl_reverse:N { c } -\cs_generate_variant:Nn \tl_greverse:N { c } -\cs_new:Npn \tl_head:n #1 - { - \__kernel_exp_not:w - \if_false: { \fi: \__tl_head_auxi:nw #1 { } \s__tl_stop } - } -\cs_new:Npn \__tl_head_auxi:nw #1#2 \s__tl_stop - { - \exp_after:wN \__tl_head_auxii:n \exp_after:wN { - \if_false: } \fi: {#1} - } -\cs_new:Npn \__tl_head_auxii:n #1 - { - \exp_after:wN \if_meaning:w \exp_after:wN \q__tl_nil - \__kernel_tl_to_str:w \exp_after:wN { \use_none:n #1 } \q__tl_nil - \exp_after:wN \use_i:nn - \else: - \exp_after:wN \use_ii:nn - \fi: - {#1} - { \if_false: { \fi: \__tl_head_auxi:nw #1 } } - } \cs_generate_variant:Nn \tl_head:n { V , v , f } \cs_new:Npn \tl_head:w #1#2 \q_stop {#1} \cs_new:Npn \__tl_tl_head:w #1#2 \s__tl_stop {#1} \cs_new:Npn \tl_head:N { \exp_args:No \tl_head:n } -\cs_new:Npn \tl_tail:n #1 +\exp_args:Nno \use:n { \cs_new:Npn \tl_tail:n #1 } { - \__kernel_exp_not:w + \exp_after:wN \__kernel_exp_not:w \tl_if_blank:nTF {#1} { { } } { \exp_after:wN { \use_none:n #1 } } @@ -4385,13 +4386,10 @@ \prg_new_conditional:Npnn \tl_if_head_eq_charcode:nN #1#2 { p , T , F , TF } { \if_charcode:w - \exp_not:N #2 \tl_if_head_is_N_type:nTF { #1 ? } - { - \exp_after:wN \exp_not:N - \__tl_tl_head:w #1 { ? \use_none:nn } \s__tl_stop - } + { \__tl_head_exp_not:w #1 { ^ \__tl_if_head_eq_empty_arg:w } \s__tl_stop } { \str_head:n {#1} } + \exp_not:N #2 \prg_return_true: \else: \prg_return_false: @@ -4402,17 +4400,14 @@ \prg_new_conditional:Npnn \tl_if_head_eq_catcode:nN #1 #2 { p , T , F , TF } { \if_catcode:w - \exp_not:N #2 \tl_if_head_is_N_type:nTF { #1 ? } - { - \exp_after:wN \exp_not:N - \__tl_tl_head:w #1 { ? \use_none:nn } \s__tl_stop - } + { \__tl_head_exp_not:w #1 { ^ \__tl_if_head_eq_empty_arg:w } \s__tl_stop } { \tl_if_head_is_group:nTF {#1} - { \c_group_begin_token } - { \c_space_token } + \c_group_begin_token + \c_space_token } + \exp_not:N #2 \prg_return_true: \else: \prg_return_false: @@ -4423,8 +4418,8 @@ \prg_new_conditional:Npnn \tl_if_head_eq_meaning:nN #1#2 { p , T , F , TF } { \tl_if_head_is_N_type:nTF { #1 ? } - { \__tl_if_head_eq_meaning_normal:nN } - { \__tl_if_head_eq_meaning_special:nN } + \__tl_if_head_eq_meaning_normal:nN + \__tl_if_head_eq_meaning_special:nN {#1} #2 } \cs_new:Npn \__tl_if_head_eq_meaning_normal:nN #1 #2 @@ -4439,11 +4434,11 @@ \cs_new:Npn \__tl_if_head_eq_meaning_special:nN #1 #2 { \if_charcode:w \str_head:n {#1} \exp_not:N #2 - \exp_after:wN \use:n + \exp_after:wN \use_ii:nn \else: \prg_return_false: - \exp_after:wN \use_none:n \fi: + \use_none:n { \if_catcode:w \exp_not:N #2 \tl_if_head_is_group:nTF {#1} @@ -4455,46 +4450,148 @@ \fi: } } +\cs_new:Npn \__tl_head_exp_not:w #1 #2 \s__tl_stop + { \exp_not:N #1 } +\cs_new:Npn \__tl_if_head_eq_empty_arg:w \exp_not:N #1 + { ? } \prg_new_conditional:Npnn \tl_if_head_is_N_type:n #1 { p , T , F , TF } { - \if_catcode:w - \if_false: { \fi: \__tl_if_head_is_N_type:w ? #1 ~ } - \exp_after:wN \use_none:n - \exp_after:wN { \exp_after:wN { \token_to_str:N #1 ? } } - * * + \if:w + \if_false: { \fi: \__tl_if_head_is_N_type_auxi:w \prg_do_nothing: #1 ~ } + { \exp_after:wN { \token_to_str:N #1 } } + \scan_stop: \scan_stop: \prg_return_true: \else: \prg_return_false: \fi: } -\cs_new:Npn \__tl_if_head_is_N_type:w #1 ~ +\exp_args:Nno \use:n { \cs_new:Npn \__tl_if_head_is_N_type_auxi:w #1 ~ } { - \tl_if_empty:oTF { \use_none:n #1 } { ^ } { } - \exp_after:wN \use_none:n \exp_after:wN { \if_false: } \fi: + \tl_if_empty:oTF { #1 } + { f \exp_after:wN \use_none:nn } + { \exp_after:wN \__tl_if_head_is_N_type_auxii:n } + \exp_after:wN { \if_false: } \fi: } +\cs_new:Npn \__tl_if_head_is_N_type_auxii:n #1 + { \exp_after:wN \use_none:n \exp_after:wN } \prg_new_conditional:Npnn \tl_if_head_is_group:n #1 { p , T , F , TF } { - \if_catcode:w + \if:w \exp_after:wN \use_none:n \exp_after:wN { \exp_after:wN { \token_to_str:N #1 ? } } - * * - \prg_return_false: - \else: + \scan_stop: \scan_stop: + \__tl_if_head_is_group_fi_false:w + \fi: + \if_true: \prg_return_true: + \else: + \prg_return_false: \fi: } +\cs_new:Npn \__tl_if_head_is_group_fi_false:w \fi: \if_true: { \fi: \if_false: } \prg_new_conditional:Npnn \tl_if_head_is_space:n #1 { p , T , F , TF } { - \exp:w \if_false: { \fi: - \__tl_if_head_is_space:w ? #1 ? ~ } + \if:w + \if_false: { \fi: \__tl_if_head_is_space:w \prg_do_nothing: #1 ? ~ } + \scan_stop: \scan_stop: + \prg_return_true: + \else: + \prg_return_false: + \fi: } -\cs_new:Npn \__tl_if_head_is_space:w #1 ~ +\exp_args:Nno \use:n { \cs_new:Npn \__tl_if_head_is_space:w #1 ~ } { - \tl_if_empty:oTF { \use_none:n #1 } - { \exp_after:wN \exp_end: \exp_after:wN \prg_return_true: } - { \exp_after:wN \exp_end: \exp_after:wN \prg_return_false: } + \__tl_if_empty_if:o {#1} \else: f \fi: \exp_after:wN \use_none:n \exp_after:wN { \if_false: } \fi: } +\scan_new:N \s__tl_act_stop +\cs_set_protected:Npn \__tl_tmp:w #1 + { + \cs_new:Npn \__tl_act_if_head_is_space:nTF ##1 + { + \__tl_act_if_head_is_space:w + \s__tl_act_stop ##1 \s__tl_act_stop \__tl_act_if_head_is_space_true:w + \s__tl_act_stop #1 \s__tl_act_stop \use_ii:nn + } + \cs_new:Npn \__tl_act_if_head_is_space:w + ##1 \s__tl_act_stop #1 ##2 \s__tl_act_stop + {} + \cs_new:Npn \__tl_act_if_head_is_space_true:w + \s__tl_act_stop #1 \s__tl_act_stop \use_ii:nn ##1 ##2 + {##1} + } +\__tl_tmp:w { ~ } +\exp_args:Nnx \use:n { \cs_new:Npn \__tl_act_loop:w #1 \s__tl_act_stop } + { + \exp_not:o { \__tl_act_if_head_is_space:nTF {#1} } + \exp_not:N \__tl_act_space:wwNNN + { + \exp_not:o { \tl_if_head_is_group:nTF {#1} } + \exp_not:N \__tl_act_group:nwNNN + \exp_not:N \__tl_act_normal:NwNNN + } + \exp_not:n {#1} \s__tl_act_stop + } +\cs_undefine:N \__tl_act_if_head_is_space:nTF +\cs_new:Npn \__tl_act_normal:NwNNN #1 #2 \s__tl_act_stop #3 + { + #3 #1 + \__tl_act_loop:w #2 \s__tl_act_stop + #3 + } +\cs_new:Npn \__tl_use_none_delimit_by_s_act_stop:w #1 \s__tl_act_stop { } +\cs_new:Npn \__tl_act_end:wn #1 \__tl_act_result:n #2 + { \group_align_safe_end: \exp_end: #2 } +\cs_new:Npn \__tl_act_group:nwNNN #1 #2 \s__tl_act_stop #3#4#5 + { + \__tl_use_none_delimit_by_s_act_stop:w #1 \__tl_act_end:wn \s__tl_act_stop + #5 {#1} + \__tl_act_loop:w #2 \s__tl_act_stop + #3 #4 #5 + } +\exp_last_unbraced:NNo + \cs_new:Npn \__tl_act_space:wwNNN \c_space_tl #1 \s__tl_act_stop #2#3 + { + #3 + \__tl_act_loop:w #1 \s__tl_act_stop + #2 #3 + } +\cs_new:Npn \__tl_act:NNNn #1#2#3#4 + { + \group_align_safe_begin: + \__tl_act_loop:w #4 { \s__tl_act_stop } ? \s__tl_act_stop + #1 #3 #2 + \__tl_act_result:n { } + } +\cs_new:Npn \__tl_act_output:n #1 #2 \__tl_act_result:n #3 + { #2 \__tl_act_result:n { #3 #1 } } +\cs_new:Npn \__tl_act_reverse_output:n #1 #2 \__tl_act_result:n #3 + { #2 \__tl_act_result:n { #1 #3 } } +\cs_new:Npn \tl_reverse:n #1 + { + \__kernel_exp_not:w \exp_after:wN + { + \exp:w + \__tl_act:NNNn + \__tl_reverse_normal:N + \__tl_reverse_group_preserve:n + \__tl_reverse_space: + {#1} + } + } +\cs_generate_variant:Nn \tl_reverse:n { o , V } +\cs_new:Npn \__tl_reverse_normal:N + { \__tl_act_reverse_output:n } +\cs_new:Npn \__tl_reverse_group_preserve:n #1 + { \__tl_act_reverse_output:n { {#1} } } +\cs_new:Npn \__tl_reverse_space: + { \__tl_act_reverse_output:n { ~ } } +\cs_new_protected:Npn \tl_reverse:N #1 + { \__kernel_tl_set:Nx #1 { \exp_args:No \tl_reverse:n { #1 } } } +\cs_new_protected:Npn \tl_greverse:N #1 + { \__kernel_tl_gset:Nx #1 { \exp_args:No \tl_reverse:n { #1 } } } +\cs_generate_variant:Nn \tl_reverse:N { c } +\cs_generate_variant:Nn \tl_greverse:N { c } \cs_new:Npn \tl_item:nn #1#2 { \exp_args:Nf \__tl_item:nn @@ -4630,7 +4727,10 @@ \cs_new_protected:Npn \__tl_show:NN #1#2 { \__kernel_chk_defined:NT #2 - { \exp_args:Nx #1 { \token_to_str:N #2 = \exp_not:o {#2} } } + { + \exp_args:Ne #1 + { \token_to_str:N #2 = \__kernel_exp_not:w \exp_after:wN {#2} } + } } \cs_new_protected:Npn \tl_show:n #1 { \iow_wrap:nnnN { >~ \tl_to_str:n {#1} . } { } { } \__tl_show:n } @@ -4656,6 +4756,7 @@ \tl_new:N \g_tmpb_tl \tl_new:N \l_tmpa_tl \tl_new:N \l_tmpb_tl +\cs_undefine:N \__tl_tmp:w %% File: l3str.dtx \scan_new:N \s__str_mark \scan_new:N \s__str_stop @@ -4717,13 +4818,13 @@ { } \group_end: \cs_new_protected:Npn \str_replace_once:Nnn - { \__str_replace:NNNnn \prg_do_nothing: \tl_set:Nx } + { \__str_replace:NNNnn \prg_do_nothing: \__kernel_tl_set:Nx } \cs_new_protected:Npn \str_greplace_once:Nnn - { \__str_replace:NNNnn \prg_do_nothing: \tl_gset:Nx } + { \__str_replace:NNNnn \prg_do_nothing: \__kernel_tl_gset:Nx } \cs_new_protected:Npn \str_replace_all:Nnn - { \__str_replace:NNNnn \__str_replace_next:w \tl_set:Nx } + { \__str_replace:NNNnn \__str_replace_next:w \__kernel_tl_set:Nx } \cs_new_protected:Npn \str_greplace_all:Nnn - { \__str_replace:NNNnn \__str_replace_next:w \tl_gset:Nx } + { \__str_replace:NNNnn \__str_replace_next:w \__kernel_tl_gset:Nx } \cs_generate_variant:Nn \str_replace_once:Nnn { c } \cs_generate_variant:Nn \str_greplace_once:Nnn { c } \cs_generate_variant:Nn \str_replace_all:Nnn { c } @@ -5318,22 +5419,22 @@ \cs_new_eq:NN \seq_gset_eq:cc \tl_gset_eq:cc \cs_new_protected:Npn \seq_set_from_clist:NN #1#2 { - \tl_set:Nx #1 + \__kernel_tl_set:Nx #1 { \s__seq \clist_map_function:NN #2 \__seq_wrap_item:n } } \cs_new_protected:Npn \seq_set_from_clist:Nn #1#2 { - \tl_set:Nx #1 + \__kernel_tl_set:Nx #1 { \s__seq \clist_map_function:nN {#2} \__seq_wrap_item:n } } \cs_new_protected:Npn \seq_gset_from_clist:NN #1#2 { - \tl_gset:Nx #1 + \__kernel_tl_gset:Nx #1 { \s__seq \clist_map_function:NN #2 \__seq_wrap_item:n } } \cs_new_protected:Npn \seq_gset_from_clist:Nn #1#2 { - \tl_gset:Nx #1 + \__kernel_tl_gset:Nx #1 { \s__seq \clist_map_function:nN {#2} \__seq_wrap_item:n } } \cs_generate_variant:Nn \seq_set_from_clist:NN { Nc } @@ -5349,9 +5450,9 @@ } \cs_generate_variant:Nn \seq_const_from_clist:Nn { c } \cs_new_protected:Npn \seq_set_split:Nnn - { \__seq_set_split:NNnn \tl_set:Nx } + { \__seq_set_split:NNnn \__kernel_tl_set:Nx } \cs_new_protected:Npn \seq_gset_split:Nnn - { \__seq_set_split:NNnn \tl_gset:Nx } + { \__seq_set_split:NNnn \__kernel_tl_gset:Nx } \cs_new_protected:Npn \__seq_set_split:NNnn #1#2#3#4 { \tl_if_empty:nTF {#3} @@ -5371,7 +5472,7 @@ \__seq_set_split_end: \__seq_set_split_auxi:w \prg_do_nothing: } - \tl_set:Nx \l__seq_internal_a_tl { \l__seq_internal_a_tl } + \__kernel_tl_set:Nx \l__seq_internal_a_tl { \l__seq_internal_a_tl } } #1 #2 { \s__seq \l__seq_internal_a_tl } } @@ -5397,7 +5498,7 @@ { TF , T , F , p } \cs_new_protected:Npn \seq_put_left:Nn #1#2 { - \tl_set:Nx #1 + \__kernel_tl_set:Nx #1 { \exp_not:n { \s__seq \__seq_item:n {#2} } \exp_not:f { \exp_after:wN \__seq_put_left_aux:w #1 } @@ -5405,7 +5506,7 @@ } \cs_new_protected:Npn \seq_gput_left:Nn #1#2 { - \tl_gset:Nx #1 + \__kernel_tl_gset:Nx #1 { \exp_not:n { \s__seq \__seq_item:n {#2} } \exp_not:f { \exp_after:wN \__seq_put_left_aux:w #1 } @@ -5443,9 +5544,9 @@ \cs_generate_variant:Nn \seq_remove_duplicates:N { c } \cs_generate_variant:Nn \seq_gremove_duplicates:N { c } \cs_new_protected:Npn \seq_remove_all:Nn - { \__seq_remove_all_aux:NNn \tl_set:Nx } + { \__seq_remove_all_aux:NNn \__kernel_tl_set:Nx } \cs_new_protected:Npn \seq_gremove_all:Nn - { \__seq_remove_all_aux:NNn \tl_gset:Nx } + { \__seq_remove_all_aux:NNn \__kernel_tl_gset:Nx } \cs_new_protected:Npn \__seq_remove_all_aux:NNn #1#2#3 { \__seq_push_item_def:n @@ -5469,9 +5570,9 @@ \cs_generate_variant:Nn \seq_remove_all:Nn { c } \cs_generate_variant:Nn \seq_gremove_all:Nn { c } \cs_new_protected:Npn \seq_reverse:N - { \__seq_reverse:NN \tl_set:Nx } + { \__seq_reverse:NN \__kernel_tl_set:Nx } \cs_new_protected:Npn \seq_greverse:N - { \__seq_reverse:NN \tl_gset:Nx } + { \__seq_reverse:NN \__kernel_tl_gset:Nx } \cs_new_protected:Npn \__seq_reverse:NN #1 #2 { \cs_set_eq:NN \__seq_tmp:w \__seq_item:n @@ -5584,7 +5685,7 @@ } \cs_new_protected:Npn \seq_get_left:NN #1#2 { - \tl_set:Nx #2 + \__kernel_tl_set:Nx #2 { \exp_after:wN \__seq_get_left:wnw #1 \__seq_item:n { \q_no_value } \s__seq_stop @@ -5609,7 +5710,7 @@ \cs_generate_variant:Nn \seq_gpop_left:NN { c } \cs_new_protected:Npn \seq_get_right:NN #1#2 { - \tl_set:Nx #2 + \__kernel_tl_set:Nx #2 { \exp_after:wN \use_i_ii:nnn \exp_after:wN \__seq_get_right_loop:nw @@ -5626,9 +5727,9 @@ \cs_new:Npn \__seq_get_right_end:NnN #1#2#3 { \exp_not:n {#2} } \cs_generate_variant:Nn \seq_get_right:NN { c } \cs_new_protected:Npn \seq_pop_right:NN - { \__seq_pop:NNNN \__seq_pop_right:NNN \tl_set:Nx } + { \__seq_pop:NNNN \__seq_pop_right:NNN \__kernel_tl_set:Nx } \cs_new_protected:Npn \seq_gpop_right:NN - { \__seq_pop:NNNN \__seq_pop_right:NNN \tl_gset:Nx } + { \__seq_pop:NNNN \__seq_pop_right:NNN \__kernel_tl_gset:Nx } \cs_new_protected:Npn \__seq_pop_right:NNN #1#2#3 { \cs_set_eq:NN \__seq_tmp:w \__seq_item:n @@ -5640,7 +5741,7 @@ #2 { \if_false: { \fi: } - \tl_set:Nx #3 + \__kernel_tl_set:Nx #3 } { } \use_none:nn \cs_set_eq:NN \__seq_item:n \__seq_tmp:w @@ -5668,10 +5769,10 @@ { \__seq_pop_TF:NNNN \__seq_pop_left:NNN \tl_gset:Nn #1 #2 } \prg_new_protected_conditional:Npnn \seq_pop_right:NN #1#2 { T , F , TF } - { \__seq_pop_TF:NNNN \__seq_pop_right:NNN \tl_set:Nx #1 #2 } + { \__seq_pop_TF:NNNN \__seq_pop_right:NNN \__kernel_tl_set:Nx #1 #2 } \prg_new_protected_conditional:Npnn \seq_gpop_right:NN #1#2 { T , F , TF } - { \__seq_pop_TF:NNNN \__seq_pop_right:NNN \tl_gset:Nx #1 #2 } + { \__seq_pop_TF:NNNN \__seq_pop_right:NNN \__kernel_tl_gset:Nx #1 #2 } \prg_generate_conditional_variant:Nnn \seq_pop_left:NN { c } { T , F , TF } \prg_generate_conditional_variant:Nnn \seq_gpop_left:NN { c } @@ -5819,9 +5920,9 @@ \int_value:w \int_eval:w 1 + #2 ; } \cs_new_protected:Npn \seq_set_map_x:NNn - { \__seq_set_map_x:NNNn \tl_set:Nx } + { \__seq_set_map_x:NNNn \__kernel_tl_set:Nx } \cs_new_protected:Npn \seq_gset_map_x:NNn - { \__seq_set_map_x:NNNn \tl_gset:Nx } + { \__seq_set_map_x:NNNn \__kernel_tl_gset:Nx } \cs_new_protected:Npn \__seq_set_map_x:NNNn #1#2#3#4 { \__seq_push_item_def:n { \exp_not:N \__seq_item:n {#4} } @@ -5829,9 +5930,9 @@ \__seq_pop_item_def: } \cs_new_protected:Npn \seq_set_map:NNn - { \__seq_set_map:NNNn \tl_set:Nx } + { \__seq_set_map:NNNn \__kernel_tl_set:Nx } \cs_new_protected:Npn \seq_gset_map:NNn - { \__seq_set_map:NNNn \tl_gset:Nx } + { \__seq_set_map:NNNn \__kernel_tl_gset:Nx } \cs_new_protected:Npn \__seq_set_map:NNNn #1#2#3#4 { \__seq_push_item_def:n { \exp_not:n { \__seq_item:n {#4} } } @@ -7478,7 +7579,7 @@ \tl_new:N \g__sys_backend_tl \__sys_finalise:n { - \tl_gset:Nx \g__sys_backend_tl + \__kernel_tl_gset:Nx \g__sys_backend_tl { \sys_if_engine_xetex:TF { xdvipdfmx } @@ -7594,9 +7695,9 @@ \cs_new_eq:NN \clist_gset_eq:cN \tl_gset_eq:cN \cs_new_eq:NN \clist_gset_eq:cc \tl_gset_eq:cc \cs_new_protected:Npn \clist_set_from_seq:NN - { \__clist_set_from_seq:NNNN \clist_clear:N \tl_set:Nx } + { \__clist_set_from_seq:NNNN \clist_clear:N \__kernel_tl_set:Nx } \cs_new_protected:Npn \clist_gset_from_seq:NN - { \__clist_set_from_seq:NNNN \clist_gclear:N \tl_gset:Nx } + { \__clist_set_from_seq:NNNN \clist_gclear:N \__kernel_tl_gset:Nx } \cs_new_protected:Npn \__clist_set_from_seq:NNNN #1#2#3#4 { \seq_if_empty:NTF #4 @@ -7621,9 +7722,9 @@ \cs_generate_variant:Nn \clist_gset_from_seq:NN { Nc } \cs_generate_variant:Nn \clist_gset_from_seq:NN { c , cc } \cs_new_protected:Npn \clist_concat:NNN - { \__clist_concat:NNNN \tl_set:Nx } + { \__clist_concat:NNNN \__kernel_tl_set:Nx } \cs_new_protected:Npn \clist_gconcat:NNN - { \__clist_concat:NNNN \tl_gset:Nx } + { \__clist_concat:NNNN \__kernel_tl_gset:Nx } \cs_new_protected:Npn \__clist_concat:NNNN #1#2#3#4 { #1 #2 @@ -7640,9 +7741,9 @@ \prg_new_eq_conditional:NNn \clist_if_exist:c \cs_if_exist:c { TF , T , F , p } \cs_new_protected:Npn \clist_set:Nn #1#2 - { \tl_set:Nx #1 { \__clist_sanitize:n {#2} } } + { \__kernel_tl_set:Nx #1 { \__clist_sanitize:n {#2} } } \cs_new_protected:Npn \clist_gset:Nn #1#2 - { \tl_gset:Nx #1 { \__clist_sanitize:n {#2} } } + { \__kernel_tl_gset:Nx #1 { \__clist_sanitize:n {#2} } } \cs_generate_variant:Nn \clist_set:Nn { NV , No , Nx , c , cV , co , cx } \cs_generate_variant:Nn \clist_gset:Nn { NV , No , Nx , c , cV , co , cx } \cs_new_protected:Npn \clist_put_left:Nn @@ -7683,9 +7784,9 @@ { \tl_set:Nn #3 {#1} } \cs_generate_variant:Nn \clist_get:NN { c } \cs_new_protected:Npn \clist_pop:NN - { \__clist_pop:NNN \tl_set:Nx } + { \__clist_pop:NNN \__kernel_tl_set:Nx } \cs_new_protected:Npn \clist_gpop:NN - { \__clist_pop:NNN \tl_gset:Nx } + { \__clist_pop:NNN \__kernel_tl_gset:Nx } \cs_new_protected:Npn \__clist_pop:NNN #1#2#3 { \if_meaning:w #2 \c_empty_clist @@ -7719,9 +7820,9 @@ } \prg_generate_conditional_variant:Nnn \clist_get:NN { c } { T , F , TF } \prg_new_protected_conditional:Npnn \clist_pop:NN #1#2 { T , F , TF } - { \__clist_pop_TF:NNN \tl_set:Nx #1 #2 } + { \__clist_pop_TF:NNN \__kernel_tl_set:Nx #1 #2 } \prg_new_protected_conditional:Npnn \clist_gpop:NN #1#2 { T , F , TF } - { \__clist_pop_TF:NNN \tl_gset:Nx #1 #2 } + { \__clist_pop_TF:NNN \__kernel_tl_gset:Nx #1 #2 } \cs_new_protected:Npn \__clist_pop_TF:NNN #1#2#3 { \if_meaning:w #2 \c_empty_clist @@ -7768,9 +7869,9 @@ \cs_generate_variant:Nn \clist_remove_duplicates:N { c } \cs_generate_variant:Nn \clist_gremove_duplicates:N { c } \cs_new_protected:Npn \clist_remove_all:Nn - { \__clist_remove_all:NNNn \clist_set_from_seq:NN \tl_set:Nx } + { \__clist_remove_all:NNNn \clist_set_from_seq:NN \__kernel_tl_set:Nx } \cs_new_protected:Npn \clist_gremove_all:Nn - { \__clist_remove_all:NNNn \clist_gset_from_seq:NN \tl_gset:Nx } + { \__clist_remove_all:NNNn \clist_gset_from_seq:NN \__kernel_tl_gset:Nx } \cs_new_protected:Npn \__clist_remove_all:NNNn #1#2#3#4 { \__clist_if_wrap:nTF {#4} @@ -7807,9 +7908,9 @@ \cs_generate_variant:Nn \clist_remove_all:Nn { c } \cs_generate_variant:Nn \clist_gremove_all:Nn { c } \cs_new_protected:Npn \clist_reverse:N #1 - { \tl_set:Nx #1 { \exp_args:No \clist_reverse:n {#1} } } + { \__kernel_tl_set:Nx #1 { \exp_args:No \clist_reverse:n {#1} } } \cs_new_protected:Npn \clist_greverse:N #1 - { \tl_gset:Nx #1 { \exp_args:No \clist_reverse:n {#1} } } + { \__kernel_tl_gset:Nx #1 { \exp_args:No \clist_reverse:n {#1} } } \cs_generate_variant:Nn \clist_reverse:N { c } \cs_generate_variant:Nn \clist_greverse:N { c } \cs_new:Npn \clist_reverse:n #1 @@ -8306,7 +8407,7 @@ \tl_put_right:Nn \l__char_tmp_tl { ^^@ \if_false: } } \char_set_catcode_group_end:n { 0 } \tl_put_right:Nn \l__char_tmp_tl { { \fi: \exp_not:N \or: ^^@ } % } - \tl_set:Nx \l__char_tmp_tl { \l__char_tmp_tl } + \__kernel_tl_set:Nx \l__char_tmp_tl { \l__char_tmp_tl } \char_set_catcode_math_toggle:n { 0 } \tl_put_right:Nn \l__char_tmp_tl { \or: ^^@ } \char_set_catcode_alignment:n { 0 } @@ -8725,6 +8826,7 @@ \__token_tmp:w { char" } \__token_tmp:w { count } \__token_tmp:w { dimen } +\__token_tmp:w { ~ font } \__token_tmp:w { macro } \__token_tmp:w { muskip } \__token_tmp:w { skip } @@ -8772,6 +8874,7 @@ { \tl_to_str:n { \protected } macro } \__token_tmp:w { protected_long_macro } { macro } { \token_to_str:N \protected \tl_to_str:n { \long } macro } +\__token_tmp:w { font_selection } { ~ font } { select ~ font } \__token_tmp:w { dim_register } { dimen } { \token_to_str:N \dimen } \__token_tmp:w { int_register } { count } { \token_to_str:N \count } \__token_tmp:w { muskip_register } { muskip } { \token_to_str:N \muskip } @@ -9237,8 +9340,8 @@ } \prg_generate_conditional_variant:Nnn \prop_pop:NnN { c } { T , F , TF } \prg_generate_conditional_variant:Nnn \prop_gpop:NnN { c } { T , F , TF } -\cs_new_protected:Npn \prop_put:Nnn { \__prop_put:NNnn \tl_set:Nx } -\cs_new_protected:Npn \prop_gput:Nnn { \__prop_put:NNnn \tl_gset:Nx } +\cs_new_protected:Npn \prop_put:Nnn { \__prop_put:NNnn \__kernel_tl_set:Nx } +\cs_new_protected:Npn \prop_gput:Nnn { \__prop_put:NNnn \__kernel_tl_gset:Nx } \cs_new_protected:Npn \__prop_put:NNnn #1#2#3#4 { \tl_set:Nn \l__prop_internal_tl @@ -9259,9 +9362,9 @@ \cs_generate_variant:Nn \prop_gput:Nnn { c , cnV , cno , cnx , cV , cVV , cVx , cvx , co , coo , cxx } \cs_new_protected:Npn \prop_put_if_new:Nnn - { \__prop_put_if_new:NNnn \tl_set:Nx } + { \__prop_put_if_new:NNnn \__kernel_tl_set:Nx } \cs_new_protected:Npn \prop_gput_if_new:Nnn - { \__prop_put_if_new:NNnn \tl_gset:Nx } + { \__prop_put_if_new:NNnn \__kernel_tl_gset:Nx } \cs_new_protected:Npn \__prop_put_if_new:NNnn #1#2#3#4 { \tl_set:Nn \l__prop_internal_tl @@ -10402,7 +10505,7 @@ { \__ior_open_stream:Nn #1 {#2} } { \__ior_new:N #1 - \tl_set:Nx \l__ior_stream_tl { \int_eval:n {#1} } + \__kernel_tl_set:Nx \l__ior_stream_tl { \int_eval:n {#1} } \__ior_open_stream:Nn #1 {#2} } } @@ -10592,14 +10695,14 @@ \tl_new:N \l__iow_file_name_tl \cs_new_protected:Npn \iow_open:Nn #1#2 { - \tl_set:Nx \l__iow_file_name_tl + \__kernel_tl_set:Nx \l__iow_file_name_tl { \__kernel_file_name_sanitize:n {#2} } \iow_close:N #1 \seq_gpop:NNTF \g__iow_streams_seq \l__iow_stream_tl { \__iow_open_stream:NV #1 \l__iow_file_name_tl } { \__iow_new:N #1 - \tl_set:Nx \l__iow_stream_tl { \int_eval:n {#1} } + \__kernel_tl_set:Nx \l__iow_stream_tl { \int_eval:n {#1} } \__iow_open_stream:NV #1 \l__iow_file_name_tl } } @@ -10675,7 +10778,7 @@ \cs_new:Npn \__iow_unindent:w { } \cs_new_protected:Npn \__iow_set_indent:n #1 { - \tl_set:Nx \l__iow_one_indent_tl + \__kernel_tl_set:Nx \l__iow_one_indent_tl { \exp_args:No \__kernel_str_to_other_fast:n { \tl_to_str:n {#1} } } \int_set:Nn \l__iow_one_indent_int { \str_count:N \l__iow_one_indent_tl } @@ -10750,11 +10853,11 @@ \cs_set_eq:NN \iow_indent:n \__iow_indent:n #3 \cs_set_eq:NN \protect \token_to_str:N - \tl_set:Nx \l__iow_wrap_tl {#1} + \__kernel_tl_set:Nx \l__iow_wrap_tl {#1} \cs_set_eq:NN \iow_allow_break: \__iow_allow_break_error: \cs_set_eq:NN \iow_indent:n \__iow_indent_error:n - \tl_set:Nx \l__iow_newline_tl { \iow_newline: #2 } - \tl_set:Nx \l__iow_newline_tl { \tl_to_str:N \l__iow_newline_tl } + \__kernel_tl_set:Nx \l__iow_newline_tl { \iow_newline: #2 } + \__kernel_tl_set:Nx \l__iow_newline_tl { \tl_to_str:N \l__iow_newline_tl } \int_set:Nn \l__iow_line_target_int { \l_iow_line_count_int - \str_count:N \l__iow_newline_tl + 1 } \int_compare:nNnT { \l__iow_line_target_int } < 0 @@ -10770,12 +10873,12 @@ \cs_generate_variant:Nn \iow_wrap:nnnN { nx } \cs_new_protected:Npn \__iow_wrap_do: { - \tl_set:Nx \l__iow_wrap_tl + \__kernel_tl_set:Nx \l__iow_wrap_tl { \exp_args:No \__kernel_str_to_other_fast:n \l__iow_wrap_tl \c__iow_wrap_end_marker_tl } - \tl_set:Nx \l__iow_wrap_tl + \__kernel_tl_set:Nx \l__iow_wrap_tl { \exp_after:wN \__iow_wrap_fix_newline:w \l__iow_wrap_tl ^^J \q__iow_nil ^^J \s__iow_stop @@ -10933,7 +11036,7 @@ } \cs_new_protected:Npn \__iow_wrap_allow_break:n #1 { - \tl_set:Nx \l__iow_line_tl + \__kernel_tl_set:Nx \l__iow_line_tl { \l__iow_line_tl \__iow_wrap_trim:N \l__iow_line_part_tl } \bool_set_false:N \l__iow_line_break_bool \tl_if_empty:NTF \l__iow_line_part_tl @@ -10953,7 +11056,7 @@ \tl_put_right:Nx \l__iow_line_tl { \l__iow_line_part_tl } \bool_set_false:N \l__iow_line_break_bool \int_sub:Nn \l__iow_indent_int { \l__iow_one_indent_int } - \tl_set:Nx \l__iow_indent_tl + \__kernel_tl_set:Nx \l__iow_indent_tl { \exp_after:wN \__iow_unindent:w \l__iow_indent_tl } \__iow_wrap_chunk:nw {#1} } @@ -10972,9 +11075,9 @@ } \cs_new_protected:Npn \__iow_wrap_store_do:n #1 { - \tl_set:Nx \l__iow_line_tl + \__kernel_tl_set:Nx \l__iow_line_tl { \l__iow_line_tl \l__iow_line_part_tl } - \tl_set:Nx \l__iow_wrap_tl + \__kernel_tl_set:Nx \l__iow_wrap_tl { \l__iow_wrap_tl \l__iow_newline_tl @@ -11268,7 +11371,7 @@ \cs_generate_variant:Nn \file_get_full_name:nN { V } \prg_new_protected_conditional:Npnn \file_get_full_name:nN #1#2 { T , F , TF } { - \tl_set:Nx #2 + \__kernel_tl_set:Nx #2 { \file_full_name:n {#1} } \tl_if_empty:NTF #2 { \prg_return_false: } @@ -11281,7 +11384,7 @@ { \prg_set_protected_conditional:Npnn \file_get_full_name:nN #1#2 { T , F , TF } { - \tl_set:Nx \l__file_base_name_tl + \__kernel_tl_set:Nx \l__file_base_name_tl { \__kernel_file_name_sanitize:n {#1} } \__file_get_full_name_search:nN { } \use:n \seq_map_inline:Nn \l_file_search_path_seq @@ -11316,7 +11419,7 @@ } \cs_new_protected:Npn \__file_get_full_name_search:nN #1#2 { - \tl_set:Nx \l__file_full_name_tl + \__kernel_tl_set:Nx \l__file_full_name_tl { \tl_to_str:n {#1} \l__file_base_name_tl } \__kernel_ior_open:No \g__file_internal_ior \l__file_full_name_tl \ior_if_eof:NF \g__file_internal_ior { #2 { \prg_break: } } @@ -11423,7 +11526,7 @@ { \__file_get_details:nnN {#1} { timestamp } #2 } \cs_new_protected:Npn \__file_get_details:nnN #1#2#3 { - \tl_set:Nx #3 + \__kernel_tl_set:Nx #3 { \use:c { file_ #2 :n } {#1} } \tl_if_empty:NTF #3 { \prg_return_false: } @@ -11457,7 +11560,7 @@ \prg_new_protected_conditional:Npnn \file_get_hex_dump:nnnN #1#2#3#4 { T , F , TF } { - \tl_set:Nx #4 + \__kernel_tl_set:Nx #4 { \file_hex_dump:nnn {#1} {#2} {#3} } \tl_if_empty:NTF #4 { \prg_return_false: } @@ -13083,7 +13186,7 @@ { \clist_clear:N \l__keys_unused_clist \__keys_set_known:nnn {#2} {#3} {#4} - \tl_set:Nx #5 { \exp_not:o \l__keys_unused_clist } + \__kernel_tl_set:Nx #5 { \exp_not:o \l__keys_unused_clist } \tl_set:Nn \l__keys_unused_clist {#1} } \cs_new_protected:Npn \keys_set_known:nn #1#2 @@ -13125,7 +13228,7 @@ { \clist_clear:N \l__keys_unused_clist \__keys_set_filter:nnnn {#2} {#3} {#4} {#5} - \tl_set:Nx #6 { \exp_not:o \l__keys_unused_clist } + \__kernel_tl_set:Nx #6 { \exp_not:o \l__keys_unused_clist } \tl_set:Nn \l__keys_unused_clist {#1} } \cs_new_protected:Npn \keys_set_filter:nnn #1#2#3 @@ -13191,7 +13294,7 @@ } \cs_new_protected:Npn \__keys_set_keyval:nnn #1#2#3 { - \tl_set:Nx \l_keys_path_str + \__kernel_tl_set:Nx \l_keys_path_str { \tl_if_blank:nF {#1} { #1 / } @@ -13389,7 +13492,7 @@ } \cs_new_protected:Npn \__keys_store_unused_aux: { - \tl_set:Nx \l__keys_relative_tl + \__kernel_tl_set:Nx \l__keys_relative_tl { \exp_args:No \__keys_trim_spaces:n \l__keys_relative_tl } \use:x { @@ -16027,9 +16130,9 @@ { \cs_new_eq:NN #1 \c_zero_fp } \cs_generate_variant:Nn \fp_new:N {c} \cs_new_protected:Npn \fp_set:Nn #1#2 - { \tl_set:Nx #1 { \exp_not:f { \__fp_parse:n {#2} } } } + { \__kernel_tl_set:Nx #1 { \exp_not:f { \__fp_parse:n {#2} } } } \cs_new_protected:Npn \fp_gset:Nn #1#2 - { \tl_gset:Nx #1 { \exp_not:f { \__fp_parse:n {#2} } } } + { \__kernel_tl_gset:Nx #1 { \exp_not:f { \__fp_parse:n {#2} } } } \cs_new_protected:Npn \fp_const:Nn #1#2 { \tl_const:Nx #1 { \exp_not:f { \__fp_parse:n {#2} } } } \cs_generate_variant:Nn \fp_set:Nn {c} @@ -20461,6 +20564,9 @@ \char_set_catcode_group_end:n { 125 } % right brace \char_set_catcode_space:n { 126 } % tilde \char_set_catcode_invalid:n { 127 } % ^^? + \bool_lazy_or:nnF + { \sys_if_engine_xetex_p: } { \sys_if_engine_luatex_p: } + { \int_step_function:nnN { 128 } { 255 } \char_set_catcode_active:n } \__cctab_gset:n { \c_code_cctab } \group_end: \cctab_const:Nn \c_document_cctab @@ -20629,7 +20735,7 @@ { \group_begin: \__sort_main:NNNn \tl_map_inline:Nn \tl_map_break:n #2 {#3} - \tl_gset:Nx \g__sort_internal_tl + \__kernel_tl_gset:Nx \g__sort_internal_tl { \__sort_tl_toks:w \l__sort_min_int ; } \group_end: #1 #2 \g__sort_internal_tl @@ -21012,7 +21118,7 @@ \fi: } \group_begin: - \tl_set:Nx \l__str_internal_tl { \tl_to_str:n { 0123456789ABCDEF } } + \__kernel_tl_set:Nx \l__str_internal_tl { \tl_to_str:n { 0123456789ABCDEF } } \tl_map_inline:Nn \l__str_internal_tl { \tl_map_inline:Nn \l__str_internal_tl @@ -21057,7 +21163,7 @@ } \cs_new_protected:Npn \__str_convert_gmap:N #1 { - \tl_gset:Nx \g__str_result_tl + \__kernel_tl_gset:Nx \g__str_result_tl { \exp_after:wN \__str_convert_gmap_loop:NN \exp_after:wN #1 @@ -21073,7 +21179,7 @@ } \cs_new_protected:Npn \__str_convert_gmap_internal:N #1 { - \tl_gset:Nx \g__str_result_tl + \__kernel_tl_gset:Nx \g__str_result_tl { \exp_after:wN \__str_convert_gmap_internal_loop:Nww \exp_after:wN #1 @@ -21123,7 +21229,7 @@ { \group_begin: #1 - \tl_gset:Nx \g__str_result_tl { \__kernel_str_to_other_fast:n {#4} } + \__kernel_tl_gset:Nx \g__str_result_tl { \__kernel_str_to_other_fast:n {#4} } \exp_after:wN \__str_convert:wwwnn \tl_to_str:n {#5} /// \s__str_stop { decode } { unescape } @@ -21269,7 +21375,7 @@ \cs_new_protected:Npn \__str_convert_unescape_: { \flag_clear:n { str_byte } - \tl_gset:Nx \g__str_result_tl + \__kernel_tl_gset:Nx \g__str_result_tl { \exp_args:No \__str_filter_bytes:n \g__str_result_tl } \__str_if_flag_error:nnx { str_byte } { non-byte } { bytes } } @@ -21321,7 +21427,7 @@ \cs_new_protected:Npn \__str_convert_decode_clist: { \clist_gset:No \g__str_result_tl \g__str_result_tl - \tl_gset:Nx \g__str_result_tl + \__kernel_tl_gset:Nx \g__str_result_tl { \exp_args:No \clist_map_function:nN \g__str_result_tl \__str_decode_clist_char:n @@ -21332,7 +21438,7 @@ \cs_new_protected:Npn \__str_convert_encode_clist: { \__str_convert_gmap_internal:N \__str_encode_clist_char:n - \tl_gset:Nx \g__str_result_tl { \tl_tail:N \g__str_result_tl } + \__kernel_tl_gset:Nx \g__str_result_tl { \tl_tail:N \g__str_result_tl } } \cs_new:Npn \__str_encode_clist_char:n #1 { , #1 } \cs_new_protected:Npn \__str_declare_eight_bit_encoding:nnnn #1 @@ -21490,7 +21596,7 @@ \group_begin: \flag_clear:n { str_error } \int_set:Nn \tex_escapechar:D { 92 } - \tl_gset:Nx \g__str_result_tl + \__kernel_tl_gset:Nx \g__str_result_tl { \__str_output_byte:w " \exp_last_unbraced:Nf \__str_unescape_hex_auxi:N @@ -21539,7 +21645,7 @@ \flag_clear:n { str_byte } \flag_clear:n { str_error } \int_set:Nn \tex_escapechar:D { 92 } - \tl_gset:Nx \g__str_result_tl + \__kernel_tl_gset:Nx \g__str_result_tl { \exp_after:wN #3 \g__str_result_tl #1 ? { ? \prg_break: } @@ -21592,13 +21698,13 @@ \flag_clear:n { str_byte } \flag_clear:n { str_error } \int_set:Nn \tex_escapechar:D { 92 } - \tl_gset:Nx \g__str_result_tl + \__kernel_tl_gset:Nx \g__str_result_tl { \exp_after:wN \__str_unescape_string_newlines:wN \g__str_result_tl \prg_break: ^^M ? \prg_break_point: } - \tl_gset:Nx \g__str_result_tl + \__kernel_tl_gset:Nx \g__str_result_tl { \exp_after:wN \__str_unescape_string_loop:wNNN \g__str_result_tl #1 ?? { ? \prg_break: } @@ -21829,7 +21935,7 @@ \flag_clear:n { str_extra } \flag_clear:n { str_overlong } \flag_clear:n { str_overflow } - \tl_gset:Nx \g__str_result_tl + \__kernel_tl_gset:Nx \g__str_result_tl { \exp_after:wN \__str_decode_utf_viii_start:N \g__str_result_tl { \prg_break: \__str_decode_utf_viii_end: } @@ -22029,7 +22135,7 @@ \flag_clear:n { str_extra } \flag_clear:n { str_end } \cs_set:Npn \__str_tmp:w ##1 ##2 { ` ## #1 } - \tl_gset:Nx \g__str_result_tl + \__kernel_tl_gset:Nx \g__str_result_tl { \exp_after:wN \__str_decode_utf_xvi_pair:NN #2 \q__str_nil \q__str_nil @@ -22186,7 +22292,7 @@ \flag_clear:n { str_end } \flag_clear:n { str_error } \cs_set:Npn \__str_tmp:w ##1 ##2 { ` ## #1 } - \tl_gset:Nx \g__str_result_tl + \__kernel_tl_gset:Nx \g__str_result_tl { \exp_after:wN \__str_decode_utf_xxxii_loop:NNNN #2 \s__str_stop \s__str_stop \s__str_stop \s__str_stop @@ -22466,7 +22572,7 @@ } \cs_new_protected:Npn \__tl_analysis_b:n #1 { - \tl_gset:Nx \g__tl_analysis_result_tl + \__kernel_tl_gset:Nx \g__tl_analysis_result_tl { \__tl_analysis_b_loop:w 0; #1 \prg_break_point: @@ -22867,7 +22973,7 @@ { \int_compare:nNnTF \l__regex_curr_catcode_int = 0 { - \tl_set:Nx \l__regex_internal_a_tl + \__kernel_tl_set:Nx \l__regex_internal_a_tl { \scan_stop: \__regex_curr_cs_to_str: \scan_stop: } \tl_if_in:noTF { \scan_stop: #1 \scan_stop: } \l__regex_internal_a_tl @@ -22880,7 +22986,7 @@ \int_compare:nNnT \l__regex_curr_catcode_int = 0 { \group_begin: - \tl_set:Nx \l__regex_cs_name_tl { \__regex_curr_cs_to_str: } + \__kernel_tl_set:Nx \l__regex_cs_name_tl { \__regex_curr_cs_to_str: } \__regex_single_match: \__regex_disable_submatches: \__regex_build_for_cs:n {#1} @@ -22978,7 +23084,7 @@ \cs_set:Npn \__regex_escape_escaped:N ##1 { #2 } \cs_set:Npn \__regex_escape_raw:N ##1 { #3 } \__regex_standard_escapechar: - \tl_gset:Nx \g__regex_internal_tl + \__kernel_tl_gset:Nx \g__regex_internal_tl { \__kernel_str_to_other_fast:n {#4} } \tl_put_right:Nx \l__regex_internal_a_tl { @@ -23736,12 +23842,12 @@ \__regex_two_if_eq:NNNNTF #5 #6 \__regex_compile_special:N ^ { \bool_set_false:N \l__regex_internal_bool - \tl_set:Nx \l__regex_internal_a_tl { \if_false: } \fi: + \__kernel_tl_set:Nx \l__regex_internal_a_tl { \if_false: } \fi: \__regex_compile_class_posix_loop:w } { \bool_set_true:N \l__regex_internal_bool - \tl_set:Nx \l__regex_internal_a_tl { \if_false: } \fi: + \__kernel_tl_set:Nx \l__regex_internal_a_tl { \if_false: } \fi: \__regex_compile_class_posix_loop:w #5 #6 } } @@ -24006,7 +24112,7 @@ { \__regex_compile_end: \flag_clear:n { __regex_cs } - \tl_set:Nx \l__regex_internal_a_tl + \__kernel_tl_set:Nx \l__regex_internal_a_tl { \exp_after:wN \__regex_compile_cs_aux:Nn \l__regex_internal_regex \q__regex_nil \q__regex_nil \q__regex_recursion_stop @@ -24067,7 +24173,7 @@ { \__regex_two_if_eq:NNNNTF #1 #2 \__regex_compile_special:N \c_left_brace_str { - \tl_set:Nx \l__regex_internal_a_tl { \if_false: } \fi: + \__kernel_tl_set:Nx \l__regex_internal_a_tl { \if_false: } \fi: \__regex_compile_u_loop:NN } { @@ -24106,7 +24212,7 @@ } \cs_new_protected:Npn \__regex_compile_u_in_cs: { - \tl_gset:Nx \g__regex_internal_tl + \__kernel_tl_gset:Nx \g__regex_internal_tl { \exp_args:No \__kernel_str_to_other_fast:n { \l__regex_internal_a_tl } @@ -25531,7 +25637,7 @@ \__regex_replacement_balance_one_match:n { \l__regex_zeroth_submatch_int } } - \tl_set:Nx \l__regex_internal_a_tl + \__kernel_tl_set:Nx \l__regex_internal_a_tl { \__regex_replacement_do_one_match:n { \l__regex_zeroth_submatch_int } @@ -25561,7 +25667,7 @@ { \l__regex_submatch_int - 1 } \__regex_replacement_balance_one_match:n } - \tl_set:Nx \l__regex_internal_a_tl + \__kernel_tl_set:Nx \l__regex_internal_a_tl { \int_step_function:nnnN { \l__regex_min_submatch_int } @@ -27635,7 +27741,7 @@ { \AtBeginDocument } { \use:n } { - \tl_set:Nx \l__coffin_display_font_tl + \__kernel_tl_set:Nx \l__coffin_display_font_tl { \cs_if_exist:NT \sffamily { \exp_not:N \sffamily } \cs_if_exist:NT \tiny { \exp_not:N \tiny } @@ -28554,6 +28660,7 @@ \cs_new:Npn \__text_change_case_aux:nnn #1#2#3 { \group_align_safe_begin: + \cs_if_exist_use:c { __text_change_case_boundary_ #2 _ #3 :Nnnw } \__text_change_case_loop:nnw {#2} {#3} #1 \q__text_recursion_tail \q__text_recursion_stop \__text_change_case_result:n { } @@ -28629,6 +28736,7 @@ } { \__text_change_case_store:n { ~ } + \cs_if_exist_use:c { __text_change_case_boundary_ #1 _ #2 :Nnnw } \__text_change_case_loop:nnw {#1} {#2} } \cs_new:Npn \__text_change_case_N_type:nnN #1#2#3 @@ -28761,16 +28869,10 @@ { \__text_change_case_loop:nnw {#3} {#4} } } } -\cs_new:Npx \__text_change_case_char_lower:nnN #1#2#3 +\cs_new:Npn \__text_change_case_char_lower:nnN #1#2#3 { - \exp_not:N \cs_if_exist_use:cF { __text_change_case_lower_ #2 :nnnN } - { - \bool_lazy_or:nnTF - { \sys_if_engine_luatex_p: } - { \sys_if_engine_xetex_p: } - { \exp_not:N \__text_change_case_lower_sigma:nnnN } - { \exp_not:N \__text_change_case_char:nnnN } - } + \cs_if_exist_use:cF { __text_change_case_lower_ #2 :nnnN } + { \__text_change_case_lower_sigma:nnnN } {#1} {#1} {#2} #3 } \cs_new:Npn \__text_change_case_char_upper:nnN #1#2#3 @@ -28779,7 +28881,7 @@ { \__text_change_case_char:nnnN } {#1} {#1} {#2} #3 } -\bool_lazy_or:nnT +\bool_lazy_or:nnTF { \sys_if_engine_luatex_p: } { \sys_if_engine_xetex_p: } { @@ -28811,6 +28913,44 @@ \__text_change_case_loop:nnw {#2} {#3} #4 } } + { + \cs_new:Npn \__text_change_case_lower_sigma:nnnN #1#2#3#4 + { + \int_compare:nNnTF { `#4 } = { "CE } + { \__text_change_case_lower_sigma:nnnNN } + { \__text_change_case_char:nnnN } + {#1} {#2} {#3} #4 + } + \cs_new:Npn \__text_change_case_lower_sigma:nnnNN #1#2#3#4#5 + { + \int_compare:nNnTF { `#5 } = { "A3 } + { \__text_change_case_lower_sigma:nnw {#2} {#3} } + { \__text_change_case_char:nnnN {#1} {#2} {#3} #4#5 } + } + \cs_new:Npn \__text_change_case_lower_sigma:nnw #1#2#3 \q__text_recursion_stop + { + \tl_if_head_is_N_type:nTF {#3} + { \__text_change_case_lower_sigma:nnN } + { + \__text_change_case_store:V \c__text_final_sigma_tl + \__text_change_case_loop:nnw + } + {#1} {#2} #3 \q__text_recursion_stop + } + \cs_new:Npn \__text_change_case_lower_sigma:nnN #1#2#3 + { + \bool_lazy_or:nnTF + { \token_if_letter_p:N #3 } + { + \bool_lazy_and_p:nn + { \token_if_active_p:N #3 } + { \int_compare_p:nNn { `#3 } > { "80 } } + } + { \__text_change_case_store:V \c__text_sigma_tl } + { \__text_change_case_store:V \c__text_final_sigma_tl } + \__text_change_case_loop:nnw {#1} {#2} #3 + } + } \cs_new:Npx \__text_change_case_char_title:nnN #1#2#3 { \exp_not:N \bool_if:NTF \l_text_titlecase_check_letter_bool @@ -28947,90 +29087,250 @@ { \__text_change_case_if_greek:nTF { `#4 } { - \exp_args:Ne \__text_change_case_upper_el:nnnn - { \char_to_nfd:N #4 } {#1} {#2} {#3} + \exp_args:Ne \__text_change_case_upper_el:nnn + { \char_to_nfd:N #4 } {#2} {#3} } { \__text_change_case_char:nnnN {#1} {#2} {#3} #4 } } - \cs_new:Npn \__text_change_case_upper_el:nnnn #1#2#3#4 - { \__text_change_case_upper_el_aux:nnnN {#2} {#3} {#4} #1 } - \cs_new:Npn \__text_change_case_upper_el_aux:nnnN #1#2#3#4 - { - \__text_change_case_store:e { \use:c { char_ #1 case:N } #4 } - \__text_change_case_upper_el_loop:nnw {#2} {#3} - } - \cs_new:Npn \__text_change_case_upper_el_loop:nnw - #1#2#3 \q__text_recursion_stop + \cs_new:Npn \__text_change_case_upper_el:nnn #1#2#3 + { \__text_change_case_upper_el:nnNw {#2} {#3} #1 } + \cs_new:Npn \__text_change_case_upper_el:nnNw #1#2#3#4 \q__text_recursion_stop { - \tl_if_head_is_N_type:nTF {#3} - { \__text_change_case_upper_el:nnN } - { \__text_change_case_loop:nnw } - {#1} {#2} #3 \q__text_recursion_stop + \tl_if_head_is_N_type:nTF {#4} + { \__text_change_case_upper_el:NnnN #3 } + { + \__text_change_case_store:e { \char_uppercase:N #3 } + \__text_change_case_loop:nnw + } + {#1} {#2} #4 \q__text_recursion_stop } - \cs_new:Npn \__text_change_case_upper_el:nnN #1#2#3 + \cs_new:Npn \__text_change_case_upper_el:NnnN #1#2#3#4 { - \token_if_cs:NTF #3 - { \__text_change_case_loop:nnw {#1} {#2} #3 } + \token_if_cs:NTF #4 { - \int_compare:nNnTF { `#3 } = { "0308 } - { - \__text_change_case_store:n {#3} - \__text_change_case_upper_el_loop:nnw {#1} {#2} - } + \__text_change_case_store:e { \char_uppercase:N #1 } + \__text_change_case_loop:nnw {#2} {#3} #4 + } + { + \int_compare:nNnTF { `#4 } = { "0308 } + { \__text_change_case_upper_el_dialytika:nnN {#2} {#3} #1 } { - \bool_lazy_any:nTF - { - { \int_compare_p:nNn { `#3 } = { "0300 } } - { \int_compare_p:nNn { `#3 } = { "0301 } } - { \int_compare_p:nNn { `#3 } = { "0304 } } - { \int_compare_p:nNn { `#3 } = { "0306 } } - { \int_compare_p:nNn { `#3 } = { "0308 } } - { \int_compare_p:nNn { `#3 } = { "0313 } } - { \int_compare_p:nNn { `#3 } = { "0314 } } - { \int_compare_p:nNn { `#3 } = { "0342 } } - { \int_compare_p:nNn { `#3 } = { "0340 } } - { \int_compare_p:nNn { `#3 } = { "0341 } } - { \int_compare_p:nNn { `#3 } = { "0343 } } - } - { \__text_change_case_upper_el_loop:nnw {#1} {#2} } + \__text_change_case_if_greek_accent:nTF { `#4 } + { \__text_change_case_upper_el_hiatus:nnNw {#2} {#3} #1 } { - \int_compare:nNnTF { `#3 } = { "0344 } + \__text_change_case_if_greek_diacritic:nTF { `#4 } { - \__text_change_case_store:e - { - \char_generate:nn { "0308 } - { \__text_char_catcode:N #3 } - } - \__text_change_case_upper_el_loop:nnw {#1} {#2} + \__text_change_case_store:e { \char_uppercase:N #1 } + \__text_change_case_loop:nnw {#2} {#3} } { - \int_compare:nNnTF { `#3 } = { "0345 } - { \__text_change_case_loop:nnw {#1} {#2} } - { \__text_change_case_loop:nnw {#1} {#2} #3 } + \__text_change_case_store:e { \char_uppercase:N #1 } + \__text_change_case_loop:nnw {#2} {#3} #4 } } } } } - \prg_new_conditional:Npnn \__text_change_case_if_greek:n #1 { TF } + \cs_new:Npn \__text_change_case_upper_el_dialytika:nnN #1#2#3 + { + \__text_change_case_if_takes_dialytika:nTF { `#3 } + { \__text_change_case_upper_el_dialytika:N #3 } + { \__text_change_case_store:e { \char_uppercase:N #3 } } + \__text_change_case_upper_el_gobble:nnw {#1} {#2} + } + \cs_new:Npn \__text_change_case_upper_el_dialytika:N #1 + { + \__text_change_case_store:e + { + \bool_lazy_or:nnTF + { \int_compare_p:nNn { `#1 } = { "0399 } } + { \int_compare_p:nNn { `#1 } = { "03B9 } } + { \char_generate:nn { "03AA } { \__text_char_catcode:N #1 } } + { \char_generate:nn { "03AB } { \__text_char_catcode:N #1 } } + } + } + \cs_new:Npn \__text_change_case_upper_el_hiatus:nnNw + #1#2#3#4 \q__text_recursion_stop + { + \__text_change_case_store:e { \char_uppercase:N #3 } + \tl_if_head_is_N_type:nTF {#4} + { \__text_change_case_upper_el_hiatus:nnN } + { \__text_change_case_loop:nnw } + {#1} {#2} #4 \q__text_recursion_stop + } + \cs_new:Npn \__text_change_case_upper_el_hiatus:nnN #1#2#3 + { + \token_if_cs:NTF #3 + { \__text_change_case_loop:nnw {#1} {#2} #3 } + { + \__text_change_case_if_takes_dialytika:nTF { `#3 } + { + \__text_change_case_upper_el_dialytika:N #3 + \__text_change_case_upper_el_gobble:nnw {#1} {#2} + } + { \__text_change_case_loop:nnw {#1} {#2} #3 } + } + } + \cs_new:Npn \__text_change_case_upper_el_gobble:nnw + #1#2#3 \q__text_recursion_stop + { + \tl_if_head_is_N_type:nTF {#3} + { \__text_change_case_upper_el_gobble:nnN } + { \__text_change_case_loop:nnw } + {#1} {#2} #3 \q__text_recursion_stop + } + \cs_new:Npn \__text_change_case_upper_el_gobble:nnN #1#2#3 { - \if_int_compare:w #1 < "0370 \exp_stop_f: + \bool_lazy_or:nnTF + { \token_if_cs_p:N #3 } + { + ! \bool_lazy_or_p:nn + { \__text_change_case_if_greek_accent_p:n { `#3 } } + { \__text_change_case_if_greek_diacritic_p:n { `#3 } } + } + { \__text_change_case_loop:nnw {#1} {#2} #3 } + { \__text_change_case_upper_el_gobble:nnw {#1} {#2} } + } + } +\prg_new_conditional:Npnn \__text_change_case_if_greek:n #1 { TF } + { + \if_int_compare:w #1 < "0370 \exp_stop_f: + \prg_return_false: + \else: + \if_int_compare:w #1 > "03FF \exp_stop_f: + \if_int_compare:w #1 < "1F00 \exp_stop_f: \prg_return_false: \else: - \if_int_compare:w #1 > "03FF \exp_stop_f: - \if_int_compare:w #1 < "1F00 \exp_stop_f: - \prg_return_false: + \if_int_compare:w #1 > "1FFF \exp_stop_f: + \prg_return_false: + \else: + \prg_return_true: + \fi: + \fi: + \else: + \prg_return_true: + \fi: + \fi: + } +\prg_new_conditional:Npnn \__text_change_case_if_greek_accent:n #1 { TF , p } + { + \if_int_compare:w #1 = "0300 \exp_stop_f: + \prg_return_true: + \else: + \if_int_compare:w #1 = "0301 \exp_stop_f: + \prg_return_true: + \else: + \if_int_compare:w #1 = "0342 \exp_stop_f: + \prg_return_true: + \else: + \if_int_compare:w #1 = "0302 \exp_stop_f: + \prg_return_true: + \else: + \if_int_compare:w #1 = "0303 \exp_stop_f: + \prg_return_true: \else: - \if_int_compare:w #1 > "1FFF \exp_stop_f: - \prg_return_false: - \else: + \if_int_compare:w #1 = "0311 \exp_stop_f: \prg_return_true: + \else: + \prg_return_false: \fi: \fi: + \fi: + \fi: + \fi: + \fi: + } +\prg_new_conditional:Npnn \__text_change_case_if_greek_diacritic:n + #1 { TF , p } + { + \if_int_compare:w #1 = "0304 \exp_stop_f: + \prg_return_true: + \else: + \if_int_compare:w #1 = "0306 \exp_stop_f: + \prg_return_true: + \else: + \if_int_compare:w #1 = "0313 \exp_stop_f: + \prg_return_true: + \else: + \if_int_compare:w #1 = "0314 \exp_stop_f: + \prg_return_true: \else: + \if_int_compare:w #1 = "0343 \exp_stop_f: + \prg_return_true: + \else: + \prg_return_false: + \fi: + \fi: + \fi: + \fi: + \fi: + } +\prg_new_conditional:Npnn \__text_change_case_if_takes_dialytika:n #1 { TF } + { + \if_int_compare:w #1 = "0399 \exp_stop_f: + \prg_return_true: + \else: + \if_int_compare:w #1 = "03B9 \exp_stop_f: + \prg_return_true: + \else: + \if_int_compare:w #1 = "03A5 \exp_stop_f: + \prg_return_true: + \else: + \if_int_compare:w #1 = "03C5 \exp_stop_f: \prg_return_true: + \else: + \prg_return_false: \fi: \fi: + \fi: + \fi: + } +\bool_lazy_or:nnT + { \sys_if_engine_luatex_p: } + { \sys_if_engine_xetex_p: } + { + \cs_new:Npn \__text_change_case_boundary_upper_el:Nnnw + #1#2#3#4 \q__text_recursion_stop + { + \tl_if_head_is_N_type:nTF {#4} + { \__text_change_case_boundary_upper_el:nnN } + { \__text_change_case_loop:nnw } + {#2} {#3} #4 \q__text_recursion_stop + } + \cs_new:Npn \__text_change_case_boundary_upper_el:nnN #1#2#3 + { + \bool_lazy_or:nnTF + { \token_if_cs_p:N #3 } + { + ! \bool_lazy_or_p:nn + { \int_compare_p:nNn { `#3 } = { "03AE } } + { \int_compare_p:nNn { `#3 } = { "1F22 } } + } + { \__text_change_case_loop:nnw } + { \__text_change_case_boundary_upper_el:nnNw } + {#1} {#2} #3 + } + \cs_new:Npn \__text_change_case_boundary_upper_el:nnNw + #1#2#3#4 \q__text_recursion_stop + { + \tl_if_head_is_N_type:nTF {#4} + { \__text_change_case_boundary_upper_el:NnnN #3 } + { + \__text_change_case_store:e + { \char_generate:nn { "0389 } { \__text_char_catcode:N #3 } } + \__text_change_case_loop:nnw + } + {#1} {#2} #4 \q__text_recursion_stop + } + \cs_new:Npn \__text_change_case_boundary_upper_el:NnnN #1#2#3#4 + { + \token_if_letter:NTF #4 + { \__text_change_case_loop:nnw {#2} {#3} #1#4 } + { + \__text_change_case_store:e + { \char_generate:nn { "0389 } { \__text_char_catcode:N #1 } } + \__text_change_case_loop:nnw {#2} {#3} #4 + } } } \bool_lazy_or:nnT @@ -29327,6 +29627,8 @@ \__text_tmp:w \c__text_dotted_I_tl { 0130 } \__text_tmp:w \c__text_i_ogonek_tl { 012F } \__text_tmp:w \c__text_I_ogonek_tl { 012E } + \__text_tmp:w \c__text_final_sigma_tl { 03C2 } + \__text_tmp:w \c__text_sigma_tl { 03C3 } \__text_tmp:w \c__text_grosses_Eszett_tl { 1E9E } } \group_end: @@ -29529,6 +29831,16 @@ { 042D } { 044D } { 042E } { 044E } { 042F } { 044F } + { 0370 } { 0371 } + { 0372 } { 0373 } + { 0376 } { 0377 } + { 03FD } { 037B } + { 03FE } { 037C } + { 03FF } { 037D } + { 0386 } { 03AC } + { 0388 } { 03AD } + { 0389 } { 03AE } + { 038A } { 03AF } { 0391 } { 03B1 } { 0392 } { 03B2 } { 0393 } { 03B3 } @@ -29553,19 +29865,73 @@ { 03A7 } { 03C7 } { 03A8 } { 03C8 } { 03A9 } { 03C9 } + { 03AA } { 03CA } + { 03AB } { 03CB } + { 038C } { 03CC } + { 038E } { 03CD } + { 038F } { 03CE } + { 03CF } { 03D7 } { 03D8 } { 03D9 } { 03DA } { 03DB } { 03DC } { 03DD } { 03DE } { 03DF } { 03E0 } { 03E1 } + { 03E2 } { 03E3 } + { 03E4 } { 03E5 } + { 03E6 } { 03E7 } + { 03E8 } { 03E9 } + { 03EA } { 03EB } + { 03EC } { 03ED } + { 03EE } { 03EF } + { 03F9 } { 03F2 } + { 037F } { 03F3 } + { 03F7 } { 03F8 } + { 03FA } { 03FB } \q_recursion_tail ? \q_recursion_stop \cs_set_protected:Npn \__text_tmp:w #1#2#3 { \group_begin: - \cs_set_protected:Npn \__text_tmp:w ##1##2##3##4 + \cs_set_protected:Npn \__text_tmp:w ##1##2##3##4##5##6##7##8 { \tl_const:cx + { + c__text_ #3 case_ + \char_generate:nn {##1} { 12 } + \char_generate:nn {##2} { 12 } + _tl + } + { + \exp_after:wN \exp_after:wN \exp_after:wN + \exp_not:N \char_generate:nn {##5} { 13 } + \exp_after:wN \exp_after:wN \exp_after:wN + \exp_not:N \char_generate:nn {##6} { 13 } + } + } + \use:x + { + \__text_tmp:w + \char_to_utfviii_bytes:n { "#1 } + \char_to_utfviii_bytes:n { "#2 } + } + \group_end: + } + \__text_tmp:w { 0345 } { 0399 } { upper } + \__text_tmp:w { 03C2 } { 03A3 } { upper } + \__text_tmp:w { 03D0 } { 0392 } { upper } + \__text_tmp:w { 03D1 } { 0398 } { upper } + \__text_tmp:w { 03D5 } { 03A6 } { upper } + \__text_tmp:w { 03D6 } { 03A0 } { upper } + \__text_tmp:w { 03F0 } { 039A } { upper } + \__text_tmp:w { 03F1 } { 03A1 } { upper } + \__text_tmp:w { 03F4 } { 03B8 } { lower } + \__text_tmp:w { 03F5 } { 0395 } { upper } + \cs_set_protected:Npn \__text_tmp:w #1#2#3 + { + \group_begin: + \cs_set_protected:Npn \__text_tmp:w ##1##2##3##4 + { + \tl_const:cn { c__text_ #3 case_ \char_generate:nn {##1} { 12 } @@ -29581,8 +29947,176 @@ \__text_tmp:w { 00DF } { SS } { upper } \__text_tmp:w { 00DF } { Ss } { title } \__text_tmp:w { 0131 } { I } { upper } - } - \group_end: + \cs_set_protected:Npn \__text_tmp:nnnnnn #1#2#3#4#5#6#7 + { + \tl_const:cx + { + c__text_ #1 case_ + \char_generate:nn {#2} { 12 } + \char_generate:nn {#3} { 12 } + \char_generate:nn {#4} { 12 } + _tl + } + { + \exp_after:wN \exp_after:wN \exp_after:wN + \exp_not:N \char_generate:nn {#5} { 13 } + \exp_after:wN \exp_after:wN \exp_after:wN + \exp_not:N \char_generate:nn {#6} { 13 } + \exp_after:wN \exp_after:wN \exp_after:wN + \exp_not:N \char_generate:nn {#7} { 13 } + } + } + \cs_set_protected:Npn \__text_tmp:w #1#2#3#4#5#6#7#8 + { + \tl_const:cx + { + c__text_lowercase_ + \char_generate:nn {#1} { 12 } + \char_generate:nn {#2} { 12 } + \char_generate:nn {#3} { 12 } + _tl + } + { + \exp_after:wN \exp_after:wN \exp_after:wN + \exp_not:N \char_generate:nn {#5} { 13 } + \exp_after:wN \exp_after:wN \exp_after:wN + \exp_not:N \char_generate:nn {#6} { 13 } + \exp_after:wN \exp_after:wN \exp_after:wN + \exp_not:N \char_generate:nn {#7} { 13 } + } + \__text_tmp:nnnnnn { upper } {#5} {#6} {#7} {#1} {#2} {#3} + \__text_tmp:nnnnnn { title } {#5} {#6} {#7} {#1} {#2} {#3} + } + \__text_loop:nn + { 1F08 } { 1F00 } + { 1F09 } { 1F01 } + { 1F0A } { 1F02 } + { 1F0B } { 1F03 } + { 1F0C } { 1F04 } + { 1F0D } { 1F05 } + { 1F0E } { 1F06 } + { 1F0F } { 1F07 } + { 1F18 } { 1F10 } + { 1F19 } { 1F11 } + { 1F1A } { 1F12 } + { 1F1B } { 1F13 } + { 1F1C } { 1F14 } + { 1F1D } { 1F15 } + { 1F28 } { 1F20 } + { 1F29 } { 1F21 } + { 1F2A } { 1F22 } + { 1F2B } { 1F23 } + { 1F2C } { 1F24 } + { 1F2D } { 1F25 } + { 1F2E } { 1F26 } + { 1F2F } { 1F27 } + { 1F38 } { 1F30 } + { 1F39 } { 1F31 } + { 1F3A } { 1F32 } + { 1F3B } { 1F33 } + { 1F3C } { 1F34 } + { 1F3D } { 1F35 } + { 1F3E } { 1F36 } + { 1F3F } { 1F37 } + { 1F48 } { 1F40 } + { 1F49 } { 1F41 } + { 1F4A } { 1F42 } + { 1F4B } { 1F43 } + { 1F4C } { 1F44 } + { 1F4D } { 1F45 } + { 1F59 } { 1F51 } + { 1F5B } { 1F53 } + { 1F5D } { 1F55 } + { 1F5F } { 1F57 } + { 1F68 } { 1F60 } + { 1F69 } { 1F61 } + { 1F6A } { 1F62 } + { 1F6B } { 1F63 } + { 1F6C } { 1F64 } + { 1F6D } { 1F65 } + { 1F6E } { 1F66 } + { 1F6F } { 1F67 } + { 1FBA } { 1F70 } + { 1FBB } { 1F71 } + { 1FC8 } { 1F72 } + { 1FC9 } { 1F73 } + { 1FCA } { 1F74 } + { 1FCB } { 1F75 } + { 1FDA } { 1F76 } + { 1FDB } { 1F77 } + { 1FF8 } { 1F78 } + { 1FF9 } { 1F79 } + { 1FEA } { 1F7A } + { 1FEB } { 1F7B } + { 1FFA } { 1F7C } + { 1FFB } { 1F7D } + { 1F88 } { 1F80 } + { 1F89 } { 1F81 } + { 1F8A } { 1F82 } + { 1F8B } { 1F83 } + { 1F8C } { 1F84 } + { 1F8D } { 1F85 } + { 1F8E } { 1F86 } + { 1F8F } { 1F87 } + { 1F98 } { 1F90 } + { 1F99 } { 1F91 } + { 1F9A } { 1F92 } + { 1F9B } { 1F93 } + { 1F9C } { 1F94 } + { 1F9D } { 1F95 } + { 1F9E } { 1F96 } + { 1F9F } { 1F97 } + { 1FA8 } { 1FA0 } + { 1FA9 } { 1FA1 } + { 1FAA } { 1FA2 } + { 1FAB } { 1FA3 } + { 1FAC } { 1FA4 } + { 1FAD } { 1FA5 } + { 1FAE } { 1FA6 } + { 1FAF } { 1FA7 } + { 1FB8 } { 1FB0 } + { 1FB9 } { 1FB1 } + { 1FBC } { 1FB3 } + { 1FCC } { 1FC3 } + { 1FD8 } { 1FD0 } + { 1FD9 } { 1FD1 } + { 1FE8 } { 1FE0 } + { 1FE9 } { 1FE1 } + { 1FEC } { 1FE5 } + { 1FFC } { 1FF3 } + \q_recursion_tail ? + \q_recursion_stop + \cs_set_protected:Npn \__text_tmp:w #1#2#3 + { + \group_begin: + \cs_set_protected:Npn \__text_tmp:w ##1##2##3##4##5##6##7##8 + { + \tl_const:cx + { + c__text_ #3 case_ + \char_generate:nn {##1} { 12 } + \char_generate:nn {##2} { 12 } + \char_generate:nn {##3} { 12 } + _tl + } + { + \exp_after:wN \exp_after:wN \exp_after:wN + \exp_not:N \char_generate:nn {##5} { 13 } + \exp_after:wN \exp_after:wN \exp_after:wN + \exp_not:N \char_generate:nn {##6} { 13 } + } + } + \use:x + { + \__text_tmp:w + \char_to_utfviii_bytes:n { "#1 } + \char_to_utfviii_bytes:n { "#2 } + } + \group_end: + } + \__text_tmp:w { 1FBE } { 0399 } { upper } + } +\group_end: \group_begin: \cs_set_protected:Npn \__text_change_case_setup:NN #1#2 { @@ -29881,7 +30415,8 @@ } { \text_declare_purify_equivalent:Nn #1 { } } \text_declare_purify_equivalent:Nn \begin { \use:c } -\text_declare_purify_equivalent:Nn \end { \use:c } +\text_declare_purify_equivalent:Nn \end { \__text_end_env:n } +\cs_new:Npn \__text_end_env:n #1 { \cs:w end #1 \cs_end: } \text_declare_purify_equivalent:Nn \\ { } \tl_map_inline:nn { \{ \} \# \$ \% \_ } @@ -30469,9 +31004,9 @@ } \cs_generate_variant:Nn \seq_mapthread_function:NNN { Nc , c , cc } \cs_new_protected:Npn \seq_set_filter:NNn - { \__seq_set_filter:NNNn \tl_set:Nx } + { \__seq_set_filter:NNNn \__kernel_tl_set:Nx } \cs_new_protected:Npn \seq_gset_filter:NNn - { \__seq_set_filter:NNNn \tl_gset:Nx } + { \__seq_set_filter:NNNn \__kernel_tl_gset:Nx } \cs_new_protected:Npn \__seq_set_filter:NNNn #1#2#3#4 { \__seq_push_item_def:n { \bool_if:nT {#4} { \__seq_wrap_item:n {##1} } } @@ -30479,9 +31014,9 @@ \__seq_pop_item_def: } \cs_new_protected:Npn \seq_set_from_inline_x:Nnn - { \__seq_set_from_inline_x:NNnn \tl_set:Nx } + { \__seq_set_from_inline_x:NNnn \__kernel_tl_set:Nx } \cs_new_protected:Npn \seq_gset_from_inline_x:Nnn - { \__seq_set_from_inline_x:NNnn \tl_gset:Nx } + { \__seq_set_from_inline_x:NNnn \__kernel_tl_gset:Nx } \cs_new_protected:Npn \__seq_set_from_inline_x:NNnn #1#2#3#4 { \__seq_push_item_def:n { \exp_not:N \__seq_item:n {#4} } @@ -30641,7 +31176,7 @@ } } \cs_new_protected:Npn \tl_build_get:NN - { \__tl_build_get:NNN \tl_set:Nx } + { \__tl_build_get:NNN \__kernel_tl_set:Nx } \cs_new_protected:Npn \__tl_build_get:NNN #1#2#3 { #1 #3 { \if_false: { \fi: \exp_after:wN \__tl_build_get:w #2 } } } \cs_new:Npn \__tl_build_get:w #1 \__tl_build_last:NNn #2#3#4 @@ -30656,12 +31191,12 @@ { \exp_after:wN \exp_not:n \exp_after:wN { \if_false: } \fi: } \cs_new_protected:Npn \tl_build_end:N #1 { - \__tl_build_get:NNN \tl_set:Nx #1 #1 + \__tl_build_get:NNN \__kernel_tl_set:Nx #1 #1 \exp_args:Nc \__tl_build_end_loop:NN { \cs_to_str:N #1 ' } \tl_clear:N } \cs_new_protected:Npn \tl_build_gend:N #1 { - \__tl_build_get:NNN \tl_gset:Nx #1 #1 + \__tl_build_get:NNN \__kernel_tl_gset:Nx #1 #1 \exp_args:Nc \__tl_build_end_loop:NN { \cs_to_str:N #1 ' } \tl_gclear:N } \cs_new_protected:Npn \__tl_build_end_loop:NN #1#2 diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex b/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex index 40c3052e2c3..e0982301866 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{2020-10-05}% +\def\ExplFileDate{2020-10-27}% \let\ExplLoaderFileDate\ExplFileDate \begingroup \catcode`\>=12 diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3.ltx b/Master/texmf-dist/tex/latex/l3kernel/expl3.ltx index ce9b23c55c6..f5bfc4c3b21 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{2020-10-05}% +\def\ExplFileDate{2020-10-27}% \let\ExplLoaderFileDate\ExplFileDate \begingroup \catcode`\>=12 @@ -63,7 +63,7 @@ \else \expandafter\@gobble \fi - {\input{expl3-code.tex}}% + {\input expl3-code.tex }% \begingroup\expandafter\expandafter\expandafter\endgroup \expandafter\ifx\csname tex\string _let:D\endcsname\relax \expandafter\endinput diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3.sty b/Master/texmf-dist/tex/latex/l3kernel/expl3.sty index ffbfbb6ee8f..dc3c7398072 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{2020-10-05}% +\def\ExplFileDate{2020-10-27}% \let\ExplLoaderFileDate\ExplFileDate \ProvidesPackage{expl3} [% @@ -55,7 +55,7 @@ \else \expandafter\@gobble \fi - {\input{expl3-code.tex}}% + {\input expl3-code.tex }% \begingroup\expandafter\expandafter\expandafter\endgroup \expandafter\ifx\csname tex\string _let:D\endcsname\relax \expandafter\endinput diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3debug.def b/Master/texmf-dist/tex/latex/l3kernel/l3debug.def index e995f3daa77..d597ed9713c 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3debug.def +++ b/Master/texmf-dist/tex/latex/l3kernel/l3debug.def @@ -71,7 +71,7 @@ } \cs_set_protected:Npn \debug_resume: { - \tl_set:Nx \l__debug_suspended_tl + \__kernel_tl_set:Nx \l__debug_suspended_tl { \tl_tail:N \l__debug_suspended_tl } \tl_if_empty:NT \l__debug_suspended_tl { @@ -213,11 +213,11 @@ \tl_new:N \l__debug_tmpb_tl \cs_new_protected:Npn \__debug_generate_parameter_list:NNN #1#2#3 { - \tl_set:Nx \l__debug_internal_tl + \__kernel_tl_set:Nx \l__debug_internal_tl { \exp_last_unbraced:Nf \use_ii:nnn \cs_split_function:N #1 } - \tl_set:Nx #2 + \__kernel_tl_set:Nx #2 { \exp_args:NV \__debug_build_parm_text:n \l__debug_internal_tl } - \tl_set:Nx #3 + \__kernel_tl_set:Nx #3 { \exp_args:NV \__debug_build_arg_list:n \l__debug_internal_tl } } \cs_new:Npn \__debug_build_parm_text:n #1 @@ -423,6 +423,8 @@ \tl_concat:NNN \tl_gconcat:NNN } +\cs_gset_protected:Npn \__kernel_tl_set:Nx { \cs_set_nopar:Npx } +\cs_gset_protected:Npn \__kernel_tl_gset:Nx { \cs_gset_nopar:Npx } \__kernel_patch:nnn { \__kernel_chk_var_local:N #1 } { } @@ -463,9 +465,7 @@ \skip_set_eq:NN \skip_add:Nn \skip_sub:Nn - \tl_set:Nn - \tl_set:No - \tl_set:Nx + \__kernel_tl_set:Nx \tl_set_eq:NN \tl_put_left:Nn \tl_put_left:NV @@ -527,9 +527,7 @@ \skip_gset_eq:NN \skip_gadd:Nn \skip_gsub:Nn - \tl_gset:Nn - \tl_gset:No - \tl_gset:Nx + \__kernel_tl_gset:Nx \tl_gset_eq:NN \tl_gput_left:Nn \tl_gput_left:NV @@ -650,7 +648,7 @@ { \__regex_trace_push:nnN { regex } { 1 } \__regex_escape_use:nnnn \group_begin: - \tl_set:Nx \l__regex_internal_a_tl + \__kernel_tl_set:Nx \l__regex_internal_a_tl { \__regex_trace_pop:nnN { regex } { 1 } \__regex_escape_use:nnnn } \use_none:nnn } diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3deprecation.def b/Master/texmf-dist/tex/latex/l3kernel/l3deprecation.def index c38e4562a3c..2984fcc0afb 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3deprecation.def +++ b/Master/texmf-dist/tex/latex/l3kernel/l3deprecation.def @@ -74,7 +74,7 @@ \group_begin: \file_get:nnN {#3} {#2} \l__tl_internal_a_tl #2 \scan_stop: - \tl_set:Nx \l__tl_internal_a_tl { \l__tl_internal_a_tl } + \__kernel_tl_set:Nx \l__tl_internal_a_tl { \l__tl_internal_a_tl } \exp_args:NNNo \group_end: \tl_set:Nn #1 \l__tl_internal_a_tl } @@ -85,7 +85,7 @@ \group_begin: \file_get:nnN {#3} {#2} \l__tl_internal_a_tl #2 \scan_stop: - \tl_gset:Nx #1 { \l__tl_internal_a_tl } + \__kernel_tl_gset:Nx #1 { \l__tl_internal_a_tl } \group_end: } \cs_generate_variant:Nn \tl_gset_from_file_x:Nnn { c } diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls b/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls index 529d1f129c6..0e0ce537e00 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls +++ b/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls @@ -135,7 +135,7 @@ \cs_new_protected:Npn \__codedoc_trim_right:Nn #1#2 { \cs_set:Npn \__codedoc_tmp:w ##1 #2 ##2 \q_stop { \exp_not:n {##1} } - \tl_set:Nx #1 { \exp_after:wN \__codedoc_tmp:w #1 #2 \q_stop } + \__kernel_tl_set:Nx #1 { \exp_after:wN \__codedoc_tmp:w #1 #2 \q_stop } } \cs_generate_variant:Nn \__codedoc_trim_right:Nn { No } \prg_new_protected_conditional:Npnn \__codedoc_str_if_begin:nn #1#2 { TF , T , F } @@ -270,14 +270,14 @@ \__codedoc_if_almost_str:nTF {#1} { \__codedoc_key_get_base_TF:nN {#1} \l__codedoc_tmpa_tl - \tl_set:Nx #2 + \__kernel_tl_set:Nx #2 { \__codedoc_split_function_do:on \l__codedoc_tmpa_tl { \__codedoc_base_form_aux:nnN } } } { \tl_set:Nn #2 {#1} } } \cs_new:Npx \__codedoc_key_get_base_TF:nN #1#2 { - \tl_set:Nx #2 { \exp_not:N \tl_to_str:n {#1} } + \__kernel_tl_set:Nx #2 { \exp_not:N \tl_to_str:n {#1} } \tl_if_in:NoF #2 { \tl_to_str:n {:} } { \exp_not:N \prg_break: } \tl_if_in:onT { #2 z } { \tl_to_str:n {TF} z } @@ -709,7 +709,7 @@ \verbatim@font \__codedoc_if_almost_str:VT \l__codedoc_cmd_tl { - \tl_set:Nx \l__codedoc_cmd_tl { \tl_to_str:N \l__codedoc_cmd_tl } + \__kernel_tl_set:Nx \l__codedoc_cmd_tl { \tl_to_str:N \l__codedoc_cmd_tl } \bool_if:NT \g__codedoc_cs_break_bool { \regex_replace_all:nnN @@ -726,14 +726,14 @@ { \quark_if_no_value:NF \l__codedoc_cmd_index_tl { - \tl_set:Nx \l__codedoc_cmd_tl + \__kernel_tl_set:Nx \l__codedoc_cmd_tl { \c_backslash_str \exp_not:o { \l__codedoc_cmd_index_tl } } } \exp_args:No \__codedoc_key_get:n { \l__codedoc_cmd_tl } \quark_if_no_value:NF \l__codedoc_cmd_module_tl { - \tl_set:Nx \l__codedoc_index_module_tl + \__kernel_tl_set:Nx \l__codedoc_index_module_tl { \tl_to_str:N \l__codedoc_cmd_module_tl } } \__codedoc_special_index_module:ooonN @@ -810,7 +810,7 @@ } \cs_new_protected:Npn \__codedoc_get_hyper_target:nN #1#2 { - \tl_set:Nx #2 { \tl_to_str:n {#1} } + \__kernel_tl_set:Nx #2 { \tl_to_str:n {#1} } \tl_replace_all:Nxn #2 { \c_underscore_str } { / } \tl_remove_all:Nx #2 { \c_backslash_str } \tl_put_left:Nn #2 { doc/function// } @@ -818,7 +818,7 @@ \cs_generate_variant:Nn \__codedoc_get_hyper_target:nN { o , x } \cs_new_protected:Npn \__codedoc_names_get_seq:nN #1#2 { - \tl_set:Nx \l__codedoc_tmpa_tl { \tl_to_str:n {#1} } + \__kernel_tl_set:Nx \l__codedoc_tmpa_tl { \tl_to_str:n {#1} } \bool_if:NTF \l__codedoc_names_verb_bool { \seq_clear:N #2 @@ -1417,7 +1417,7 @@ \l__codedoc_macro_do_not_index_tl \exp_args:NNV \seq_set_from_clist:Nn \l__codedoc_tmpa_seq \l__codedoc_macro_do_not_index_tl - \tl_set:Nx \l__codedoc_macro_do_not_index_tl + \__kernel_tl_set:Nx \l__codedoc_macro_do_not_index_tl { \seq_use:Nn \l__codedoc_tmpa_seq { , } } \exp_args:NV \DoNotIndex \l__codedoc_macro_do_not_index_tl } @@ -2207,7 +2207,7 @@ } \cs_new_protected:Npn \__codedoc_special_index_set:Nn #1#2 { - \tl_set:Nx #1 { \tl_to_str:n {#2} } + \__kernel_tl_set:Nx #1 { \tl_to_str:n {#2} } \__codedoc_if_almost_str:nTF {#2} { \tl_replace_all:Non #1 { \tl_to_str:n { __ } } @@ -2225,7 +2225,7 @@ \token_to_str:N \verb * \verbatimchar } } - \tl_set:Nx #1 + \__kernel_tl_set:Nx #1 { \token_to_str:N \verb * \verbatimchar #1 \verbatimchar @@ -2250,7 +2250,7 @@ \cs_new_protected:Npn \__codedoc_key_get:n #1 { \__codedoc_key_get_base:nN {#1} \l__codedoc_index_macro_tl - \tl_set:Nx \l__codedoc_index_key_tl + \__kernel_tl_set:Nx \l__codedoc_index_key_tl { \tl_to_str:N \l__codedoc_index_macro_tl } \tl_clear:N \l__codedoc_index_module_tl \tl_if_in:NoTF \l__codedoc_index_key_tl { \tl_to_str:n { __ } } @@ -2273,14 +2273,14 @@ } \cs_new_protected:Npn \__codedoc_key_pop: { - \tl_set:Nx \l__codedoc_index_key_tl + \__kernel_tl_set:Nx \l__codedoc_index_key_tl { \tl_tail:N \l__codedoc_index_key_tl } } \cs_new_protected:Npn \__codedoc_key_trim_module:n #1 { \cs_set:Npn \__codedoc_tmpa:w ##1 #1 ##2 \q_stop { \exp_not:n {##1} } - \tl_set:Nx \l__codedoc_index_module_tl + \__kernel_tl_set:Nx \l__codedoc_index_module_tl { \exp_after:wN \__codedoc_tmpa:w \l__codedoc_index_module_tl #1 \q_stop } } \cs_new_protected:Npn \__codedoc_key_drop_underscores: @@ -2314,7 +2314,7 @@ { \seq_set_split:NoV \l__codedoc_tmpa_seq { \token_to_str:N _ } \l__codedoc_index_key_tl - \tl_set:Nx \l__codedoc_index_module_tl + \__kernel_tl_set:Nx \l__codedoc_index_module_tl { \int_case:nnF { \seq_count:N \l__codedoc_tmpa_seq } { diff --git a/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty b/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty index 53947c76f79..4986a296ba8 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}{2020-10-05}{} +\ProvidesExplPackage{l3keys2e}{2020-10-27}{} {LaTeX2e option processing using LaTeX3 keys} \cs_generate_variant:Nn \clist_put_right:Nn { Nv } \cs_generate_variant:Nn \keys_if_exist:nnT { nx } diff --git a/Master/texmf-dist/tex/latex/l3packages/xfp/xfp.sty b/Master/texmf-dist/tex/latex/l3packages/xfp/xfp.sty index bd10f91541e..d7701988dc1 100644 --- a/Master/texmf-dist/tex/latex/l3packages/xfp/xfp.sty +++ b/Master/texmf-dist/tex/latex/l3packages/xfp/xfp.sty @@ -33,7 +33,7 @@ \endinput } \RequirePackage{xparse} -\ProvidesExplPackage{xfp}{2020-10-05}{} +\ProvidesExplPackage{xfp}{2020-10-27}{} {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 b6a78b09f29..d4fb433219a 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}{2020-10-05}{} +\ProvidesExplPackage{xfrac}{2020-10-27}{} {L3 Experimental split-level fractions} \keys_define:nn { xfrac } { diff --git a/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.ltx b/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.ltx index ff0cc4ca42a..386d9dc09e7 100644 --- a/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.ltx +++ b/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.ltx @@ -23,7 +23,7 @@ \message{xparse <2020-03-03>}% } \ExplSyntaxOn -\input { xparse-generic.tex } +\input xparse-generic.tex ~ \ExplSyntaxOff %% %% diff --git a/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty b/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty index 9c03b4f0e14..9631935b752 100644 --- a/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty +++ b/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty @@ -32,7 +32,7 @@ }% \endinput } -\ProvidesExplPackage{xparse}{2020-10-05}{} +\ProvidesExplPackage{xparse}{2020-10-27}{} {L3 Experimental document command parser} \clist_new:N \l__xparse_options_clist \DeclareOption* { \clist_put_right:NV \l__xparse_options_clist \CurrentOption } @@ -45,7 +45,7 @@ \keys_set:nV { xparse } \l__xparse_options_clist \bool_if:NF \l__xparse_log_bool { \msg_redirect_module:nnn { LaTeX / xparse } { info } { none } } -\input { xparse-generic.tex } +\input xparse-generic.tex ~ \cs_gset_protected:Npn \__xparse_normalize_arg_spec_loop:n #1 { \quark_if_recursion_tail_stop:n {#1} diff --git a/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty b/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty index 98d25f542b9..15ad3ba1c0d 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}{2020-10-05}{} +\ProvidesExplPackage{xtemplate}{2020-10-27}{} {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~>~ } -- cgit v1.2.3