texlive[63007] Master/texmf-dist: l3 (11apr22)
commits+karl at tug.org
commits+karl at tug.org
Mon Apr 11 22:14:44 CEST 2022
Revision: 63007
http://tug.org/svn/texlive?view=revision&revision=63007
Author: karl
Date: 2022-04-11 22:14:43 +0200 (Mon, 11 Apr 2022)
Log Message:
-----------
l3 (11apr22)
Modified Paths:
--------------
trunk/Master/texmf-dist/doc/latex/l3backend/CHANGELOG.md
trunk/Master/texmf-dist/doc/latex/l3backend/README.md
trunk/Master/texmf-dist/doc/latex/l3backend/l3backend-code.pdf
trunk/Master/texmf-dist/doc/latex/l3experimental/CHANGELOG.md
trunk/Master/texmf-dist/doc/latex/l3experimental/README.md
trunk/Master/texmf-dist/doc/latex/l3experimental/l3benchmark/l3benchmark.pdf
trunk/Master/texmf-dist/doc/latex/l3experimental/l3bitset/l3bitset.pdf
trunk/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw-code.pdf
trunk/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw.pdf
trunk/Master/texmf-dist/doc/latex/l3experimental/l3graphics/l3graphics.pdf
trunk/Master/texmf-dist/doc/latex/l3experimental/l3opacity/l3opacity.pdf
trunk/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.pdf
trunk/Master/texmf-dist/doc/latex/l3experimental/l3sys-shell/l3sys-shell.pdf
trunk/Master/texmf-dist/doc/latex/l3experimental/xcoffins/xcoffins.pdf
trunk/Master/texmf-dist/doc/latex/l3experimental/xgalley/l3galley.pdf
trunk/Master/texmf-dist/doc/latex/l3experimental/xgalley/xgalley.pdf
trunk/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md
trunk/Master/texmf-dist/doc/latex/l3kernel/README.md
trunk/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf
trunk/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf
trunk/Master/texmf-dist/doc/latex/l3kernel/interface3.tex
trunk/Master/texmf-dist/doc/latex/l3kernel/l3doc.pdf
trunk/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf
trunk/Master/texmf-dist/doc/latex/l3kernel/l3news.pdf
trunk/Master/texmf-dist/doc/latex/l3kernel/l3news01.pdf
trunk/Master/texmf-dist/doc/latex/l3kernel/l3news02.pdf
trunk/Master/texmf-dist/doc/latex/l3kernel/l3news03.pdf
trunk/Master/texmf-dist/doc/latex/l3kernel/l3news04.pdf
trunk/Master/texmf-dist/doc/latex/l3kernel/l3news05.pdf
trunk/Master/texmf-dist/doc/latex/l3kernel/l3news06.pdf
trunk/Master/texmf-dist/doc/latex/l3kernel/l3news07.pdf
trunk/Master/texmf-dist/doc/latex/l3kernel/l3news08.pdf
trunk/Master/texmf-dist/doc/latex/l3kernel/l3news09.pdf
trunk/Master/texmf-dist/doc/latex/l3kernel/l3news10.pdf
trunk/Master/texmf-dist/doc/latex/l3kernel/l3news11.pdf
trunk/Master/texmf-dist/doc/latex/l3kernel/l3news12.pdf
trunk/Master/texmf-dist/doc/latex/l3kernel/l3prefixes.csv
trunk/Master/texmf-dist/doc/latex/l3kernel/l3prefixes.pdf
trunk/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf
trunk/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex
trunk/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf
trunk/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex
trunk/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.pdf
trunk/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.tex
trunk/Master/texmf-dist/doc/latex/l3kernel/source3.pdf
trunk/Master/texmf-dist/doc/latex/l3kernel/source3.tex
trunk/Master/texmf-dist/doc/latex/l3kernel/source3body.tex
trunk/Master/texmf-dist/source/latex/l3backend/l3backend-basics.dtx
trunk/Master/texmf-dist/source/latex/l3backend/l3backend-box.dtx
trunk/Master/texmf-dist/source/latex/l3backend/l3backend-color.dtx
trunk/Master/texmf-dist/source/latex/l3backend/l3backend-draw.dtx
trunk/Master/texmf-dist/source/latex/l3backend/l3backend-graphics.dtx
trunk/Master/texmf-dist/source/latex/l3backend/l3backend-header.dtx
trunk/Master/texmf-dist/source/latex/l3backend/l3backend-opacity.dtx
trunk/Master/texmf-dist/source/latex/l3backend/l3backend-pdf.dtx
trunk/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.dtx
trunk/Master/texmf-dist/source/latex/l3experimental/l3bitset/l3bitset.dtx
trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-boxes.dtx
trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-layers.dtx
trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-paths.dtx
trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-points.dtx
trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-scopes.dtx
trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-softpath.dtx
trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-state.dtx
trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-transforms.dtx
trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx
trunk/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.dtx
trunk/Master/texmf-dist/source/latex/l3experimental/l3opacity/l3opacity.dtx
trunk/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx
trunk/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.dtx
trunk/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx
trunk/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx
trunk/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/expl3.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3box.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3cctab.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3color.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3debug.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3file.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3int.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3names.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3pdf.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3str.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3text-purify.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3text.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3token.dtx
trunk/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx
trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-dvipdfmx.def
trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-dvips.def
trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-dvisvgm.def
trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-luatex.def
trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def
trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-xetex.def
trunk/Master/texmf-dist/tex/latex/l3experimental/l3benchmark/l3benchmark.sty
trunk/Master/texmf-dist/tex/latex/l3experimental/l3bitset/l3bitset.sty
trunk/Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty
trunk/Master/texmf-dist/tex/latex/l3experimental/l3graphics/l3graphics.sty
trunk/Master/texmf-dist/tex/latex/l3experimental/l3opacity/l3opacity.sty
trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty
trunk/Master/texmf-dist/tex/latex/l3experimental/l3sys-shell/l3sys-shell.sty
trunk/Master/texmf-dist/tex/latex/l3experimental/xcoffins/xcoffins.sty
trunk/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty
trunk/Master/texmf-dist/tex/latex/l3experimental/xgalley/xgalley.sty
trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex
trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex
trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.ltx
trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.lua
trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.sty
trunk/Master/texmf-dist/tex/latex/l3kernel/l3debug.def
Modified: trunk/Master/texmf-dist/doc/latex/l3backend/CHANGELOG.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3backend/CHANGELOG.md 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/doc/latex/l3backend/CHANGELOG.md 2022-04-11 20:14:43 UTC (rev 63007)
@@ -6,6 +6,19 @@
## [Unreleased]
+## [2022-04-10]
+
+### Added
+- Support for graphics (PDF) page count extraction
+
+### Fixed
+- Setup for graphics extension searching
+- Various internal issues in graphics inclusion
+- Some missing functions for `dvisvgm` color support added
+
+### Removed
+- Support for pre-2020-11-11 `dvipdfmx`
+
## [2022-02-07]
### Fixed
@@ -217,7 +230,8 @@
- Include `l3backend` in file names
- Moved backend code to internal for each 'parent' module
-[Unreleased]: https://github.com/latex3/latex3/compare/2022-02-07...HEAD
+[Unreleased]: https://github.com/latex3/latex3/compare/2022-04-10...HEAD
+[2022-04-10]: https://github.com/latex3/latex3/compare/2022-02-07...2022-04-10
[2022-02-07]: https://github.com/latex3/latex3/compare/2022-01-12...2022-02-07
[2022-01-12]: https://github.com/latex3/latex3/compare/2021-12-14...2022-01-12
[2021-12-14]: https://github.com/latex3/latex3/compare/2021-10-17...2021-12-14
Modified: trunk/Master/texmf-dist/doc/latex/l3backend/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3backend/README.md 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/doc/latex/l3backend/README.md 2022-04-11 20:14:43 UTC (rev 63007)
@@ -1,7 +1,7 @@
LaTeX3 Backend Drivers
======================
-Release 2022-02-07
+Release 2022-04-10
This package forms parts of `expl3`, and contains the code used to interface
with backends (drivers) across the `expl3` codebase. The functions here are
Modified: trunk/Master/texmf-dist/doc/latex/l3backend/l3backend-code.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/l3experimental/CHANGELOG.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3experimental/CHANGELOG.md 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/doc/latex/l3experimental/CHANGELOG.md 2022-04-11 20:14:43 UTC (rev 63007)
@@ -7,6 +7,16 @@
## [Unreleased]
+## [2022-04-10]
+
+### Added
+- `\graphics_get_pagecount:nN(TF)`
+
+### Changed
+- Return an empty `seq` when `\sys_shell_split_ls:nN` is applied with a
+ glob which matched no entries
+- Heavily revise `l3graphics` to provide only necessary public interfaces
+
## [2022-02-05]
### Changed
@@ -236,7 +246,8 @@
- 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/2022-02-05...HEAD
+[Unreleased]: https://github.com/latex3/latex3/compare/2022-04-10...HEAD
+[2022-04-10]: https://github.com/latex3/latex3/compare/2022-02-05...2022-04-10
[2022-02-05]: https://github.com/latex3/latex3/compare/2021-11-12...2022-02-05
[2021-11-12]: https://github.com/latex3/latex3/compare/2021-08-27...2021-11-12
[2021-08-27]: https://github.com/latex3/latex3/compare/2021-08-04...2021-08-27
Modified: trunk/Master/texmf-dist/doc/latex/l3experimental/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3experimental/README.md 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/doc/latex/l3experimental/README.md 2022-04-11 20:14:43 UTC (rev 63007)
@@ -1,7 +1,7 @@
Experimental LaTeX3 Concepts
============================
-Release 2022-02-05
+Release 2022-04-10
Overview
--------
Modified: trunk/Master/texmf-dist/doc/latex/l3experimental/l3benchmark/l3benchmark.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/l3experimental/l3bitset/l3bitset.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw-code.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/l3experimental/l3graphics/l3graphics.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/l3experimental/l3opacity/l3opacity.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/l3experimental/l3sys-shell/l3sys-shell.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/l3experimental/xcoffins/xcoffins.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/l3experimental/xgalley/l3galley.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/l3experimental/xgalley/xgalley.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md 2022-04-11 20:14:43 UTC (rev 63007)
@@ -7,6 +7,26 @@
## [Unreleased]
+## [2022-04-10]
+
+### Added
+- `\keys_precompile:nnN` for conversion of keyvals to fast-to-apply token
+ lists
+- Missing `\str_if_empty:n(TF)` (see issue \#1071)
+- Missing `\str_case:Nn(TF)` (see issue \#1071)
+- `\tex_...:D` names for primitives added in TeX Live 2022
+
+### Changed
+- Definition of `\legacy_if:n(TF)` to support primitive conditionals
+- `\str_<type>case:n` now case changes codepoints above 127 with all engines
+- `\char_generate:nn` now also allows to generate category 10 tokens (spaces)
+ except for char code 0
+
+### Fixed
+- Handling of 'misplaced' `\protect` by `\text_expand:n`
+- Nesting of `\tl_analysis_map_inline:nn`
+- Naming of an error message
+
## [2022-02-24]
### Changed
@@ -1053,7 +1073,8 @@
- Step functions have been added for dim variables,
e.g. `\dim_step_inline:nnnn`
-[Unreleased]: https://github.com/latex3/latex3/compare/2022-02-24...HEAD
+[Unreleased]: https://github.com/latex3/latex3/compare/2022-04-10...HEAD
+[2022-04-10]: https://github.com/latex3/latex3/compare/2022-02-24...2022-04-10
[2022-02-24]: https://github.com/latex3/latex3/compare/2022-02-21...2022-02-24
[2022-02-21]: https://github.com/latex3/latex3/compare/2022-02-05...2022-02-21
[2022-02-05]: https://github.com/latex3/latex3/compare/2022-01-21...2022-02-05
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/README.md 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/README.md 2022-04-11 20:14:43 UTC (rev 63007)
@@ -1,7 +1,7 @@
LaTeX3 Programming Conventions
==============================
-Release 2022-02-24
+Release 2022-04-10
Overview
--------
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/interface3.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/interface3.tex 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/interface3.tex 2022-04-11 20:14:43 UTC (rev 63007)
@@ -54,7 +54,7 @@
{latex-team at latex-project.org}%
}%
}
-\date{Released 2022-02-24}
+\date{Released 2022-04-10}
\pagenumbering{roman}
\maketitle
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3doc.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news01.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news02.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news03.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news04.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news05.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news06.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news07.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news08.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news09.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news10.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news11.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3news12.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3prefixes.csv
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/l3prefixes.csv 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/l3prefixes.csv 2022-04-11 20:14:43 UTC (rev 63007)
@@ -40,6 +40,7 @@
cmd,latex2e,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex2e.git,https://github.com/latex3/latex2e/issues,2021-01-20,2021-03-03,
code,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2021-04-23,2021-04-23,
codedoc,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,Somewhat experimental: may change
+codehigh,codehigh,Jianrui Lyu,https://github.com/lvjr/codehigh,https://github.com/lvjr/codehigh.git,https://github.com/lvjr/codehigh/issues,2022-04-02,2022-04-02,
coffin,"l3kernel,xcoffins",The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
colon,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
color,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
@@ -89,6 +90,7 @@
fontsizes,fontsizes,Julien Rivaud,,,,,2018-06-13,
fontspec,fontspec,Will Robertson,https://github.com/wspr/fontspec,https://github.com/wspr/fontspec.git,https://github.com/wspr/fontspec/issues,2013-03-16,2013-03-16,
fp,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
+fun,functional,Jianrui Lyu,https://github.com/lvjr/functional,https://github.com/lvjr/functional.git,https://github.com/lvjr/functional/issues,2022-04-02,2022-04-02,
galley,l3galley,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
gatherenum,gatherenum,Julien Rivaud,,,,2018-06-13,2018-06-14,
getree,genealogytree,Thomas F. Sturm,https://github.com/T-F-S/genealogytree,https://github.com/T-F-S/genealogytree.git,https://github.com/T-F-S/genealogytree/issues,2020-02-19,2020-02-19,
@@ -125,6 +127,7 @@
log,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
lua,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
luatex,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
+lwc,lua-widow-control,Max Chernoff,https://github.com/gucci-on-fleek/lua-widow-control,https://github.com/gucci-on-fleek/lua-widow-control.git,https://github.com/gucci-on-fleek/lua-widow-control/issues,2022-02-24,2022-02-24,
mark,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
markdown,markdown,Vít Novotný,https://ctan.org/pkg/markdown,https://github.com/witiko/markdown.git,https://github.com/witiko/markdown/issues,2021-09-08,2021-09-08,
marks,l3kernel/xmarks,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2020-02-17,2020-02-17,
@@ -149,6 +152,7 @@
nan,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
nicematrix,nicematrix,François Pantigny,,,,2019-12-19,2019-12-19,
nil,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
+ninecolors,ninecolors,Jianrui Lyu,https://github.com/lvjr/ninecolors,https://github.com/lvjr/ninecolors.git,https://github.com/lvjr/ninecolors/issues,2022-04-02,2022-04-02,
nmc,numerica,Andrew Parsloe,,,,2021-06-30,2021-06-30,
no,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
notestobib,notes2bib,Joseph Wright,https://github.com/josephwright/notes2bib,https://github.com/josephwright/notes2bib.git,https://github.com/josephwright/notes2bib/issues,2012-11-07,2012-11-07,
@@ -218,6 +222,7 @@
sys,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2015-09-07,2015-09-08,
tag,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2019-06-02,2019-06-02,
tasks,tasks,Clemens Niederberger,https://github.com/cgnieder/tasks/,https://github.com/cgnieder/tasks.git,https://github.com/cgnieder/cgnieder/tasks/issues,2013-03-16,2020-04-14,
+tblr,tabularray,Jianrui Lyu,https://github.com/lvjr/tabularray,https://github.com/lvjr/tabularray.git,https://github.com/lvjr/tabularray/issues,2022-04-02,2022-04-02
tcobox,tcolorbox,Thomas F. Sturm,https://github.com/T-F-S/tcolorbox,https://github.com/T-F-S/tcolorbox.git,https://github.com/T-F-S/tcolorbox/issues,2020-02-19,2020-02-19,
term,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2018-05-12,2018-05-12,
tex,l3kernel,The LaTeX Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,2012-09-27,2012-09-27,
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3prefixes.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex 2022-04-11 20:14:43 UTC (rev 63007)
@@ -32,7 +32,7 @@
{latex-team at latex-project.org}%
}%
}
-\date{Released 2022-02-24}
+\date{Released 2022-04-10}
\begin{document}
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex 2022-04-11 20:14:43 UTC (rev 63007)
@@ -32,7 +32,7 @@
{latex-team at latex-project.org}%
}%
}
-\date{Released 2022-02-24}
+\date{Released 2022-04-10}
\newcommand{\TF}{\textit{(TF)}}
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.tex 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.tex 2022-04-11 20:14:43 UTC (rev 63007)
@@ -32,7 +32,7 @@
{latex-team at latex-project.org}%
}%
}
-\date{Released 2022-02-24}
+\date{Released 2022-04-10}
\newcommand{\TF}{\textit{(TF)}}
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/source3.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/source3.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/source3.tex 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/source3.tex 2022-04-11 20:14:43 UTC (rev 63007)
@@ -53,7 +53,7 @@
{latex-team at latex-project.org}%
}%
}
-\date{Released 2022-02-24}
+\date{Released 2022-04-10}
\pagenumbering{roman}
\maketitle
Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/source3body.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/source3body.tex 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/source3body.tex 2022-04-11 20:14:43 UTC (rev 63007)
@@ -207,7 +207,9 @@
\item[\texttt{c}] This means \emph{csname}, and indicates that the
argument will be turned into a csname before being used. So
|\foo:c| |{ArgumentOne}| will act in the same way as |\foo:N|
- |\ArgumentOne|.
+ |\ArgumentOne|. All macros that appear in the argument are expanded.
+ An internal error will occur if the result of expansion inside
+ a \texttt{c}-type argument is not a series of character tokens.
\item[\texttt{V} and \texttt{v}] These mean \emph{value
of variable}. The \texttt{V} and \texttt{v} specifiers are used to
get the content of a variable without needing to worry about the
Modified: trunk/Master/texmf-dist/source/latex/l3backend/l3backend-basics.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3backend/l3backend-basics.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3backend/l3backend-basics.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-07}
+% \date{Released 2022-04-10}
%
% \maketitle
%
@@ -70,27 +70,27 @@
% \begin{macrocode}
\ProvidesExplFile
%<*dvipdfmx>
- {l3backend-dvipdfmx.def}{2022-02-07}{}
+ {l3backend-dvipdfmx.def}{2022-04-10}{}
{L3 backend support: dvipdfmx}
%</dvipdfmx>
%<*dvips>
- {l3backend-dvips.def}{2022-02-07}{}
+ {l3backend-dvips.def}{2022-04-10}{}
{L3 backend support: dvips}
%</dvips>
%<*dvisvgm>
- {l3backend-dvisvgm.def}{2022-02-07}{}
+ {l3backend-dvisvgm.def}{2022-04-10}{}
{L3 backend support: dvisvgm}
%</dvisvgm>
%<*luatex>
- {l3backend-luatex.def}{2022-02-07}{}
+ {l3backend-luatex.def}{2022-04-10}{}
{L3 backend support: PDF output (LuaTeX)}
%</luatex>
%<*pdftex>
- {l3backend-pdftex.def}{2022-02-07}{}
+ {l3backend-pdftex.def}{2022-04-10}{}
{L3 backend support: PDF output (pdfTeX)}
%</pdftex>
%<*xetex>
- {l3backend-xetex.def}{2022-02-07}{}
+ {l3backend-xetex.def}{2022-04-10}{}
{L3 backend support: XeTeX}
%</xetex>
% \end{macrocode}
@@ -395,35 +395,6 @@
% \end{macro}
%
% \begin{macrocode}
-%<@@=sys>
-% \end{macrocode}
-%
-% \begin{macro}{\c__kernel_sys_dvipdfmx_version_int}
-% A short excursion into the |sys| module to set up the backend version
-% information.
-% \begin{macrocode}
-\group_begin:
- \cs_set:Npn \@@_tmp:w #1 Version ~ #2 ~ #3 \q_stop {#2}
- \sys_get_shell:nnNTF { extractbb~--version }
- { \char_set_catcode_space:n { `\ } }
- \l_@@_internal_tl
- {
- \int_const:Nn \c__kernel_sys_dvipdfmx_version_int
- {
- \exp_after:wN \@@_tmp:w \l_@@_internal_tl
- \q_stop
- }
- }
- { \int_const:Nn \c__kernel_sys_dvipdfmx_version_int { 0 } }
-\group_end:
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%<@@=>
-% \end{macrocode}
-%
-% \begin{macrocode}
%</dvipdfmx|xetex>
% \end{macrocode}
%
Modified: trunk/Master/texmf-dist/source/latex/l3backend/l3backend-box.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3backend/l3backend-box.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3backend/l3backend-box.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-07}
+% \date{Released 2022-04-10}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3backend/l3backend-color.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3backend/l3backend-color.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3backend/l3backend-color.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-07}
+% \date{Released 2022-04-10}
%
% \maketitle
%
@@ -203,54 +203,50 @@
% In \texttt{(x)dvipdfmx}, the base color stack is not set up, so we have to
% force that, as well as providing a mechanism more generally.
% \begin{macrocode}
-\int_compare:nNnTF \c__kernel_sys_dvipdfmx_version_int < { 20201111 }
- { \cs_new_protected:Npn \__kernel_color_backend_stack_init:Nnn #1#2#3 { } }
+\int_new:N \g_@@_backend_stack_int
+\cs_new_protected:Npx \__kernel_color_backend_stack_init:Nnn #1#2#3
{
- \int_new:N \g_@@_backend_stack_int
- \cs_new_protected:Npx \__kernel_color_backend_stack_init:Nnn #1#2#3
+ \int_gincr:N \exp_not:N \g_@@_backend_stack_int
+ \int_const:Nn #1 { \exp_not:N \g_@@_backend_stack_int }
+ \use:x
{
- \int_gincr:N \exp_not:N \g_@@_backend_stack_int
- \int_const:Nn #1 { \exp_not:N \g_@@_backend_stack_int }
- \use:x
+ \__kernel_backend_first_shipout:n
{
- \__kernel_backend_first_shipout:n
+ \__kernel_backend_literal:n
{
- \__kernel_backend_literal:n
- {
- pdfcolorstackinit ~
- \exp_not:N \int_use:N \exp_not:N \g_@@_backend_stack_int
- \c_space_tl
- \exp_not:N \tl_if_blank:nF {#2} { #2 ~ }
- (#3)
- }
+ pdfcolorstackinit ~
+ \exp_not:N \int_use:N \exp_not:N \g_@@_backend_stack_int
+ \c_space_tl
+ \exp_not:N \tl_if_blank:nF {#2} { #2 ~ }
+ (#3)
}
- }
+ }
}
- \cs_if_exist:cTF { main at pdfcolorstack }
- {
- \int_set:Nn \l_@@_backend_stack_int
- { \int_use:c { main at pdfcolorstack } }
- }
- {
- \__kernel_color_backend_stack_init:Nnn \c_@@_backend_main_stack_int
- { page ~ direct } { 0 ~ g ~ 0 ~ G }
- \int_set_eq:NN \l_@@_backend_stack_int
- \c_@@_backend_main_stack_int
- \int_const:cn { main at pdfcolorstack } { \c_@@_backend_main_stack_int }
- }
+ }
+\cs_if_exist:cTF { main at pdfcolorstack }
+ {
+ \int_set:Nn \l_@@_backend_stack_int
+ { \int_use:c { main at pdfcolorstack } }
+ }
+ {
+ \__kernel_color_backend_stack_init:Nnn \c_@@_backend_main_stack_int
+ { page ~ direct } { 0 ~ g ~ 0 ~ G }
+ \int_set_eq:NN \l_@@_backend_stack_int
+ \c_@@_backend_main_stack_int
+ \int_const:cn { main at pdfcolorstack } { \c_@@_backend_main_stack_int }
+ }
% \end{macrocode}
% The backend automatically restores the stack color from the \enquote{classical}
% approach (\texttt{pdf:bcolor}) after a scope. That will be an issue for us, so
% we manually ensure that the one we are using is inserted.
% \begin{macrocode}
- \cs_gset_protected:Npn \__kernel_backend_scope_end:
+\cs_gset_protected:Npn \__kernel_backend_scope_end:
+ {
+ \__kernel_backend_literal:n { x:grestore }
+ \__kernel_backend_literal:x
{
- \__kernel_backend_literal:n { x:grestore }
- \__kernel_backend_literal:x
- {
- pdfcolorstack ~
- \int_use:N \g_@@_backend_stack_int \c_space_tl current
- }
+ pdfcolorstack ~
+ \int_use:N \g_@@_backend_stack_int \c_space_tl current
}
}
% \end{macrocode}
@@ -261,26 +257,23 @@
% \begin{macro}{\__kernel_color_backend_stack_pop:n}
% Simple enough but needs a version check.
% \begin{macrocode}
-\int_compare:nNnF \c__kernel_sys_dvipdfmx_version_int < { 20201111 }
+\cs_new_protected:Npn \__kernel_color_backend_stack_push:nn #1#2
{
- \cs_new_protected:Npn \__kernel_color_backend_stack_push:nn #1#2
+ \__kernel_backend_literal:x
{
- \__kernel_backend_literal:x
- {
- pdfcolorstack ~
- \int_eval:n {#1} ~
- push ~ (#2)
- }
+ pdfcolorstack ~
+ \int_eval:n {#1} ~
+ push ~ (#2)
}
- \cs_generate_variant:Nn \__kernel_color_backend_stack_push:nn { nx }
- \cs_new_protected:Npn \__kernel_color_backend_stack_pop:n #1
+ }
+\cs_generate_variant:Nn \__kernel_color_backend_stack_push:nn { nx }
+\cs_new_protected:Npn \__kernel_color_backend_stack_pop:n #1
+ {
+ \__kernel_backend_literal:x
{
- \__kernel_backend_literal:x
- {
- pdfcolorstack ~
- \int_eval:n {#1} ~
- pop
- }
+ pdfcolorstack ~
+ \int_eval:n {#1} ~
+ pop
}
}
% \end{macrocode}
@@ -440,10 +433,6 @@
%
% \subsubsection{\texttt{dvipmdfx}/\XeTeX{}}
%
-% \begin{macrocode}
-%<*dvipdfmx|xetex>
-% \end{macrocode}
-%
% These backends have the most possible approaches: it recognises both
% \texttt{dvips}-based color specials and it's own format, plus one can
% include PDF statements directly. Recent releases also have a color stack
@@ -452,32 +441,6 @@
% we have. Thus it is used in preference to the \texttt{dvips}-style interface
% or the \enquote{native} color specials (which have only one stack).
%
-% \begin{macro}
-% {
-% \@@_backend_select_cmyk:n ,
-% \@@_backend_select_gray:n ,
-% \@@_backend_select_rgb:n
-% }
-% \begin{macro}{\@@_backend_reset:}
-% Push the data to the stack.
-% \begin{macrocode}
-\int_compare:nNnT \c__kernel_sys_dvipdfmx_version_int < { 20201111 }
- {
- \cs_gset_protected:Npn \@@_backend_select_cmyk:n #1
- { \__kernel_backend_literal:n { pdf: bc ~ [#1] } }
- \cs_gset_eq:NN \@@_backend_select_gray:n \@@_backend_select_cmyk:n
- \cs_gset_eq:NN \@@_backend_select_rgb:n \@@_backend_select_cmyk:n
- \cs_gset_protected:Npn \@@_backend_reset:
- { \__kernel_backend_literal:n { pdf: ec } }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macrocode}
-%</dvipdfmx|xetex>
-% \end{macrocode}
-%
% \subsection{Separations}
%
% Here, life gets interesting and we need essentially one approach per
@@ -1097,28 +1060,6 @@
%</dvipdfmx|luatex|pdftex|xetex>
% \end{macrocode}
%
-% \begin{macrocode}
-%<*dvipdfmx|xetex>
-% \end{macrocode}
-%
-% \begin{macro}{\@@_backend_select_separation:nn, \@@_backend_select_devicen:nn}
-% For older \texttt{(x)dvipdfmx}, we \emph{could} support separations using a
-% dedicated mechanism, but it was not added that long before the color
-% stacks. So instead of having two complex paths, just disable here.
-% \begin{macrocode}
-\int_compare:nNnT \c__kernel_sys_dvipdfmx_version_int < { 20201111 }
- {
- \cs_gset_protected:Npn \@@_backend_select_separation:nn #1#2 { }
- \cs_gset_eq:NN \@@_backend_select_devicen:nn
- \@@_backend_select_separation:nn
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</dvipdfmx|xetex>
-% \end{macrocode}
-%
% \subsection{Fill and stroke color}
%
% Here, \texttt{dvipdfmx}/\XeTeX{} follows \LuaTeX{} and \pdfTeX{},
@@ -1198,52 +1139,6 @@
% \end{macrocode}
%
% \begin{macrocode}
-%<*dvipdfmx|xetex>
-% \end{macrocode}
-%
-% \begin{macro}
-% {
-% \@@_backend_fill_cmyk:n ,
-% \@@_backend_fill_gray:n ,
-% \@@_backend_fill_rgb:n
-% }
-% \begin{macro}{\@@_backend_reset:}
-% \begin{macro}{\@@_backend_stroke:n}
-% \begin{macro}{\@@_backend_fill_separation:nn, \@@_backend_stroke_separation:nn}
-% Deal with older \texttt{(x)dvipdfmx}.
-% \begin{macrocode}
-\int_compare:nNnT \c__kernel_sys_dvipdfmx_version_int < { 20201111 }
- {
- \cs_gset_protected:Npn \@@_backend_fill_cmyk:n #1
- {
- \__kernel_backend_literal:n { pdf: bc ~ [#1] }
- \group_insert_after:N \@@_backend_reset:
- }
- \cs_gset_eq:NN \@@_backend_fill_gray:n \@@_backend_fill_cmyk:n
- \cs_gset_eq:NN \@@_backend_fill_rgb:n \@@_backend_fill_cmyk:n
- \cs_gset_protected:Npn \@@_backend_reset:
- { \__kernel_backend_literal:n { pdf: ec } }
- \cs_gset_protected:Npn \@@_backend_stroke:n #1
- { \__kernel_backend_literal:n {#1} }
- \cs_gset_protected:Npn \@@_backend_fill_separation:nn #1#2 { }
- \cs_gset_eq:NN \@@_backend_fill_devicen:nn
- \@@_backend_fill_separation:nn
- \cs_gset_eq:NN \@@_backend_stroke_separation:nn
- \@@_backend_fill_separation:nn
- \cs_gset_eq:NN \@@_backend_stroke_devicen:nn
- \@@_backend_stroke_separation:nn
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macrocode}
-%</dvipdfmx|xetex>
-% \end{macrocode}
-%
-% \begin{macrocode}
%<*dvips>
% \end{macrocode}
%
@@ -1414,7 +1309,15 @@
% \end{macrocode}
% \end{macro}
%
+% \begin{macro}{\@@_backend_devicen_init:nnn, \@@_backend_iccbased_init:nnn}
+% No support at present.
% \begin{macrocode}
+\cs_new_protected:Npn \@@_backend_devicen_init:nnn #1#2#3 { }
+\cs_new_protected:Npn \@@_backend_iccbased_init:nnn #1#2#3 { }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
%</dvisvgm>
% \end{macrocode}
%
Modified: trunk/Master/texmf-dist/source/latex/l3backend/l3backend-draw.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3backend/l3backend-draw.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3backend/l3backend-draw.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-07}
+% \date{Released 2022-04-10}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3backend/l3backend-graphics.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3backend/l3backend-graphics.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3backend/l3backend-graphics.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-07}
+% \date{Released 2022-04-10}
%
% \maketitle
%
@@ -60,6 +60,23 @@
%<@@=graphics>
% \end{macrocode}
%
+% \begin{macro}{\@@_backend_loaded:n}
+% To deal with file load ordering. Plain users are on their own.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_backend_loaded:n #1
+ {
+ \cs_if_exist:NTF \hook_gput_code:nnn
+ {
+ \hook_gput_code:nnn
+ { file / l3graphics.sty / after }
+ { backend }
+ {#1}
+ }
+ {#1}
+ }
+% \end{macrocode}
+% \end{macro}
+%
% \subsection{\texttt{dvips} backend}
%
% \begin{macrocode}
@@ -66,14 +83,25 @@
%<*dvips>
% \end{macrocode}
%
-% \begin{macro}{\@@_backend_getbb_eps:n}
+% \begin{variable}{\l_graphics_search_ext_seq}
+% \begin{macrocode}
+\@@_backend_loaded:n
+ { \seq_set_from_clist:Nn \l_graphics_search_ext_seq { .eps , .ps } }
+% \end{macrocode}
+% \end{variable}
+%
+% \begin{macro}{\@@_backend_getbb_eps:n, \@@_backend_getbb_ps:n}
% Simply use the generic function.
% \begin{macrocode}
-\cs_new_eq:NN \@@_backend_getbb_eps:n \graphics_read_bb:n
+\@@_backend_loaded:n
+ {
+ \cs_new_eq:NN \@@_backend_getbb_eps:n \@@_read_bb:n
+ \cs_new_eq:NN \@@_backend_getbb_ps:n \@@_read_bb:n
+ }
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\@@_backend_include_eps:n}
+% \begin{macro}{\@@_backend_include_eps:n, \@@_backend_include_ps:n}
% The special syntax is relatively clear here: remember we need PostScript
% sizes here.
% \begin{macrocode}
@@ -82,16 +110,24 @@
\__kernel_backend_literal:x
{
PSfile = #1 \c_space_tl
- llx = \dim_to_decimal_in_bp:n \l_graphics_llx_dim \c_space_tl
- lly = \dim_to_decimal_in_bp:n \l_graphics_lly_dim \c_space_tl
- urx = \dim_to_decimal_in_bp:n \l_graphics_urx_dim \c_space_tl
- ury = \dim_to_decimal_in_bp:n \l_graphics_ury_dim
+ llx = \dim_to_decimal_in_bp:n \l_@@_llx_dim \c_space_tl
+ lly = \dim_to_decimal_in_bp:n \l_@@_lly_dim \c_space_tl
+ urx = \dim_to_decimal_in_bp:n \l_@@_urx_dim \c_space_tl
+ ury = \dim_to_decimal_in_bp:n \l_@@_ury_dim
}
}
+\cs_new_eq:NN \@@_backend_include_ps:n \@@_backend_include_eps:n
% \end{macrocode}
% \end{macro}
%
+% \begin{macro}{\@@_backend_get_pagecount:n}
% \begin{macrocode}
+\@@_backend_loaded:n
+ { \cs_new_eq:NN \@@_backend_get_pagecount:n \@@_get_pagecount:n }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
%</dvips>
% \end{macrocode}
%
@@ -101,6 +137,17 @@
%<*luatex|pdftex>
% \end{macrocode}
%
+% \begin{variable}{\l_graphics_search_ext_seq}
+% \begin{macrocode}
+\@@_backend_loaded:n
+ {
+ \seq_set_from_clist:Nn
+ \l_graphics_search_ext_seq
+ { .pdf , .eps , .png , .jpg , .jpeg }
+ }
+% \end{macrocode}
+% \end{variable}
+%
% \begin{variable}{\l_@@_graphics_attr_tl}
% In PDF mode, additional attributes of an graphic (such as page number) are
% needed both to obtain the bounding box and when inserting the graphic: this
@@ -115,12 +162,18 @@
%
% \begin{macro}
% {
-% \@@_backend_getbb_jpg:n,
-% \@@_backend_getbb_pdf:n,
+% \@@_backend_getbb_jpg:n ,
+% \@@_backend_getbb_jpeg:n ,
+% \@@_backend_getbb_pdf:n ,
% \@@_backend_getbb_png:n
% }
% \begin{macro}
-% {\@@_backend_getbb_auxi:n, \@@_backend_getbb_auxii:n}
+% {
+% \@@_backend_getbb_auxi:n ,
+% \@@_backend_getbb_auxii:n ,
+% \@@_backend_getbb_auxiii:n
+% }
+% \begin{macro}[EXP]{\@@_backend_dequote:w}
% Getting the bounding box here requires us to box up the graphic and
% measure it. To deal with the difference in feature support in bitmap
% and vector graphics but keeping the common parts, there is a little work
@@ -130,34 +183,35 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_backend_getbb_jpg:n #1
{
- \int_zero:N \l_graphics_page_int
- \tl_clear:N \l_graphics_pagebox_tl
+ \int_zero:N \l_@@_page_int
+ \tl_clear:N \l_@@_pagebox_tl
\tl_set:Nx \l_@@_graphics_attr_tl
{
- \tl_if_empty:NF \l_graphics_decodearray_tl
- { :D \l_graphics_decodearray_tl }
- \bool_if:NT \l_graphics_interpolate_bool
+ \tl_if_empty:NF \l_@@_decodearray_str
+ { :D \l_@@_decodearray_str }
+ \bool_if:NT \l_@@_interpolate_bool
{ :I }
}
\tl_clear:N \l_@@_graphics_attr_tl
\@@_backend_getbb_auxi:n {#1}
}
+\cs_new_eq:NN \@@_backend_getbb_jpeg:n \@@_backend_getbb_jpg:n
\cs_new_eq:NN \@@_backend_getbb_png:n \@@_backend_getbb_jpg:n
\cs_new_protected:Npn \@@_backend_getbb_pdf:n #1
{
- \tl_clear:N \l_graphics_decodearray_tl
- \bool_set_false:N \l_graphics_interpolate_bool
+ \tl_clear:N \l_@@_decodearray_str
+ \bool_set_false:N \l_@@_interpolate_bool
\tl_set:Nx \l_@@_graphics_attr_tl
{
- : \l_graphics_pagebox_tl
- \int_compare:nNnT \l_graphics_page_int > 1
- { :P \int_use:N \l_graphics_page_int }
+ : \l_@@_pagebox_tl
+ \int_compare:nNnT \l_@@_page_int > 1
+ { :P \int_use:N \l_@@_page_int }
}
\@@_backend_getbb_auxi:n {#1}
}
\cs_new_protected:Npn \@@_backend_getbb_auxi:n #1
{
- \graphics_bb_restore:xF { #1 \l_@@_graphics_attr_tl }
+ \@@_bb_restore:xF { #1 \l_@@_graphics_attr_tl }
{ \@@_backend_getbb_auxii:n {#1} }
}
% \end{macrocode}
@@ -164,44 +218,53 @@
% Measuring the graphic is done by boxing up: for PDF graphics we could
% use |\tex_pdfximagebbox:D|, but if doesn't work for other types.
% As the box always starts at $(0,0)$ there is no need to worry about
-% the lower-left position.
+% the lower-left position. Quotes need to be \emph{removed} as \LuaTeX{}
+% does not like them here.
% \begin{macrocode}
\cs_new_protected:Npn \@@_backend_getbb_auxii:n #1
{
+ \exp_args:Ne \@@_backend_getbb_auxiii:n
+ { \@@_backend_dequote:w #1 " #1 " \s_@@_stop }
+ \int_const:cn { c_@@_ #1 \l_@@_graphics_attr_tl _int }
+ { \tex_the:D \tex_pdflastximage:D }
+ \@@_bb_save:x { #1 \l_@@_graphics_attr_tl }
+ }
+\cs_new_protected:Npn \@@_backend_getbb_auxiii:n #1
+ {
\tex_immediate:D \tex_pdfximage:D
\bool_lazy_or:nnT
- { \l_graphics_interpolate_bool }
- { ! \tl_if_empty_p:N \l_graphics_decodearray_tl }
+ { \l_@@_interpolate_bool }
+ { ! \tl_if_empty_p:N \l_@@_decodearray_str }
{
attr ~
{
- \tl_if_empty:NF \l_graphics_decodearray_tl
- { /Decode~[ \l_graphics_decodearray_tl ] }
- \bool_if:NT \l_graphics_interpolate_bool
+ \tl_if_empty:NF \l_@@_decodearray_str
+ { /Decode~[ \l_@@_decodearray_str ] }
+ \bool_if:NT \l_@@_interpolate_bool
{ /Interpolate~true }
}
}
- \int_compare:nNnT \l_graphics_page_int > 0
- { page ~ \int_use:N \l_graphics_page_int }
- \tl_if_empty:NF \l_graphics_pagebox_tl
- { \l_graphics_pagebox_tl }
+ \int_compare:nNnT \l_@@_page_int > 0
+ { page ~ \int_use:N \l_@@_page_int }
+ \tl_if_empty:NF \l_@@_pagebox_tl
+ { \l_@@_pagebox_tl }
{#1}
\hbox_set:Nn \l_@@_internal_box
{ \tex_pdfrefximage:D \tex_pdflastximage:D }
- \dim_set:Nn \l_graphics_urx_dim { \box_wd:N \l_@@_internal_box }
- \dim_set:Nn \l_graphics_ury_dim { \box_ht:N \l_@@_internal_box }
- \int_const:cn { c_@@_graphics_ #1 \l_@@_graphics_attr_tl _int }
- { \tex_the:D \tex_pdflastximage:D }
- \graphics_bb_save:x { #1 \l_@@_graphics_attr_tl }
+ \dim_set:Nn \l_@@_urx_dim { \box_wd:N \l_@@_internal_box }
+ \dim_set:Nn \l_@@_ury_dim { \box_ht:N \l_@@_internal_box }
}
+\cs_new:Npn \@@_backend_dequote:w #1 " #2 " #3 \s_@@_stop {#2}
% \end{macrocode}
% \end{macro}
% \end{macro}
+% \end{macro}
%
% \begin{macro}
% {
-% \@@_backend_include_jpg:n,
-% \@@_backend_include_pdf:n,
+% \@@_backend_include_jpg:n ,
+% \@@_backend_include_jpeg:n ,
+% \@@_backend_include_pdf:n ,
% \@@_backend_include_png:n
% }
% Images are already loaded for the measurement part of the code, so
@@ -211,8 +274,9 @@
\cs_new_protected:Npn \@@_backend_include_jpg:n #1
{
\tex_pdfrefximage:D
- \int_use:c { c_@@_graphics_ #1 \l_@@_graphics_attr_tl _int }
+ \int_use:c { c_@@_ #1 \l_@@_graphics_attr_tl _int }
}
+\cs_new_eq:NN \@@_backend_include_jpeg:n \@@_backend_include_jpg:n
\cs_new_eq:NN \@@_backend_include_pdf:n \@@_backend_include_jpg:n
\cs_new_eq:NN \@@_backend_include_png:n \@@_backend_include_jpg:n
% \end{macrocode}
@@ -241,8 +305,12 @@
\l_@@_backend_ext_str
\exp_args:Nx \@@_backend_getbb_eps:nn
{
- \l_@@_backend_name_str - \str_tail:N \l_@@_backend_ext_str
- -converted-to.pdf
+ \exp_args:Ne \__kernel_file_name_quote:n
+ {
+ \l_@@_backend_name_str
+ - \str_tail:N \l_@@_backend_ext_str
+ -converted-to.pdf
+ }
}
{#1}
}
@@ -253,7 +321,7 @@
\sys_shell_now:n
{ repstopdf ~ #2 ~ #1 }
}
- \tl_set:Nn \l_graphics_name_tl {#1}
+ \tl_set:Nn \l_@@_final_name_str {#1}
\@@_backend_getbb_pdf:n {#1}
}
\cs_new_protected:Npn \@@_backend_include_eps:n #1
@@ -262,8 +330,12 @@
\l_@@_backend_dir_str \l_@@_backend_name_str \l_@@_backend_ext_str
\exp_args:Nx \@@_backend_include_pdf:n
{
- \l_@@_backend_name_str - \str_tail:N \l_@@_backend_ext_str
- -converted-to.pdf
+ \exp_args:Ne \__kernel_file_name_quote:n
+ {
+ \l_@@_backend_name_str
+ - \str_tail:N \l_@@_backend_ext_str
+ -converted-to.pdf
+ }
}
}
}
@@ -273,7 +345,19 @@
% \end{macro}
% \end{macro}
%
+% \begin{macro}{\@@_backend_get_pagecount:n}
+% Simply load and store.
% \begin{macrocode}
+\cs_new_protected:Npn \@@_backend_get_pagecount:n #1
+ {
+ \tex_immediate:D \tex_pdfximage:D {#1}
+ \int_const:cn { c_@@_ #1 _pages_int }
+ { \int_use:N \tex_pdflastximagepages:D }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
%</luatex|pdftex>
% \end{macrocode}
%
@@ -283,28 +367,46 @@
%<*dvipdfmx|xetex>
% \end{macrocode}
%
+% \begin{variable}{\l_graphics_search_ext_seq}
+% \begin{macrocode}
+\@@_backend_loaded:n
+ {
+ \seq_set_from_clist:Nn \l_graphics_search_ext_seq
+ { .pdf , .eps , .ps , .png , .jpg ., jpeg , .bmp }
+ }
+% \end{macrocode}
+% \end{variable}
+%
% \begin{macro}
% {
-% \@@_backend_getbb_eps:n, \@@_backend_getbb_jpg:n,
-% \@@_backend_getbb_pdf:n, \@@_backend_getbb_png:n
+% \@@_backend_getbb_eps:n ,
+% \@@_backend_getbb_jpg:n , \@@_backend_getbb_jpeg:n ,
+% \@@_backend_getbb_pdf:n , \@@_backend_getbb_png:n ,
+% \@@_backend_getbb_bmp:n
% }
% Simply use the generic functions: only for \texttt{dvipdfmx} in the
% extraction cases.
% \begin{macrocode}
-\cs_new_eq:NN \@@_backend_getbb_eps:n \graphics_read_bb:n
+\@@_backend_loaded:n
+ {
+ \cs_new_eq:NN \@@_backend_getbb_eps:n \@@_read_bb:n
+ \cs_new_eq:NN \@@_backend_getbb_ps:n \@@_read_bb:n
+ }
%<*dvipdfmx>
\cs_new_protected:Npn \@@_backend_getbb_jpg:n #1
{
- \int_zero:N \l_graphics_page_int
- \tl_clear:N \l_graphics_pagebox_tl
- \graphics_extract_bb:n {#1}
+ \int_zero:N \l_@@_page_int
+ \tl_clear:N \l_@@_pagebox_tl
+ \@@_extract_bb:n {#1}
}
+\cs_new_eq:NN \@@_backend_getbb_jpeg:n \@@_backend_getbb_jpg:n
\cs_new_eq:NN \@@_backend_getbb_png:n \@@_backend_getbb_jpg:n
+\cs_new_eq:NN \@@_backend_getbb_bmp:n \@@_backend_getbb_jpg:n
\cs_new_protected:Npn \@@_backend_getbb_pdf:n #1
{
- \tl_clear:N \l_graphics_decodearray_tl
- \bool_set_false:N \l_graphics_interpolate_bool
- \graphics_extract_bb:n {#1}
+ \tl_clear:N \l_@@_decodearray_str
+ \bool_set_false:N \l_@@_interpolate_bool
+ \@@_extract_bb:n {#1}
}
%</dvipdfmx>
% \end{macrocode}
@@ -319,8 +421,10 @@
%
% \begin{macro}
% {
-% \@@_backend_include_eps:n, \@@_backend_include_jpg:n,
-% \@@_backend_include_pdf:n, \@@_backend_include_png:n
+% \@@_backend_include_eps:n , \@@_backend_include_ps:n ,
+% \@@_backend_include_jpg:n , \@@_backend_include_jpseg:n ,
+% \@@_backend_include_pdf:n , \@@_backend_include_png:n ,
+% \@@_backend_include_bmp:n ,
% }
% \begin{macro}{\@@_backend_include_auxi:nn}
% \begin{macro}{\@@_backend_include_auxii:nnn, \@@_backend_include_auxii:xnn}
@@ -335,15 +439,18 @@
\__kernel_backend_literal:x
{
PSfile = #1 \c_space_tl
- llx = \dim_to_decimal_in_bp:n \l_graphics_llx_dim \c_space_tl
- lly = \dim_to_decimal_in_bp:n \l_graphics_lly_dim \c_space_tl
- urx = \dim_to_decimal_in_bp:n \l_graphics_urx_dim \c_space_tl
- ury = \dim_to_decimal_in_bp:n \l_graphics_ury_dim
+ llx = \dim_to_decimal_in_bp:n \l_@@_llx_dim \c_space_tl
+ lly = \dim_to_decimal_in_bp:n \l_@@_lly_dim \c_space_tl
+ urx = \dim_to_decimal_in_bp:n \l_@@_urx_dim \c_space_tl
+ ury = \dim_to_decimal_in_bp:n \l_@@_ury_dim
}
}
+\cs_new_eq:NN \@@_backend_include_ps:n \@@_backend_include_eps:n
\cs_new_protected:Npn \@@_backend_include_jpg:n #1
{ \@@_backend_include_auxi:nn {#1} { image } }
+\cs_new_eq:NN \@@_backend_include_jpeg:n \@@_backend_include_jpg:n
\cs_new_eq:NN \@@_backend_include_png:n \@@_backend_include_jpg:n
+\cs_new_eq:NN \@@_backend_include_bmp:n \@@_backend_include_jpg:n
%<*dvipdfmx>
\cs_new_protected:Npn \@@_backend_include_pdf:n #1
{ \@@_backend_include_auxi:nn {#1} { epdf } }
@@ -358,13 +465,13 @@
{
\@@_backend_include_auxii:xnn
{
- \tl_if_empty:NF \l_graphics_pagebox_tl
- { : \l_graphics_pagebox_tl }
- \int_compare:nNnT \l_graphics_page_int > 1
- { :P \int_use:N \l_graphics_page_int }
- \tl_if_empty:NF \l_graphics_decodearray_tl
- { :D \l_graphics_decodearray_tl }
- \bool_if:NT \l_graphics_interpolate_bool
+ \tl_if_empty:NF \l_@@_pagebox_tl
+ { : \l_@@_pagebox_tl }
+ \int_compare:nNnT \l_@@_page_int > 1
+ { :P \int_use:N \l_@@_page_int }
+ \tl_if_empty:NF \l_@@_decodearray_str
+ { :D \l_@@_decodearray_str }
+ \bool_if:NT \l_@@_interpolate_bool
{ :I }
}
{#1} {#2}
@@ -371,10 +478,10 @@
}
\cs_new_protected:Npn \@@_backend_include_auxii:nnn #1#2#3
{
- \int_if_exist:cTF { c_@@_graphics_ #2#1 _int }
+ \int_if_exist:cTF { c_@@_ #2#1 _int }
{
\__kernel_backend_literal:x
- { pdf:usexobj~@graphic \int_use:c { c_@@_graphics_ #2#1 _int } }
+ { pdf:usexobj~@graphic \int_use:c { c_@@_ #2#1 _int } }
}
{ \@@_backend_include_auxiii:nnn {#2} {#1} {#3} }
}
@@ -388,31 +495,31 @@
\cs_new_protected:Npn \@@_backend_include_auxiii:nnn #1#2#3
{
\int_gincr:N \g_@@_track_int
- \int_const:cn { c_@@_graphics_ #1#2 _int } { \g_@@_track_int }
+ \int_const:cn { c_@@_ #1#2 _int } { \g_@@_track_int }
\__kernel_backend_literal:x
{
pdf:#3~
- @graphic \int_use:c { c_@@_graphics_ #1#2 _int } ~
- \int_compare:nNnT \l_graphics_page_int > 1
- { page ~ \int_use:N \l_graphics_page_int \c_space_tl }
- \tl_if_empty:NF \l_graphics_pagebox_tl
+ @graphic \int_use:c { c_@@_ #1#2 _int } ~
+ \int_compare:nNnT \l_@@_page_int > 1
+ { page ~ \int_use:N \l_@@_page_int \c_space_tl }
+ \tl_if_empty:NF \l_@@_pagebox_tl
{
- pagebox ~ \l_graphics_pagebox_tl \c_space_tl
+ pagebox ~ \l_@@_pagebox_tl \c_space_tl
bbox ~
- \dim_to_decimal_in_bp:n \l_graphics_llx_dim \c_space_tl
- \dim_to_decimal_in_bp:n \l_graphics_lly_dim \c_space_tl
- \dim_to_decimal_in_bp:n \l_graphics_urx_dim \c_space_tl
- \dim_to_decimal_in_bp:n \l_graphics_ury_dim \c_space_tl
+ \dim_to_decimal_in_bp:n \l_@@_llx_dim \c_space_tl
+ \dim_to_decimal_in_bp:n \l_@@_lly_dim \c_space_tl
+ \dim_to_decimal_in_bp:n \l_@@_urx_dim \c_space_tl
+ \dim_to_decimal_in_bp:n \l_@@_ury_dim \c_space_tl
}
(#1)
\bool_lazy_or:nnT
- { \l_graphics_interpolate_bool }
- { ! \tl_if_empty_p:N \l_graphics_decodearray_tl }
+ { \l_@@_interpolate_bool }
+ { ! \tl_if_empty_p:N \l_@@_decodearray_str }
{
<<
- \tl_if_empty:NF \l_graphics_decodearray_tl
- { /Decode~[ \l_graphics_decodearray_tl ] }
- \bool_if:NT \l_graphics_interpolate_bool
+ \tl_if_empty:NF \l_@@_decodearray_str
+ { /Decode~[ \l_@@_decodearray_str ] }
+ \bool_if:NT \l_@@_interpolate_bool
{ /Interpolate~true> }
>>
}
@@ -424,7 +531,16 @@
% \end{macro}
% \end{macro}
%
+% \begin{macro}{\@@_backend_get_pagecount:n}
% \begin{macrocode}
+%<*dvipdfmx>
+\@@_backend_loaded:n
+ { \cs_new_eq:NN \@@_backend_get_pagecount:n \@@_get_pagecount:n }
+%</dvipdfmx>
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
%</dvipdfmx|xetex>
% \end{macrocode}
%
@@ -434,13 +550,13 @@
%<*xetex>
% \end{macrocode}
%
-% \subsubsection{Images}
-%
% \begin{macro}
% {
-% \@@_backend_getbb_jpg:n,
-% \@@_backend_getbb_pdf:n,
-% \@@_backend_getbb_png:n
+% \@@_backend_getbb_jpg:n ,
+% \@@_backend_getbb_jpeg:n ,
+% \@@_backend_getbb_pdf:n ,
+% \@@_backend_getbb_png:n ,
+% \@@_backend_getbb_bmp:n
% }
% \begin{macro}{\@@_backend_getbb_auxi:nN}
% \begin{macro}{\@@_backend_getbb_auxii:nnN, \@@_backend_getbb_auxii:VnN}
@@ -456,21 +572,23 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_backend_getbb_jpg:n #1
{
- \int_zero:N \l_graphics_page_int
- \tl_clear:N \l_graphics_pagebox_tl
+ \int_zero:N \l_@@_page_int
+ \tl_clear:N \l_@@_pagebox_tl
\@@_backend_getbb_auxi:nN {#1} \tex_XeTeXpicfile:D
}
+\cs_new_eq:NN \@@_backend_getbb_jpeg:n \@@_backend_getbb_jpg:n
\cs_new_eq:NN \@@_backend_getbb_png:n \@@_backend_getbb_jpg:n
+\cs_new_eq:NN \@@_backend_getbb_bmp:n \@@_backend_getbb_jpg:n
\cs_new_protected:Npn \@@_backend_getbb_pdf:n #1
{
- \tl_clear:N \l_graphics_decodearray_tl
- \bool_set_false:N \l_graphics_interpolate_bool
+ \tl_clear:N \l_@@_decodearray_str
+ \bool_set_false:N \l_@@_interpolate_bool
\@@_backend_getbb_auxi:nN {#1} \tex_XeTeXpdffile:D
}
\cs_new_protected:Npn \@@_backend_getbb_auxi:nN #1#2
{
- \int_compare:nNnTF \l_graphics_page_int > 1
- { \@@_backend_getbb_auxii:VnN \l_graphics_page_int {#1} #2 }
+ \int_compare:nNnTF \l_@@_page_int > 1
+ { \@@_backend_getbb_auxii:VnN \l_@@_page_int {#1} #2 }
{ \@@_backend_getbb_auxiii:nNnn {#1} #2 { :P 1 } { page 1 } }
}
\cs_new_protected:Npn \@@_backend_getbb_auxii:nnN #1#2#3
@@ -478,8 +596,8 @@
\cs_generate_variant:Nn \@@_backend_getbb_auxii:nnN { V }
\cs_new_protected:Npn \@@_backend_getbb_auxiii:nNnn #1#2#3#4
{
- \tl_if_empty:NTF \l_graphics_pagebox_tl
- { \@@_backend_getbb_auxiv:VnNnn \l_graphics_pagebox_tl }
+ \tl_if_empty:NTF \l_@@_pagebox_tl
+ { \@@_backend_getbb_auxiv:VnNnn \l_@@_pagebox_tl }
{ \@@_backend_getbb_auxv:nNnn }
{#1} #2 {#3} {#4}
}
@@ -488,21 +606,25 @@
\use:x
{
\@@_backend_getbb_auxv:nNnn {#2} #3 { : #1 #4 }
- { #5 ~ \@@_backend_getbb_pagebox:w #1 }
+ {
+ #5
+ \tl_if_blank:nF {#1}
+ { \c_space_tl \@@_backend_getbb_pagebox:w #1 }
+ }
}
}
\cs_generate_variant:Nn \@@_backend_getbb_auxiv:nnNnn { V }
\cs_new_protected:Npn \@@_backend_getbb_auxv:nNnn #1#2#3#4
{
- \graphics_bb_restore:nF {#1#3}
+ \@@_bb_restore:nF {#1#3}
{ \@@_backend_getbb_auxvi:nNnn {#1} #2 {#3} {#4} }
}
\cs_new_protected:Npn \@@_backend_getbb_auxvi:nNnn #1#2#3#4
{
\hbox_set:Nn \l_@@_internal_box { #2 #1 ~ #4 }
- \dim_set:Nn \l_graphics_urx_dim { \box_wd:N \l_@@_internal_box }
- \dim_set:Nn \l_graphics_ury_dim { \box_ht:N \l_@@_internal_box }
- \graphics_bb_save:n {#1#3}
+ \dim_set:Nn \l_@@_urx_dim { \box_wd:N \l_@@_internal_box }
+ \dim_set:Nn \l_@@_ury_dim { \box_ht:N \l_@@_internal_box }
+ \@@_bb_save:n {#1#3}
}
\cs_new:Npn \@@_backend_getbb_pagebox:w #1 box {#1}
% \end{macrocode}
@@ -515,7 +637,6 @@
% \end{macro}
%
% \begin{macro}{\@@_backend_include_pdf:n}
-% \begin{macro}{\@@_backend_include_bitmap_quote:w}
% For PDF graphics, properly supporting the |pagebox| concept in \XeTeX{}
% is best done using the |\tex_XeTeXpdffile:D| primitive. The syntax here
% is the same as for the graphic measurement part, although we know at this
@@ -523,16 +644,27 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_backend_include_pdf:n #1
{
- \tex_XeTeXpdffile:D
- \@@_backend_include_pdf_quote:w #1 "#1" \s_@@_stop \c_space_tl
- \int_compare:nNnT \l_graphics_page_int > 0
- { page ~ \int_use:N \l_graphics_page_int \c_space_tl }
- \exp_after:wN \@@_backend_getbb_pagebox:w \l_graphics_pagebox_tl
+ \tex_XeTeXpdffile:D #1 ~
+ \int_compare:nNnT \l_@@_page_int > 0
+ { page ~ \int_use:N \l_@@_page_int \c_space_tl }
+ \exp_after:wN \@@_backend_getbb_pagebox:w \l_@@_pagebox_tl
}
-\cs_new:Npn \@@_backend_include_pdf_quote:w #1 " #2 " #3 \s_@@_stop
- { " #2 " }
% \end{macrocode}
% \end{macro}
+%
+% \begin{macro}{\@@_backend_get_pagecount:n}
+% Very little to do here other than cover the case of a non-PDF file.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_backend_get_pagecount:n #1
+ {
+ \int_const:cn { c_@@_ #1 _pages_int }
+ {
+ \int_max:nn
+ { \int_use:N \tex_XeTeXpdfpagecount:D #1 ~ }
+ { 1 }
+ }
+ }
+% \end{macrocode}
% \end{macro}
%
% \begin{macrocode}
@@ -545,22 +677,35 @@
%<*dvisvgm>
% \end{macrocode}
%
+% \begin{variable}{\l_graphics_search_ext_seq}
+% \begin{macrocode}
+\@@_backend_loaded:n
+ {
+ \seq_set_from_clist:Nn
+ \l_graphics_search_ext_seq
+ { .pdf , .eps , .png , .jpg , .jpeg }
+ }
+% \end{macrocode}
+% \end{variable}
+%
% \begin{macro}{\@@_backend_getbb_eps:n}
% Simply use the generic function.
% \begin{macrocode}
-\cs_new_eq:NN \@@_backend_getbb_eps:n \graphics_read_bb:n
+\@@_backend_loaded:n
+ { \cs_new_eq:NN \@@_backend_getbb_eps:n \@@_read_bb:n }
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\@@_backend_getbb_png:n, \@@_backend_getbb_jpg:n}
+% \begin{macro}{\@@_backend_getbb_png:n, \@@_backend_getbb_jpg:n, \@@_backend_getbb_jpeg:n}
% These can be included by extracting the bounding box data.
% \begin{macrocode}
\cs_new_protected:Npn \@@_backend_getbb_jpg:n #1
{
- \int_zero:N \l_graphics_page_int
- \tl_clear:N \l_graphics_pagebox_tl
- \graphics_extract_bb:n {#1}
+ \int_zero:N \l_@@_page_int
+ \tl_clear:N \l_@@_pagebox_tl
+ \@@_extract_bb:n {#1}
}
+\cs_new_eq:NN \@@_backend_getbb_jpeg:n \@@_backend_getbb_jpg:n
\cs_new_eq:NN \@@_backend_getbb_png:n \@@_backend_getbb_jpg:n
% \end{macrocode}
% \end{macro}
@@ -570,9 +715,9 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_backend_getbb_pdf:n #1
{
- \tl_clear:N \l_graphics_decodearray_tl
- \bool_set_false:N \l_graphics_interpolate_bool
- \graphics_extract_bb:n {#1}
+ \tl_clear:N \l_@@_decodearray_str
+ \bool_set_false:N \l_@@_interpolate_bool
+ \@@_extract_bb:n {#1}
}
% \end{macrocode}
% \end{macro}
@@ -583,18 +728,18 @@
% sizes here. (This is the same as the \texttt{dvips} code.)
% \begin{macrocode}
\cs_new_protected:Npn \@@_backend_include_eps:n #1
- { @@_backend_include:nn { PSfile } {#1} }
+ { \@@_backend_include:nn { PSfile } {#1} }
\cs_new_protected:Npn \@@_backend_include_pdf:n #1
- { @@_backend_include:nn { pdffile } {#1} }
+ { \@@_backend_include:nn { pdffile } {#1} }
\cs_new_protected:Npn \@@_backend_include:nn #1#2
{
\__kernel_backend_literal:x
{
#1 = #2 \c_space_tl
- llx = \dim_to_decimal_in_bp:n \l_graphics_llx_dim \c_space_tl
- lly = \dim_to_decimal_in_bp:n \l_graphics_lly_dim \c_space_tl
- urx = \dim_to_decimal_in_bp:n \l_graphics_urx_dim \c_space_tl
- ury = \dim_to_decimal_in_bp:n \l_graphics_ury_dim
+ llx = \dim_to_decimal_in_bp:n \l_@@_llx_dim \c_space_tl
+ lly = \dim_to_decimal_in_bp:n \l_@@_lly_dim \c_space_tl
+ urx = \dim_to_decimal_in_bp:n \l_@@_urx_dim \c_space_tl
+ ury = \dim_to_decimal_in_bp:n \l_@@_ury_dim
}
}
% \end{macrocode}
@@ -601,7 +746,12 @@
% \end{macro}
% \end{macro}
%
-% \begin{macro}{\@@_backend_include_png:n, \@@_backend_include_jpg:n}
+% \begin{macro}
+% {
+% \@@_backend_include_png:n ,
+% \@@_backend_include_jpg:n ,
+% \@@_backend_include_jpeg:n
+% }
% \begin{macro}{\@@_backend_include_bitmap_quote:w}
% The backend here has built-in support for basic graphic inclusion (see
% \texttt{dvisvgm.def} for a more complex approach, needed if clipping,
@@ -615,11 +765,12 @@
\__kernel_backend_literal:x
{
dvisvgm:img~
- \dim_to_decimal:n { \l_graphics_ury_dim } ~
- \dim_to_decimal:n { \l_graphics_ury_dim } ~
+ \dim_to_decimal:n { \l_@@_ury_dim } ~
+ \dim_to_decimal:n { \l_@@_ury_dim } ~
\@@_backend_include_bitmap_quote:w #1 " #1 " \s_@@_stop
}
}
+\cs_new_eq:NN \@@_backend_include_jpeg:n \@@_backend_include_png:n
\cs_new_eq:NN \@@_backend_include_jpg:n \@@_backend_include_png:n
\cs_new:Npn \@@_backend_include_bitmap_quote:w #1 " #2 " #3 \s_@@_stop
{ " #2 " }
@@ -627,7 +778,14 @@
% \end{macro}
% \end{macro}
%
+% \begin{macro}{\@@_backend_get_pagecount:n}
% \begin{macrocode}
+\@@_backend_loaded:n
+ { \cs_new_eq:NN \@@_backend_get_pagecount:n \@@_get_pagecount:n }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
%</dvisvgm>
% \end{macrocode}
%
Modified: trunk/Master/texmf-dist/source/latex/l3backend/l3backend-header.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3backend/l3backend-header.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3backend/l3backend-header.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-07}
+% \date{Released 2022-04-10}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3backend/l3backend-opacity.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3backend/l3backend-opacity.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3backend/l3backend-opacity.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-07}
+% \date{Released 2022-04-10}
%
% \maketitle
%
@@ -239,49 +239,6 @@
% \end{macrocode}
%
% \begin{macrocode}
-%<*dvipdfmx|xdvipdfmx>
-% \end{macrocode}
-%
-% \begin{macro}{\@@_backend_select:n}
-% Older backends have no stack support, so everything is done directly.
-% \begin{macrocode}
-\int_compare:nNnT \c__kernel_sys_dvipdfmx_version_int < { 20201111 }
- {
- \cs_gset_protected:Npn \@@_backend_select_aux:n #1
- {
- \tl_set:Nn \l_@@_backend_fill_tl {#1}
- \tl_set:Nn \l_@@_backend_stroke_tl {#1}
- \pdfmanagement_add:nnn { Page / Resources / ExtGState }
- { opacity #1 }
- { << /ca ~ #1 /CA ~ #1 >> }
- \__kernel_backend_literal_pdf:n { /opacity #1 ~ gs }
- }
- \cs_gset_protected:Npn \@@_backend_fill_stroke:nn #1#2
- {
- \str_if_eq:nnTF {#1} {#2}
- { \@@_backend_select_aux:n {#1} }
- {
- \tl_set:Nn \l_@@_backend_fill_tl {#1}
- \tl_set:Nn \l_@@_backend_stroke_tl {#2}
- \pdfmanagement_add:nnn { Page / Resources / ExtGState }
- { opacity.fill #1 }
- { << /ca ~ #1 >> }
- \pdfmanagement_add:nnn { Page / Resources / ExtGState }
- { opacity.stroke #1 }
- { << /CA ~ #2 >> }
- \__kernel_backend_literal_pdf:n
- { /opacity.fill #1 ~ gs /opacity.stroke #2 ~ gs }
- }
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</dvipdfmx|xdvipdfmx>
-% \end{macrocode}
-%
-% \begin{macrocode}
%<*dvisvgm>
% \end{macrocode}
%
Modified: trunk/Master/texmf-dist/source/latex/l3backend/l3backend-pdf.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3backend/l3backend-pdf.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3backend/l3backend-pdf.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-07}
+% \date{Released 2022-04-10}
%
% \maketitle
%
@@ -1421,19 +1421,13 @@
{ \@@_backend_link_begin:n {#1#2} }
\cs_new_protected:Npx \@@_backend_link_begin:n #1
{
- \int_compare:nNnF \c__kernel_sys_dvipdfmx_version_int < { 20201111 }
- {
- \exp_not:N \int_gincr:N \exp_not:N \g_@@_backend_link_int
- }
+ \exp_not:N \int_gincr:N \exp_not:N \g_@@_backend_link_int
\@@_backend:x
{
bann ~
- \int_compare:nNnF \c__kernel_sys_dvipdfmx_version_int < { 20201111 }
- {
- @pdf.lnk
- \exp_not:N \int_use:N \exp_not:N \g_@@_backend_link_int
- \c_space_tl
- }
+ @pdf.lnk
+ \exp_not:N \int_use:N \exp_not:N \g_@@_backend_link_int
+ \c_space_tl
<<
/Type /Annot
#1
@@ -1451,14 +1445,8 @@
% Available using the backend mechanism with a suitably-recent
% version.
% \begin{macrocode}
-\cs_new:Npx \@@_backend_link_last:
- {
- \int_compare:nNnF \c__kernel_sys_dvipdfmx_version_int < { 20201111 }
- {
- @pdf.lnk
- \exp_not:N \int_use:N \exp_not:N \g_@@_backend_link_int
- }
- }
+\cs_new:Npn \@@_backend_link_last:
+ { @pdf.lnk \int_use:N \g_@@_backend_link_int }
% \end{macrocode}
% \end{macro}
%
Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -46,7 +46,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-05}
+% \date{Released 2022-04-10}
%
% \maketitle
%
@@ -122,7 +122,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-\ProvidesExplPackage{l3benchmark}{2022-02-05}{}
+\ProvidesExplPackage{l3benchmark}{2022-04-10}{}
{L3 Experimental benchmarking}
% \end{macrocode}
%
Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3bitset/l3bitset.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3bitset/l3bitset.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3bitset/l3bitset.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -42,7 +42,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-05}
+% \date{Released 2022-04-10}
%
% \maketitle
% \begin{documentation}
@@ -264,7 +264,7 @@
%<@@=bitset>
% \end{macrocode}
% \begin{macrocode}
-\ProvidesExplPackage{l3bitset}{2022-02-05}{}
+\ProvidesExplPackage{l3bitset}{2022-04-10}{}
{L3 Experimental bitset support}
% \end{macrocode}
% A bitset is a string variable.
Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-boxes.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-boxes.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-boxes.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-05}
+% \date{Released 2022-04-10}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-layers.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-layers.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-layers.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-05}
+% \date{Released 2022-04-10}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-paths.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-paths.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-paths.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-05}
+% \date{Released 2022-04-10}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-points.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-points.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-points.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-05}
+% \date{Released 2022-04-10}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-scopes.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-scopes.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-scopes.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-05}
+% \date{Released 2022-04-10}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-softpath.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-softpath.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-softpath.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-05}
+% \date{Released 2022-04-10}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-state.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-state.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-state.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-05}
+% \date{Released 2022-04-10}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-transforms.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-transforms.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-transforms.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-05}
+% \date{Released 2022-04-10}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -110,7 +110,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-05}
+% \date{Released 2022-04-10}
%
% \maketitle
%
@@ -1173,7 +1173,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-\ProvidesExplPackage{l3draw}{2022-02-05}{}
+\ProvidesExplPackage{l3draw}{2022-04-10}{}
{L3 Experimental core drawing support}
% \end{macrocode}
%
Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -46,7 +46,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-05}
+% \date{Released 2022-04-10}
%
% \maketitle
%
@@ -54,142 +54,62 @@
%
% \section{\pkg{l3graphics} documentation}
%
-% \subsection{Driver functions}
+% \subsection{Graphics keys}
%
% Inclusion of graphic files requires a range of low-level data be passed to
-% the driver layer. These functions are primarily aimed at supporting this
-% work.
+% the backend. This is set up using a small number of key--value settings,
+% which are stored in the |graphics| tree.
%
-% \begin{variable}{\l_graphics_decodearray_tl}
+% \begin{variable}{decodearray}
% Array to decode color in bitmap graphic: when non-empty, this should
% be in the form of one, two or three pairs of real numbers in the range
% $[0,1]$, separated by spaces.
% \end{variable}
%
-% \begin{variable}{\l_graphics_interpolate_bool}
-% Indicates whether interpolation should be applied to bitmap graphic files.
+% \begin{variable}{draft}
+% Switch to enable draft mode: graphics are read but not included when this is
+% true.
% \end{variable}
%
-% \begin{variable}{\l_graphics_page_int}
+% \begin{variable}{interpolate}
+% Switch which indicates whether interpolation should be applied to bitmap
+% graphic files.
+% \end{variable}
+%
+% \begin{variable}{page}
% The page to extract from a multi-page graphic file: used for |.pdf| files
% which may contain multiple pages.
% \end{variable}
%
-% \begin{variable}{\l_graphics_pagebox_tl}
+% \begin{variable}{pagebox}
% The nature of the page box setting used to determine the bounding box of
% material: used for |.pdf| files which feature multiple page box
-% specifications.
+% specifications. A choice from |art|, |bleed|, |crop|, |media|, |trim|.
+% The standard setting is |crop|.
% \end{variable}
%
-% \begin{variable}{\l_graphics_draft_bool}
+% \begin{variable}{draft}
% Switch to enable draft mode: graphics are read but not included when this is
% true.
% \end{variable}
%
-% \begin{variable}
-% {\l_graphics_llx_dim, \l_graphics_lly_dim, \l_graphics_urx_dim, \l_graphics_ury_dim}
-% Dimensions which return the points $(\meta{llx},\meta{lly})$ and
-% $(\meta{urx},\meta{ury})$ for the graphic. For many graphics only the resulting
-% height and width are significant, but this is driver-dependent.
+% \begin{variable}{type}
+% The type of graphic file beign included: if this key is not set, the
+% \emph{type} is determined from the file extension.
% \end{variable}
%
-% \begin{variable}{\l_graphics_name_bool}
-% The name of a graphics file being loaded: usually the same as the
-% input file name, but may be altered by some drivers.
-% \end{variable}
+% \subsection{Including graphics}
%
-% \begin{function}
-% {
-% \graphics_bb_save:n, \graphics_bb_save:x,
-% \graphics_bb_restore:nF, \graphics_bb_restore:xF
-% }
+% \begin{function}{\graphics_include:nn, \graphics_include:nV}
% \begin{syntax}
-% \cs{graphics_bb_save:n} \Arg{graphic}
-% \cs{graphics_bb_restore:nF} \Arg{graphic} \Arg{false code}
+% \cs{graphics_include:nn} \Arg{keys} \Arg{file}
% \end{syntax}
-% This pair of functions are used to cache the bounding box of an \meta{graphic}
-% so that extraction/reading is only required once. The \texttt{save}
-% function stores the values from \cs{l_graphics_llx_dim},
-% \cs{l_graphics_lly_dim}, \cs{l_graphics_urx_dim} and
-% \cs{l_graphics_ury_dim} as constants. The \texttt{restore} function will then
-% look up values for the bounding box of an \meta{graphic} and set the four
-% dimensions appropriately. For any one \meta{graphic} the bounding box will
-% be constant, so the \texttt{save} function should only be called once. Thus
-% a typical use case is
-% \begin{verbatim}
-% \graphics_bb_restore:nF { <name> }
-% {
-% % Code to read the bb
-% \graphics_bb_save:n { <name> }
-% }
-% \end{verbatim}
-% \emph{i.e.}~every use of a bounding box will attempt to restore saved data,
-% and saving will only take place where that is not possible.
-%
-% Note that the \meta{graphic} may not be a simple file name: a multi-page PDF,
-% for example, will need to have the bounding box cached for each page used.
+% Horizontal-mode command which includes the \meta{file} as an graphic
+% at the current location. The file \meta{type} may be given as one of the
+% \meta{keys}, or will otherwise be determined from file extension. The
+% \meta{keys} is used to pass settings as detailed above.
% \end{function}
%
-% \begin{function}{\graphics_extract_bb:n}
-% \begin{syntax}
-% \cs{graphics_extract_bb:n} \Arg{file}
-% \end{syntax}
-% Extracts bounding box data for the graphic \meta{file} using the |extractbb|
-% utility, and stores the bounding box of the graphic file in
-% \cs{l_graphics_llx_dim}, \cs{l_graphics_lly_dim}, \cs{l_graphics_urx_dim} and
-% \cs{l_graphics_ury_dim}.
-%
-% The \meta{file} name should be fully-qualified and sanitized: no search
-% or other manipulation is carried out at this level. No check is made on
-% the file \emph{type} at this stage: it is assumed that the driver code
-% using this function has made such a check. File types such as |.pdf| and
-% |.jpg| are appropriate for parsing using this function.
-%
-% When \cs{l_graphics_page_int} is positive the appropriate page will be
-% queried from the graphic file.
-%
-% Note that this function requires pipe shell calls to be enabled: this is
-% generally true but may require the option |--enable-pipes| to be enabled
-% when running the \TeX{} job.
-% \end{function}
-%
-% \begin{function}{\graphics_read_bb:n}
-% \begin{syntax}
-% \cs{graphics_read_bb:n} \Arg{file}
-% \end{syntax}
-% Parses the graphic \meta{file} to find a PostScript-style bounding box
-% line of the form
-% \begin{verbatim}
-% %%BoundingBox: llx lly urx urx
-% \end{verbatim}
-% where \meta{llx}, \meta{lly}, \meta{urx} and \meta{ury} are the corners
-% of the bounding box expressed in PostScript (\enquote{big}) points. The
-% values are stored in \cs{l_graphics_llx_dim}, \cs{l_graphics_lly_dim},
-% \cs{l_graphics_urx_dim} and \cs{l_graphics_ury_dim}.
-%
-% The \meta{file} name should be fully-qualified and sanitized: no search
-% or other manipulation is carried out at this level. No check is made on
-% the file \emph{type} at this stage: it is assumed that the driver code
-% using this function has made such a check. File types such as |.eps| and
-% |.bb|/|.xbb| are appropriate for parsing using this function.
-% \end{function}
-%
-% \begin{function}{\graphics_include:n, \graphics_include:nn}
-% \begin{syntax}
-% \cs{graphics_include:n} \Arg{file}
-% \cs{graphics_include:nn} \Arg{file} \Arg{type}
-% \end{syntax}
-% Horizontal-mode commands which include the \meta{file} as an graphic
-% at the current location. The file \meta{type} is given explicitly in
-% the two-argument version, or is inferred from the file extension extracted
-% in the single-argument form. The exact graphic types supported depend upon
-% the driver in use.
-%
-% Where the \meta{file} is not found and the \meta{type} is \emph{not}
-% given, a search for possible graphic files is undertaken using the extensions
-% stored in \cs{l_graphics_search_ext_seq}.
-% \end{function}
-%
% \begin{variable}{\l_graphics_ext_type_prop}
% Defines mapping between file extensions and file types; where there is
% no entry for an extension, the type is assumed to be the extension
@@ -200,11 +120,6 @@
% \end{verbatim}
% \end{variable}
%
-% \begin{variable}{\l_graphics_search_ext_seq}
-% Extensions to use for graphic searching when the given \meta{file} name is not
-% found by \cs{graphics_include:n}.
-% \end{variable}
-%
% \begin{variable}{\l_graphics_search_path_seq}
% Each entry is the path to a directory which should be searched when
% seeking an graphic file. Each path can be relative or absolute, and should
@@ -213,6 +128,36 @@
% variable content. Spaces need not be quoted.
% \end{variable}
%
+% \subsection{Utility functions}
+%
+% \begin{function}[noTF]{\graphics_get_full_name:nN}
+% \begin{syntax}
+% \cs{graphics_get_full_name:nN} \Arg{file} \meta{tl~var}
+% \cs{graphics_get_full_name:nNTF} \Arg{file} \meta{tl~var} \Arg{true code} \Arg{false code}
+% \end{syntax}
+% Searches for \meta{file} first as given and then using the extensions
+% listed in \cs{l_graphics_search_ext_seq}. The search path used will be
+% the entries of \cs{l_graphics_search_path_seq}. If found, the full file
+% name including any path and extension will be returned in the
+% \meta{tl~var}. In the non-branching version, the \meta{tl var} will be
+% set to \cs{q_no_value} in the case that the graphics is not found.
+% \end{function}
+%
+% \begin{variable}{\l_graphics_search_ext_seq}
+% Extensions to use for graphic searching when the given \meta{file} name is not
+% found by \cs{graphics_get_full_name:nN}.
+% \end{variable}
+%
+% \begin{function}{\graphics_get_pagecount:nN}
+% \begin{syntax}
+% \cs{graphics_get_pagecount:nn} \Arg{file} \meta{tl~var}
+% \end{syntax}
+% Reads the graphics \meta{file} and extracts the number of pages, which
+% are stored in the \meta{tl~var}.
+% \end{function}
+%
+% \subsection{Showing and logging included graphics}
+%
% \begin{function}{\graphics_show_list:, \graphics_log_list:}
% \begin{syntax}
% \cs{graphics_show_list:}
@@ -240,15 +185,15 @@
% \end{macrocode}
%
% \begin{macrocode}
-\ProvidesExplPackage{l3graphics}{2022-02-05}{}
+\ProvidesExplPackage{l3graphics}{2022-04-10}{}
{L3 Experimental graphics inclusion support}
% \end{macrocode}
%
-% \begin{variable}{\l_@@_tmp_ior, \l_@@_tmp_tl}
+% \begin{variable}{\l_@@_internal_ior, \l_@@_internal_tl}
% Scratch space.
% \begin{macrocode}
-\ior_new:N \l_@@_tmp_ior
-\tl_new:N \l_@@_tmp_tl
+\ior_new:N \l_@@_internal_ior
+\tl_new:N \l_@@_internal_tl
% \end{macrocode}
% \end{variable}
%
@@ -259,24 +204,47 @@
% \end{macrocode}
% \end{variable}
%
-% \subsection{Image feature support}
+% \subsection{Graphics keys}
%
% \begin{macro}
% {
-% \l_graphics_decodearray_tl ,
-% \l_graphics_interpolate_bool,
-% \l_graphics_page_int ,
-% \l_graphics_pagebox_tl
+% \l_@@_decodearray_str ,
+% \l__@@_draft_bool ,
+% \l_@@_interpolate_bool ,
+% \l_@@_page_int ,
+% \l_@@_pagebox_tl ,
+% \l_@@_type_str
% }
% Keys which control features of graphics. The standard value of |pagebox|
-% set up here should match the default for the drivers themselves: in
-% the absence of any other setting the |cropbox| should be used.
+% set up here should match the default for the backends themselves: in
+% the absence of any other setting the |crop| should be used. Note that
+% the variable \cs{l_@@_pagebox_str} can be empty internally, as backends
+% which do not support |pagebox| are set up to clear it entirely. The
+% store for |pagebox| is a |tl| as that makes extracting the data
+% easier for some backends.
% \begin{macrocode}
-\tl_new:N \l_graphics_decodearray_tl
-\tl_new:N \l_graphics_pagebox_tl
-\bool_new:N \l_graphics_interpolate_bool
-\tl_set:Nn \l_graphics_pagebox_tl { cropbox }
-\int_new:N \l_graphics_page_int
+\tl_new:N \l_@@_pagebox_tl
+\keys_define:nn { graphics }
+ {
+ decodearray .str_set:N =
+ \l_@@_decodearray_str ,
+ draft .bool_set:N =
+ \l_@@_draft_bool ,
+ interpolate .bool_set:N =
+ \l_@@_interpolate_bool ,
+ pagebox .choices:nn =
+ { art , bleed , crop , media , trim }
+ {
+ \tl_set:Nx \l_@@_pagebox_tl
+ { \tl_use:N \l_keys_choice_tl box }
+ } ,
+ pagebox .initial:n =
+ crop ,
+ page .int_set:N =
+ \l_@@_page_int ,
+ type . str_set:N =
+ \l_@@_type_str
+ }
% \end{macrocode}
% \end{macro}
%
@@ -284,60 +252,60 @@
%
% \begin{variable}
% {
-% \l_graphics_llx_dim , \l_graphics_lly_dim,
-% \l_graphics_urx_dim , \l_graphics_ury_dim
+% \l_@@_llx_dim , \l_@@_lly_dim,
+% \l_@@_urx_dim , \l_@@_ury_dim
% }
% Storage for the return of bounding box.
% \begin{macrocode}
-\dim_new:N \l_graphics_llx_dim
-\dim_new:N \l_graphics_lly_dim
-\dim_new:N \l_graphics_urx_dim
-\dim_new:N \l_graphics_ury_dim
+\dim_new:N \l_@@_llx_dim
+\dim_new:N \l_@@_lly_dim
+\dim_new:N \l_@@_urx_dim
+\dim_new:N \l_@@_ury_dim
% \end{macrocode}
% \end{variable}
%
-% \begin{macro}{\graphics_bb_save:n, \graphics_bb_save:x}
-% \begin{macro}{\graphics_bb_restore:nF, \graphics_bb_restore:xF}
+% \begin{macro}{\@@_bb_save:n, \@@_bb_save:x}
+% \begin{macro}{\@@_bb_restore:nF, \@@_bb_restore:xF}
% Caching graphic bounding boxes is sensible, and these functions are needed both
% here and for drive-specific work. So they are made available as documented
% functions. To save on registers, the \enquote{origin} is only saved if it is
% not at zero.
% \begin{macrocode}
-\cs_new_protected:Npn \graphics_bb_save:n #1
+\cs_new_protected:Npn \@@_bb_save:n #1
{
\dim_if_exist:cTF { c_@@_ #1 _urx_dim }
{ \msg_error:nnn { graphic } { bb-already-cached } {#1} }
{
- \dim_compare:nNnF \l_graphics_llx_dim = { 0pt }
- { \dim_const:cn { c_@@_ #1 _llx_dim } { \l_graphics_llx_dim } }
- \dim_compare:nNnF \l_graphics_lly_dim = { 0pt }
- { \dim_const:cn { c_@@_ #1 _lly_dim } { \l_graphics_lly_dim } }
- \dim_const:cn { c_@@_ #1 _urx_dim } { \l_graphics_urx_dim }
- \dim_const:cn { c_@@_ #1 _ury_dim } { \l_graphics_ury_dim }
+ \dim_compare:nNnF \l_@@_llx_dim = { 0pt }
+ { \dim_const:cn { c_@@_ #1 _llx_dim } { \l_@@_llx_dim } }
+ \dim_compare:nNnF \l_@@_lly_dim = { 0pt }
+ { \dim_const:cn { c_@@_ #1 _lly_dim } { \l_@@_lly_dim } }
+ \dim_const:cn { c_@@_ #1 _urx_dim } { \l_@@_urx_dim }
+ \dim_const:cn { c_@@_ #1 _ury_dim } { \l_@@_ury_dim }
}
}
-\cs_generate_variant:Nn \graphics_bb_save:n { x }
-\cs_new_protected:Npn \graphics_bb_restore:nF #1#2
+\cs_generate_variant:Nn \@@_bb_save:n { x }
+\cs_new_protected:Npn \@@_bb_restore:nF #1#2
{
\dim_if_exist:cTF { c_@@_ #1 _urx_dim }
{
- \dim_set_eq:Nc \l_graphics_urx_dim { c_@@_ #1 _urx_dim }
- \dim_set_eq:Nc \l_graphics_ury_dim { c_@@_ #1 _ury_dim }
+ \dim_set_eq:Nc \l_@@_urx_dim { c_@@_ #1 _urx_dim }
+ \dim_set_eq:Nc \l_@@_ury_dim { c_@@_ #1 _ury_dim }
\dim_if_exist:cTF { c_@@_ #1 _llx_dim }
- { \dim_set_eq:Nc \l_graphics_llx_dim { c_@@_ #1 _llx_dim } }
- { \dim_zero:N \l_graphics_llx_dim }
+ { \dim_set_eq:Nc \l_@@_llx_dim { c_@@_ #1 _llx_dim } }
+ { \dim_zero:N \l_@@_llx_dim }
\dim_if_exist:cTF { c_@@_ #1 _lly_dim }
- { \dim_set_eq:Nc \l_graphics_lly_dim { c_@@_ #1 _lly_dim } }
- { \dim_zero:N \l_graphics_lly_dim }
+ { \dim_set_eq:Nc \l_@@_lly_dim { c_@@_ #1 _lly_dim } }
+ { \dim_zero:N \l_@@_lly_dim }
}
{#2}
}
-\cs_generate_variant:Nn \graphics_bb_restore:nF { x }
+\cs_generate_variant:Nn \@@_bb_restore:nF { x }
% \end{macrocode}
% \end{macro}
% \end{macro}
%
-% \begin{macro}{\graphics_extract_bb:n, \graphics_read_bb:n}
+% \begin{macro}{\@@_extract_bb:n, \@@_read_bb:n}
% \begin{macro}{\@@_extract_bb_auix:nn, \@@_extract_bb_auix:Vn}
% \begin{macro}{\@@_extract_bb_auxii:nnn}
% \begin{macro}{\@@_extract_bb_auxiii:nnnn, \@@_extract_bb_auxiii:Vnnn}
@@ -357,10 +325,10 @@
% box has to be calculated by |extractbb|, with just the initial phase
% different.
% \begin{macrocode}
-\cs_new_protected:Npn \graphics_extract_bb:n #1
+\cs_new_protected:Npn \@@_extract_bb:n #1
{
- \int_compare:nNnTF \l_graphics_page_int > 0
- { \@@_extract_bb_auxi:Vn \l_graphics_page_int {#1} }
+ \int_compare:nNnTF \l_@@_page_int > 0
+ { \@@_extract_bb_auxi:Vn \l_@@_page_int {#1} }
{ \@@_extract_bb_auxii:nnn {#1} { } { } }
}
\cs_new_protected:Npn \@@_extract_bb_auxi:nn #1#2
@@ -368,9 +336,9 @@
\cs_generate_variant:Nn \@@_extract_bb_auxi:nn { Vn }
\cs_new_protected:Npn \@@_extract_bb_auxii:nnn #1#2#3
{
- \tl_if_empty:NTF \l_graphics_pagebox_tl
+ \tl_if_empty:NTF \l_@@_pagebox_tl
{ \@@_extract_bb_auxiv:nnn }
- { \@@_extract_bb_auxiii:Vnnn \l_graphics_pagebox_tl }
+ { \@@_extract_bb_auxiii:Vnnn \l_@@_pagebox_tl }
{#1} {#2} {#3}
}
\cs_new_protected:Npn \@@_extract_bb_auxiii:nnnn #1#2#3#4
@@ -379,13 +347,13 @@
\cs_new_protected:Npn \@@_extract_bb_auxiv:nnn #1#2#3
{
\@@_read_bb_auxi:nnnn {#1} {#2}
- { \ior_shell_open:Nn \l_@@_tmp_ior { extractbb~#3-O~#1 } }
+ { \ior_shell_open:Nn \l_@@_internal_ior { extractbb~#3-O~#1 } }
{ pipe-failed }
}
-\cs_new_protected:Npn \graphics_read_bb:n #1
+\cs_new_protected:Npn \@@_read_bb:n #1
{
\@@_read_bb_auxi:nnnn {#1} { }
- { \ior_open:Nn \l_@@_tmp_ior {#1} }
+ { \ior_open:Nn \l_@@_internal_ior {#1} }
{ graphic-not-found }
}
% \end{macrocode}
@@ -401,31 +369,23 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_read_bb_auxi:nnnn #1#2#3#4
{
- \graphics_bb_restore:nF {#1#2}
+ \@@_bb_restore:nF {#1#2}
{ \@@_read_bb_auxii:nnnn {#3} {#4} {#1} {#2} }
}
\cs_new_protected:Npx \@@_read_bb_auxii:nnnn #1#2#3#4
{
#1
- \exp_not:N \ior_if_eof:NTF \exp_not:N \l_@@_tmp_ior
+ \exp_not:N \ior_if_eof:NTF \exp_not:N \l_@@_internal_ior
{ \msg_error:nnn { graphics } {#2} {#3} }
{
- \ior_str_map_inline:Nn \exp_not:N \l_@@_tmp_ior
+ \ior_str_map_inline:Nn \exp_not:N \l_@@_internal_ior
{
\exp_not:N \@@_read_bb_auxiii:w
##1 ~ \c_colon_str \s_@@_stop
}
+ \@@_bb_save:n {#3#4}
}
- \exp_not:n
- {
- \ior_close:N \l_@@_tmp_ior
- \dim_compare:nNnF \l_graphics_llx_dim = { 0pt }
- { \dim_const:cn { c_@@_ #3#4 _llx_dim } { \l_graphics_llx_dim } }
- \dim_compare:nNnF \l_graphics_lly_dim = { 0pt }
- { \dim_const:cn { c_@@_ #3#4 _lly_dim } { \l_graphics_lly_dim } }
- \dim_const:cn { c_@@_ #3#4 _urx_dim } { \l_graphics_urx_dim }
- \dim_const:cn { c_@@_ #3#4 _ury_dim } { \l_graphics_ury_dim }
- }
+ \ior_close:N \exp_not:N \l_@@_internal_ior
}
\use:x
{
@@ -450,13 +410,13 @@
{
\str_if_eq:nnF {#2} { atend }
{
- \tl_set_rescan:Nnx \l_@@_tmp_tl
+ \tl_set_rescan:Nnx \l_@@_internal_tl
{
\char_set_catcode_space:n { 9 }
\char_set_catcode_space:n { 32 }
}
{ \use:n #1 }
- \exp_after:wN \@@_read_bb_auxv:w \l_@@_tmp_tl \s_@@_stop
+ \exp_after:wN \@@_read_bb_auxv:w \l_@@_internal_tl \s_@@_stop
}
}
% \end{macrocode}
@@ -465,10 +425,10 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_read_bb_auxv:w #1~#2~#3~#4~#5 \s_@@_stop
{
- \dim_set:Nn \l_graphics_llx_dim { #1 bp }
- \dim_set:Nn \l_graphics_lly_dim { #2 bp }
- \dim_set:Nn \l_graphics_urx_dim { #3 bp }
- \dim_set:Nn \l_graphics_ury_dim { #4 bp }
+ \dim_set:Nn \l_@@_llx_dim { #1 bp }
+ \dim_set:Nn \l_@@_lly_dim { #2 bp }
+ \dim_set:Nn \l_@@_urx_dim { #3 bp }
+ \dim_set:Nn \l_@@_ury_dim { #4 bp }
\ior_map_break:
}
% \end{macrocode}
@@ -480,20 +440,16 @@
% \end{macro}
% \end{macro}
%
-% \begin{variable}{\l_graphics_draft_bool}
-% Relevant to including graphics but not to reading them.
+% \begin{variable}{\l_@@_final_name_str, \l_@@_full_name_str}
+% The full name is as you'd expect the name including path and extension.
+% The final name here reflects any conversions carried out by the backend,
+% for example if an |.eps| is converted to |.pdf|.
% \begin{macrocode}
-\bool_new:N \l_graphics_draft_bool
+\str_new:N \l_@@_final_name_str
+\str_new:N \l_@@_full_name_str
% \end{macrocode}
% \end{variable}
%
-% \begin{variable}{\l_graphics_name_tl, \l_@@_name_tl}
-% \begin{macrocode}
-\tl_new:N \l_graphics_name_tl
-\tl_new:N \l_@@_name_tl
-% \end{macrocode}
-% \end{variable}
-%
% \begin{variable}{\l_@@_internal_box}
% \begin{macrocode}
\box_new:N \l_@@_internal_box
@@ -515,7 +471,7 @@
% \end{variable}
%
% \begin{variable}{\l_graphics_search_ext_seq}
-% Used to specify fall-back extensions: actually set on a per-driver basis.
+% Used to specify fall-back extensions: actually set on a per-backend basis.
% \begin{macrocode}
\seq_new:N \l_graphics_search_ext_seq
% \end{macrocode}
@@ -536,67 +492,50 @@
% \end{macrocode}
% \end{variable}
%
-% \begin{macro}{\graphics_include:n}
+% \begin{macro}{\graphics_include:nn, \graphics_include:nV}
% \begin{macro}{\@@_include_search:n}
% \begin{macro}{\@@_include:}
-% \begin{macro}{\graphics_include:nn}
% \begin{macro}
% {
-% \@@_include_auxi:n, \@@_include_auxii:n,
+% \@@_include_auxi:n, \@@_include_auxi:e, \@@_include_auxii:n,
% \@@_include_auxiii:n, \@@_include_auxiv:n
% }
% Actually including an graphic is relatively straight-forward: most of the
-% work is done by the driver. We only have to deal with making sure the
+% work is done by the backend. We only have to deal with making sure the
% box has no apparent depth. Where the first given name is not found, we
% search based on extension only if the \meta{type} was not given. The one
% wrinkle is that we may have found a \texttt{.tex} file matching the file
% name stem: that's not what we want, so we have to filter out.
% \begin{macrocode}
-\cs_new_protected:Npn \graphics_include:n #1
+\cs_new_protected:Npn \graphics_include:nn #1#2
{
\group_begin:
+ \keys_set:nn { graphics } {#1}
\seq_set_eq:NN \l_file_search_path_seq \l_graphics_search_path_seq
- \file_get_full_name:nNTF {#1} \l_@@_name_tl
+ \file_get_full_name:nNTF {#2} \l_@@_full_name_str
{
- \str_if_eq:eeTF { \l_@@_name_tl } { #1 .tex }
- { \@@_include_search:n {#1} }
+ \str_if_eq:eeTF { \l_@@_full_name_str } { #2 .tex }
+ { \msg_error:nnn { graphics } { graphic-not-found } {#2} }
{ \@@_include: }
}
- { \@@_include_search:n {#1} }
+ { \msg_error:nnn { graphics } { graphic-not-found } {#2} }
\group_end:
}
-\cs_new_protected:Npn \@@_include_search:n #1
- {
- \seq_map_inline:Nn \l_graphics_search_ext_seq
- {
- \file_get_full_name:nNT { #1 . ##1 } \l_@@_name_tl
- { \seq_map_break:n { \use_i:nnn \@@_include: } }
- }
- \use:n
- { \msg_error:nnn { graphics } { graphic-not-found } {#1} }
- }
+\cs_generate_variant:Nn \graphics_include:nn { nV }
\cs_new_protected:Npn \@@_include:
{
- \file_parse_full_name:VNNN \l_@@_name_tl
- \l_@@_dir_str \l_@@_name_str \l_@@_ext_str
- \exp_args:Ne \@@_include_auxi:n
+ \str_if_empty:NTF \l_@@_type_str
{
- \exp_args:Ne \str_tail:n
- { \str_foldcase:V \l_@@_ext_str }
- }
+ \file_parse_full_name:VNNN \l_@@_full_name_str
+ \l_@@_dir_str \l_@@_name_str \l_@@_ext_str
+ \@@_include_auxi:e
+ {
+ \exp_args:Ne \str_tail:n
+ { \str_foldcase:V \l_@@_ext_str }
+ }
+ }
+ { \@@_include_auxi:e { \l_@@_type_str } }
}
-\cs_new_protected:Npn \graphics_include:nn #1#2
- {
- \group_begin:
- \seq_set_eq:NN \l_file_search_path_seq \l_graphics_search_path_seq
- \file_get_full_name:nNTF {#1} \l_@@_name_tl
- {
- \exp_args:Ne \@@_include_auxi:n
- { \str_foldcase:n {#1} }
- }
- { \msg_error:nnn { graphics } { graphic-not-found } {#1} }
- \group_end:
- }
\cs_new_protected:Npn \@@_include_auxi:n #1
{
\prop_get:NnNF \l_graphics_ext_type_prop { .#1 } \l_@@_internal_tl
@@ -603,20 +542,21 @@
{ \tl_set:Nn \l_@@_internal_tl {#1} }
\exp_args:NV \@@_include_auxii:n \l_@@_internal_tl
}
+\cs_generate_variant:Nn \@@_include_auxi:n { e }
\cs_new_protected:Npn \@@_include_auxii:n #1
{
\mode_leave_vertical:
\cs_if_exist:cTF { @@_backend_include_ #1 :n }
{
- \tl_set_eq:NN \l_graphics_name_tl \l_@@_name_tl
+ \tl_set_eq:NN \l_@@_final_name_str \l_@@_full_name_str
+ \str_set:Nx \l_@@_full_name_str
+ { \exp_args:NV \__kernel_file_name_quote:n \l_@@_full_name_str }
\exp_args:NnV \use:c { @@_backend_getbb_ #1 :n }
- \l_@@_name_tl
- \seq_gput_right:NV \g_@@_record_seq \l_graphics_name_tl
-%<*package>
+ \l_@@_full_name_str
+ \seq_gput_right:NV \g_@@_record_seq \l_@@_final_name_str
\clist_if_exist:NT \@filelist
- { \exp_args:NV \@addtofilelist \l_graphics_name_tl }
-%</package>
- \bool_if:NTF \l_graphics_draft_bool
+ { \exp_args:NV \@addtofilelist \l_@@_final_name_str }
+ \bool_if:NTF \l_@@_draft_bool
{ \@@_include_auxiii:n }
{ \@@_include_auxiv:n }
{#1}
@@ -625,23 +565,21 @@
}
\cs_new_protected:Npn \@@_include_auxiii:n #1
{
- \hbox_to_wd:nn { \l_graphics_urx_dim - \l_graphics_llx_dim }
+ \hbox_to_wd:nn { \l_@@_urx_dim - \l_@@_llx_dim }
{
\tex_vrule:D
\tex_hss:D
\vbox_to_ht:nn
- { \l_graphics_ury_dim - \l_graphics_lly_dim }
+ { \l_@@_ury_dim - \l_@@_lly_dim }
{
\tex_hrule:D width
- \dim_eval:n { \l_graphics_urx_dim - \l_graphics_llx_dim }
+ \dim_eval:n { \l_@@_urx_dim - \l_@@_llx_dim }
\tex_vss:D
\hbox_to_wd:nn
- { \l_graphics_urx_dim - \l_graphics_llx_dim }
+ { \l_@@_urx_dim - \l_@@_llx_dim }
{
-%<*package>
\ttfamily
-%</package>
- \tex_hss:D \l_@@_name_tl \tex_hss:D
+ \tex_hss:D \l_@@_full_name_str \tex_hss:D
}
\tex_vss:D
\tex_hrule:D
@@ -655,13 +593,13 @@
\hbox_set:Nn \l_@@_internal_box
{
\exp_args:NnV \use:c { @@_backend_include_ #1 :n }
- \l_@@_name_tl
+ \l_@@_full_name_str
}
\box_set_dp:Nn \l_@@_internal_box { 0pt }
\box_set_ht:Nn \l_@@_internal_box
- { \l_graphics_ury_dim - \l_graphics_lly_dim }
+ { \l_@@_ury_dim - \l_@@_lly_dim }
\box_set_wd:Nn \l_@@_internal_box
- { \l_graphics_urx_dim - \l_graphics_llx_dim }
+ { \l_@@_urx_dim - \l_@@_llx_dim }
\box_use_drop:N \l_@@_internal_box
}
% \end{macrocode}
@@ -669,7 +607,6 @@
% \end{macro}
% \end{macro}
% \end{macro}
-% \end{macro}
%
% \begin{macro}{\graphics_show_list:, \graphics_log_list:, \@@_list:N}
% \begin{macro}[EXP]{\@@_list_aux:n}
@@ -680,7 +617,7 @@
\cs_new_protected:Npn \@@_list:N #1
{
\seq_remove_duplicates:N \g_@@_record_seq
- #1 { LaTeX/kernel } { file-list }
+ #1 { kernel } { file-list }
{ \seq_map_function:NN \g_@@_record_seq \@@_list_aux:n }
{ } { } { }
}
@@ -689,6 +626,115 @@
% \end{macro}
% \end{macro}
%
+% \subsection{Utility functions}
+%
+% \begin{macro}{\graphics_get_full_name:nN}
+% \begin{macro}[TF]{\graphics_get_full_name:nN}
+% \begin{macro}{\@@_get_full_name:n}
+% A simple search.
+% \begin{macrocode}
+\cs_new_protected:Npn \graphics_get_full_name:nN #1#2
+ {
+ \graphics_get_full_name:nNF {#1} #2
+ { \tl_set:Nn #2 { \q_no_value } }
+ }
+\prg_new_protected_conditional:Npnn \graphics_get_full_name:nN #1#2
+ { T , F , TF }
+ {
+ \group_begin:
+ \seq_set_eq:NN \l_file_search_path_seq \l_graphics_search_path_seq
+ \file_get_full_name:nNTF {#1} \l_@@_full_name_str
+ {
+ \str_if_eq:eeT { \l_@@_full_name_str } { #1 .tex }
+ { \@@_get_full_name:n {#1} }
+ }
+ { \@@_get_full_name:n {#1} }
+ \exp_args:NNNV \group_end:
+ \tl_set:Nn #2 \l_@@_full_name_str
+ \tl_if_empty:NTF #2
+ { \prg_return_false: }
+ { \prg_return_true: }
+ }
+\cs_new_protected:Npn \@@_get_full_name:n #1
+ {
+ \str_clear:N \l_@@_full_name_str
+ \seq_map_inline:Nn \l_graphics_search_ext_seq
+ {
+ \file_get_full_name:nNT { #1 ##1 } \l_@@_full_name_str
+ { \seq_map_break:n { \use_none:nn } }
+ }
+ \use:n
+ { \str_clear:N \l_@@_full_name_str }
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\graphics_get_pagecount:nN}
+% \begin{macro}{\@@_get_pagecount:n}
+% \begin{macro}{\@@_get_pagecount:nw}
+% A generic function to read the number of pages in a graphic file. This is
+% used by all of the backend where there is not a dedicated primitive. The
+% plan is essentially the same as reading the bounding box. To avoid multiple
+% calls, the value is cached either here or in the backend.
+% \begin{macrocode}
+\cs_new_protected:Npn \graphics_get_pagecount:nN #1#2
+ {
+ \group_begin:
+ \seq_set_eq:NN \l_file_search_path_seq \l_graphics_search_path_seq
+ \file_get_full_name:nNTF {#1} \l_@@_full_name_str
+ {
+ \int_if_exist:cF { c_@@_ \l_@@_full_name_str _pages_int }
+ {
+ \exp_args:NV \@@_backend_get_pagecount:n
+ \l_@@_full_name_str
+ }
+ \tl_set:Nv #2 { c_@@_ \l_@@_full_name_str _pages_int }
+ }
+ {
+ \tl_set:Nn #2 { 0 }
+ \msg_error:nnn { graphics } { graphic-not-found } {#1}
+ }
+ \exp_args:NNNV \group_end:
+ \tl_set:Nn #2 #2
+ }
+\cs_new_protected:Npx \@@_get_pagecount:n #1
+ {
+ \ior_shell_open:Nn \exp_not:N \l_@@_internal_ior
+ { extractbb~-O~#1 }
+ \exp_not:N \ior_if_eof:NTF \exp_not:N \l_@@_internal_ior
+ { \msg_error:nnn { graphics } { pipe-failed } }
+ {
+ \ior_str_map_inline:Nn \exp_not:N \l_@@_internal_ior
+ {
+ \exp_not:N \@@_get_pagecount:nw {#1}
+ ##1 ~ \c_colon_str \c_colon_str \s_@@_stop
+ }
+ \exp_not:N \int_if_exist:cF { c_@@_ #1 _pages_int }
+ { \int_const:cn { c_@@_ #1 _pages_int } { 1 } }
+ }
+ \ior_close:N \exp_not:N \l_@@_internal_ior
+ }
+\use:x
+ {
+ \cs_new_protected:Npn \exp_not:N \@@_get_pagecount:nw
+ ##1##2 \c_colon_str ##3 \c_colon_str ##4 \s_@@_stop
+ {
+ \exp_not:N \str_if_eq:nnT
+ { \c_percent_str \c_percent_str Pages }
+ {##2}
+ {
+ \int_const:cn { c_@@_ ##1 _pages_int } {##3}
+ \exp_not:N \ior_map_break:
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
% \subsection{Messages}
%
% \begin{macrocode}
@@ -695,8 +741,8 @@
\msg_new:nnnn { graphics } { graphic-not-found }
{ Image~file~'#1'~not~found. }
{
- LaTeX~tried~to~open~graphic~file~'#1',
- ~but~the~file~could~not~be~read.
+ LaTeX~tried~to~open~graphic~file~'#1',~
+ but~the~file~could~not~be~read.
}
\msg_new:nnnn { graphics } { pipe-failed }
{ Cannot~run~piped~system~commands. }
Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3opacity/l3opacity.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3opacity/l3opacity.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3opacity/l3opacity.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -46,7 +46,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-05}
+% \date{Released 2022-04-10}
%
% \maketitle
%
@@ -97,7 +97,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-\ProvidesExplPackage{l3opacity}{2022-02-05}{}
+\ProvidesExplPackage{l3opacity}{2022-04-10}{}
{L3 Experimental opacity support}
% \end{macrocode}
%
Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -48,7 +48,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-05}
+% \date{Released 2022-04-10}
%
% \maketitle
%
@@ -166,7 +166,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-\ProvidesExplPackage{l3str-format}{2022-02-05}{}
+\ProvidesExplPackage{l3str-format}{2022-04-10}{}
{L3 Experimental string formatting}
% \end{macrocode}
%
Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -46,7 +46,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-05}
+% \date{Released 2022-04-10}
%
% \maketitle
%
@@ -151,7 +151,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-\ProvidesExplPackage{l3sys-shell}{2022-02-05}{}
+\ProvidesExplPackage{l3sys-shell}{2022-04-10}{}
{L3 Experimental system shell functions}
% \end{macrocode}
%
@@ -393,6 +393,8 @@
\seq_set_split:NnV #2 { \char_generate:nn { `\^^M } { 12 } }
\exp_not:N \l_@@_tmp_tl
\seq_pop_right:NN #2 \exp_not:N \l_@@_tmp_tl
+ \exp_not:N \tl_if_blank:eTF { \exp_not:N \seq_item:Nn #2 { 1 } }
+ { \seq_clear:N #2 }
}
}
% \end{macrocode}
Modified: trunk/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -53,7 +53,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-05}
+% \date{Released 2022-04-10}
%
% \maketitle
%
@@ -672,7 +672,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-\ProvidesExplPackage{xcoffins}{2022-02-05}{}
+\ProvidesExplPackage{xcoffins}{2022-04-10}{}
{L3 Experimental design level coffins}
% \end{macrocode}
%
Modified: trunk/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -61,7 +61,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-05}
+% \date{Released 2022-04-10}
%
% \maketitle
%
@@ -686,7 +686,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-\ProvidesExplPackage{l3galley}{2022-02-05}{}
+\ProvidesExplPackage{l3galley}{2022-04-10}{}
{L3 Experimental galley code}
% \end{macrocode}
%
Modified: trunk/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-05}
+% \date{Released 2022-04-10}
%
% \maketitle
%
@@ -731,7 +731,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-\ProvidesExplPackage{xgalley}{2022-02-05}{}
+\ProvidesExplPackage{xgalley}{2022-04-10}{}
{L3 Experimental galley}
\RequirePackage{xtemplate,l3galley}
% \end{macrocode}
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/expl3.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/expl3.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/expl3.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -24,7 +24,7 @@
%
%<*driver|generic|package|2ekernel>
%</driver|generic|package|2ekernel>
-\def\ExplFileDate{2022-02-24}%
+\def\ExplFileDate{2022-04-10}%
%<*driver>
\documentclass[full]{l3doc}
\usepackage{graphicx}
@@ -51,7 +51,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-24}
+% \date{Released 2022-04-10}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-24}
+% \date{Released 2022-04-10}
%
% \maketitle
%
@@ -727,13 +727,6 @@
% \meta{control sequence name} must, when fully expanded, consist of
% character tokens, typically a mixture of category code $10$ (space),
% $11$ (letter) and $12$ (other).
-% \begin{texnote}
-% Protected macros that appear in a \texttt{c}-type argument are
-% expanded despite being protected; \cs{exp_not:n} also has no
-% effect. An internal error occurs if non-characters or active
-% characters remain after full expansion, as the conversion to a
-% control sequence is not possible.
-% \end{texnote}
% \end{function}
%
% As an example of the \cs{use:c} function, both
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-24}
+% \date{Released 2022-04-10}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3box.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3box.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3box.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-24}
+% \date{Released 2022-04-10}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-24}
+% \date{Released 2022-04-10}
%
% \maketitle
%
@@ -596,7 +596,7 @@
%
% \begin{function}[added = 2018-04-01]{\tl_build_get:NN}
% \begin{syntax}
-% \cs{tl_build_get:N} \meta{tl~var_1} \meta{tl~var_2}
+% \cs{tl_build_get:NN} \meta{tl~var_1} \meta{tl~var_2}
% \end{syntax}
% Stores the contents of the \meta{tl~var_1} in the \meta{tl~var_2}.
% The \meta{tl~var_1} must have been set up with \cs{tl_build_begin:N}
@@ -1415,7 +1415,7 @@
\tl_if_in:nnTF {#1} { " }
{
\msg_error:nnx
- { ior } { quote-in-shell } {#1}
+ { kernel } { quote-in-shell } {#1}
}
{ \__kernel_ior_open:Nn #2 { |#1 } }
}
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3cctab.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3cctab.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3cctab.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-24}
+% \date{Released 2022-04-10}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-24}
+% \date{Released 2022-04-10}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-24}
+% \date{Released 2022-04-10}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3color.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3color.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3color.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-24}
+% \date{Released 2022-04-10}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3debug.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3debug.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3debug.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-24}
+% \date{Released 2022-04-10}
%
% \maketitle
%
@@ -1015,7 +1015,7 @@
{ \__kernel_debug_log:x { Defining~key~#1~\msg_line_context: } }
}
{ }
- { \@@_cmd_set:nn }
+ { \@@_cmd_set_direct:nn }
%<@@=msg>
\__kernel_patch:nnn
{ }
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-24}
+% \date{Released 2022-04-10}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -85,7 +85,7 @@
% require you to do updates, if the class changes.}}
%
% \author{\Team}
-% \date{Released 2022-02-24}
+% \date{Released 2022-04-10}
% \maketitle
% \tableofcontents
%
@@ -361,17 +361,22 @@
% \subsection{Describing functions in the documentation}
%
% \DescribeEnv{function}
+% \DescribeEnv{variable}
+% Two heavily-used environments are defined to describe \pkg{expl3} functions
+% and variables. If describing a variable, use the latter environment; it
+% behaves identically to the \env{function} environment.
% \DescribeEnv{syntax}
-% Two heavily-used environments are defined to describe the syntax of
-% \pkg{expl3} functions and variables.
+% Both of the above environments are typically combined with the \env{syntax}
+% environment, to describe their syntax.
% \begin{framed}
% \vspace{-\baselineskip}
% \begin{verbatim}
-% \begin{function}{\function_one:, \function_two:}
+% \begin{function}{\package_function_one:N, \package_function_two:n}
% \begin{syntax}
-% |\foo_bar:| \Arg{meta} \meta{test_1}
+% \cs{package_function_one:N} \meta{cs}
+% \cs{package_function_two:n} \marg{Argument}
% \end{syntax}
-% \meta{description}
+% Descriptive text here ...
% \end{function}
% \end{verbatim}
% \hrulefill
@@ -378,29 +383,38 @@
% \par
% \hspace*{0.25\textwidth}
% \begin{minipage}{0.5\textwidth}
-% \begin{function}{\function_one:, \function_two:}
+% \begin{function}{\package_function_one:N, \package_function_two:n}
% \begin{syntax}
-% |\foo_bar:| \Arg{meta} \meta{test_1}
+% \cs[no-index]{package_function_one:N} \meta{cs}
+% \cs[no-index]{package_function_two:n} \marg{Argument}
% \end{syntax}
-% \meta{description}
+% \emph{Descriptive text here …}
% \end{function}
% \end{minipage}
% \end{framed}
%
% Function environments take an optional argument to indicate whether
-% the function(s) it describes are expandable or restricted-expandable
-% or defined in conditional forms. Use |EXP|, |rEXP|, |TF|, |pTF|, or |noTF| for
-% this; note that |pTF| implies |EXP| since predicates must always be
-% expandable, and that |noTF| means that the function without |TF|
-% should be documented in addition to |TF|. As an example:
+% the function(s) it describes are expandable (use |EXP|) or
+% restricted-expandable (use |rEXP|) or defined in conditional forms
+% (use |TF|, |pTF|, or |noTF|). Note that |pTF| implies |EXP| since
+% predicates must always be expandable, and that |noTF| means that the
+% function without |TF| should be documented in addition to |TF|. For
+% the conditional forms |TF| and |pTF|, the argument of the
+% \env{function} environment is \emph{not} in fact a command that
+% exists: in the example below, \cs[no-index]{tl_if_empty:N} does not
+% exist, but its conditional forms \cs{tl_if_empty:NT},
+% \cs{tl_if_empty:NF}, \cs{tl_if_empty:NTF} and predicate form
+% \cs{tl_if_empty_p:N} exist:
% \begin{framed}
% \vspace{-\baselineskip}
% \begin{verbatim}
-% \begin{function}[pTF]{\cs_if_exist:N}
+% \begin{function}[pTF]{\tl_if_empty:N, \tl_if_empty:c}
% \begin{syntax}
-% \cs{cs_if_exist_p:N} \meta{cs}
+% \cs{tl_if_empty_p:N} \meta{tl~var}
+% \cs{tl_if_empty:NTF} \meta{tl~var} \Arg{true code} \Arg{false code}
% \end{syntax}
-% \meta{description}
+% Tests if the \meta{token list variable} is entirely empty
+% (\emph{i.e.}~contains no tokens at all).
% \end{function}
% \end{verbatim}
% \hrulefill
@@ -407,23 +421,21 @@
% \par
% \hspace*{0.25\textwidth}
% \begin{minipage}{0.5\textwidth}
-% \begin{function}[pTF]{\cs_if_exist:N}
+% \begin{function}[pTF]{\tl_if_empty:N, \tl_if_empty:c}
% \begin{syntax}
-% \cs{cs_if_exist_p:N} \meta{cs}
+% \cs{tl_if_empty_p:N} \meta{tl~var}
+% \cs{tl_if_empty:NTF} \meta{tl~var} \Arg{true code} \Arg{false code}
% \end{syntax}
-% \meta{description}
+% Tests if the \meta{token list variable} is entirely empty
+% (\emph{i.e.}~contains no tokens at all).
% \end{function}
% \end{minipage}
% \end{framed}
%
-% \DescribeEnv{variable}
-% If you are documenting a variable instead of a function, use the
-% \env{variable} environment instead; it behaves identically to the
-% \env{function} environment above.
-%
% \DescribeEnv{texnote}
% This environment is used to call out sections within \env{function}
-% and similar that are only of interest to seasoned \TeX{} developers.
+% and similar environments that are only of interest to seasoned
+% \TeX{} developers.
%
% \subsection{Describing functions in the implementation}
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -63,7 +63,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-24}
+% \date{Released 2022-04-10}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-24}
+% \date{Released 2022-04-10}
%
% \maketitle
%
@@ -331,13 +331,6 @@
%
% The |:cc| variant constructs the \meta{function} name in the same
% manner as described for the \meta{tokens}.
-% \begin{texnote}
-% Protected macros that appear in a \texttt{c}-type argument are
-% expanded despite being protected; \cs{exp_not:n} also has no
-% effect. An internal error occurs if non-characters or active
-% characters remain after full expansion, as the conversion to a
-% control sequence is not possible.
-% \end{texnote}
% \end{function}
%
% \begin{function}[EXP]{\exp_args:No}
@@ -374,13 +367,6 @@
% recovered and placed inside braces into the input stream \emph{after}
% reinsertion of the \meta{function}. Thus the \meta{function} may take more
% than one argument: all others are left unchanged.
-% \begin{texnote}
-% Protected macros that appear in a \texttt{v}-type argument are
-% expanded despite being protected; \cs{exp_not:n} also has no
-% effect. An internal error occurs if non-characters or active
-% characters remain after full expansion, as the conversion to a
-% control sequence is not possible.
-% \end{texnote}
% \end{function}
%
% \begin{function}[EXP, added = 2018-05-15]{\exp_args:Ne}
@@ -683,13 +669,6 @@
% converts this into a control sequence.
% Further expansion of this control sequence is then inhibited using
% \cs{exp_not:N}.
-% \begin{texnote}
-% Protected macros that appear in a \texttt{c}-type argument are
-% expanded despite being protected; \cs{exp_not:n} also has no
-% effect. An internal error occurs if non-characters or active
-% characters remain after full expansion, as the conversion to a
-% control sequence is not possible.
-% \end{texnote}
% \end{function}
%
% \begin{function}[EXP]{\exp_not:n}
@@ -736,13 +715,6 @@
% name.
% The content of the \meta{variable} is recovered, and further
% expansion in |x|-type or \texttt{e}-type arguments is prevented using \cs{exp_not:n}.
-% \begin{texnote}
-% Protected macros that appear in a \texttt{v}-type argument are
-% expanded despite being protected; \cs{exp_not:n} also has no
-% effect. An internal error occurs if non-characters or active
-% characters remain after full expansion, as the conversion to a
-% control sequence is not possible.
-% \end{texnote}
% \end{function}
%
% \begin{function}[EXP]{\exp_not:e}
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3file.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3file.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3file.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-24}
+% \date{Released 2022-04-10}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-24}
+% \date{Released 2022-04-10}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -40,7 +40,7 @@
% {latex-team at latex-project.org}^^A
% }^^A
% }
-% \date{Released 2022-02-24}
+% \date{Released 2022-04-10}
% \maketitle
%
% \begin{documentation}
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-24}
+% \date{Released 2022-04-10}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -40,7 +40,7 @@
% {latex-team at latex-project.org}^^A
% }^^A
% }
-% \date{Released 2022-02-24}
+% \date{Released 2022-04-10}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-24}
+% \date{Released 2022-04-10}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -40,7 +40,7 @@
% {latex-team at latex-project.org}^^A
% }^^A
% }
-% \date{Released 2022-02-24}
+% \date{Released 2022-04-10}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -40,7 +40,7 @@
% {latex-team at latex-project.org}^^A
% }^^A
% }
-% \date{Released 2022-02-24}
+% \date{Released 2022-04-10}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -40,7 +40,7 @@
% {latex-team at latex-project.org}^^A
% }^^A
% }
-% \date{Released 2022-02-24}
+% \date{Released 2022-04-10}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -40,7 +40,7 @@
% {latex-team at latex-project.org}^^A
% }^^A
% }
-% \date{Released 2022-02-24}
+% \date{Released 2022-04-10}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -40,7 +40,7 @@
% {latex-team at latex-project.org}^^A
% }^^A
% }
-% \date{Released 2022-02-24}
+% \date{Released 2022-04-10}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-24}
+% \date{Released 2022-04-10}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -40,7 +40,7 @@
% {latex-team at latex-project.org}^^A
% }^^A
% }
-% \date{Released 2022-02-24}
+% \date{Released 2022-04-10}
% \maketitle
%
% \begin{documentation}
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -40,7 +40,7 @@
% {latex-team at latex-project.org}^^A
% }^^A
% }
-% \date{Released 2022-02-24}
+% \date{Released 2022-04-10}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -49,7 +49,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-24}
+% \date{Released 2022-04-10}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-24}
+% \date{Released 2022-04-10}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3int.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3int.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3int.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-24}
+% \date{Released 2022-04-10}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-24}
+% \date{Released 2022-04-10}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-24}
+% \date{Released 2022-04-10}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-24}
+% \date{Released 2022-04-10}
%
% \maketitle
%
@@ -882,6 +882,18 @@
% group and are thus never set.
% \end{function}
%
+% \section{Digesting keys}
+%
+% \begin{function}[added = 2022-03-09]{\keys_precompile:nnN}
+% \begin{syntax}
+% \cs{keys_precompile:nnN} \Arg{module} \Arg{keyval list} \meta{tl}
+% \end{syntax}
+% Parses the \meta{keyval list} as for \cs{keys_set:nn}, placing the
+% resulting code for those which set variables or functions into the
+% \meta{tl}. Thus this function \enquote{precompiles} the keyval list into
+% a set of results which can be applied rapidly.
+% \end{function}
+%
% \section{Utility functions for keys}
%
% \begin{function}[EXP, pTF, updated = 2022-01-10]
@@ -1661,6 +1673,14 @@
% \end{macrocode}
% \end{variable}
%
+% \begin{variable}{\l_@@_precompile_bool, \l_@@_precompile_tl}
+% For digesting keys.
+% \begin{macrocode}
+\bool_new:N \l_@@_precompile_bool
+\tl_new:N \l_@@_precompile_tl
+% \end{macrocode}
+% \end{variable}
+%
% \begin{variable}{\l_keys_usage_load_prop, \l_keys_usage_preamble_prop}
% Global data for document-level information.
% \begin{macrocode}
@@ -1694,6 +1714,19 @@
% \end{macrocode}
% \end{macro}
%
+% \begin{macro}{\@@_precompile:n}
+% An auxiliary to allow cleaner showing of code.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_precompile:n #1
+ {
+ \bool_if:NTF \l_@@_precompile_bool
+ { \tl_put_right:Nn \l_@@_precompile_tl }
+ { \use:n }
+ {#1}
+ }
+% \end{macrocode}
+% \end{macro}
+%
% \subsection{The key defining mechanism}
%
% \begin{macro}{\keys_define:nn}
@@ -1866,7 +1899,7 @@
{ \exp_not:c { bool_ #2 set_ #3 :N } \exp_not:N #1 }
\@@_cmd_set:nx { \l_keys_path_str / false }
{ \exp_not:c { bool_ #2 set_ #4 :N } \exp_not:N #1 }
- \@@_cmd_set:nn { \l_keys_path_str / unknown }
+ \@@_cmd_set_direct:nn { \l_keys_path_str / unknown }
{
\msg_error:nnx { keys } { boolean-values-only }
\l_keys_key_str
@@ -1909,8 +1942,8 @@
{
\cs_set_nopar:cpn { \c_@@_type_root_str \l_keys_path_str }
{ choice }
- \@@_cmd_set:nn \l_keys_path_str { #1 {##1} }
- \@@_cmd_set:nn { \l_keys_path_str / unknown }
+ \@@_cmd_set_direct:nn \l_keys_path_str { #1 {##1} }
+ \@@_cmd_set_direct:nn { \l_keys_path_str / unknown }
{
\msg_error:nnxx { keys } { choice-unknown }
\l_keys_path_str {##1}
@@ -1952,13 +1985,18 @@
% \end{macro}
%
% \begin{macro}
-% {\@@_cmd_set:nn, \@@_cmd_set:nx, \@@_cmd_set:Vn, \@@_cmd_set:Vo}
+% {
+% \@@_cmd_set:nn, \@@_cmd_set:nx, \@@_cmd_set:Vn, \@@_cmd_set:Vo,
+% \@@_cmd_set_direct:nn
+% }
% Setting the code for a key first logs if appropriate that we are
% defining a new key, then saves the code.
% \begin{macrocode}
\cs_new_protected:Npn \@@_cmd_set:nn #1#2
+ { \@@_cmd_set_direct:nn {#1} { \@@_precompile:n {#2} } }
+\cs_generate_variant:Nn \@@_cmd_set:nn { nx , Vn , Vo }
+\cs_new_protected:Npn \@@_cmd_set_direct:nn #1#2
{ \cs_set_protected:cpn { \c_@@_code_root_str #1 } ##1 {#2} }
-\cs_generate_variant:Nn \@@_cmd_set:nn { nx , Vn , Vo }
% \end{macrocode}
% \end{macro}
%
@@ -1970,7 +2008,10 @@
\cs_new_protected:Npn \@@_cs_set:NNpn #1#2#3#
{
\cs_set_protected:cpx { \c_@@_code_root_str \l_keys_path_str } ##1
- { #1 \exp_not:N #2 \exp_not:n {#3} {##1} }
+ {
+ \@@_precompile:n
+ { #1 \exp_not:N #2 \exp_not:n {#3} {##1} }
+ }
\use_none:n
}
\cs_generate_variant:Nn \@@_cs_set:NNpn { Nc }
@@ -2089,13 +2130,17 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_meta_make:n #1
{
- \@@_cmd_set:Vo \l_keys_path_str
+ \exp_args:NVo \@@_cmd_set_direct:nn \l_keys_path_str
{
- \exp_after:wN \keys_set:nn \exp_after:wN { \l_@@_module_str } {#1}
+ \exp_after:wN \keys_set:nn \exp_after:wN
+ { \l_@@_module_str } {#1}
}
}
\cs_new_protected:Npn \@@_meta_make:nn #1#2
- { \@@_cmd_set:Vn \l_keys_path_str { \keys_set:nn {#1} {#2} } }
+ {
+ \exp_args:NV \@@_cmd_set_direct:nn
+ \l_keys_path_str { \keys_set:nn {#1} {#2} }
+ }
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -2895,6 +2940,20 @@
% \end{macro}
% \end{macro}
%
+% \begin{macro}{\keys_precompile:nnN}
+% A simple wrapper.
+% \begin{macrocode}
+\cs_new_protected:Npn \keys_precompile:nnN #1#2#3
+ {
+ \bool_set_true:N \l_@@_precompile_bool
+ \tl_clear:N \l_@@_precompile_tl
+ \keys_set:nn {#1} {#2}
+ \bool_set_false:N \l_@@_precompile_bool
+ \tl_set_eq:NN #3 \l_@@_precompile_tl
+ }
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macro}{\@@_set_keyval:n, \@@_set_keyval:nn}
% \begin{macro}{\@@_set_keyval:nnn, \@@_set_keyval:onn}
% \begin{macro}{\@@_find_key_module:wNN}
@@ -3379,7 +3438,11 @@
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\keys_show:nn, \keys_log:nn, \@@_show:Nnn}
+% \begin{macro}{\keys_show:nn, \keys_log:nn}
+% \begin{macro}{\@@_show:Nnn}
+% \begin{macro}{\@@_show:n}
+% \begin{macro}{\@@_show:w}
+% \begin{macro}{\@@_show:Nw}
% To show a key, show its code using a message.
% \begin{macrocode}
\cs_new_protected:Npn \keys_show:nn
@@ -3395,10 +3458,13 @@
{
\exp_args:Nnf \msg_show_item_unbraced:nn { code }
{
- \exp_args:Nc \cs_replacement_spec:N
+ \exp_args:Ne \@@_show:n
{
- \c_@@_code_root_str
- \@@_trim_spaces:n { #2 / #3 }
+ \exp_args:Nc \cs_replacement_spec:N
+ {
+ \c_@@_code_root_str
+ \@@_trim_spaces:n { #2 / #3 }
+ }
}
}
}
@@ -3405,8 +3471,39 @@
}
{ } { }
}
+\cs_new:Npx \@@_show:n #1
+ {
+ \exp_not:N \@@_show:w
+ #1
+ \tl_to_str:n { \@@_precompile:n }
+ #1
+ \tl_to_str:n { \@@_precompile:n }
+ \exp_not:N \s_@@_stop
+ }
+\use:x
+ {
+ \cs_new:Npn \exp_not:N \@@_show:w
+ ##1 \tl_to_str:n { \@@_precompile:n }
+ ##2 \tl_to_str:n { \@@_precompile:n }
+ ##3 \exp_not:N \s_@@_stop
+ }
+ {
+ \tl_if_blank:nTF {#2}
+ {#1}
+ { \@@_show:Nw #2 \s_@@_stop }
+ }
+\use:x
+ {
+ \cs_new:Npn \exp_not:N \@@_show:Nw ##1##2
+ \c_right_brace_str \exp_not:N \s_@@_stop
+ }
+ {#2}
% \end{macrocode}
% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
%
% \subsection{Messages}
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-24}
+% \date{Released 2022-04-10}
%
% \maketitle
%
@@ -100,15 +100,19 @@
% \end{macrocode}
%
% \begin{macro}[EXP,pTF]{\legacy_if:n}
-% A friendly wrapper.
+% A friendly wrapper. We need to use the \cs{if:w} approach here, rather than
+% testing against \tn{iftrue}/\tn{iffalse} as the latter approach fails for
+% primitive conditionals such as \tn{ifmmode}. The \cs{reverse_if:N} here
+% means that we get a slightly more useful error if the name is undefined.
% \begin{macrocode}
\prg_new_conditional:Npnn \legacy_if:n #1 { p , T , F , TF }
{
- \exp_args:Nc \if_meaning:w { if#1 } \iftrue
+ \exp_after:wN \reverse_if:N
+ \cs:w if#1 \cs_end:
+ \prg_return_false:
+ \else:
\prg_return_true:
- \else:
- \prg_return_false:
- \fi:
+ \fi:
}
% \end{macrocode}
% \end{macro}
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-24}
+% \date{Released 2022-04-10}
%
% \maketitle
%
@@ -317,6 +317,7 @@
local scan_keyword = token.scan_keyword
local put_next = token.put_next
local token_create = token.create
+local token_new = token.new
% \end{macrocode}
%
% Since token.create only returns useful values after the tokens
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-24}
+% \date{Released 2022-04-10}
%
% \maketitle
%
@@ -1854,9 +1854,7 @@
{ Cannot~generate~null~char~as~a~space. }
\msg_new:nnn { char } { out-of-range }
{ Charcode~requested~out~of~engine~range. }
-\msg_new:nnn { char } { space }
- { Cannot~generate~space~chars. }
-\msg_new:nnnn { ior } { quote-in-shell }
+\msg_new:nnnn { kernel } { quote-in-shell }
{ Quotes~in~shell~command~'#1'. }
{ Shell~commands~cannot~contain~quotes~("). }
\msg_new:nnnn { keys } { no-property }
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3names.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3names.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3names.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-24}
+% \date{Released 2022-04-10}
%
% \maketitle
%
@@ -1140,6 +1140,7 @@
\@@_primitive:NN \kcatcode \tex_kcatcode:D
\@@_primitive:NN \kuten \tex_kuten:D
\@@_primitive:NN \lastnodechar \tex_lastnodechar:D
+ \@@_primitive:NN \lastnodefont \tex_lastnodefont:D
\@@_primitive:NN \lastnodesubtype \tex_lastnodesubtype:D
\@@_primitive:NN \noautospacing \tex_noautospacing:D
\@@_primitive:NN \noautoxspacing \tex_noautoxspacing:D
@@ -1146,6 +1147,7 @@
\@@_primitive:NN \pagefistretch \tex_pagefistretch:D
\@@_primitive:NN \postbreakpenalty \tex_postbreakpenalty:D
\@@_primitive:NN \prebreakpenalty \tex_prebreakpenalty:D
+ \@@_primitive:NN \ptexlineendmode \tex_lineendmode:D
\@@_primitive:NN \ptexminorversion \tex_ptexminorversion:D
\@@_primitive:NN \ptexrevision \tex_ptexrevision:D
\@@_primitive:NN \ptexversion \tex_ptexversion:D
@@ -1161,6 +1163,8 @@
\@@_primitive:NN \textbaselineshiftfactor
\tex_textbaselineshiftfactor:D
\@@_primitive:NN \tfont \tex_tfont:D
+ \@@_primitive:NN \toucs \tex_toucs:D
+ \@@_primitive:NN \ucs \tex_ucs:D
\@@_primitive:NN \xkanjiskip \tex_xkanjiskip:D
\@@_primitive:NN \xspcode \tex_xspcode:D
\@@_primitive:NN \ybaselineshift \tex_ybaselineshift:D
@@ -1176,7 +1180,6 @@
\@@_primitive:NN \kchar \tex_kchar:D
\@@_primitive:NN \kchardef \tex_kchardef:D
\@@_primitive:NN \kuten \tex_kuten:D
- \@@_primitive:NN \ucs \tex_ucs:D
\@@_primitive:NN \uptexrevision \tex_uptexrevision:D
\@@_primitive:NN \uptexversion \tex_uptexversion:D
% \end{macrocode}
@@ -1195,6 +1198,7 @@
% \begin{macrocode}
\@@_primitive:NN \partokencontext \tex_partokencontext:D
\@@_primitive:NN \partokenname \tex_partokenname:D
+ \@@_primitive:NN \showstream \tex_showstream:D
\@@_primitive:NN \tracingstacklevels \tex_tracingstacklevels:D
% \end{macrocode}
% End of the \enquote{just the names} part of the source.
@@ -1470,9 +1474,9 @@
% Here \enquote{smaller} refers to codepoint order which does not correspond to
% the user expected order for most non-ASCII strings.
% \begin{macrocode}
-local minus_tok = token.new(string.byte'-', 12)
-local zero_tok = token.new(string.byte'0', 12)
-local one_tok = token.new(string.byte'1', 12)
+local minus_tok = token_new(string.byte'-', 12)
+local zero_tok = token_new(string.byte'0', 12)
+local one_tok = token_new(string.byte'1', 12)
luacmd('tex_strcmp:D', function()
local first = scan_string()
local second = scan_string()
@@ -1487,14 +1491,19 @@
%
% \begin{macro}{\tex_Ucharcat:D}
% Creating arbitrary chars using |tex.cprint|.
-% The alternative approach using |token.put_next(token.create(...))|
-% would be about 10\% slower.
+% The alternative approach using |token.new(...)| is about 10\% slower
+% but needed to create arbitrary space tokens.
% \begin{macrocode}
+local sprint = tex.sprint
local cprint = tex.cprint
luacmd('tex_Ucharcat:D', function()
local charcode = scan_int()
local catcode = scan_int()
- cprint(catcode, utf8_char(charcode))
+ if catcode == 10 then
+ sprint(token_new(charcode, 10))
+ else
+ cprint(catcode, utf8_char(charcode))
+ end
end, 'global')
% \end{macrocode}
% \end{macro}
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3pdf.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3pdf.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3pdf.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-24}
+% \date{Released 2022-04-10}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-24}
+% \date{Released 2022-04-10}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-24}
+% \date{Released 2022-04-10}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-24}
+% \date{Released 2022-04-10}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-24}
+% \date{Released 2022-04-10}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-24}
+% \date{Released 2022-04-10}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-24}
+% \date{Released 2022-04-10}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-24}
+% \date{Released 2022-04-10}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-24}
+% \date{Released 2022-04-10}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3str.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3str.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3str.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-24}
+% \date{Released 2022-04-10}
%
% \maketitle
%
@@ -222,8 +222,8 @@
%
% \section{String conditionals}
%
-% \begin{function}[EXP,pTF, added = 2015-09-18]
-% {\str_if_empty:N, \str_if_empty:c}
+% \begin{function}[EXP,pTF, added = 2015-09-18, updated = 2022-03-21]
+% {\str_if_empty:N, \str_if_empty:c, \str_if_empty:n}
% \begin{syntax}
% \cs{str_if_empty_p:N} \meta{str~var}
% \cs{str_if_empty:NTF} \meta{str~var} \Arg{true code} \Arg{false code}
@@ -282,8 +282,8 @@
% tests whether \meta{string_2} is found inside \meta{string_1}.
% \end{function}
%
-% \begin{function}[added = 2013-07-24, updated = 2015-02-28, EXP, noTF]
-% {\str_case:nn, \str_case:Vn, \str_case:on, \str_case:nV, \str_case:nv}
+% \begin{function}[added = 2013-07-24, updated = 2022-03-21, EXP, noTF]
+% {\str_case:nn, \str_case:Vn, \str_case:Nn, \str_case:on, \str_case:nV, \str_case:nv}
% \begin{syntax}
% \cs{str_case:nnTF} \Arg{test string} \\
% ~~|{| \\
@@ -747,16 +747,6 @@
% correctly deal with context-dependence and other factors appropriate
% to text case changing.
% \end{itemize}
-%
-% \begin{texnote}
-% As with all \pkg{expl3} functions, the input supported by
-% \cs{str_foldcase:n} is \emph{engine-native} characters which are or
-% interoperate with \textsc{utf-8}. As such, when used with \pdfTeX{}
-% \emph{only} the Latin alphabet characters A--Z are case-folded
-% (\emph{i.e.}~the \textsc{ascii} range which coincides with
-% \textsc{utf-8}). Full \textsc{utf-8} support is available with both
-% \XeTeX{} and \LuaTeX{}.
-% \end{texnote}
% \end{function}
%
% \begin{function}[EXP, added = 2019-11-26]
@@ -789,18 +779,6 @@
% a language-insensitive process, there is no special treatment of
% Turkic input (\emph{i.e.}~\texttt{I} always folds to \texttt{i} and
% not to \texttt{\i}).
-%
-% \begin{texnote}
-% As with all \pkg{expl3} functions, the input supported by
-% \cs{str_foldcase:n} is \emph{engine-native} characters which are or
-% interoperate with \textsc{utf-8}. As such, when used with \pdfTeX{}
-% \emph{only} the Latin alphabet characters A--Z are case-folded
-% (\emph{i.e.}~the \textsc{ascii} range which coincides with
-% \textsc{utf-8}). Full \textsc{utf-8} support is available with both
-% \XeTeX{} and \LuaTeX{}, subject only to the fact that \XeTeX{} in
-% particular has issues with characters of code above hexadecimal
-% $0\mathrm{xFFFF}$ when interacting with \cs{tl_to_str:n}.
-% \end{texnote}
% \end{function}
%
% \section{Viewing strings}
@@ -1113,7 +1091,7 @@
%
% \begin{macro}[pTF, EXP]
% {
-% \str_if_empty:N, \str_if_empty:c,
+% \str_if_empty:N, \str_if_empty:c, \str_if_empty:n,
% \str_if_exist:N, \str_if_exist:c
% }
% More copy-paste!
@@ -1126,6 +1104,8 @@
{ p , T , F , TF }
\prg_new_eq_conditional:NNn \str_if_empty:c \tl_if_empty:c
{ p , T , F , TF }
+\prg_new_eq_conditional:NNn \str_if_empty:n \tl_if_empty:n
+ { p , T , F , TF }
% \end{macrocode}
% \end{macro}
%
@@ -1224,7 +1204,7 @@
% \end{macro}
%
% \begin{macro}[EXP, noTF]
-% {\str_case:nn, \str_case:Vn, \str_case:on, \str_case:nV, \str_case:nv, \str_case_e:nn}
+% {\str_case:nn, \str_case:Vn, \str_case:Nn, \str_case:on, \str_case:nV, \str_case:nv, \str_case_e:nn}
% \begin{macro}[EXP]{\@@_case:nnTF, \@@_case_e:nnTF}
% \begin{macro}[EXP]
% {\@@_case:nw, \@@_case_e:nw, \@@_case_end:nw}
@@ -1254,6 +1234,10 @@
\cs_new:Npn \@@_case:nnTF #1#2#3#4
{ \@@_case:nw {#1} #2 {#1} { } \s_@@_mark {#3} \s_@@_mark {#4} \s_@@_stop }
\cs_generate_variant:Nn \str_case:nn { V , o , nV , nv }
+\cs_new_eq:NN \str_case:Nn \str_case:Vn
+\cs_new_eq:NN \str_case:NnT \str_case:VnT
+\cs_new_eq:NN \str_case:NnF \str_case:VnF
+\cs_new_eq:NN \str_case:NnTF \str_case:VnTF
\prg_generate_conditional_variant:Nnn \str_case:nn
{ V , o , nV , nv } { T , F , TF }
\cs_new:Npn \@@_case:nw #1#2#3
@@ -1918,10 +1902,21 @@
% \begin{macro}[EXP]{\@@_change_case_loop:nw}
% \begin{macro}[EXP]{\@@_change_case_space:n}
% \begin{macro}[EXP]{\@@_change_case_char:nN}
+% \begin{macro}[EXP]{\@@_change_case_char_UTFviii:nNN}
+% \begin{macro}[EXP]{\@@_change_case_char_UTFviii:nNNN}
+% \begin{macro}[EXP]{\@@_change_case_char_UTFviii:nNNNN}
+% \begin{macro}[EXP]
+% {
+% \@@_change_case_char_UTFviii:nn ,
+% \@@_change_case_char_UTFviii_lower:nn ,
+% \@@_change_case_char_UTFviii_upper:nn ,
+% \@@_change_case_char_UTFviii_fold:nn
+% }
% Case changing for programmatic reasons is done by first detokenizing
% input then doing a simple loop that only has to worry about spaces
% and everything else. The output is detokenized to allow data sharing
-% with text-based case changing.
+% with text-based case changing. Similarly, for $8$-bit engines the
+% multi-byte information is shared.
% \begin{macrocode}
\cs_new:Npn \str_foldcase:n #1 { \@@_change_case:nn {#1} { fold } }
\cs_new:Npn \str_lowercase:n #1 { \@@_change_case:nn {#1} { lower } }
@@ -1965,7 +1960,96 @@
{ \use:c { char_str_ #1 case:N } #2 }
\@@_change_case_loop:nw {#1}
}
+\if_int_compare:w 0
+ \cs_if_exist:NT \tex_XeTeXversion:D { 1 }
+ \cs_if_exist:NT \tex_luatexversion:D { 1 }
+ > 0 \exp_stop_f:
+\else:
+ \cs_gset:Npn \@@_change_case_char:nN #1#2
+ {
+ \@@_if_recursion_tail_stop_do:Nn #2
+ { \@@_change_case_end:wn }
+ \int_compare:nNnTF { `#2 } > { "80 }
+ {
+ \int_compare:nNnTF { `#2 } < { "E0 }
+ { \@@_change_case_char_UTFviii:nNN }
+ {
+ \int_compare:nNnTF { `#2 } < { "F0 }
+ { \@@_change_case_char_UTFviii:nNNN }
+ { \@@_change_case_char_UTFviii:nNNNN }
+ }
+ {#1} #2
+ }
+ {
+ \@@_change_case_output:fw
+ { \use:c { char_str_ #1 case:N } #2 }
+ \@@_change_case_loop:nw {#1}
+ }
+ }
+ \cs_new:Npn \@@_change_case_char_UTFviii:nNN #1#2#3
+ { \@@_change_case_char_UTFviii:nn {#1} {#2#3} }
+ \cs_new:Npn \@@_change_case_char_UTFviii:nNNN #1#2#3#4
+ { \@@_change_case_char_UTFviii:nn {#1} {#2#3#4} }
+ \cs_new:Npn \@@_change_case_char_UTFviii:nNNNN #1#2#3#4#5
+ { \@@_change_case_char_UTFviii:nn {#1} {#2#3#4#5} }
% \end{macrocode}
+% Skip high chars for the Japanese engines.
+% \begin{macrocode}
+ \cs_if_exist:NF \tex_pdftexversion:D
+ {
+ \cs_gset:Npn \@@_change_case_char_UTFviii:nNNN #1#2#3#4
+ {
+ \@@_change_case_output:nw {#2#3#4}
+ \@@_change_case_loop:nw {#1}
+ }
+ \cs_gset:Npn \@@_change_case_char_UTFviii:nNNNN #1#2#3#4#5
+ {
+ \@@_change_case_output:nw {#2#3#4#5}
+ \@@_change_case_loop:nw {#1}
+ }
+ }
+ \cs_new:Npn \@@_change_case_char_UTFviii:nn #1#2
+ {
+ \use:c { @@_change_case_char_UTFviii_ #1 :nn } {#1} {#2}
+ }
+ \cs_new:Npn \@@_change_case_char_UTFviii_upper:nn #1#2
+ {
+ \@@_change_case_output:fw
+ {
+ \cs_if_exist:cTF { c__kernel_ #1 case_ #2 _tl }
+ {
+ \__kernel_tl_to_str:w \exp_after:wN \exp_after:wN \exp_after:wN
+ { \cs:w c__kernel_ #1 case_ #2 _tl \cs_end: }
+ }
+ {#2}
+ }
+ \@@_change_case_loop:nw {#1}
+ }
+ \cs_new_eq:NN \@@_change_case_char_UTFviii_lower:nn
+ \@@_change_case_char_UTFviii_upper:nn
+ \cs_new:Npn \@@_change_case_char_UTFviii_fold:nn #1#2
+ {
+ \@@_change_case_output:fw
+ {
+ \cs_if_exist:cTF { c__kernel_ #1 case_ #2 _tl }
+ {
+ \__kernel_tl_to_str:w \exp_after:wN \exp_after:wN \exp_after:wN
+ { \cs:w c__kernel_ #1 case_ #2 _tl \cs_end: }
+ }
+ {
+ \cs_if_exist:cTF { c__kernel_lowercase_ #2 _tl }
+ {
+ \__kernel_tl_to_str:w
+ \exp_after:wN \exp_after:wN \exp_after:wN
+ { \cs:w c__kernel_lowercase_ #2 _tl \cs_end: }
+ }
+ {#2}
+ }
+ }
+ \@@_change_case_loop:nw {#1}
+ }
+\fi:
+% \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
@@ -1975,6 +2059,10 @@
% \end{macro}
% \end{macro}
% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
%
% \begin{variable}
% {
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-24}
+% \date{Released 2022-04-10}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3text-case.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-24}
+% \date{Released 2022-04-10}
%
% \maketitle
%
@@ -670,10 +670,10 @@
{ \@@_change_case_char_UTFviii:nnnn {#1} {#2} {#3} {#4#5#6#7} }
\cs_new:Npn \@@_change_case_char_UTFviii:nnnn #1#2#3#4
{
- \cs_if_exist:cTF { c_@@_ #1 case_ \tl_to_str:n {#4} _tl }
+ \cs_if_exist:cTF { c__kernel_ #1 case_ \tl_to_str:n {#4} _tl }
{
\@@_change_case_store:v
- { c_@@_ #1 case_ \tl_to_str:n {#4} _tl }
+ { c__kernel_ #1 case_ \tl_to_str:n {#4} _tl }
}
{ \@@_change_case_store:n {#4} }
\use:c { @@_change_case_char_next_ #2 :nn } {#2} {#3}
@@ -1536,11 +1536,11 @@
%
% For $8$-bit engines we now need to define the case-change data for
% 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.
+% as the multi-byte nature means they are never |N|-type. As this data is
+% needed both for text and string work, it is stored as |kernel|: it remains
+% internal as it is not really suitable for wider exposure.
+%
+% The first set of codepoints are those in |T1|: all of these are two bytes.
% \begin{macrocode}
\group_begin:
\bool_lazy_or:nnF
@@ -1562,7 +1562,7 @@
{
\tl_const:cx
{
- c_@@_ #1 case_
+ c__kernel_ #1 case_
\char_generate:nn {#2} { 12 }
\char_generate:nn {#3} { 12 }
_tl
@@ -1578,7 +1578,7 @@
{
\tl_const:cx
{
- c_@@_lowercase_
+ c__kernel_lowercase_
\char_generate:nn {#1} { 12 }
\char_generate:nn {#2} { 12 }
_tl
@@ -1694,8 +1694,7 @@
{ 0218 } { 0219 }
{ 021A } { 021B }
% \end{macrocode}
-% Add |T2| (Cyrillic) as this is doable using a classical \tn{MakeUppercase}
-% approach.
+% Add |T2| (Cyrillic) : again two bytes.
% \begin{macrocode}
{ 0400 } { 0450 }
{ 0401 } { 0451 }
@@ -1818,7 +1817,7 @@
{
\tl_const:cx
{
- c_@@_ #3 case_
+ c__kernel_ #3 case_
\char_generate:nn {##1} { 12 }
\char_generate:nn {##2} { 12 }
_tl
@@ -1859,7 +1858,7 @@
{
\tl_const:cn
{
- c_@@_ #3 case_
+ c__kernel_ #3 case_
\char_generate:nn {##1} { 12 }
\char_generate:nn {##2} { 12 }
_tl
@@ -1880,7 +1879,7 @@
{
\tl_const:cx
{
- c_@@_ #1 case_
+ c__kernel_ #1 case_
\char_generate:nn {#2} { 12 }
\char_generate:nn {#3} { 12 }
\char_generate:nn {#4} { 12 }
@@ -1899,7 +1898,7 @@
{
\tl_const:cx
{
- c_@@_lowercase_
+ c__kernel_lowercase_
\char_generate:nn {#1} { 12 }
\char_generate:nn {#2} { 12 }
\char_generate:nn {#3} { 12 }
@@ -2025,7 +2024,7 @@
{
\tl_const:cx
{
- c_@@_ #3 case_
+ c__kernel_ #3 case_
\char_generate:nn {##1} { 12 }
\char_generate:nn {##2} { 12 }
\char_generate:nn {##3} { 12 }
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3text-purify.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3text-purify.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3text-purify.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-24}
+% \date{Released 2022-04-10}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3text.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3text.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3text.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-24}
+% \date{Released 2022-04-10}
%
% \maketitle
%
@@ -562,11 +562,45 @@
% \end{variable}
%
% \begin{variable}{\l_text_expand_exclude_tl}
-% Commands which need not to expand.
+% Commands which need not to expand. We start with a somewhat historical
+% list, and tidy up if possible.
% \begin{macrocode}
\tl_new:N \l_text_expand_exclude_tl
\tl_set:Nn \l_text_expand_exclude_tl
{ \begin \cite \end \label \ref }
+\bool_lazy_and:nnT
+ { \str_if_eq_p:Vn \fmtname { LaTeX2e } }
+ { \tl_if_exist_p:N \@expl at finalise@setup@@@@ }
+ {
+ \tl_gput_right:Nn \@expl at finalise@setup@@@@
+ {
+ \tl_gput_right:Nn \@kernel at after@begindocument
+ {
+ \group_begin:
+ \cs_set_protected:Npn \@@_tmp:w #1
+ {
+ \tl_clear:N \l_text_expand_exclude_tl
+ \tl_map_inline:nn {#1}
+ {
+ \bool_lazy_any:nF
+ {
+ { \token_if_protected_macro_p:N ##1 }
+ { \token_if_protected_long_macro_p:N ##1 }
+ {
+ \str_if_eq_p:ee
+ { \cs_replacement_spec:N ##1 }
+ { \exp_not:n { \protect ##1 } \c_space_tl }
+ }
+ }
+ { \tl_put_right:Nn \l_text_expand_exclude_tl {##1} }
+ }
+ }
+ \exp_args:NV \@@_tmp:w \l_text_expand_exclude_tl
+ \exp_args:NNNV \group_end:
+ \tl_set:Nn \l_text_expand_exclude_tl \l_text_expand_exclude_tl
+ }
+ }
+ }
% \end{macrocode}
% \end{variable}
%
@@ -632,13 +666,14 @@
% \begin{macro}[EXP]{\@@_expand_accent:NN}
% \begin{macro}[EXP]{\@@_expand_letterlike:N}
% \begin{macro}[EXP]{\@@_expand_letterlike:NN}
-% \begin{macro}[EXP]{\@@_expand_cs:N, \@@_expand_encoding:N}
-% \begin{macro}[EXP]{\@@_expand_encoding_escape:N}
+% \begin{macro}[EXP]{\@@_expand_cs:N}
+% \begin{macro}[EXP]{\@@_expand_protect:w}
% \begin{macro}[EXP]{\@@_expand_protect:N}
% \begin{macro}[EXP]{\@@_expand_protect:nN}
% \begin{macro}[EXP]{\@@_expand_protect:Nw}
% \begin{macro}[EXP]{\@@_expand_testopt:N}
% \begin{macro}[EXP]{\@@_expand_testopt:NNn}
+% \begin{macro}[EXP]{\@@_expand_encoding:N, \@@_expand_encoding_escape:N}
% \begin{macro}[EXP]{\@@_expand_replace:N}
% \begin{macro}[EXP]{\@@_expand_replace:n}
% \begin{macro}[EXP]{\@@_expand_cs_expand:N}
@@ -947,14 +982,15 @@
% \end{macrocode}
% \LaTeXe{}'s \cs{protect} makes life interesting. Where possible, we
% simply remove it and replace with the \enquote{parent} command; of course,
-% the \cs{protect} might be explicit, in which case we need to leave it alone
-% if it's required. There is also the case of a straight \tn{@protected at testopt}
-% to cover.
+% the \cs{protect} might be explicit, in which case we need to leave it alone.
+% That includes the case where it's not even followed by an \texttt{N}-type
+% token. There is also the case of a straight \tn{@protected at testopt} to
+% cover.
% \begin{macrocode}
\cs_new:Npx \@@_expand_cs:N #1
{
\exp_not:N \str_if_eq:nnTF {#1} { \exp_not:N \protect }
- { \exp_not:N \@@_expand_protect:N }
+ { \exp_not:N \@@_expand_protect:w }
{
\bool_lazy_and:nnTF
{ \cs_if_exist_p:N \fmtname }
@@ -963,8 +999,23 @@
{ \exp_not:N \@@_expand_replace:N #1 }
}
}
+\cs_new:Npn \@@_expand_protect:w #1 \q_@@_recursion_stop
+ {
+ \tl_if_head_is_N_type:nTF {#1}
+ { \@@_expand_protect:N }
+ {
+ \@@_expand_store:n { \protect }
+ \@@_expand_loop:w
+ }
+ #1 \q_@@_recursion_stop
+ }
\cs_new:Npn \@@_expand_protect:N #1
{
+ \@@_if_recursion_tail_stop_do:Nn #1
+ {
+ \@@_expand_store:n { \protect }
+ \@@_expand_end:w
+ }
\exp_args:Ne \@@_expand_protect:nN
{ \cs_to_str:N #1 } #1
}
@@ -1122,6 +1173,7 @@
% \end{macro}
% \end{macro}
% \end{macro}
+% \end{macro}
%
% \begin{macro}
% {
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-24}
+% \date{Released 2022-04-10}
%
% \maketitle
%
@@ -90,7 +90,7 @@
% characters, and the value of registers.
% \end{function}
%
-% \begin{function}[added = 2018-04-09]
+% \begin{function}[added = 2018-04-09, updated = 2022-03-26]
% {\tl_analysis_map_inline:nn, \tl_analysis_map_inline:Nn}
% \begin{syntax}
% \cs{tl_analysis_map_inline:nn} \Arg{token list} \Arg{inline function}
@@ -935,47 +935,46 @@
%
% \subsection{Mapping through the analysis}
%
-% \begin{macro}{\tl_analysis_map_inline:nn, \tl_analysis_map_inline:Nn}
-% \begin{macro}{\@@_analysis_map_inline_aux:Nn}
-% \begin{macro}{\@@_analysis_map_inline_aux:nnn}
+% \begin{macro}{\tl_analysis_map_inline:Nn, \tl_analysis_map_inline:nn}
+% \begin{macro}{\@@_analysis_map:Nn}
+% \begin{macro}{\@@_analysis_map:NwNw}
% First obtain the analysis of the token list into
% \cs{g_@@_analysis_result_tl}. To allow nested mappings, increase the
-% nesting depth \cs{g__kernel_prg_map_int} (shared between all modules), then
-% define the looping macro, which has a name specific to that nesting
-% depth. That looping grabs the \meta{tokens}, \meta{catcode} and
-% \meta{char code}; it checks for the end of the loop with
-% \cs{use_none:n} |##2|, normally empty, but which becomes
-% \cs{tl_map_break:} at the end; it then performs the user's code
-% |#2|, and loops by calling itself. When the loop ends, remember to
-% decrease the nesting depth.
+% nesting depth \cs{g__kernel_prg_map_int} (shared between all
+% modules), then define the payload macro, which runs the user code
+% and has a name specific to that nesting depth. The looping macro
+% grabs the \meta{tokens}, \meta{catcode} and \meta{char code}; it
+% checks for the end of the loop with \cs{use_none:n} |##2|, normally
+% empty, but which becomes \cs{tl_map_break:} at the end; it then
+% calls the payload macro with the arguments in the correct order
+% (this is the reason why we cannot directly use the same macro for
+% looping and payload), and loops by calling itself. When the loop
+% ends, remember to decrease the nesting depth.
% \begin{macrocode}
+\cs_new_protected:Npn \tl_analysis_map_inline:Nn #1
+ { \exp_args:No \tl_analysis_map_inline:nn #1 }
\cs_new_protected:Npn \tl_analysis_map_inline:nn #1
{
\@@_analysis:n {#1}
\int_gincr:N \g__kernel_prg_map_int
- \exp_args:Nc \@@_analysis_map_inline_aux:Nn
+ \exp_args:Nc \@@_analysis_map:Nn
{ @@_analysis_map_inline_ \int_use:N \g__kernel_prg_map_int :wNw }
}
-\cs_new_protected:Npn \tl_analysis_map_inline:Nn #1
- { \exp_args:No \tl_analysis_map_inline:nn #1 }
-\cs_new_protected:Npn \@@_analysis_map_inline_aux:Nn #1#2
+\cs_new_protected:Npn \@@_analysis_map:Nn #1#2
{
- \cs_gset_protected:Npn #1 ##1 \s_@@ ##2 ##3 \s_@@
- {
- \use_none:n ##2
- \@@_analysis_map_inline_aux:nnn {##1} {##3} {##2}
- }
- \cs_gset_protected:Npn \@@_analysis_map_inline_aux:nnn ##1##2##3
- {
- #2
- #1
- }
- \exp_after:wN #1
+ \cs_gset_protected:Npn #1 ##1##2##3 {#2}
+ \exp_after:wN \@@_analysis_map:NwNw \exp_after:wN #1
\g_@@_analysis_result_tl
\s_@@ { ? \tl_map_break: } \s_@@
\prg_break_point:Nn \tl_map_break:
{ \int_gdecr:N \g__kernel_prg_map_int }
}
+\cs_new_protected:Npn \@@_analysis_map:NwNw #1 #2 \s_@@ #3 #4 \s_@@
+ {
+ \use_none:n #3
+ #1 {#2} {#4} {#3}
+ \@@_analysis_map:NwNw #1
+ }
% \end{macrocode}
% \end{macro}
% \end{macro}
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-24}
+% \date{Released 2022-04-10}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3token.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3token.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3token.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-24}
+% \date{Released 2022-04-10}
%
% \maketitle
%
@@ -139,12 +139,14 @@
% \item $6$ (parameter)
% \item $7$ (math superscript)
% \item $8$ (math subscript)
+% \item $10$ (space)
% \item $11$ (letter)
% \item $12$ (other)
% \item $13$ (active)
% \end{itemize}
% and other values raise an error. The \meta{charcode} may be any one valid
-% for the engine in use.
+% for the engine in use, except that for \meta{catcode} $10$, \meta{charcode}
+% $0$ is not allowed.
% Active characters cannot be generated in older versions of \XeTeX{}.
% Another way to build token lists with unusual category codes is
% \cs{regex_replace:nnN} |{.*}| \Arg{replacement} \meta{tl~var}.
@@ -1527,26 +1529,22 @@
% \begin{macrocode}
\cs_new:Npn \@@_generate_aux:w #1 ; #2 ;
{
- \if_int_compare:w #2 = 10 \exp_stop_f:
- \if_int_compare:w #1 = \c_zero_int
- \msg_expandable_error:nn { char } { null-space }
- \else:
- \msg_expandable_error:nn { char } { space }
- \fi:
+ \if_int_odd:w 0
+ \if_int_compare:w #2 < 1 \exp_stop_f: 1 \fi:
+ \if_int_compare:w #2 = 5 \exp_stop_f: 1 \fi:
+ \if_int_compare:w #2 = 9 \exp_stop_f: 1 \fi:
+ \if_int_compare:w #2 > 13 \exp_stop_f: 1 \fi: \exp_stop_f:
+ \msg_expandable_error:nn { char }
+ { invalid-catcode }
\else:
\if_int_odd:w 0
- \if_int_compare:w #2 < 1 \exp_stop_f: 1 \fi:
- \if_int_compare:w #2 = 5 \exp_stop_f: 1 \fi:
- \if_int_compare:w #2 = 9 \exp_stop_f: 1 \fi:
- \if_int_compare:w #2 > 13 \exp_stop_f: 1 \fi: \exp_stop_f:
+ \if_int_compare:w #1 < \c_zero_int 1 \fi:
+ \if_int_compare:w #1 > \c_max_char_int 1 \fi: \exp_stop_f:
\msg_expandable_error:nn { char }
- { invalid-catcode }
+ { out-of-range }
\else:
- \if_int_odd:w 0
- \if_int_compare:w #1 < \c_zero_int 1 \fi:
- \if_int_compare:w #1 > \c_max_char_int 1 \fi: \exp_stop_f:
- \msg_expandable_error:nn { char }
- { out-of-range }
+ \if_int_compare:w #2#1 = 100 \exp_stop_f:
+ \msg_expandable_error:nn { char } { null-space }
\else:
\@@_generate_aux:nnw {#1} {#2}
\fi:
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-24}
+% \date{Released 2022-04-10}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-dvipdfmx.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-dvipdfmx.def 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-dvipdfmx.def 2022-04-11 20:14:43 UTC (rev 63007)
@@ -26,7 +26,7 @@
%%
%% File: l3backend-basics.dtx
\ProvidesExplFile
- {l3backend-dvipdfmx.def}{2022-02-07}{}
+ {l3backend-dvipdfmx.def}{2022-04-10}{}
{L3 backend support: dvipdfmx}
\cs_if_exist:NTF \__kernel_dependency_version_check:nn
{
@@ -65,20 +65,6 @@
{ \__kernel_backend_literal:n { x:gsave } }
\cs_new_protected:Npn \__kernel_backend_scope_end:
{ \__kernel_backend_literal:n { x:grestore } }
-\group_begin:
- \cs_set:Npn \__sys_tmp:w #1 Version ~ #2 ~ #3 \q_stop {#2}
- \sys_get_shell:nnNTF { extractbb~--version }
- { \char_set_catcode_space:n { `\ } }
- \l__sys_internal_tl
- {
- \int_const:Nn \c__kernel_sys_dvipdfmx_version_int
- {
- \exp_after:wN \__sys_tmp:w \l__sys_internal_tl
- \q_stop
- }
- }
- { \int_const:Nn \c__kernel_sys_dvipdfmx_version_int { 0 } }
-\group_end:
%% File: l3backend-color.dtx
\cs_new_protected:Npn \__color_backend_pickup:N #1 { }
\cs_if_exist:cT { ver at color.sty }
@@ -102,72 +88,65 @@
{ \tl_set:Nn #3 { {#1} {#2} } }
}
\int_new:N \l__color_backend_stack_int
-\int_compare:nNnTF \c__kernel_sys_dvipdfmx_version_int < { 20201111 }
- { \cs_new_protected:Npn \__kernel_color_backend_stack_init:Nnn #1#2#3 { } }
+\int_new:N \g__color_backend_stack_int
+\cs_new_protected:Npx \__kernel_color_backend_stack_init:Nnn #1#2#3
{
- \int_new:N \g__color_backend_stack_int
- \cs_new_protected:Npx \__kernel_color_backend_stack_init:Nnn #1#2#3
+ \int_gincr:N \exp_not:N \g__color_backend_stack_int
+ \int_const:Nn #1 { \exp_not:N \g__color_backend_stack_int }
+ \use:x
{
- \int_gincr:N \exp_not:N \g__color_backend_stack_int
- \int_const:Nn #1 { \exp_not:N \g__color_backend_stack_int }
- \use:x
+ \__kernel_backend_first_shipout:n
{
- \__kernel_backend_first_shipout:n
+ \__kernel_backend_literal:n
{
- \__kernel_backend_literal:n
- {
- pdfcolorstackinit ~
- \exp_not:N \int_use:N \exp_not:N \g__color_backend_stack_int
- \c_space_tl
- \exp_not:N \tl_if_blank:nF {#2} { #2 ~ }
- (#3)
- }
+ pdfcolorstackinit ~
+ \exp_not:N \int_use:N \exp_not:N \g__color_backend_stack_int
+ \c_space_tl
+ \exp_not:N \tl_if_blank:nF {#2} { #2 ~ }
+ (#3)
}
- }
+ }
}
- \cs_if_exist:cTF { main at pdfcolorstack }
+ }
+\cs_if_exist:cTF { main at pdfcolorstack }
+ {
+ \int_set:Nn \l__color_backend_stack_int
+ { \int_use:c { main at pdfcolorstack } }
+ }
+ {
+ \__kernel_color_backend_stack_init:Nnn \c__color_backend_main_stack_int
+ { page ~ direct } { 0 ~ g ~ 0 ~ G }
+ \int_set_eq:NN \l__color_backend_stack_int
+ \c__color_backend_main_stack_int
+ \int_const:cn { main at pdfcolorstack } { \c__color_backend_main_stack_int }
+ }
+\cs_gset_protected:Npn \__kernel_backend_scope_end:
+ {
+ \__kernel_backend_literal:n { x:grestore }
+ \__kernel_backend_literal:x
{
- \int_set:Nn \l__color_backend_stack_int
- { \int_use:c { main at pdfcolorstack } }
+ pdfcolorstack ~
+ \int_use:N \g__color_backend_stack_int \c_space_tl current
}
+ }
+\cs_new_protected:Npn \__kernel_color_backend_stack_push:nn #1#2
+ {
+ \__kernel_backend_literal:x
{
- \__kernel_color_backend_stack_init:Nnn \c__color_backend_main_stack_int
- { page ~ direct } { 0 ~ g ~ 0 ~ G }
- \int_set_eq:NN \l__color_backend_stack_int
- \c__color_backend_main_stack_int
- \int_const:cn { main at pdfcolorstack } { \c__color_backend_main_stack_int }
+ pdfcolorstack ~
+ \int_eval:n {#1} ~
+ push ~ (#2)
}
- \cs_gset_protected:Npn \__kernel_backend_scope_end:
- {
- \__kernel_backend_literal:n { x:grestore }
- \__kernel_backend_literal:x
- {
- pdfcolorstack ~
- \int_use:N \g__color_backend_stack_int \c_space_tl current
- }
- }
}
-\int_compare:nNnF \c__kernel_sys_dvipdfmx_version_int < { 20201111 }
+\cs_generate_variant:Nn \__kernel_color_backend_stack_push:nn { nx }
+\cs_new_protected:Npn \__kernel_color_backend_stack_pop:n #1
{
- \cs_new_protected:Npn \__kernel_color_backend_stack_push:nn #1#2
+ \__kernel_backend_literal:x
{
- \__kernel_backend_literal:x
- {
- pdfcolorstack ~
- \int_eval:n {#1} ~
- push ~ (#2)
- }
+ pdfcolorstack ~
+ \int_eval:n {#1} ~
+ pop
}
- \cs_generate_variant:Nn \__kernel_color_backend_stack_push:nn { nx }
- \cs_new_protected:Npn \__kernel_color_backend_stack_pop:n #1
- {
- \__kernel_backend_literal:x
- {
- pdfcolorstack ~
- \int_eval:n {#1} ~
- pop
- }
- }
}
\tl_new:N \l__color_backend_fill_tl
\tl_new:N \l__color_backend_stroke_tl
@@ -185,15 +164,6 @@
}
\cs_new_protected:Npn \__color_backend_reset:
{ \__kernel_color_backend_stack_pop:n \l__color_backend_stack_int }
-\int_compare:nNnT \c__kernel_sys_dvipdfmx_version_int < { 20201111 }
- {
- \cs_gset_protected:Npn \__color_backend_select_cmyk:n #1
- { \__kernel_backend_literal:n { pdf: bc ~ [#1] } }
- \cs_gset_eq:NN \__color_backend_select_gray:n \__color_backend_select_cmyk:n
- \cs_gset_eq:NN \__color_backend_select_rgb:n \__color_backend_select_cmyk:n
- \cs_gset_protected:Npn \__color_backend_reset:
- { \__kernel_backend_literal:n { pdf: ec } }
- }
\prop_new:N \g__color_backend_colorant_prop
\cs_new:Npx \__color_backend_devicen_colorants:n #1
{
@@ -380,12 +350,6 @@
}
}
}
-\int_compare:nNnT \c__kernel_sys_dvipdfmx_version_int < { 20201111 }
- {
- \cs_gset_protected:Npn \__color_backend_select_separation:nn #1#2 { }
- \cs_gset_eq:NN \__color_backend_select_devicen:nn
- \__color_backend_select_separation:nn
- }
\cs_new_protected:Npn \__color_backend_fill_cmyk:n #1
{ \__color_backend_fill:n { #1 ~ k } }
\cs_new_protected:Npn \__color_backend_fill_gray:n #1
@@ -418,27 +382,6 @@
{ \__color_backend_stroke:n { /#1 ~ CS ~ #2 ~ SCN } }
\cs_new_eq:NN \__color_backend_fill_devicen:nn \__color_backend_fill_separation:nn
\cs_new_eq:NN \__color_backend_stroke_devicen:nn \__color_backend_stroke_separation:nn
-\int_compare:nNnT \c__kernel_sys_dvipdfmx_version_int < { 20201111 }
- {
- \cs_gset_protected:Npn \__color_backend_fill_cmyk:n #1
- {
- \__kernel_backend_literal:n { pdf: bc ~ [#1] }
- \group_insert_after:N \__color_backend_reset:
- }
- \cs_gset_eq:NN \__color_backend_fill_gray:n \__color_backend_fill_cmyk:n
- \cs_gset_eq:NN \__color_backend_fill_rgb:n \__color_backend_fill_cmyk:n
- \cs_gset_protected:Npn \__color_backend_reset:
- { \__kernel_backend_literal:n { pdf: ec } }
- \cs_gset_protected:Npn \__color_backend_stroke:n #1
- { \__kernel_backend_literal:n {#1} }
- \cs_gset_protected:Npn \__color_backend_fill_separation:nn #1#2 { }
- \cs_gset_eq:NN \__color_backend_fill_devicen:nn
- \__color_backend_fill_separation:nn
- \cs_gset_eq:NN \__color_backend_stroke_separation:nn
- \__color_backend_fill_separation:nn
- \cs_gset_eq:NN \__color_backend_stroke_devicen:nn
- \__color_backend_stroke_separation:nn
- }
%% File: l3backend-box.dtx
\cs_new_protected:Npn \__box_backend_clip:N #1
{
@@ -660,19 +603,41 @@
\__kernel_backend_scope_end:
}
%% File: l3backend-graphics.dtx
-\cs_new_eq:NN \__graphics_backend_getbb_eps:n \graphics_read_bb:n
+\cs_new_protected:Npn \__graphics_backend_loaded:n #1
+ {
+ \cs_if_exist:NTF \hook_gput_code:nnn
+ {
+ \hook_gput_code:nnn
+ { file / l3graphics.sty / after }
+ { backend }
+ {#1}
+ }
+ {#1}
+ }
+\__graphics_backend_loaded:n
+ {
+ \seq_set_from_clist:Nn \l_graphics_search_ext_seq
+ { .pdf , .eps , .ps , .png , .jpg ., jpeg , .bmp }
+ }
+\__graphics_backend_loaded:n
+ {
+ \cs_new_eq:NN \__graphics_backend_getbb_eps:n \__graphics_read_bb:n
+ \cs_new_eq:NN \__graphics_backend_getbb_ps:n \__graphics_read_bb:n
+ }
\cs_new_protected:Npn \__graphics_backend_getbb_jpg:n #1
{
- \int_zero:N \l_graphics_page_int
- \tl_clear:N \l_graphics_pagebox_tl
- \graphics_extract_bb:n {#1}
+ \int_zero:N \l__graphics_page_int
+ \tl_clear:N \l__graphics_pagebox_tl
+ \__graphics_extract_bb:n {#1}
}
+\cs_new_eq:NN \__graphics_backend_getbb_jpeg:n \__graphics_backend_getbb_jpg:n
\cs_new_eq:NN \__graphics_backend_getbb_png:n \__graphics_backend_getbb_jpg:n
+\cs_new_eq:NN \__graphics_backend_getbb_bmp:n \__graphics_backend_getbb_jpg:n
\cs_new_protected:Npn \__graphics_backend_getbb_pdf:n #1
{
- \tl_clear:N \l_graphics_decodearray_tl
- \bool_set_false:N \l_graphics_interpolate_bool
- \graphics_extract_bb:n {#1}
+ \tl_clear:N \l__graphics_decodearray_str
+ \bool_set_false:N \l__graphics_interpolate_bool
+ \__graphics_extract_bb:n {#1}
}
\int_new:N \g__graphics_track_int
\cs_new_protected:Npn \__graphics_backend_include_eps:n #1
@@ -680,15 +645,18 @@
\__kernel_backend_literal:x
{
PSfile = #1 \c_space_tl
- llx = \dim_to_decimal_in_bp:n \l_graphics_llx_dim \c_space_tl
- lly = \dim_to_decimal_in_bp:n \l_graphics_lly_dim \c_space_tl
- urx = \dim_to_decimal_in_bp:n \l_graphics_urx_dim \c_space_tl
- ury = \dim_to_decimal_in_bp:n \l_graphics_ury_dim
+ llx = \dim_to_decimal_in_bp:n \l__graphics_llx_dim \c_space_tl
+ lly = \dim_to_decimal_in_bp:n \l__graphics_lly_dim \c_space_tl
+ urx = \dim_to_decimal_in_bp:n \l__graphics_urx_dim \c_space_tl
+ ury = \dim_to_decimal_in_bp:n \l__graphics_ury_dim
}
}
+\cs_new_eq:NN \__graphics_backend_include_ps:n \__graphics_backend_include_eps:n
\cs_new_protected:Npn \__graphics_backend_include_jpg:n #1
{ \__graphics_backend_include_auxi:nn {#1} { image } }
+\cs_new_eq:NN \__graphics_backend_include_jpeg:n \__graphics_backend_include_jpg:n
\cs_new_eq:NN \__graphics_backend_include_png:n \__graphics_backend_include_jpg:n
+\cs_new_eq:NN \__graphics_backend_include_bmp:n \__graphics_backend_include_jpg:n
\cs_new_protected:Npn \__graphics_backend_include_pdf:n #1
{ \__graphics_backend_include_auxi:nn {#1} { epdf } }
\cs_new_protected:Npn \__graphics_backend_include_auxi:nn #1#2
@@ -695,13 +663,13 @@
{
\__graphics_backend_include_auxii:xnn
{
- \tl_if_empty:NF \l_graphics_pagebox_tl
- { : \l_graphics_pagebox_tl }
- \int_compare:nNnT \l_graphics_page_int > 1
- { :P \int_use:N \l_graphics_page_int }
- \tl_if_empty:NF \l_graphics_decodearray_tl
- { :D \l_graphics_decodearray_tl }
- \bool_if:NT \l_graphics_interpolate_bool
+ \tl_if_empty:NF \l__graphics_pagebox_tl
+ { : \l__graphics_pagebox_tl }
+ \int_compare:nNnT \l__graphics_page_int > 1
+ { :P \int_use:N \l__graphics_page_int }
+ \tl_if_empty:NF \l__graphics_decodearray_str
+ { :D \l__graphics_decodearray_str }
+ \bool_if:NT \l__graphics_interpolate_bool
{ :I }
}
{#1} {#2}
@@ -708,10 +676,10 @@
}
\cs_new_protected:Npn \__graphics_backend_include_auxii:nnn #1#2#3
{
- \int_if_exist:cTF { c__graphics_graphics_ #2#1 _int }
+ \int_if_exist:cTF { c__graphics_ #2#1 _int }
{
\__kernel_backend_literal:x
- { pdf:usexobj~@graphic \int_use:c { c__graphics_graphics_ #2#1 _int } }
+ { pdf:usexobj~@graphic \int_use:c { c__graphics_ #2#1 _int } }
}
{ \__graphics_backend_include_auxiii:nnn {#2} {#1} {#3} }
}
@@ -719,36 +687,38 @@
\cs_new_protected:Npn \__graphics_backend_include_auxiii:nnn #1#2#3
{
\int_gincr:N \g__graphics_track_int
- \int_const:cn { c__graphics_graphics_ #1#2 _int } { \g__graphics_track_int }
+ \int_const:cn { c__graphics_ #1#2 _int } { \g__graphics_track_int }
\__kernel_backend_literal:x
{
pdf:#3~
- @graphic \int_use:c { c__graphics_graphics_ #1#2 _int } ~
- \int_compare:nNnT \l_graphics_page_int > 1
- { page ~ \int_use:N \l_graphics_page_int \c_space_tl }
- \tl_if_empty:NF \l_graphics_pagebox_tl
+ @graphic \int_use:c { c__graphics_ #1#2 _int } ~
+ \int_compare:nNnT \l__graphics_page_int > 1
+ { page ~ \int_use:N \l__graphics_page_int \c_space_tl }
+ \tl_if_empty:NF \l__graphics_pagebox_tl
{
- pagebox ~ \l_graphics_pagebox_tl \c_space_tl
+ pagebox ~ \l__graphics_pagebox_tl \c_space_tl
bbox ~
- \dim_to_decimal_in_bp:n \l_graphics_llx_dim \c_space_tl
- \dim_to_decimal_in_bp:n \l_graphics_lly_dim \c_space_tl
- \dim_to_decimal_in_bp:n \l_graphics_urx_dim \c_space_tl
- \dim_to_decimal_in_bp:n \l_graphics_ury_dim \c_space_tl
+ \dim_to_decimal_in_bp:n \l__graphics_llx_dim \c_space_tl
+ \dim_to_decimal_in_bp:n \l__graphics_lly_dim \c_space_tl
+ \dim_to_decimal_in_bp:n \l__graphics_urx_dim \c_space_tl
+ \dim_to_decimal_in_bp:n \l__graphics_ury_dim \c_space_tl
}
(#1)
\bool_lazy_or:nnT
- { \l_graphics_interpolate_bool }
- { ! \tl_if_empty_p:N \l_graphics_decodearray_tl }
+ { \l__graphics_interpolate_bool }
+ { ! \tl_if_empty_p:N \l__graphics_decodearray_str }
{
<<
- \tl_if_empty:NF \l_graphics_decodearray_tl
- { /Decode~[ \l_graphics_decodearray_tl ] }
- \bool_if:NT \l_graphics_interpolate_bool
+ \tl_if_empty:NF \l__graphics_decodearray_str
+ { /Decode~[ \l__graphics_decodearray_str ] }
+ \bool_if:NT \l__graphics_interpolate_bool
{ /Interpolate~true> }
>>
}
}
}
+\__graphics_backend_loaded:n
+ { \cs_new_eq:NN \__graphics_backend_get_pagecount:n \__graphics_get_pagecount:n }
%% File: l3backend-pdf.dtx
\box_new:N \l__pdf_internal_box
\cs_new_protected:Npx \__pdf_backend:n #1
@@ -838,19 +808,13 @@
{ \__pdf_backend_link_begin:n {#1#2} }
\cs_new_protected:Npx \__pdf_backend_link_begin:n #1
{
- \int_compare:nNnF \c__kernel_sys_dvipdfmx_version_int < { 20201111 }
- {
- \exp_not:N \int_gincr:N \exp_not:N \g__pdf_backend_link_int
- }
+ \exp_not:N \int_gincr:N \exp_not:N \g__pdf_backend_link_int
\__pdf_backend:x
{
bann ~
- \int_compare:nNnF \c__kernel_sys_dvipdfmx_version_int < { 20201111 }
- {
- @pdf.lnk
- \exp_not:N \int_use:N \exp_not:N \g__pdf_backend_link_int
- \c_space_tl
- }
+ @pdf.lnk
+ \exp_not:N \int_use:N \exp_not:N \g__pdf_backend_link_int
+ \c_space_tl
<<
/Type /Annot
#1
@@ -859,14 +823,8 @@
}
\cs_new_protected:Npn \__pdf_backend_link_end:
{ \__pdf_backend:n { eann } }
-\cs_new:Npx \__pdf_backend_link_last:
- {
- \int_compare:nNnF \c__kernel_sys_dvipdfmx_version_int < { 20201111 }
- {
- @pdf.lnk
- \exp_not:N \int_use:N \exp_not:N \g__pdf_backend_link_int
- }
- }
+\cs_new:Npn \__pdf_backend_link_last:
+ { @pdf.lnk \int_use:N \g__pdf_backend_link_int }
\cs_new_protected:Npn \__pdf_backend_link_margin:n #1
{ \__kernel_backend_literal:x { dvipdfmx:config~g~ \dim_eval:n {#1} } }
\cs_new_protected:Npn \__pdf_backend_destination:nn #1#2
@@ -1019,35 +977,6 @@
}
}
\cs_generate_variant:Nn \__opacity_backend_fill_stroke:nn { xx }
-\int_compare:nNnT \c__kernel_sys_dvipdfmx_version_int < { 20201111 }
- {
- \cs_gset_protected:Npn \__opacity_backend_select_aux:n #1
- {
- \tl_set:Nn \l__opacity_backend_fill_tl {#1}
- \tl_set:Nn \l__opacity_backend_stroke_tl {#1}
- \pdfmanagement_add:nnn { Page / Resources / ExtGState }
- { opacity #1 }
- { << /ca ~ #1 /CA ~ #1 >> }
- \__kernel_backend_literal_pdf:n { /opacity #1 ~ gs }
- }
- \cs_gset_protected:Npn \__opacity_backend_fill_stroke:nn #1#2
- {
- \str_if_eq:nnTF {#1} {#2}
- { \__opacity_backend_select_aux:n {#1} }
- {
- \tl_set:Nn \l__opacity_backend_fill_tl {#1}
- \tl_set:Nn \l__opacity_backend_stroke_tl {#2}
- \pdfmanagement_add:nnn { Page / Resources / ExtGState }
- { opacity.fill #1 }
- { << /ca ~ #1 >> }
- \pdfmanagement_add:nnn { Page / Resources / ExtGState }
- { opacity.stroke #1 }
- { << /CA ~ #2 >> }
- \__kernel_backend_literal_pdf:n
- { /opacity.fill #1 ~ gs /opacity.stroke #2 ~ gs }
- }
- }
- }
%%
%%
%% End of file `l3backend-dvipdfmx.def'.
Modified: trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-dvips.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-dvips.def 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-dvips.def 2022-04-11 20:14:43 UTC (rev 63007)
@@ -26,7 +26,7 @@
%%
%% File: l3backend-basics.dtx
\ProvidesExplFile
- {l3backend-dvips.def}{2022-02-07}{}
+ {l3backend-dvips.def}{2022-04-10}{}
{L3 backend support: dvips}
\cs_if_exist:NTF \__kernel_dependency_version_check:nn
{
@@ -597,18 +597,38 @@
\__draw_backend_literal:n { @beginspecial }
}
%% File: l3backend-graphics.dtx
-\cs_new_eq:NN \__graphics_backend_getbb_eps:n \graphics_read_bb:n
+\cs_new_protected:Npn \__graphics_backend_loaded:n #1
+ {
+ \cs_if_exist:NTF \hook_gput_code:nnn
+ {
+ \hook_gput_code:nnn
+ { file / l3graphics.sty / after }
+ { backend }
+ {#1}
+ }
+ {#1}
+ }
+\__graphics_backend_loaded:n
+ { \seq_set_from_clist:Nn \l_graphics_search_ext_seq { .eps , .ps } }
+\__graphics_backend_loaded:n
+ {
+ \cs_new_eq:NN \__graphics_backend_getbb_eps:n \__graphics_read_bb:n
+ \cs_new_eq:NN \__graphics_backend_getbb_ps:n \__graphics_read_bb:n
+ }
\cs_new_protected:Npn \__graphics_backend_include_eps:n #1
{
\__kernel_backend_literal:x
{
PSfile = #1 \c_space_tl
- llx = \dim_to_decimal_in_bp:n \l_graphics_llx_dim \c_space_tl
- lly = \dim_to_decimal_in_bp:n \l_graphics_lly_dim \c_space_tl
- urx = \dim_to_decimal_in_bp:n \l_graphics_urx_dim \c_space_tl
- ury = \dim_to_decimal_in_bp:n \l_graphics_ury_dim
+ llx = \dim_to_decimal_in_bp:n \l__graphics_llx_dim \c_space_tl
+ lly = \dim_to_decimal_in_bp:n \l__graphics_lly_dim \c_space_tl
+ urx = \dim_to_decimal_in_bp:n \l__graphics_urx_dim \c_space_tl
+ ury = \dim_to_decimal_in_bp:n \l__graphics_ury_dim
}
}
+\cs_new_eq:NN \__graphics_backend_include_ps:n \__graphics_backend_include_eps:n
+\__graphics_backend_loaded:n
+ { \cs_new_eq:NN \__graphics_backend_get_pagecount:n \__graphics_get_pagecount:n }
%% File: l3backend-pdf.dtx
\box_new:N \l__pdf_internal_box
\cs_new_protected:Npn \__pdf_backend_pdfmark:n #1
Modified: trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-dvisvgm.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-dvisvgm.def 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-dvisvgm.def 2022-04-11 20:14:43 UTC (rev 63007)
@@ -26,7 +26,7 @@
%%
%% File: l3backend-basics.dtx
\ProvidesExplFile
- {l3backend-dvisvgm.def}{2022-02-07}{}
+ {l3backend-dvisvgm.def}{2022-04-10}{}
{L3 backend support: dvisvgm}
\cs_if_exist:NTF \__kernel_dependency_version_check:nn
{
@@ -216,6 +216,8 @@
\cs_new_protected:Npn \__color_backend_stroke_separation:nn #1#2 { }
\cs_new_eq:NN \__color_backend_fill_devicen:nn \__color_backend_fill_separation:nn
\cs_new_eq:NN \__color_backend_stroke_devicen:nn \__color_backend_stroke_separation:nn
+\cs_new_protected:Npn \__color_backend_devicen_init:nnn #1#2#3 { }
+\cs_new_protected:Npn \__color_backend_iccbased_init:nnn #1#2#3 { }
%% File: l3backend-box.dtx
\cs_new_protected:Npn \__box_backend_clip:N #1
{
@@ -490,33 +492,52 @@
\__kernel_backend_scope_end:
}
%% File: l3backend-graphics.dtx
-\cs_new_eq:NN \__graphics_backend_getbb_eps:n \graphics_read_bb:n
+\cs_new_protected:Npn \__graphics_backend_loaded:n #1
+ {
+ \cs_if_exist:NTF \hook_gput_code:nnn
+ {
+ \hook_gput_code:nnn
+ { file / l3graphics.sty / after }
+ { backend }
+ {#1}
+ }
+ {#1}
+ }
+\__graphics_backend_loaded:n
+ {
+ \seq_set_from_clist:Nn
+ \l_graphics_search_ext_seq
+ { .pdf , .eps , .png , .jpg , .jpeg }
+ }
+\__graphics_backend_loaded:n
+ { \cs_new_eq:NN \__graphics_backend_getbb_eps:n \__graphics_read_bb:n }
\cs_new_protected:Npn \__graphics_backend_getbb_jpg:n #1
{
- \int_zero:N \l_graphics_page_int
- \tl_clear:N \l_graphics_pagebox_tl
- \graphics_extract_bb:n {#1}
+ \int_zero:N \l__graphics_page_int
+ \tl_clear:N \l__graphics_pagebox_tl
+ \__graphics_extract_bb:n {#1}
}
+\cs_new_eq:NN \__graphics_backend_getbb_jpeg:n \__graphics_backend_getbb_jpg:n
\cs_new_eq:NN \__graphics_backend_getbb_png:n \__graphics_backend_getbb_jpg:n
\cs_new_protected:Npn \__graphics_backend_getbb_pdf:n #1
{
- \tl_clear:N \l_graphics_decodearray_tl
- \bool_set_false:N \l_graphics_interpolate_bool
- \graphics_extract_bb:n {#1}
+ \tl_clear:N \l__graphics_decodearray_str
+ \bool_set_false:N \l__graphics_interpolate_bool
+ \__graphics_extract_bb:n {#1}
}
\cs_new_protected:Npn \__graphics_backend_include_eps:n #1
- { __graphics_backend_include:nn { PSfile } {#1} }
+ { \__graphics_backend_include:nn { PSfile } {#1} }
\cs_new_protected:Npn \__graphics_backend_include_pdf:n #1
- { __graphics_backend_include:nn { pdffile } {#1} }
+ { \__graphics_backend_include:nn { pdffile } {#1} }
\cs_new_protected:Npn \__graphics_backend_include:nn #1#2
{
\__kernel_backend_literal:x
{
#1 = #2 \c_space_tl
- llx = \dim_to_decimal_in_bp:n \l_graphics_llx_dim \c_space_tl
- lly = \dim_to_decimal_in_bp:n \l_graphics_lly_dim \c_space_tl
- urx = \dim_to_decimal_in_bp:n \l_graphics_urx_dim \c_space_tl
- ury = \dim_to_decimal_in_bp:n \l_graphics_ury_dim
+ llx = \dim_to_decimal_in_bp:n \l__graphics_llx_dim \c_space_tl
+ lly = \dim_to_decimal_in_bp:n \l__graphics_lly_dim \c_space_tl
+ urx = \dim_to_decimal_in_bp:n \l__graphics_urx_dim \c_space_tl
+ ury = \dim_to_decimal_in_bp:n \l__graphics_ury_dim
}
}
\cs_new_protected:Npn \__graphics_backend_include_png:n #1
@@ -524,14 +545,17 @@
\__kernel_backend_literal:x
{
dvisvgm:img~
- \dim_to_decimal:n { \l_graphics_ury_dim } ~
- \dim_to_decimal:n { \l_graphics_ury_dim } ~
+ \dim_to_decimal:n { \l__graphics_ury_dim } ~
+ \dim_to_decimal:n { \l__graphics_ury_dim } ~
\__graphics_backend_include_bitmap_quote:w #1 " #1 " \s__graphics_stop
}
}
+\cs_new_eq:NN \__graphics_backend_include_jpeg:n \__graphics_backend_include_png:n
\cs_new_eq:NN \__graphics_backend_include_jpg:n \__graphics_backend_include_png:n
\cs_new:Npn \__graphics_backend_include_bitmap_quote:w #1 " #2 " #3 \s__graphics_stop
{ " #2 " }
+\__graphics_backend_loaded:n
+ { \cs_new_eq:NN \__graphics_backend_get_pagecount:n \__graphics_get_pagecount:n }
%% File: l3backend-pdf.dtx
\box_new:N \l__pdf_internal_box
\cs_new_protected:Npn \__pdf_backend_catalog_gput:nn #1#2 { }
Modified: trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-luatex.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-luatex.def 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-luatex.def 2022-04-11 20:14:43 UTC (rev 63007)
@@ -26,7 +26,7 @@
%%
%% File: l3backend-basics.dtx
\ProvidesExplFile
- {l3backend-luatex.def}{2022-02-07}{}
+ {l3backend-luatex.def}{2022-04-10}{}
{L3 backend support: PDF output (LuaTeX)}
\cs_if_exist:NTF \__kernel_dependency_version_check:nn
{
@@ -535,72 +535,97 @@
\__kernel_backend_scope_end:
}
%% File: l3backend-graphics.dtx
+\cs_new_protected:Npn \__graphics_backend_loaded:n #1
+ {
+ \cs_if_exist:NTF \hook_gput_code:nnn
+ {
+ \hook_gput_code:nnn
+ { file / l3graphics.sty / after }
+ { backend }
+ {#1}
+ }
+ {#1}
+ }
+\__graphics_backend_loaded:n
+ {
+ \seq_set_from_clist:Nn
+ \l_graphics_search_ext_seq
+ { .pdf , .eps , .png , .jpg , .jpeg }
+ }
\tl_new:N \l__graphics_graphics_attr_tl
\cs_new_protected:Npn \__graphics_backend_getbb_jpg:n #1
{
- \int_zero:N \l_graphics_page_int
- \tl_clear:N \l_graphics_pagebox_tl
+ \int_zero:N \l__graphics_page_int
+ \tl_clear:N \l__graphics_pagebox_tl
\tl_set:Nx \l__graphics_graphics_attr_tl
{
- \tl_if_empty:NF \l_graphics_decodearray_tl
- { :D \l_graphics_decodearray_tl }
- \bool_if:NT \l_graphics_interpolate_bool
+ \tl_if_empty:NF \l__graphics_decodearray_str
+ { :D \l__graphics_decodearray_str }
+ \bool_if:NT \l__graphics_interpolate_bool
{ :I }
}
\tl_clear:N \l__graphics_graphics_attr_tl
\__graphics_backend_getbb_auxi:n {#1}
}
+\cs_new_eq:NN \__graphics_backend_getbb_jpeg:n \__graphics_backend_getbb_jpg:n
\cs_new_eq:NN \__graphics_backend_getbb_png:n \__graphics_backend_getbb_jpg:n
\cs_new_protected:Npn \__graphics_backend_getbb_pdf:n #1
{
- \tl_clear:N \l_graphics_decodearray_tl
- \bool_set_false:N \l_graphics_interpolate_bool
+ \tl_clear:N \l__graphics_decodearray_str
+ \bool_set_false:N \l__graphics_interpolate_bool
\tl_set:Nx \l__graphics_graphics_attr_tl
{
- : \l_graphics_pagebox_tl
- \int_compare:nNnT \l_graphics_page_int > 1
- { :P \int_use:N \l_graphics_page_int }
+ : \l__graphics_pagebox_tl
+ \int_compare:nNnT \l__graphics_page_int > 1
+ { :P \int_use:N \l__graphics_page_int }
}
\__graphics_backend_getbb_auxi:n {#1}
}
\cs_new_protected:Npn \__graphics_backend_getbb_auxi:n #1
{
- \graphics_bb_restore:xF { #1 \l__graphics_graphics_attr_tl }
+ \__graphics_bb_restore:xF { #1 \l__graphics_graphics_attr_tl }
{ \__graphics_backend_getbb_auxii:n {#1} }
}
\cs_new_protected:Npn \__graphics_backend_getbb_auxii:n #1
{
+ \exp_args:Ne \__graphics_backend_getbb_auxiii:n
+ { \__graphics_backend_dequote:w #1 " #1 " \s__graphics_stop }
+ \int_const:cn { c__graphics_ #1 \l__graphics_graphics_attr_tl _int }
+ { \tex_the:D \tex_pdflastximage:D }
+ \__graphics_bb_save:x { #1 \l__graphics_graphics_attr_tl }
+ }
+\cs_new_protected:Npn \__graphics_backend_getbb_auxiii:n #1
+ {
\tex_immediate:D \tex_pdfximage:D
\bool_lazy_or:nnT
- { \l_graphics_interpolate_bool }
- { ! \tl_if_empty_p:N \l_graphics_decodearray_tl }
+ { \l__graphics_interpolate_bool }
+ { ! \tl_if_empty_p:N \l__graphics_decodearray_str }
{
attr ~
{
- \tl_if_empty:NF \l_graphics_decodearray_tl
- { /Decode~[ \l_graphics_decodearray_tl ] }
- \bool_if:NT \l_graphics_interpolate_bool
+ \tl_if_empty:NF \l__graphics_decodearray_str
+ { /Decode~[ \l__graphics_decodearray_str ] }
+ \bool_if:NT \l__graphics_interpolate_bool
{ /Interpolate~true }
}
}
- \int_compare:nNnT \l_graphics_page_int > 0
- { page ~ \int_use:N \l_graphics_page_int }
- \tl_if_empty:NF \l_graphics_pagebox_tl
- { \l_graphics_pagebox_tl }
+ \int_compare:nNnT \l__graphics_page_int > 0
+ { page ~ \int_use:N \l__graphics_page_int }
+ \tl_if_empty:NF \l__graphics_pagebox_tl
+ { \l__graphics_pagebox_tl }
{#1}
\hbox_set:Nn \l__graphics_internal_box
{ \tex_pdfrefximage:D \tex_pdflastximage:D }
- \dim_set:Nn \l_graphics_urx_dim { \box_wd:N \l__graphics_internal_box }
- \dim_set:Nn \l_graphics_ury_dim { \box_ht:N \l__graphics_internal_box }
- \int_const:cn { c__graphics_graphics_ #1 \l__graphics_graphics_attr_tl _int }
- { \tex_the:D \tex_pdflastximage:D }
- \graphics_bb_save:x { #1 \l__graphics_graphics_attr_tl }
+ \dim_set:Nn \l__graphics_urx_dim { \box_wd:N \l__graphics_internal_box }
+ \dim_set:Nn \l__graphics_ury_dim { \box_ht:N \l__graphics_internal_box }
}
+\cs_new:Npn \__graphics_backend_dequote:w #1 " #2 " #3 \s__graphics_stop {#2}
\cs_new_protected:Npn \__graphics_backend_include_jpg:n #1
{
\tex_pdfrefximage:D
- \int_use:c { c__graphics_graphics_ #1 \l__graphics_graphics_attr_tl _int }
+ \int_use:c { c__graphics_ #1 \l__graphics_graphics_attr_tl _int }
}
+\cs_new_eq:NN \__graphics_backend_include_jpeg:n \__graphics_backend_include_jpg:n
\cs_new_eq:NN \__graphics_backend_include_pdf:n \__graphics_backend_include_jpg:n
\cs_new_eq:NN \__graphics_backend_include_png:n \__graphics_backend_include_jpg:n
\sys_if_shell:T
@@ -616,8 +641,12 @@
\l__graphics_backend_ext_str
\exp_args:Nx \__graphics_backend_getbb_eps:nn
{
- \l__graphics_backend_name_str - \str_tail:N \l__graphics_backend_ext_str
- -converted-to.pdf
+ \exp_args:Ne \__kernel_file_name_quote:n
+ {
+ \l__graphics_backend_name_str
+ - \str_tail:N \l__graphics_backend_ext_str
+ -converted-to.pdf
+ }
}
{#1}
}
@@ -628,7 +657,7 @@
\sys_shell_now:n
{ repstopdf ~ #2 ~ #1 }
}
- \tl_set:Nn \l_graphics_name_tl {#1}
+ \tl_set:Nn \l__graphics_final_name_str {#1}
\__graphics_backend_getbb_pdf:n {#1}
}
\cs_new_protected:Npn \__graphics_backend_include_eps:n #1
@@ -637,11 +666,21 @@
\l__graphics_backend_dir_str \l__graphics_backend_name_str \l__graphics_backend_ext_str
\exp_args:Nx \__graphics_backend_include_pdf:n
{
- \l__graphics_backend_name_str - \str_tail:N \l__graphics_backend_ext_str
- -converted-to.pdf
+ \exp_args:Ne \__kernel_file_name_quote:n
+ {
+ \l__graphics_backend_name_str
+ - \str_tail:N \l__graphics_backend_ext_str
+ -converted-to.pdf
+ }
}
}
}
+\cs_new_protected:Npn \__graphics_backend_get_pagecount:n #1
+ {
+ \tex_immediate:D \tex_pdfximage:D {#1}
+ \int_const:cn { c__graphics_ #1 _pages_int }
+ { \int_use:N \tex_pdflastximagepages:D }
+ }
%% File: l3backend-pdf.dtx
\box_new:N \l__pdf_internal_box
\cs_new_protected:Npn \__pdf_backend_annotation:nnnn #1#2#3#4
Modified: trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-pdftex.def 2022-04-11 20:14:43 UTC (rev 63007)
@@ -26,7 +26,7 @@
%%
%% File: l3backend-basics.dtx
\ProvidesExplFile
- {l3backend-pdftex.def}{2022-02-07}{}
+ {l3backend-pdftex.def}{2022-04-10}{}
{L3 backend support: PDF output (pdfTeX)}
\cs_if_exist:NTF \__kernel_dependency_version_check:nn
{
@@ -535,72 +535,97 @@
\__kernel_backend_scope_end:
}
%% File: l3backend-graphics.dtx
+\cs_new_protected:Npn \__graphics_backend_loaded:n #1
+ {
+ \cs_if_exist:NTF \hook_gput_code:nnn
+ {
+ \hook_gput_code:nnn
+ { file / l3graphics.sty / after }
+ { backend }
+ {#1}
+ }
+ {#1}
+ }
+\__graphics_backend_loaded:n
+ {
+ \seq_set_from_clist:Nn
+ \l_graphics_search_ext_seq
+ { .pdf , .eps , .png , .jpg , .jpeg }
+ }
\tl_new:N \l__graphics_graphics_attr_tl
\cs_new_protected:Npn \__graphics_backend_getbb_jpg:n #1
{
- \int_zero:N \l_graphics_page_int
- \tl_clear:N \l_graphics_pagebox_tl
+ \int_zero:N \l__graphics_page_int
+ \tl_clear:N \l__graphics_pagebox_tl
\tl_set:Nx \l__graphics_graphics_attr_tl
{
- \tl_if_empty:NF \l_graphics_decodearray_tl
- { :D \l_graphics_decodearray_tl }
- \bool_if:NT \l_graphics_interpolate_bool
+ \tl_if_empty:NF \l__graphics_decodearray_str
+ { :D \l__graphics_decodearray_str }
+ \bool_if:NT \l__graphics_interpolate_bool
{ :I }
}
\tl_clear:N \l__graphics_graphics_attr_tl
\__graphics_backend_getbb_auxi:n {#1}
}
+\cs_new_eq:NN \__graphics_backend_getbb_jpeg:n \__graphics_backend_getbb_jpg:n
\cs_new_eq:NN \__graphics_backend_getbb_png:n \__graphics_backend_getbb_jpg:n
\cs_new_protected:Npn \__graphics_backend_getbb_pdf:n #1
{
- \tl_clear:N \l_graphics_decodearray_tl
- \bool_set_false:N \l_graphics_interpolate_bool
+ \tl_clear:N \l__graphics_decodearray_str
+ \bool_set_false:N \l__graphics_interpolate_bool
\tl_set:Nx \l__graphics_graphics_attr_tl
{
- : \l_graphics_pagebox_tl
- \int_compare:nNnT \l_graphics_page_int > 1
- { :P \int_use:N \l_graphics_page_int }
+ : \l__graphics_pagebox_tl
+ \int_compare:nNnT \l__graphics_page_int > 1
+ { :P \int_use:N \l__graphics_page_int }
}
\__graphics_backend_getbb_auxi:n {#1}
}
\cs_new_protected:Npn \__graphics_backend_getbb_auxi:n #1
{
- \graphics_bb_restore:xF { #1 \l__graphics_graphics_attr_tl }
+ \__graphics_bb_restore:xF { #1 \l__graphics_graphics_attr_tl }
{ \__graphics_backend_getbb_auxii:n {#1} }
}
\cs_new_protected:Npn \__graphics_backend_getbb_auxii:n #1
{
+ \exp_args:Ne \__graphics_backend_getbb_auxiii:n
+ { \__graphics_backend_dequote:w #1 " #1 " \s__graphics_stop }
+ \int_const:cn { c__graphics_ #1 \l__graphics_graphics_attr_tl _int }
+ { \tex_the:D \tex_pdflastximage:D }
+ \__graphics_bb_save:x { #1 \l__graphics_graphics_attr_tl }
+ }
+\cs_new_protected:Npn \__graphics_backend_getbb_auxiii:n #1
+ {
\tex_immediate:D \tex_pdfximage:D
\bool_lazy_or:nnT
- { \l_graphics_interpolate_bool }
- { ! \tl_if_empty_p:N \l_graphics_decodearray_tl }
+ { \l__graphics_interpolate_bool }
+ { ! \tl_if_empty_p:N \l__graphics_decodearray_str }
{
attr ~
{
- \tl_if_empty:NF \l_graphics_decodearray_tl
- { /Decode~[ \l_graphics_decodearray_tl ] }
- \bool_if:NT \l_graphics_interpolate_bool
+ \tl_if_empty:NF \l__graphics_decodearray_str
+ { /Decode~[ \l__graphics_decodearray_str ] }
+ \bool_if:NT \l__graphics_interpolate_bool
{ /Interpolate~true }
}
}
- \int_compare:nNnT \l_graphics_page_int > 0
- { page ~ \int_use:N \l_graphics_page_int }
- \tl_if_empty:NF \l_graphics_pagebox_tl
- { \l_graphics_pagebox_tl }
+ \int_compare:nNnT \l__graphics_page_int > 0
+ { page ~ \int_use:N \l__graphics_page_int }
+ \tl_if_empty:NF \l__graphics_pagebox_tl
+ { \l__graphics_pagebox_tl }
{#1}
\hbox_set:Nn \l__graphics_internal_box
{ \tex_pdfrefximage:D \tex_pdflastximage:D }
- \dim_set:Nn \l_graphics_urx_dim { \box_wd:N \l__graphics_internal_box }
- \dim_set:Nn \l_graphics_ury_dim { \box_ht:N \l__graphics_internal_box }
- \int_const:cn { c__graphics_graphics_ #1 \l__graphics_graphics_attr_tl _int }
- { \tex_the:D \tex_pdflastximage:D }
- \graphics_bb_save:x { #1 \l__graphics_graphics_attr_tl }
+ \dim_set:Nn \l__graphics_urx_dim { \box_wd:N \l__graphics_internal_box }
+ \dim_set:Nn \l__graphics_ury_dim { \box_ht:N \l__graphics_internal_box }
}
+\cs_new:Npn \__graphics_backend_dequote:w #1 " #2 " #3 \s__graphics_stop {#2}
\cs_new_protected:Npn \__graphics_backend_include_jpg:n #1
{
\tex_pdfrefximage:D
- \int_use:c { c__graphics_graphics_ #1 \l__graphics_graphics_attr_tl _int }
+ \int_use:c { c__graphics_ #1 \l__graphics_graphics_attr_tl _int }
}
+\cs_new_eq:NN \__graphics_backend_include_jpeg:n \__graphics_backend_include_jpg:n
\cs_new_eq:NN \__graphics_backend_include_pdf:n \__graphics_backend_include_jpg:n
\cs_new_eq:NN \__graphics_backend_include_png:n \__graphics_backend_include_jpg:n
\sys_if_shell:T
@@ -616,8 +641,12 @@
\l__graphics_backend_ext_str
\exp_args:Nx \__graphics_backend_getbb_eps:nn
{
- \l__graphics_backend_name_str - \str_tail:N \l__graphics_backend_ext_str
- -converted-to.pdf
+ \exp_args:Ne \__kernel_file_name_quote:n
+ {
+ \l__graphics_backend_name_str
+ - \str_tail:N \l__graphics_backend_ext_str
+ -converted-to.pdf
+ }
}
{#1}
}
@@ -628,7 +657,7 @@
\sys_shell_now:n
{ repstopdf ~ #2 ~ #1 }
}
- \tl_set:Nn \l_graphics_name_tl {#1}
+ \tl_set:Nn \l__graphics_final_name_str {#1}
\__graphics_backend_getbb_pdf:n {#1}
}
\cs_new_protected:Npn \__graphics_backend_include_eps:n #1
@@ -637,11 +666,21 @@
\l__graphics_backend_dir_str \l__graphics_backend_name_str \l__graphics_backend_ext_str
\exp_args:Nx \__graphics_backend_include_pdf:n
{
- \l__graphics_backend_name_str - \str_tail:N \l__graphics_backend_ext_str
- -converted-to.pdf
+ \exp_args:Ne \__kernel_file_name_quote:n
+ {
+ \l__graphics_backend_name_str
+ - \str_tail:N \l__graphics_backend_ext_str
+ -converted-to.pdf
+ }
}
}
}
+\cs_new_protected:Npn \__graphics_backend_get_pagecount:n #1
+ {
+ \tex_immediate:D \tex_pdfximage:D {#1}
+ \int_const:cn { c__graphics_ #1 _pages_int }
+ { \int_use:N \tex_pdflastximagepages:D }
+ }
%% File: l3backend-pdf.dtx
\box_new:N \l__pdf_internal_box
\cs_new_protected:Npn \__pdf_backend_annotation:nnnn #1#2#3#4
Modified: trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-xetex.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-xetex.def 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/tex/latex/l3backend/l3backend-xetex.def 2022-04-11 20:14:43 UTC (rev 63007)
@@ -26,7 +26,7 @@
%%
%% File: l3backend-basics.dtx
\ProvidesExplFile
- {l3backend-xetex.def}{2022-02-07}{}
+ {l3backend-xetex.def}{2022-04-10}{}
{L3 backend support: XeTeX}
\cs_if_exist:NTF \__kernel_dependency_version_check:nn
{
@@ -65,20 +65,6 @@
{ \__kernel_backend_literal:n { x:gsave } }
\cs_new_protected:Npn \__kernel_backend_scope_end:
{ \__kernel_backend_literal:n { x:grestore } }
-\group_begin:
- \cs_set:Npn \__sys_tmp:w #1 Version ~ #2 ~ #3 \q_stop {#2}
- \sys_get_shell:nnNTF { extractbb~--version }
- { \char_set_catcode_space:n { `\ } }
- \l__sys_internal_tl
- {
- \int_const:Nn \c__kernel_sys_dvipdfmx_version_int
- {
- \exp_after:wN \__sys_tmp:w \l__sys_internal_tl
- \q_stop
- }
- }
- { \int_const:Nn \c__kernel_sys_dvipdfmx_version_int { 0 } }
-\group_end:
%% File: l3backend-color.dtx
\cs_new_protected:Npn \__color_backend_pickup:N #1 { }
\cs_if_exist:cT { ver at color.sty }
@@ -102,72 +88,65 @@
{ \tl_set:Nn #3 { {#1} {#2} } }
}
\int_new:N \l__color_backend_stack_int
-\int_compare:nNnTF \c__kernel_sys_dvipdfmx_version_int < { 20201111 }
- { \cs_new_protected:Npn \__kernel_color_backend_stack_init:Nnn #1#2#3 { } }
+\int_new:N \g__color_backend_stack_int
+\cs_new_protected:Npx \__kernel_color_backend_stack_init:Nnn #1#2#3
{
- \int_new:N \g__color_backend_stack_int
- \cs_new_protected:Npx \__kernel_color_backend_stack_init:Nnn #1#2#3
+ \int_gincr:N \exp_not:N \g__color_backend_stack_int
+ \int_const:Nn #1 { \exp_not:N \g__color_backend_stack_int }
+ \use:x
{
- \int_gincr:N \exp_not:N \g__color_backend_stack_int
- \int_const:Nn #1 { \exp_not:N \g__color_backend_stack_int }
- \use:x
+ \__kernel_backend_first_shipout:n
{
- \__kernel_backend_first_shipout:n
+ \__kernel_backend_literal:n
{
- \__kernel_backend_literal:n
- {
- pdfcolorstackinit ~
- \exp_not:N \int_use:N \exp_not:N \g__color_backend_stack_int
- \c_space_tl
- \exp_not:N \tl_if_blank:nF {#2} { #2 ~ }
- (#3)
- }
+ pdfcolorstackinit ~
+ \exp_not:N \int_use:N \exp_not:N \g__color_backend_stack_int
+ \c_space_tl
+ \exp_not:N \tl_if_blank:nF {#2} { #2 ~ }
+ (#3)
}
- }
+ }
}
- \cs_if_exist:cTF { main at pdfcolorstack }
+ }
+\cs_if_exist:cTF { main at pdfcolorstack }
+ {
+ \int_set:Nn \l__color_backend_stack_int
+ { \int_use:c { main at pdfcolorstack } }
+ }
+ {
+ \__kernel_color_backend_stack_init:Nnn \c__color_backend_main_stack_int
+ { page ~ direct } { 0 ~ g ~ 0 ~ G }
+ \int_set_eq:NN \l__color_backend_stack_int
+ \c__color_backend_main_stack_int
+ \int_const:cn { main at pdfcolorstack } { \c__color_backend_main_stack_int }
+ }
+\cs_gset_protected:Npn \__kernel_backend_scope_end:
+ {
+ \__kernel_backend_literal:n { x:grestore }
+ \__kernel_backend_literal:x
{
- \int_set:Nn \l__color_backend_stack_int
- { \int_use:c { main at pdfcolorstack } }
+ pdfcolorstack ~
+ \int_use:N \g__color_backend_stack_int \c_space_tl current
}
+ }
+\cs_new_protected:Npn \__kernel_color_backend_stack_push:nn #1#2
+ {
+ \__kernel_backend_literal:x
{
- \__kernel_color_backend_stack_init:Nnn \c__color_backend_main_stack_int
- { page ~ direct } { 0 ~ g ~ 0 ~ G }
- \int_set_eq:NN \l__color_backend_stack_int
- \c__color_backend_main_stack_int
- \int_const:cn { main at pdfcolorstack } { \c__color_backend_main_stack_int }
+ pdfcolorstack ~
+ \int_eval:n {#1} ~
+ push ~ (#2)
}
- \cs_gset_protected:Npn \__kernel_backend_scope_end:
- {
- \__kernel_backend_literal:n { x:grestore }
- \__kernel_backend_literal:x
- {
- pdfcolorstack ~
- \int_use:N \g__color_backend_stack_int \c_space_tl current
- }
- }
}
-\int_compare:nNnF \c__kernel_sys_dvipdfmx_version_int < { 20201111 }
+\cs_generate_variant:Nn \__kernel_color_backend_stack_push:nn { nx }
+\cs_new_protected:Npn \__kernel_color_backend_stack_pop:n #1
{
- \cs_new_protected:Npn \__kernel_color_backend_stack_push:nn #1#2
+ \__kernel_backend_literal:x
{
- \__kernel_backend_literal:x
- {
- pdfcolorstack ~
- \int_eval:n {#1} ~
- push ~ (#2)
- }
+ pdfcolorstack ~
+ \int_eval:n {#1} ~
+ pop
}
- \cs_generate_variant:Nn \__kernel_color_backend_stack_push:nn { nx }
- \cs_new_protected:Npn \__kernel_color_backend_stack_pop:n #1
- {
- \__kernel_backend_literal:x
- {
- pdfcolorstack ~
- \int_eval:n {#1} ~
- pop
- }
- }
}
\tl_new:N \l__color_backend_fill_tl
\tl_new:N \l__color_backend_stroke_tl
@@ -185,15 +164,6 @@
}
\cs_new_protected:Npn \__color_backend_reset:
{ \__kernel_color_backend_stack_pop:n \l__color_backend_stack_int }
-\int_compare:nNnT \c__kernel_sys_dvipdfmx_version_int < { 20201111 }
- {
- \cs_gset_protected:Npn \__color_backend_select_cmyk:n #1
- { \__kernel_backend_literal:n { pdf: bc ~ [#1] } }
- \cs_gset_eq:NN \__color_backend_select_gray:n \__color_backend_select_cmyk:n
- \cs_gset_eq:NN \__color_backend_select_rgb:n \__color_backend_select_cmyk:n
- \cs_gset_protected:Npn \__color_backend_reset:
- { \__kernel_backend_literal:n { pdf: ec } }
- }
\prop_new:N \g__color_backend_colorant_prop
\cs_new:Npx \__color_backend_devicen_colorants:n #1
{
@@ -380,12 +350,6 @@
}
}
}
-\int_compare:nNnT \c__kernel_sys_dvipdfmx_version_int < { 20201111 }
- {
- \cs_gset_protected:Npn \__color_backend_select_separation:nn #1#2 { }
- \cs_gset_eq:NN \__color_backend_select_devicen:nn
- \__color_backend_select_separation:nn
- }
\cs_new_protected:Npn \__color_backend_fill_cmyk:n #1
{ \__color_backend_fill:n { #1 ~ k } }
\cs_new_protected:Npn \__color_backend_fill_gray:n #1
@@ -418,27 +382,6 @@
{ \__color_backend_stroke:n { /#1 ~ CS ~ #2 ~ SCN } }
\cs_new_eq:NN \__color_backend_fill_devicen:nn \__color_backend_fill_separation:nn
\cs_new_eq:NN \__color_backend_stroke_devicen:nn \__color_backend_stroke_separation:nn
-\int_compare:nNnT \c__kernel_sys_dvipdfmx_version_int < { 20201111 }
- {
- \cs_gset_protected:Npn \__color_backend_fill_cmyk:n #1
- {
- \__kernel_backend_literal:n { pdf: bc ~ [#1] }
- \group_insert_after:N \__color_backend_reset:
- }
- \cs_gset_eq:NN \__color_backend_fill_gray:n \__color_backend_fill_cmyk:n
- \cs_gset_eq:NN \__color_backend_fill_rgb:n \__color_backend_fill_cmyk:n
- \cs_gset_protected:Npn \__color_backend_reset:
- { \__kernel_backend_literal:n { pdf: ec } }
- \cs_gset_protected:Npn \__color_backend_stroke:n #1
- { \__kernel_backend_literal:n {#1} }
- \cs_gset_protected:Npn \__color_backend_fill_separation:nn #1#2 { }
- \cs_gset_eq:NN \__color_backend_fill_devicen:nn
- \__color_backend_fill_separation:nn
- \cs_gset_eq:NN \__color_backend_stroke_separation:nn
- \__color_backend_fill_separation:nn
- \cs_gset_eq:NN \__color_backend_stroke_devicen:nn
- \__color_backend_stroke_separation:nn
- }
%% File: l3backend-box.dtx
\cs_new_protected:Npn \__box_backend_clip:N #1
{
@@ -660,7 +603,27 @@
\__kernel_backend_scope_end:
}
%% File: l3backend-graphics.dtx
-\cs_new_eq:NN \__graphics_backend_getbb_eps:n \graphics_read_bb:n
+\cs_new_protected:Npn \__graphics_backend_loaded:n #1
+ {
+ \cs_if_exist:NTF \hook_gput_code:nnn
+ {
+ \hook_gput_code:nnn
+ { file / l3graphics.sty / after }
+ { backend }
+ {#1}
+ }
+ {#1}
+ }
+\__graphics_backend_loaded:n
+ {
+ \seq_set_from_clist:Nn \l_graphics_search_ext_seq
+ { .pdf , .eps , .ps , .png , .jpg ., jpeg , .bmp }
+ }
+\__graphics_backend_loaded:n
+ {
+ \cs_new_eq:NN \__graphics_backend_getbb_eps:n \__graphics_read_bb:n
+ \cs_new_eq:NN \__graphics_backend_getbb_ps:n \__graphics_read_bb:n
+ }
\int_new:N \g__graphics_track_int
\cs_new_protected:Npn \__graphics_backend_include_eps:n #1
{
@@ -667,26 +630,29 @@
\__kernel_backend_literal:x
{
PSfile = #1 \c_space_tl
- llx = \dim_to_decimal_in_bp:n \l_graphics_llx_dim \c_space_tl
- lly = \dim_to_decimal_in_bp:n \l_graphics_lly_dim \c_space_tl
- urx = \dim_to_decimal_in_bp:n \l_graphics_urx_dim \c_space_tl
- ury = \dim_to_decimal_in_bp:n \l_graphics_ury_dim
+ llx = \dim_to_decimal_in_bp:n \l__graphics_llx_dim \c_space_tl
+ lly = \dim_to_decimal_in_bp:n \l__graphics_lly_dim \c_space_tl
+ urx = \dim_to_decimal_in_bp:n \l__graphics_urx_dim \c_space_tl
+ ury = \dim_to_decimal_in_bp:n \l__graphics_ury_dim
}
}
+\cs_new_eq:NN \__graphics_backend_include_ps:n \__graphics_backend_include_eps:n
\cs_new_protected:Npn \__graphics_backend_include_jpg:n #1
{ \__graphics_backend_include_auxi:nn {#1} { image } }
+\cs_new_eq:NN \__graphics_backend_include_jpeg:n \__graphics_backend_include_jpg:n
\cs_new_eq:NN \__graphics_backend_include_png:n \__graphics_backend_include_jpg:n
+\cs_new_eq:NN \__graphics_backend_include_bmp:n \__graphics_backend_include_jpg:n
\cs_new_protected:Npn \__graphics_backend_include_auxi:nn #1#2
{
\__graphics_backend_include_auxii:xnn
{
- \tl_if_empty:NF \l_graphics_pagebox_tl
- { : \l_graphics_pagebox_tl }
- \int_compare:nNnT \l_graphics_page_int > 1
- { :P \int_use:N \l_graphics_page_int }
- \tl_if_empty:NF \l_graphics_decodearray_tl
- { :D \l_graphics_decodearray_tl }
- \bool_if:NT \l_graphics_interpolate_bool
+ \tl_if_empty:NF \l__graphics_pagebox_tl
+ { : \l__graphics_pagebox_tl }
+ \int_compare:nNnT \l__graphics_page_int > 1
+ { :P \int_use:N \l__graphics_page_int }
+ \tl_if_empty:NF \l__graphics_decodearray_str
+ { :D \l__graphics_decodearray_str }
+ \bool_if:NT \l__graphics_interpolate_bool
{ :I }
}
{#1} {#2}
@@ -693,10 +659,10 @@
}
\cs_new_protected:Npn \__graphics_backend_include_auxii:nnn #1#2#3
{
- \int_if_exist:cTF { c__graphics_graphics_ #2#1 _int }
+ \int_if_exist:cTF { c__graphics_ #2#1 _int }
{
\__kernel_backend_literal:x
- { pdf:usexobj~@graphic \int_use:c { c__graphics_graphics_ #2#1 _int } }
+ { pdf:usexobj~@graphic \int_use:c { c__graphics_ #2#1 _int } }
}
{ \__graphics_backend_include_auxiii:nnn {#2} {#1} {#3} }
}
@@ -704,31 +670,31 @@
\cs_new_protected:Npn \__graphics_backend_include_auxiii:nnn #1#2#3
{
\int_gincr:N \g__graphics_track_int
- \int_const:cn { c__graphics_graphics_ #1#2 _int } { \g__graphics_track_int }
+ \int_const:cn { c__graphics_ #1#2 _int } { \g__graphics_track_int }
\__kernel_backend_literal:x
{
pdf:#3~
- @graphic \int_use:c { c__graphics_graphics_ #1#2 _int } ~
- \int_compare:nNnT \l_graphics_page_int > 1
- { page ~ \int_use:N \l_graphics_page_int \c_space_tl }
- \tl_if_empty:NF \l_graphics_pagebox_tl
+ @graphic \int_use:c { c__graphics_ #1#2 _int } ~
+ \int_compare:nNnT \l__graphics_page_int > 1
+ { page ~ \int_use:N \l__graphics_page_int \c_space_tl }
+ \tl_if_empty:NF \l__graphics_pagebox_tl
{
- pagebox ~ \l_graphics_pagebox_tl \c_space_tl
+ pagebox ~ \l__graphics_pagebox_tl \c_space_tl
bbox ~
- \dim_to_decimal_in_bp:n \l_graphics_llx_dim \c_space_tl
- \dim_to_decimal_in_bp:n \l_graphics_lly_dim \c_space_tl
- \dim_to_decimal_in_bp:n \l_graphics_urx_dim \c_space_tl
- \dim_to_decimal_in_bp:n \l_graphics_ury_dim \c_space_tl
+ \dim_to_decimal_in_bp:n \l__graphics_llx_dim \c_space_tl
+ \dim_to_decimal_in_bp:n \l__graphics_lly_dim \c_space_tl
+ \dim_to_decimal_in_bp:n \l__graphics_urx_dim \c_space_tl
+ \dim_to_decimal_in_bp:n \l__graphics_ury_dim \c_space_tl
}
(#1)
\bool_lazy_or:nnT
- { \l_graphics_interpolate_bool }
- { ! \tl_if_empty_p:N \l_graphics_decodearray_tl }
+ { \l__graphics_interpolate_bool }
+ { ! \tl_if_empty_p:N \l__graphics_decodearray_str }
{
<<
- \tl_if_empty:NF \l_graphics_decodearray_tl
- { /Decode~[ \l_graphics_decodearray_tl ] }
- \bool_if:NT \l_graphics_interpolate_bool
+ \tl_if_empty:NF \l__graphics_decodearray_str
+ { /Decode~[ \l__graphics_decodearray_str ] }
+ \bool_if:NT \l__graphics_interpolate_bool
{ /Interpolate~true> }
>>
}
@@ -736,21 +702,23 @@
}
\cs_new_protected:Npn \__graphics_backend_getbb_jpg:n #1
{
- \int_zero:N \l_graphics_page_int
- \tl_clear:N \l_graphics_pagebox_tl
+ \int_zero:N \l__graphics_page_int
+ \tl_clear:N \l__graphics_pagebox_tl
\__graphics_backend_getbb_auxi:nN {#1} \tex_XeTeXpicfile:D
}
+\cs_new_eq:NN \__graphics_backend_getbb_jpeg:n \__graphics_backend_getbb_jpg:n
\cs_new_eq:NN \__graphics_backend_getbb_png:n \__graphics_backend_getbb_jpg:n
+\cs_new_eq:NN \__graphics_backend_getbb_bmp:n \__graphics_backend_getbb_jpg:n
\cs_new_protected:Npn \__graphics_backend_getbb_pdf:n #1
{
- \tl_clear:N \l_graphics_decodearray_tl
- \bool_set_false:N \l_graphics_interpolate_bool
+ \tl_clear:N \l__graphics_decodearray_str
+ \bool_set_false:N \l__graphics_interpolate_bool
\__graphics_backend_getbb_auxi:nN {#1} \tex_XeTeXpdffile:D
}
\cs_new_protected:Npn \__graphics_backend_getbb_auxi:nN #1#2
{
- \int_compare:nNnTF \l_graphics_page_int > 1
- { \__graphics_backend_getbb_auxii:VnN \l_graphics_page_int {#1} #2 }
+ \int_compare:nNnTF \l__graphics_page_int > 1
+ { \__graphics_backend_getbb_auxii:VnN \l__graphics_page_int {#1} #2 }
{ \__graphics_backend_getbb_auxiii:nNnn {#1} #2 { :P 1 } { page 1 } }
}
\cs_new_protected:Npn \__graphics_backend_getbb_auxii:nnN #1#2#3
@@ -758,8 +726,8 @@
\cs_generate_variant:Nn \__graphics_backend_getbb_auxii:nnN { V }
\cs_new_protected:Npn \__graphics_backend_getbb_auxiii:nNnn #1#2#3#4
{
- \tl_if_empty:NTF \l_graphics_pagebox_tl
- { \__graphics_backend_getbb_auxiv:VnNnn \l_graphics_pagebox_tl }
+ \tl_if_empty:NTF \l__graphics_pagebox_tl
+ { \__graphics_backend_getbb_auxiv:VnNnn \l__graphics_pagebox_tl }
{ \__graphics_backend_getbb_auxv:nNnn }
{#1} #2 {#3} {#4}
}
@@ -768,33 +736,43 @@
\use:x
{
\__graphics_backend_getbb_auxv:nNnn {#2} #3 { : #1 #4 }
- { #5 ~ \__graphics_backend_getbb_pagebox:w #1 }
+ {
+ #5
+ \tl_if_blank:nF {#1}
+ { \c_space_tl \__graphics_backend_getbb_pagebox:w #1 }
+ }
}
}
\cs_generate_variant:Nn \__graphics_backend_getbb_auxiv:nnNnn { V }
\cs_new_protected:Npn \__graphics_backend_getbb_auxv:nNnn #1#2#3#4
{
- \graphics_bb_restore:nF {#1#3}
+ \__graphics_bb_restore:nF {#1#3}
{ \__graphics_backend_getbb_auxvi:nNnn {#1} #2 {#3} {#4} }
}
\cs_new_protected:Npn \__graphics_backend_getbb_auxvi:nNnn #1#2#3#4
{
\hbox_set:Nn \l__graphics_internal_box { #2 #1 ~ #4 }
- \dim_set:Nn \l_graphics_urx_dim { \box_wd:N \l__graphics_internal_box }
- \dim_set:Nn \l_graphics_ury_dim { \box_ht:N \l__graphics_internal_box }
- \graphics_bb_save:n {#1#3}
+ \dim_set:Nn \l__graphics_urx_dim { \box_wd:N \l__graphics_internal_box }
+ \dim_set:Nn \l__graphics_ury_dim { \box_ht:N \l__graphics_internal_box }
+ \__graphics_bb_save:n {#1#3}
}
\cs_new:Npn \__graphics_backend_getbb_pagebox:w #1 box {#1}
\cs_new_protected:Npn \__graphics_backend_include_pdf:n #1
{
- \tex_XeTeXpdffile:D
- \__graphics_backend_include_pdf_quote:w #1 "#1" \s__graphics_stop \c_space_tl
- \int_compare:nNnT \l_graphics_page_int > 0
- { page ~ \int_use:N \l_graphics_page_int \c_space_tl }
- \exp_after:wN \__graphics_backend_getbb_pagebox:w \l_graphics_pagebox_tl
+ \tex_XeTeXpdffile:D #1 ~
+ \int_compare:nNnT \l__graphics_page_int > 0
+ { page ~ \int_use:N \l__graphics_page_int \c_space_tl }
+ \exp_after:wN \__graphics_backend_getbb_pagebox:w \l__graphics_pagebox_tl
}
-\cs_new:Npn \__graphics_backend_include_pdf_quote:w #1 " #2 " #3 \s__graphics_stop
- { " #2 " }
+\cs_new_protected:Npn \__graphics_backend_get_pagecount:n #1
+ {
+ \int_const:cn { c__graphics_ #1 _pages_int }
+ {
+ \int_max:nn
+ { \int_use:N \tex_XeTeXpdfpagecount:D #1 ~ }
+ { 1 }
+ }
+ }
%% File: l3backend-pdf.dtx
\box_new:N \l__pdf_internal_box
\cs_new_protected:Npx \__pdf_backend:n #1
@@ -884,19 +862,13 @@
{ \__pdf_backend_link_begin:n {#1#2} }
\cs_new_protected:Npx \__pdf_backend_link_begin:n #1
{
- \int_compare:nNnF \c__kernel_sys_dvipdfmx_version_int < { 20201111 }
- {
- \exp_not:N \int_gincr:N \exp_not:N \g__pdf_backend_link_int
- }
+ \exp_not:N \int_gincr:N \exp_not:N \g__pdf_backend_link_int
\__pdf_backend:x
{
bann ~
- \int_compare:nNnF \c__kernel_sys_dvipdfmx_version_int < { 20201111 }
- {
- @pdf.lnk
- \exp_not:N \int_use:N \exp_not:N \g__pdf_backend_link_int
- \c_space_tl
- }
+ @pdf.lnk
+ \exp_not:N \int_use:N \exp_not:N \g__pdf_backend_link_int
+ \c_space_tl
<<
/Type /Annot
#1
@@ -905,14 +877,8 @@
}
\cs_new_protected:Npn \__pdf_backend_link_end:
{ \__pdf_backend:n { eann } }
-\cs_new:Npx \__pdf_backend_link_last:
- {
- \int_compare:nNnF \c__kernel_sys_dvipdfmx_version_int < { 20201111 }
- {
- @pdf.lnk
- \exp_not:N \int_use:N \exp_not:N \g__pdf_backend_link_int
- }
- }
+\cs_new:Npn \__pdf_backend_link_last:
+ { @pdf.lnk \int_use:N \g__pdf_backend_link_int }
\cs_new_protected:Npn \__pdf_backend_link_margin:n #1
{ \__kernel_backend_literal:x { dvipdfmx:config~g~ \dim_eval:n {#1} } }
\cs_new_protected:Npn \__pdf_backend_destination:nn #1#2
Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/l3benchmark/l3benchmark.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/l3benchmark/l3benchmark.sty 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3benchmark/l3benchmark.sty 2022-04-11 20:14:43 UTC (rev 63007)
@@ -20,7 +20,7 @@
%%
%% File: l3benchmark.dtx
\RequirePackage{expl3}
-\ProvidesExplPackage{l3benchmark}{2022-02-05}{}
+\ProvidesExplPackage{l3benchmark}{2022-04-10}{}
{L3 Experimental benchmarking}
\fp_new:N \g_benchmark_duration_target_fp
\fp_gset:Nn \g_benchmark_duration_target_fp { 1 }
Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/l3bitset/l3bitset.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/l3bitset/l3bitset.sty 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3bitset/l3bitset.sty 2022-04-11 20:14:43 UTC (rev 63007)
@@ -19,7 +19,7 @@
%% and all files in that bundle must be distributed together.
%%
%% File: l3bitset.dtx
-\ProvidesExplPackage{l3bitset}{2022-02-05}{}
+\ProvidesExplPackage{l3bitset}{2022-04-10}{}
{L3 Experimental bitset support}
\cs_new_protected:Npn \bitset_new:N #1
{
Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty 2022-04-11 20:14:43 UTC (rev 63007)
@@ -28,7 +28,7 @@
%%
%% File: l3draw.dtx
\RequirePackage{expl3}
-\ProvidesExplPackage{l3draw}{2022-02-05}{}
+\ProvidesExplPackage{l3draw}{2022-04-10}{}
{L3 Experimental core drawing support}
\scan_new:N \s__draw_mark
\scan_new:N \s__draw_stop
Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/l3graphics/l3graphics.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/l3graphics/l3graphics.sty 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3graphics/l3graphics.sty 2022-04-11 20:14:43 UTC (rev 63007)
@@ -20,54 +20,71 @@
%%
%% File: l3graphics.dtx
\RequirePackage{expl3}
-\ProvidesExplPackage{l3graphics}{2022-02-05}{}
+\ProvidesExplPackage{l3graphics}{2022-04-10}{}
{L3 Experimental graphics inclusion support}
-\ior_new:N \l__graphics_tmp_ior
-\tl_new:N \l__graphics_tmp_tl
+\ior_new:N \l__graphics_internal_ior
+\tl_new:N \l__graphics_internal_tl
\scan_new:N \s__graphics_stop
-\tl_new:N \l_graphics_decodearray_tl
-\tl_new:N \l_graphics_pagebox_tl
-\bool_new:N \l_graphics_interpolate_bool
-\tl_set:Nn \l_graphics_pagebox_tl { cropbox }
-\int_new:N \l_graphics_page_int
-\dim_new:N \l_graphics_llx_dim
-\dim_new:N \l_graphics_lly_dim
-\dim_new:N \l_graphics_urx_dim
-\dim_new:N \l_graphics_ury_dim
-\cs_new_protected:Npn \graphics_bb_save:n #1
+\tl_new:N \l__graphics_pagebox_tl
+\keys_define:nn { graphics }
{
+ decodearray .str_set:N =
+ \l__graphics_decodearray_str ,
+ draft .bool_set:N =
+ \l__graphics_draft_bool ,
+ interpolate .bool_set:N =
+ \l__graphics_interpolate_bool ,
+ pagebox .choices:nn =
+ { art , bleed , crop , media , trim }
+ {
+ \tl_set:Nx \l__graphics_pagebox_tl
+ { \tl_use:N \l_keys_choice_tl box }
+ } ,
+ pagebox .initial:n =
+ crop ,
+ page .int_set:N =
+ \l__graphics_page_int ,
+ type . str_set:N =
+ \l__graphics_type_str
+ }
+\dim_new:N \l__graphics_llx_dim
+\dim_new:N \l__graphics_lly_dim
+\dim_new:N \l__graphics_urx_dim
+\dim_new:N \l__graphics_ury_dim
+\cs_new_protected:Npn \__graphics_bb_save:n #1
+ {
\dim_if_exist:cTF { c__graphics_ #1 _urx_dim }
{ \msg_error:nnn { graphic } { bb-already-cached } {#1} }
{
- \dim_compare:nNnF \l_graphics_llx_dim = { 0pt }
- { \dim_const:cn { c__graphics_ #1 _llx_dim } { \l_graphics_llx_dim } }
- \dim_compare:nNnF \l_graphics_lly_dim = { 0pt }
- { \dim_const:cn { c__graphics_ #1 _lly_dim } { \l_graphics_lly_dim } }
- \dim_const:cn { c__graphics_ #1 _urx_dim } { \l_graphics_urx_dim }
- \dim_const:cn { c__graphics_ #1 _ury_dim } { \l_graphics_ury_dim }
+ \dim_compare:nNnF \l__graphics_llx_dim = { 0pt }
+ { \dim_const:cn { c__graphics_ #1 _llx_dim } { \l__graphics_llx_dim } }
+ \dim_compare:nNnF \l__graphics_lly_dim = { 0pt }
+ { \dim_const:cn { c__graphics_ #1 _lly_dim } { \l__graphics_lly_dim } }
+ \dim_const:cn { c__graphics_ #1 _urx_dim } { \l__graphics_urx_dim }
+ \dim_const:cn { c__graphics_ #1 _ury_dim } { \l__graphics_ury_dim }
}
}
-\cs_generate_variant:Nn \graphics_bb_save:n { x }
-\cs_new_protected:Npn \graphics_bb_restore:nF #1#2
+\cs_generate_variant:Nn \__graphics_bb_save:n { x }
+\cs_new_protected:Npn \__graphics_bb_restore:nF #1#2
{
\dim_if_exist:cTF { c__graphics_ #1 _urx_dim }
{
- \dim_set_eq:Nc \l_graphics_urx_dim { c__graphics_ #1 _urx_dim }
- \dim_set_eq:Nc \l_graphics_ury_dim { c__graphics_ #1 _ury_dim }
+ \dim_set_eq:Nc \l__graphics_urx_dim { c__graphics_ #1 _urx_dim }
+ \dim_set_eq:Nc \l__graphics_ury_dim { c__graphics_ #1 _ury_dim }
\dim_if_exist:cTF { c__graphics_ #1 _llx_dim }
- { \dim_set_eq:Nc \l_graphics_llx_dim { c__graphics_ #1 _llx_dim } }
- { \dim_zero:N \l_graphics_llx_dim }
+ { \dim_set_eq:Nc \l__graphics_llx_dim { c__graphics_ #1 _llx_dim } }
+ { \dim_zero:N \l__graphics_llx_dim }
\dim_if_exist:cTF { c__graphics_ #1 _lly_dim }
- { \dim_set_eq:Nc \l_graphics_lly_dim { c__graphics_ #1 _lly_dim } }
- { \dim_zero:N \l_graphics_lly_dim }
+ { \dim_set_eq:Nc \l__graphics_lly_dim { c__graphics_ #1 _lly_dim } }
+ { \dim_zero:N \l__graphics_lly_dim }
}
{#2}
}
-\cs_generate_variant:Nn \graphics_bb_restore:nF { x }
-\cs_new_protected:Npn \graphics_extract_bb:n #1
+\cs_generate_variant:Nn \__graphics_bb_restore:nF { x }
+\cs_new_protected:Npn \__graphics_extract_bb:n #1
{
- \int_compare:nNnTF \l_graphics_page_int > 0
- { \__graphics_extract_bb_auxi:Vn \l_graphics_page_int {#1} }
+ \int_compare:nNnTF \l__graphics_page_int > 0
+ { \__graphics_extract_bb_auxi:Vn \l__graphics_page_int {#1} }
{ \__graphics_extract_bb_auxii:nnn {#1} { } { } }
}
\cs_new_protected:Npn \__graphics_extract_bb_auxi:nn #1#2
@@ -75,9 +92,9 @@
\cs_generate_variant:Nn \__graphics_extract_bb_auxi:nn { Vn }
\cs_new_protected:Npn \__graphics_extract_bb_auxii:nnn #1#2#3
{
- \tl_if_empty:NTF \l_graphics_pagebox_tl
+ \tl_if_empty:NTF \l__graphics_pagebox_tl
{ \__graphics_extract_bb_auxiv:nnn }
- { \__graphics_extract_bb_auxiii:Vnnn \l_graphics_pagebox_tl }
+ { \__graphics_extract_bb_auxiii:Vnnn \l__graphics_pagebox_tl }
{#1} {#2} {#3}
}
\cs_new_protected:Npn \__graphics_extract_bb_auxiii:nnnn #1#2#3#4
@@ -86,42 +103,34 @@
\cs_new_protected:Npn \__graphics_extract_bb_auxiv:nnn #1#2#3
{
\__graphics_read_bb_auxi:nnnn {#1} {#2}
- { \ior_shell_open:Nn \l__graphics_tmp_ior { extractbb~#3-O~#1 } }
+ { \ior_shell_open:Nn \l__graphics_internal_ior { extractbb~#3-O~#1 } }
{ pipe-failed }
}
-\cs_new_protected:Npn \graphics_read_bb:n #1
+\cs_new_protected:Npn \__graphics_read_bb:n #1
{
\__graphics_read_bb_auxi:nnnn {#1} { }
- { \ior_open:Nn \l__graphics_tmp_ior {#1} }
+ { \ior_open:Nn \l__graphics_internal_ior {#1} }
{ graphic-not-found }
}
\cs_new_protected:Npn \__graphics_read_bb_auxi:nnnn #1#2#3#4
{
- \graphics_bb_restore:nF {#1#2}
+ \__graphics_bb_restore:nF {#1#2}
{ \__graphics_read_bb_auxii:nnnn {#3} {#4} {#1} {#2} }
}
\cs_new_protected:Npx \__graphics_read_bb_auxii:nnnn #1#2#3#4
{
#1
- \exp_not:N \ior_if_eof:NTF \exp_not:N \l__graphics_tmp_ior
+ \exp_not:N \ior_if_eof:NTF \exp_not:N \l__graphics_internal_ior
{ \msg_error:nnn { graphics } {#2} {#3} }
{
- \ior_str_map_inline:Nn \exp_not:N \l__graphics_tmp_ior
+ \ior_str_map_inline:Nn \exp_not:N \l__graphics_internal_ior
{
\exp_not:N \__graphics_read_bb_auxiii:w
##1 ~ \c_colon_str \s__graphics_stop
}
+ \__graphics_bb_save:n {#3#4}
}
- \exp_not:n
- {
- \ior_close:N \l__graphics_tmp_ior
- \dim_compare:nNnF \l_graphics_llx_dim = { 0pt }
- { \dim_const:cn { c__graphics_ #3#4 _llx_dim } { \l_graphics_llx_dim } }
- \dim_compare:nNnF \l_graphics_lly_dim = { 0pt }
- { \dim_const:cn { c__graphics_ #3#4 _lly_dim } { \l_graphics_lly_dim } }
- \dim_const:cn { c__graphics_ #3#4 _urx_dim } { \l_graphics_urx_dim }
- \dim_const:cn { c__graphics_ #3#4 _ury_dim } { \l_graphics_ury_dim }
- }
+ \ior_close:N \exp_not:N \l__graphics_internal_ior
}
\use:x
{
@@ -138,26 +147,25 @@
{
\str_if_eq:nnF {#2} { atend }
{
- \tl_set_rescan:Nnx \l__graphics_tmp_tl
+ \tl_set_rescan:Nnx \l__graphics_internal_tl
{
\char_set_catcode_space:n { 9 }
\char_set_catcode_space:n { 32 }
}
{ \use:n #1 }
- \exp_after:wN \__graphics_read_bb_auxv:w \l__graphics_tmp_tl \s__graphics_stop
+ \exp_after:wN \__graphics_read_bb_auxv:w \l__graphics_internal_tl \s__graphics_stop
}
}
\cs_new_protected:Npn \__graphics_read_bb_auxv:w #1~#2~#3~#4~#5 \s__graphics_stop
{
- \dim_set:Nn \l_graphics_llx_dim { #1 bp }
- \dim_set:Nn \l_graphics_lly_dim { #2 bp }
- \dim_set:Nn \l_graphics_urx_dim { #3 bp }
- \dim_set:Nn \l_graphics_ury_dim { #4 bp }
+ \dim_set:Nn \l__graphics_llx_dim { #1 bp }
+ \dim_set:Nn \l__graphics_lly_dim { #2 bp }
+ \dim_set:Nn \l__graphics_urx_dim { #3 bp }
+ \dim_set:Nn \l__graphics_ury_dim { #4 bp }
\ior_map_break:
}
-\bool_new:N \l_graphics_draft_bool
-\tl_new:N \l_graphics_name_tl
-\tl_new:N \l__graphics_name_tl
+\str_new:N \l__graphics_final_name_str
+\str_new:N \l__graphics_full_name_str
\box_new:N \l__graphics_internal_box
\str_new:N \l__graphics_dir_str
\str_new:N \l__graphics_name_str
@@ -167,51 +175,35 @@
\prop_new:N \l_graphics_ext_type_prop
\prop_put:Nnn \l_graphics_ext_type_prop { .ps } { eps }
\seq_new:N \g__graphics_record_seq
-\cs_new_protected:Npn \graphics_include:n #1
+\cs_new_protected:Npn \graphics_include:nn #1#2
{
\group_begin:
+ \keys_set:nn { graphics } {#1}
\seq_set_eq:NN \l_file_search_path_seq \l_graphics_search_path_seq
- \file_get_full_name:nNTF {#1} \l__graphics_name_tl
+ \file_get_full_name:nNTF {#2} \l__graphics_full_name_str
{
- \str_if_eq:eeTF { \l__graphics_name_tl } { #1 .tex }
- { \__graphics_include_search:n {#1} }
+ \str_if_eq:eeTF { \l__graphics_full_name_str } { #2 .tex }
+ { \msg_error:nnn { graphics } { graphic-not-found } {#2} }
{ \__graphics_include: }
}
- { \__graphics_include_search:n {#1} }
+ { \msg_error:nnn { graphics } { graphic-not-found } {#2} }
\group_end:
}
-\cs_new_protected:Npn \__graphics_include_search:n #1
- {
- \seq_map_inline:Nn \l_graphics_search_ext_seq
- {
- \file_get_full_name:nNT { #1 . ##1 } \l__graphics_name_tl
- { \seq_map_break:n { \use_i:nnn \__graphics_include: } }
- }
- \use:n
- { \msg_error:nnn { graphics } { graphic-not-found } {#1} }
- }
+\cs_generate_variant:Nn \graphics_include:nn { nV }
\cs_new_protected:Npn \__graphics_include:
{
- \file_parse_full_name:VNNN \l__graphics_name_tl
- \l__graphics_dir_str \l__graphics_name_str \l__graphics_ext_str
- \exp_args:Ne \__graphics_include_auxi:n
+ \str_if_empty:NTF \l__graphics_type_str
{
- \exp_args:Ne \str_tail:n
- { \str_foldcase:V \l__graphics_ext_str }
- }
+ \file_parse_full_name:VNNN \l__graphics_full_name_str
+ \l__graphics_dir_str \l__graphics_name_str \l__graphics_ext_str
+ \__graphics_include_auxi:e
+ {
+ \exp_args:Ne \str_tail:n
+ { \str_foldcase:V \l__graphics_ext_str }
+ }
+ }
+ { \__graphics_include_auxi:e { \l__graphics_type_str } }
}
-\cs_new_protected:Npn \graphics_include:nn #1#2
- {
- \group_begin:
- \seq_set_eq:NN \l_file_search_path_seq \l_graphics_search_path_seq
- \file_get_full_name:nNTF {#1} \l__graphics_name_tl
- {
- \exp_args:Ne \__graphics_include_auxi:n
- { \str_foldcase:n {#1} }
- }
- { \msg_error:nnn { graphics } { graphic-not-found } {#1} }
- \group_end:
- }
\cs_new_protected:Npn \__graphics_include_auxi:n #1
{
\prop_get:NnNF \l_graphics_ext_type_prop { .#1 } \l__graphics_internal_tl
@@ -218,18 +210,21 @@
{ \tl_set:Nn \l__graphics_internal_tl {#1} }
\exp_args:NV \__graphics_include_auxii:n \l__graphics_internal_tl
}
+\cs_generate_variant:Nn \__graphics_include_auxi:n { e }
\cs_new_protected:Npn \__graphics_include_auxii:n #1
{
\mode_leave_vertical:
\cs_if_exist:cTF { __graphics_backend_include_ #1 :n }
{
- \tl_set_eq:NN \l_graphics_name_tl \l__graphics_name_tl
+ \tl_set_eq:NN \l__graphics_final_name_str \l__graphics_full_name_str
+ \str_set:Nx \l__graphics_full_name_str
+ { \exp_args:NV \__kernel_file_name_quote:n \l__graphics_full_name_str }
\exp_args:NnV \use:c { __graphics_backend_getbb_ #1 :n }
- \l__graphics_name_tl
- \seq_gput_right:NV \g__graphics_record_seq \l_graphics_name_tl
+ \l__graphics_full_name_str
+ \seq_gput_right:NV \g__graphics_record_seq \l__graphics_final_name_str
\clist_if_exist:NT \@filelist
- { \exp_args:NV \@addtofilelist \l_graphics_name_tl }
- \bool_if:NTF \l_graphics_draft_bool
+ { \exp_args:NV \@addtofilelist \l__graphics_final_name_str }
+ \bool_if:NTF \l__graphics_draft_bool
{ \__graphics_include_auxiii:n }
{ \__graphics_include_auxiv:n }
{#1}
@@ -238,21 +233,21 @@
}
\cs_new_protected:Npn \__graphics_include_auxiii:n #1
{
- \hbox_to_wd:nn { \l_graphics_urx_dim - \l_graphics_llx_dim }
+ \hbox_to_wd:nn { \l__graphics_urx_dim - \l__graphics_llx_dim }
{
\tex_vrule:D
\tex_hss:D
\vbox_to_ht:nn
- { \l_graphics_ury_dim - \l_graphics_lly_dim }
+ { \l__graphics_ury_dim - \l__graphics_lly_dim }
{
\tex_hrule:D width
- \dim_eval:n { \l_graphics_urx_dim - \l_graphics_llx_dim }
+ \dim_eval:n { \l__graphics_urx_dim - \l__graphics_llx_dim }
\tex_vss:D
\hbox_to_wd:nn
- { \l_graphics_urx_dim - \l_graphics_llx_dim }
+ { \l__graphics_urx_dim - \l__graphics_llx_dim }
{
\ttfamily
- \tex_hss:D \l__graphics_name_tl \tex_hss:D
+ \tex_hss:D \l__graphics_full_name_str \tex_hss:D
}
\tex_vss:D
\tex_hrule:D
@@ -266,13 +261,13 @@
\hbox_set:Nn \l__graphics_internal_box
{
\exp_args:NnV \use:c { __graphics_backend_include_ #1 :n }
- \l__graphics_name_tl
+ \l__graphics_full_name_str
}
\box_set_dp:Nn \l__graphics_internal_box { 0pt }
\box_set_ht:Nn \l__graphics_internal_box
- { \l_graphics_ury_dim - \l_graphics_lly_dim }
+ { \l__graphics_ury_dim - \l__graphics_lly_dim }
\box_set_wd:Nn \l__graphics_internal_box
- { \l_graphics_urx_dim - \l_graphics_llx_dim }
+ { \l__graphics_urx_dim - \l__graphics_llx_dim }
\box_use_drop:N \l__graphics_internal_box
}
\cs_new_protected:Npn \graphics_show_list: { \__graphics_list:N \msg_show:nnxxxx }
@@ -280,16 +275,100 @@
\cs_new_protected:Npn \__graphics_list:N #1
{
\seq_remove_duplicates:N \g__graphics_record_seq
- #1 { LaTeX/kernel } { file-list }
+ #1 { kernel } { file-list }
{ \seq_map_function:NN \g__graphics_record_seq \__graphics_list_aux:n }
{ } { } { }
}
\cs_new:Npn \__graphics_list_aux:n #1 { \iow_newline: #1 }
+\cs_new_protected:Npn \graphics_get_full_name:nN #1#2
+ {
+ \graphics_get_full_name:nNF {#1} #2
+ { \tl_set:Nn #2 { \q_no_value } }
+ }
+\prg_new_protected_conditional:Npnn \graphics_get_full_name:nN #1#2
+ { T , F , TF }
+ {
+ \group_begin:
+ \seq_set_eq:NN \l_file_search_path_seq \l_graphics_search_path_seq
+ \file_get_full_name:nNTF {#1} \l__graphics_full_name_str
+ {
+ \str_if_eq:eeT { \l__graphics_full_name_str } { #1 .tex }
+ { \__graphics_get_full_name:n {#1} }
+ }
+ { \__graphics_get_full_name:n {#1} }
+ \exp_args:NNNV \group_end:
+ \tl_set:Nn #2 \l__graphics_full_name_str
+ \tl_if_empty:NTF #2
+ { \prg_return_false: }
+ { \prg_return_true: }
+ }
+\cs_new_protected:Npn \__graphics_get_full_name:n #1
+ {
+ \str_clear:N \l__graphics_full_name_str
+ \seq_map_inline:Nn \l_graphics_search_ext_seq
+ {
+ \file_get_full_name:nNT { #1 ##1 } \l__graphics_full_name_str
+ { \seq_map_break:n { \use_none:nn } }
+ }
+ \use:n
+ { \str_clear:N \l__graphics_full_name_str }
+ }
+\cs_new_protected:Npn \graphics_get_pagecount:nN #1#2
+ {
+ \group_begin:
+ \seq_set_eq:NN \l_file_search_path_seq \l_graphics_search_path_seq
+ \file_get_full_name:nNTF {#1} \l__graphics_full_name_str
+ {
+ \int_if_exist:cF { c__graphics_ \l__graphics_full_name_str _pages_int }
+ {
+ \exp_args:NV \__graphics_backend_get_pagecount:n
+ \l__graphics_full_name_str
+ }
+ \tl_set:Nv #2 { c__graphics_ \l__graphics_full_name_str _pages_int }
+ }
+ {
+ \tl_set:Nn #2 { 0 }
+ \msg_error:nnn { graphics } { graphic-not-found } {#1}
+ }
+ \exp_args:NNNV \group_end:
+ \tl_set:Nn #2 #2
+ }
+\cs_new_protected:Npx \__graphics_get_pagecount:n #1
+ {
+ \ior_shell_open:Nn \exp_not:N \l__graphics_internal_ior
+ { extractbb~-O~#1 }
+ \exp_not:N \ior_if_eof:NTF \exp_not:N \l__graphics_internal_ior
+ { \msg_error:nnn { graphics } { pipe-failed } }
+ {
+ \ior_str_map_inline:Nn \exp_not:N \l__graphics_internal_ior
+ {
+ \exp_not:N \__graphics_get_pagecount:nw {#1}
+ ##1 ~ \c_colon_str \c_colon_str \s__graphics_stop
+ }
+ \exp_not:N \int_if_exist:cF { c__graphics_ #1 _pages_int }
+ { \int_const:cn { c__graphics_ #1 _pages_int } { 1 } }
+ }
+ \ior_close:N \exp_not:N \l__graphics_internal_ior
+ }
+\use:x
+ {
+ \cs_new_protected:Npn \exp_not:N \__graphics_get_pagecount:nw
+ ##1##2 \c_colon_str ##3 \c_colon_str ##4 \s__graphics_stop
+ {
+ \exp_not:N \str_if_eq:nnT
+ { \c_percent_str \c_percent_str Pages }
+ {##2}
+ {
+ \int_const:cn { c__graphics_ ##1 _pages_int } {##3}
+ \exp_not:N \ior_map_break:
+ }
+ }
+ }
\msg_new:nnnn { graphics } { graphic-not-found }
{ Image~file~'#1'~not~found. }
{
- LaTeX~tried~to~open~graphic~file~'#1',
- ~but~the~file~could~not~be~read.
+ LaTeX~tried~to~open~graphic~file~'#1',~
+ but~the~file~could~not~be~read.
}
\msg_new:nnnn { graphics } { pipe-failed }
{ Cannot~run~piped~system~commands. }
Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/l3opacity/l3opacity.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/l3opacity/l3opacity.sty 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3opacity/l3opacity.sty 2022-04-11 20:14:43 UTC (rev 63007)
@@ -20,7 +20,7 @@
%%
%% File: l3opacity.dtx
\RequirePackage{expl3}
-\ProvidesExplPackage{l3opacity}{2022-02-05}{}
+\ProvidesExplPackage{l3opacity}{2022-04-10}{}
{L3 Experimental opacity support}
\cs_new_protected:Npn \opacity_select:n #1
{ \__opacity_select:nN {#1} \__opacity_backend_select:n }
Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty 2022-04-11 20:14:43 UTC (rev 63007)
@@ -20,7 +20,7 @@
%%
%% File: l3str-format.dtx
\RequirePackage{expl3}
-\ProvidesExplPackage{l3str-format}{2022-02-05}{}
+\ProvidesExplPackage{l3str-format}{2022-04-10}{}
{L3 Experimental string formatting}
\cs_generate_variant:Nn \use:nn { nf }
\cs_generate_variant:Nn \use:nnn { fnf }
Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/l3sys-shell/l3sys-shell.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/l3sys-shell/l3sys-shell.sty 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3sys-shell/l3sys-shell.sty 2022-04-11 20:14:43 UTC (rev 63007)
@@ -20,7 +20,7 @@
%%
%% File: l3sys-shell.dtx
\RequirePackage{expl3}
-\ProvidesExplPackage{l3sys-shell}{2022-02-05}{}
+\ProvidesExplPackage{l3sys-shell}{2022-04-10}{}
{L3 Experimental system shell functions}
\scan_new:N \s__sys_stop
\quark_new:N \q__sys_nil
@@ -176,6 +176,8 @@
\seq_set_split:NnV #2 { \char_generate:nn { `\^^M } { 12 } }
\exp_not:N \l__sys_tmp_tl
\seq_pop_right:NN #2 \exp_not:N \l__sys_tmp_tl
+ \exp_not:N \tl_if_blank:eTF { \exp_not:N \seq_item:Nn #2 { 1 } }
+ { \seq_clear:N #2 }
}
}
%%
Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/xcoffins/xcoffins.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/xcoffins/xcoffins.sty 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/xcoffins/xcoffins.sty 2022-04-11 20:14:43 UTC (rev 63007)
@@ -19,7 +19,7 @@
%% and all files in that bundle must be distributed together.
%%
%% File: xcoffins.dtx
-\ProvidesExplPackage{xcoffins}{2022-02-05}{}
+\ProvidesExplPackage{xcoffins}{2022-04-10}{}
{L3 Experimental design level coffins}
\keys_define:nn { coffin }
{
Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty 2022-04-11 20:14:43 UTC (rev 63007)
@@ -32,7 +32,7 @@
}%
\endinput
}
-\ProvidesExplPackage{l3galley}{2022-02-05}{}
+\ProvidesExplPackage{l3galley}{2022-04-10}{}
{L3 Experimental galley code}
\int_new:N \l__galley_tmp_int
\seq_new:N \g__galley_tmpa_seq
Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/xgalley/xgalley.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/xgalley/xgalley.sty 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/xgalley/xgalley.sty 2022-04-11 20:14:43 UTC (rev 63007)
@@ -19,7 +19,7 @@
%% and all files in that bundle must be distributed together.
%%
%% File: xgalley.dtx
-\ProvidesExplPackage{xgalley}{2022-02-05}{}
+\ProvidesExplPackage{xgalley}{2022-04-10}{}
{L3 Experimental galley}
\RequirePackage{xtemplate,l3galley}
\clist_new:N \l__galley_tmpa_clist
Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex 2022-04-11 20:14:43 UTC (rev 63007)
@@ -70,7 +70,7 @@
%% and all files in that bundle must be distributed together.
%%
%% File: expl3.dtx
-\def\ExplFileDate{2022-02-24}%
+\def\ExplFileDate{2022-04-10}%
\begingroup
\def\next{\endgroup}%
\expandafter\ifx\csname PackageError\endcsname\relax
@@ -1256,6 +1256,7 @@
\__kernel_primitive:NN \kcatcode \tex_kcatcode:D
\__kernel_primitive:NN \kuten \tex_kuten:D
\__kernel_primitive:NN \lastnodechar \tex_lastnodechar:D
+ \__kernel_primitive:NN \lastnodefont \tex_lastnodefont:D
\__kernel_primitive:NN \lastnodesubtype \tex_lastnodesubtype:D
\__kernel_primitive:NN \noautospacing \tex_noautospacing:D
\__kernel_primitive:NN \noautoxspacing \tex_noautoxspacing:D
@@ -1262,6 +1263,7 @@
\__kernel_primitive:NN \pagefistretch \tex_pagefistretch:D
\__kernel_primitive:NN \postbreakpenalty \tex_postbreakpenalty:D
\__kernel_primitive:NN \prebreakpenalty \tex_prebreakpenalty:D
+ \__kernel_primitive:NN \ptexlineendmode \tex_lineendmode:D
\__kernel_primitive:NN \ptexminorversion \tex_ptexminorversion:D
\__kernel_primitive:NN \ptexrevision \tex_ptexrevision:D
\__kernel_primitive:NN \ptexversion \tex_ptexversion:D
@@ -1277,6 +1279,8 @@
\__kernel_primitive:NN \textbaselineshiftfactor
\tex_textbaselineshiftfactor:D
\__kernel_primitive:NN \tfont \tex_tfont:D
+ \__kernel_primitive:NN \toucs \tex_toucs:D
+ \__kernel_primitive:NN \ucs \tex_ucs:D
\__kernel_primitive:NN \xkanjiskip \tex_xkanjiskip:D
\__kernel_primitive:NN \xspcode \tex_xspcode:D
\__kernel_primitive:NN \ybaselineshift \tex_ybaselineshift:D
@@ -1289,7 +1293,6 @@
\__kernel_primitive:NN \kchar \tex_kchar:D
\__kernel_primitive:NN \kchardef \tex_kchardef:D
\__kernel_primitive:NN \kuten \tex_kuten:D
- \__kernel_primitive:NN \ucs \tex_ucs:D
\__kernel_primitive:NN \uptexrevision \tex_uptexrevision:D
\__kernel_primitive:NN \uptexversion \tex_uptexversion:D
\__kernel_primitive:NN \odelcode \tex_odelcode:D
@@ -1301,6 +1304,7 @@
\__kernel_primitive:NN \oradical \tex_oradical:D
\__kernel_primitive:NN \partokencontext \tex_partokencontext:D
\__kernel_primitive:NN \partokenname \tex_partokenname:D
+ \__kernel_primitive:NN \showstream \tex_showstream:D
\__kernel_primitive:NN \tracingstacklevels \tex_tracingstacklevels:D
\tex_endgroup:D
\tex_ifdefined:D \@@end
@@ -4943,6 +4947,8 @@
{ p , T , F , TF }
\prg_new_eq_conditional:NNn \str_if_empty:c \tl_if_empty:c
{ p , T , F , TF }
+\prg_new_eq_conditional:NNn \str_if_empty:n \tl_if_empty:n
+ { p , T , F , TF }
\cs_new_eq:NN \__str_if_eq:nn \tex_strcmp:D
\prg_new_conditional:Npnn \str_compare:nNn #1#2#3 { p , T , F , TF }
{
@@ -5012,6 +5018,10 @@
\cs_new:Npn \__str_case:nnTF #1#2#3#4
{ \__str_case:nw {#1} #2 {#1} { } \s__str_mark {#3} \s__str_mark {#4} \s__str_stop }
\cs_generate_variant:Nn \str_case:nn { V , o , nV , nv }
+\cs_new_eq:NN \str_case:Nn \str_case:Vn
+\cs_new_eq:NN \str_case:NnT \str_case:VnT
+\cs_new_eq:NN \str_case:NnF \str_case:VnF
+\cs_new_eq:NN \str_case:NnTF \str_case:VnTF
\prg_generate_conditional_variant:Nnn \str_case:nn
{ V , o , nV , nv } { T , F , TF }
\cs_new:Npn \__str_case:nw #1#2#3
@@ -5441,6 +5451,92 @@
{ \use:c { char_str_ #1 case:N } #2 }
\__str_change_case_loop:nw {#1}
}
+\if_int_compare:w 0
+ \cs_if_exist:NT \tex_XeTeXversion:D { 1 }
+ \cs_if_exist:NT \tex_luatexversion:D { 1 }
+ > 0 \exp_stop_f:
+\else:
+ \cs_gset:Npn \__str_change_case_char:nN #1#2
+ {
+ \__str_if_recursion_tail_stop_do:Nn #2
+ { \__str_change_case_end:wn }
+ \int_compare:nNnTF { `#2 } > { "80 }
+ {
+ \int_compare:nNnTF { `#2 } < { "E0 }
+ { \__str_change_case_char_UTFviii:nNN }
+ {
+ \int_compare:nNnTF { `#2 } < { "F0 }
+ { \__str_change_case_char_UTFviii:nNNN }
+ { \__str_change_case_char_UTFviii:nNNNN }
+ }
+ {#1} #2
+ }
+ {
+ \__str_change_case_output:fw
+ { \use:c { char_str_ #1 case:N } #2 }
+ \__str_change_case_loop:nw {#1}
+ }
+ }
+ \cs_new:Npn \__str_change_case_char_UTFviii:nNN #1#2#3
+ { \__str_change_case_char_UTFviii:nn {#1} {#2#3} }
+ \cs_new:Npn \__str_change_case_char_UTFviii:nNNN #1#2#3#4
+ { \__str_change_case_char_UTFviii:nn {#1} {#2#3#4} }
+ \cs_new:Npn \__str_change_case_char_UTFviii:nNNNN #1#2#3#4#5
+ { \__str_change_case_char_UTFviii:nn {#1} {#2#3#4#5} }
+ \cs_if_exist:NF \tex_pdftexversion:D
+ {
+ \cs_gset:Npn \__str_change_case_char_UTFviii:nNNN #1#2#3#4
+ {
+ \__str_change_case_output:nw {#2#3#4}
+ \__str_change_case_loop:nw {#1}
+ }
+ \cs_gset:Npn \__str_change_case_char_UTFviii:nNNNN #1#2#3#4#5
+ {
+ \__str_change_case_output:nw {#2#3#4#5}
+ \__str_change_case_loop:nw {#1}
+ }
+ }
+ \cs_new:Npn \__str_change_case_char_UTFviii:nn #1#2
+ {
+ \use:c { __str_change_case_char_UTFviii_ #1 :nn } {#1} {#2}
+ }
+ \cs_new:Npn \__str_change_case_char_UTFviii_upper:nn #1#2
+ {
+ \__str_change_case_output:fw
+ {
+ \cs_if_exist:cTF { c__kernel_ #1 case_ #2 _tl }
+ {
+ \__kernel_tl_to_str:w \exp_after:wN \exp_after:wN \exp_after:wN
+ { \cs:w c__kernel_ #1 case_ #2 _tl \cs_end: }
+ }
+ {#2}
+ }
+ \__str_change_case_loop:nw {#1}
+ }
+ \cs_new_eq:NN \__str_change_case_char_UTFviii_lower:nn
+ \__str_change_case_char_UTFviii_upper:nn
+ \cs_new:Npn \__str_change_case_char_UTFviii_fold:nn #1#2
+ {
+ \__str_change_case_output:fw
+ {
+ \cs_if_exist:cTF { c__kernel_ #1 case_ #2 _tl }
+ {
+ \__kernel_tl_to_str:w \exp_after:wN \exp_after:wN \exp_after:wN
+ { \cs:w c__kernel_ #1 case_ #2 _tl \cs_end: }
+ }
+ {
+ \cs_if_exist:cTF { c__kernel_lowercase_ #2 _tl }
+ {
+ \__kernel_tl_to_str:w
+ \exp_after:wN \exp_after:wN \exp_after:wN
+ { \cs:w c__kernel_lowercase_ #2 _tl \cs_end: }
+ }
+ {#2}
+ }
+ }
+ \__str_change_case_loop:nw {#1}
+ }
+\fi:
\str_const:Nx \c_ampersand_str { \cs_to_str:N \& }
\str_const:Nx \c_atsign_str { \cs_to_str:N \@ }
\str_const:Nx \c_backslash_str { \cs_to_str:N \\ }
@@ -8598,26 +8694,22 @@
}
\cs_new:Npn \__char_generate_aux:w #1 ; #2 ;
{
- \if_int_compare:w #2 = 10 \exp_stop_f:
- \if_int_compare:w #1 = \c_zero_int
- \msg_expandable_error:nn { char } { null-space }
- \else:
- \msg_expandable_error:nn { char } { space }
- \fi:
+ \if_int_odd:w 0
+ \if_int_compare:w #2 < 1 \exp_stop_f: 1 \fi:
+ \if_int_compare:w #2 = 5 \exp_stop_f: 1 \fi:
+ \if_int_compare:w #2 = 9 \exp_stop_f: 1 \fi:
+ \if_int_compare:w #2 > 13 \exp_stop_f: 1 \fi: \exp_stop_f:
+ \msg_expandable_error:nn { char }
+ { invalid-catcode }
\else:
\if_int_odd:w 0
- \if_int_compare:w #2 < 1 \exp_stop_f: 1 \fi:
- \if_int_compare:w #2 = 5 \exp_stop_f: 1 \fi:
- \if_int_compare:w #2 = 9 \exp_stop_f: 1 \fi:
- \if_int_compare:w #2 > 13 \exp_stop_f: 1 \fi: \exp_stop_f:
+ \if_int_compare:w #1 < \c_zero_int 1 \fi:
+ \if_int_compare:w #1 > \c_max_char_int 1 \fi: \exp_stop_f:
\msg_expandable_error:nn { char }
- { invalid-catcode }
+ { out-of-range }
\else:
- \if_int_odd:w 0
- \if_int_compare:w #1 < \c_zero_int 1 \fi:
- \if_int_compare:w #1 > \c_max_char_int 1 \fi: \exp_stop_f:
- \msg_expandable_error:nn { char }
- { out-of-range }
+ \if_int_compare:w #2#1 = 100 \exp_stop_f:
+ \msg_expandable_error:nn { char } { null-space }
\else:
\__char_generate_aux:nnw {#1} {#2}
\fi:
@@ -10533,9 +10625,7 @@
{ Cannot~generate~null~char~as~a~space. }
\msg_new:nnn { char } { out-of-range }
{ Charcode~requested~out~of~engine~range. }
-\msg_new:nnn { char } { space }
- { Cannot~generate~space~chars. }
-\msg_new:nnnn { ior } { quote-in-shell }
+\msg_new:nnnn { kernel } { quote-in-shell }
{ Quotes~in~shell~command~'#1'. }
{ Shell~commands~cannot~contain~quotes~("). }
\msg_new:nnnn { keys } { no-property }
@@ -13036,6 +13126,8 @@
\bool_new:N \l__keys_tmp_bool
\tl_new:N \l__keys_tmpa_tl
\tl_new:N \l__keys_tmpb_tl
+\bool_new:N \l__keys_precompile_bool
+\tl_new:N \l__keys_precompile_tl
\prop_new:N \l_keys_usage_load_prop
\prop_new:N \l_keys_usage_preamble_prop
\scan_new:N \s__keys_nil
@@ -13043,6 +13135,13 @@
\scan_new:N \s__keys_stop
\quark_new:N \q__keys_no_value
\__kernel_quark_new_conditional:Nn \__keys_quark_if_no_value:N { TF }
+\cs_new_protected:Npn \__keys_precompile:n #1
+ {
+ \bool_if:NTF \l__keys_precompile_bool
+ { \tl_put_right:Nn \l__keys_precompile_tl }
+ { \use:n }
+ {#1}
+ }
\cs_new_protected:Npn \keys_define:nn
{ \__keys_define:onn \l__keys_module_str }
\cs_new_protected:Npn \__keys_define:nnn #1#2#3
@@ -13146,7 +13245,7 @@
{ \exp_not:c { bool_ #2 set_ #3 :N } \exp_not:N #1 }
\__keys_cmd_set:nx { \l_keys_path_str / false }
{ \exp_not:c { bool_ #2 set_ #4 :N } \exp_not:N #1 }
- \__keys_cmd_set:nn { \l_keys_path_str / unknown }
+ \__keys_cmd_set_direct:nn { \l_keys_path_str / unknown }
{
\msg_error:nnx { keys } { boolean-values-only }
\l_keys_key_str
@@ -13178,8 +13277,8 @@
{
\cs_set_nopar:cpn { \c__keys_type_root_str \l_keys_path_str }
{ choice }
- \__keys_cmd_set:nn \l_keys_path_str { #1 {##1} }
- \__keys_cmd_set:nn { \l_keys_path_str / unknown }
+ \__keys_cmd_set_direct:nn \l_keys_path_str { #1 {##1} }
+ \__keys_cmd_set_direct:nn { \l_keys_path_str / unknown }
{
\msg_error:nnxx { keys } { choice-unknown }
\l_keys_path_str {##1}
@@ -13207,12 +13306,17 @@
}
}
\cs_new_protected:Npn \__keys_cmd_set:nn #1#2
+ { \__keys_cmd_set_direct:nn {#1} { \__keys_precompile:n {#2} } }
+\cs_generate_variant:Nn \__keys_cmd_set:nn { nx , Vn , Vo }
+\cs_new_protected:Npn \__keys_cmd_set_direct:nn #1#2
{ \cs_set_protected:cpn { \c__keys_code_root_str #1 } ##1 {#2} }
-\cs_generate_variant:Nn \__keys_cmd_set:nn { nx , Vn , Vo }
\cs_new_protected:Npn \__keys_cs_set:NNpn #1#2#3#
{
\cs_set_protected:cpx { \c__keys_code_root_str \l_keys_path_str } ##1
- { #1 \exp_not:N #2 \exp_not:n {#3} {##1} }
+ {
+ \__keys_precompile:n
+ { #1 \exp_not:N #2 \exp_not:n {#3} {##1} }
+ }
\use_none:n
}
\cs_generate_variant:Nn \__keys_cs_set:NNpn { Nc }
@@ -13285,13 +13389,17 @@
}
\cs_new_protected:Npn \__keys_meta_make:n #1
{
- \__keys_cmd_set:Vo \l_keys_path_str
+ \exp_args:NVo \__keys_cmd_set_direct:nn \l_keys_path_str
{
- \exp_after:wN \keys_set:nn \exp_after:wN { \l__keys_module_str } {#1}
+ \exp_after:wN \keys_set:nn \exp_after:wN
+ { \l__keys_module_str } {#1}
}
}
\cs_new_protected:Npn \__keys_meta_make:nn #1#2
- { \__keys_cmd_set:Vn \l_keys_path_str { \keys_set:nn {#1} {#2} } }
+ {
+ \exp_args:NV \__keys_cmd_set_direct:nn
+ \l_keys_path_str { \keys_set:nn {#1} {#2} }
+ }
\cs_new_protected:Npn \__keys_prop_put:Nn #1#2
{
\prop_if_exist:NF #1 { \prop_new:N #1 }
@@ -13748,6 +13856,14 @@
\__keys_set:nn {#2} {#4}
\tl_set:Nn \l__keys_selective_seq {#1}
}
+\cs_new_protected:Npn \keys_precompile:nnN #1#2#3
+ {
+ \bool_set_true:N \l__keys_precompile_bool
+ \tl_clear:N \l__keys_precompile_tl
+ \keys_set:nn {#1} {#2}
+ \bool_set_false:N \l__keys_precompile_bool
+ \tl_set_eq:NN #3 \l__keys_precompile_tl
+ }
\cs_new_protected:Npn \__keys_set_keyval:n #1
{
\bool_set_true:N \l__keys_no_value_bool
@@ -14088,10 +14204,13 @@
{
\exp_args:Nnf \msg_show_item_unbraced:nn { code }
{
- \exp_args:Nc \cs_replacement_spec:N
+ \exp_args:Ne \__keys_show:n
{
- \c__keys_code_root_str
- \__keys_trim_spaces:n { #2 / #3 }
+ \exp_args:Nc \cs_replacement_spec:N
+ {
+ \c__keys_code_root_str
+ \__keys_trim_spaces:n { #2 / #3 }
+ }
}
}
}
@@ -14098,6 +14217,33 @@
}
{ } { }
}
+\cs_new:Npx \__keys_show:n #1
+ {
+ \exp_not:N \__keys_show:w
+ #1
+ \tl_to_str:n { \__keys_precompile:n }
+ #1
+ \tl_to_str:n { \__keys_precompile:n }
+ \exp_not:N \s__keys_stop
+ }
+\use:x
+ {
+ \cs_new:Npn \exp_not:N \__keys_show:w
+ ##1 \tl_to_str:n { \__keys_precompile:n }
+ ##2 \tl_to_str:n { \__keys_precompile:n }
+ ##3 \exp_not:N \s__keys_stop
+ }
+ {
+ \tl_if_blank:nTF {#2}
+ {#1}
+ { \__keys_show:Nw #2 \s__keys_stop }
+ }
+\use:x
+ {
+ \cs_new:Npn \exp_not:N \__keys_show:Nw ##1##2
+ \c_right_brace_str \exp_not:N \s__keys_stop
+ }
+ {#2}
\msg_new:nnnn { keys } { bad-relative-key-path }
{ The~key~'#1'~is~not~inside~the~'#2'~path. }
{ The~key~'#1'~cannot~be~expressed~relative~to~path~'#2'. }
@@ -23296,33 +23442,30 @@
32 \s__tl
\__tl_analysis_b_loop:w #1 ;
}
+\cs_new_protected:Npn \tl_analysis_map_inline:Nn #1
+ { \exp_args:No \tl_analysis_map_inline:nn #1 }
\cs_new_protected:Npn \tl_analysis_map_inline:nn #1
{
\__tl_analysis:n {#1}
\int_gincr:N \g__kernel_prg_map_int
- \exp_args:Nc \__tl_analysis_map_inline_aux:Nn
+ \exp_args:Nc \__tl_analysis_map:Nn
{ __tl_analysis_map_inline_ \int_use:N \g__kernel_prg_map_int :wNw }
}
-\cs_new_protected:Npn \tl_analysis_map_inline:Nn #1
- { \exp_args:No \tl_analysis_map_inline:nn #1 }
-\cs_new_protected:Npn \__tl_analysis_map_inline_aux:Nn #1#2
+\cs_new_protected:Npn \__tl_analysis_map:Nn #1#2
{
- \cs_gset_protected:Npn #1 ##1 \s__tl ##2 ##3 \s__tl
- {
- \use_none:n ##2
- \__tl_analysis_map_inline_aux:nnn {##1} {##3} {##2}
- }
- \cs_gset_protected:Npn \__tl_analysis_map_inline_aux:nnn ##1##2##3
- {
- #2
- #1
- }
- \exp_after:wN #1
+ \cs_gset_protected:Npn #1 ##1##2##3 {#2}
+ \exp_after:wN \__tl_analysis_map:NwNw \exp_after:wN #1
\g__tl_analysis_result_tl
\s__tl { ? \tl_map_break: } \s__tl
\prg_break_point:Nn \tl_map_break:
{ \int_gdecr:N \g__kernel_prg_map_int }
}
+\cs_new_protected:Npn \__tl_analysis_map:NwNw #1 #2 \s__tl #3 #4 \s__tl
+ {
+ \use_none:n #3
+ #1 {#2} {#4} {#3}
+ \__tl_analysis_map:NwNw #1
+ }
\cs_new_protected:Npn \tl_analysis_show:N
{ \__tl_analysis_show:NNN \msg_show:nnxxxx \tl_show:N }
\cs_new_protected:Npn \tl_analysis_log:N
@@ -31694,6 +31837,39 @@
\tl_new:N \l_text_expand_exclude_tl
\tl_set:Nn \l_text_expand_exclude_tl
{ \begin \cite \end \label \ref }
+\bool_lazy_and:nnT
+ { \str_if_eq_p:Vn \fmtname { LaTeX2e } }
+ { \tl_if_exist_p:N \@expl at finalise@setup@@ }
+ {
+ \tl_gput_right:Nn \@expl at finalise@setup@@
+ {
+ \tl_gput_right:Nn \@kernel at after@begindocument
+ {
+ \group_begin:
+ \cs_set_protected:Npn \__text_tmp:w #1
+ {
+ \tl_clear:N \l_text_expand_exclude_tl
+ \tl_map_inline:nn {#1}
+ {
+ \bool_lazy_any:nF
+ {
+ { \token_if_protected_macro_p:N ##1 }
+ { \token_if_protected_long_macro_p:N ##1 }
+ {
+ \str_if_eq_p:ee
+ { \cs_replacement_spec:N ##1 }
+ { \exp_not:n { \protect ##1 } \c_space_tl }
+ }
+ }
+ { \tl_put_right:Nn \l_text_expand_exclude_tl {##1} }
+ }
+ }
+ \exp_args:NV \__text_tmp:w \l_text_expand_exclude_tl
+ \exp_args:NNNV \group_end:
+ \tl_set:Nn \l_text_expand_exclude_tl \l_text_expand_exclude_tl
+ }
+ }
+ }
\tl_new:N \l__text_math_mode_tl
\tex_chardef:D \c__text_chardef_space_token = `\ %
\tex_mathchardef:D \c__text_mathchardef_space_token = `\ %
@@ -31946,7 +32122,7 @@
\cs_new:Npx \__text_expand_cs:N #1
{
\exp_not:N \str_if_eq:nnTF {#1} { \exp_not:N \protect }
- { \exp_not:N \__text_expand_protect:N }
+ { \exp_not:N \__text_expand_protect:w }
{
\bool_lazy_and:nnTF
{ \cs_if_exist_p:N \fmtname }
@@ -31955,8 +32131,23 @@
{ \exp_not:N \__text_expand_replace:N #1 }
}
}
+\cs_new:Npn \__text_expand_protect:w #1 \q__text_recursion_stop
+ {
+ \tl_if_head_is_N_type:nTF {#1}
+ { \__text_expand_protect:N }
+ {
+ \__text_expand_store:n { \protect }
+ \__text_expand_loop:w
+ }
+ #1 \q__text_recursion_stop
+ }
\cs_new:Npn \__text_expand_protect:N #1
{
+ \__text_if_recursion_tail_stop_do:Nn #1
+ {
+ \__text_expand_store:n { \protect }
+ \__text_expand_end:w
+ }
\exp_args:Ne \__text_expand_protect:nN
{ \cs_to_str:N #1 } #1
}
@@ -32466,10 +32657,10 @@
{ \__text_change_case_char_UTFviii:nnnn {#1} {#2} {#3} {#4#5#6#7} }
\cs_new:Npn \__text_change_case_char_UTFviii:nnnn #1#2#3#4
{
- \cs_if_exist:cTF { c__text_ #1 case_ \tl_to_str:n {#4} _tl }
+ \cs_if_exist:cTF { c__kernel_ #1 case_ \tl_to_str:n {#4} _tl }
{
\__text_change_case_store:v
- { c__text_ #1 case_ \tl_to_str:n {#4} _tl }
+ { c__kernel_ #1 case_ \tl_to_str:n {#4} _tl }
}
{ \__text_change_case_store:n {#4} }
\use:c { __text_change_case_char_next_ #2 :nn } {#2} {#3}
@@ -33094,7 +33285,7 @@
{
\tl_const:cx
{
- c__text_ #1 case_
+ c__kernel_ #1 case_
\char_generate:nn {#2} { 12 }
\char_generate:nn {#3} { 12 }
_tl
@@ -33110,7 +33301,7 @@
{
\tl_const:cx
{
- c__text_lowercase_
+ c__kernel_lowercase_
\char_generate:nn {#1} { 12 }
\char_generate:nn {#2} { 12 }
_tl
@@ -33338,7 +33529,7 @@
{
\tl_const:cx
{
- c__text_ #3 case_
+ c__kernel_ #3 case_
\char_generate:nn {##1} { 12 }
\char_generate:nn {##2} { 12 }
_tl
@@ -33375,7 +33566,7 @@
{
\tl_const:cn
{
- c__text_ #3 case_
+ c__kernel_ #3 case_
\char_generate:nn {##1} { 12 }
\char_generate:nn {##2} { 12 }
_tl
@@ -33393,7 +33584,7 @@
{
\tl_const:cx
{
- c__text_ #1 case_
+ c__kernel_ #1 case_
\char_generate:nn {#2} { 12 }
\char_generate:nn {#3} { 12 }
\char_generate:nn {#4} { 12 }
@@ -33412,7 +33603,7 @@
{
\tl_const:cx
{
- c__text_lowercase_
+ c__kernel_lowercase_
\char_generate:nn {#1} { 12 }
\char_generate:nn {#2} { 12 }
\char_generate:nn {#3} { 12 }
@@ -33535,7 +33726,7 @@
{
\tl_const:cx
{
- c__text_ #3 case_
+ c__kernel_ #3 case_
\char_generate:nn {##1} { 12 }
\char_generate:nn {##2} { 12 }
\char_generate:nn {##3} { 12 }
@@ -34658,7 +34849,7 @@
\tl_if_in:nnTF {#1} { " }
{
\msg_error:nnx
- { ior } { quote-in-shell } {#1}
+ { kernel } { quote-in-shell } {#1}
}
{ \__kernel_ior_open:Nn #2 { |#1 } }
}
@@ -34857,10 +35048,11 @@
%% File: l3legacy.dtx
\prg_new_conditional:Npnn \legacy_if:n #1 { p , T , F , TF }
{
- \exp_args:Nc \if_meaning:w { if#1 } \iftrue
+ \exp_after:wN \reverse_if:N
+ \cs:w if#1 \cs_end:
+ \prg_return_false:
+ \else:
\prg_return_true:
- \else:
- \prg_return_false:
\fi:
}
\cs_new_protected:Npn \legacy_if_set_true:n #1
Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex 2022-04-11 20:14:43 UTC (rev 63007)
@@ -19,7 +19,7 @@
%% and all files in that bundle must be distributed together.
%%
%% File: expl3.dtx
-\def\ExplFileDate{2022-02-24}%
+\def\ExplFileDate{2022-04-10}%
\let\ExplLoaderFileDate\ExplFileDate
\begingroup
\catcode`\_=11
Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.ltx
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.ltx 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.ltx 2022-04-11 20:14:43 UTC (rev 63007)
@@ -19,7 +19,7 @@
%% and all files in that bundle must be distributed together.
%%
%% File: expl3.dtx
-\def\ExplFileDate{2022-02-24}%
+\def\ExplFileDate{2022-04-10}%
\let\ExplLoaderFileDate\ExplFileDate
\begingroup
\catcode`\_=11
Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.lua 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.lua 2022-04-11 20:14:43 UTC (rev 63007)
@@ -56,6 +56,7 @@
local scan_keyword = token.scan_keyword
local put_next = token.put_next
local token_create = token.create
+local token_new = token.new
local token_create_safe
do
local is_defined = token.is_defined
@@ -255,9 +256,9 @@
end
end
-- File: l3names.dtx
-local minus_tok = token.new(string.byte'-', 12)
-local zero_tok = token.new(string.byte'0', 12)
-local one_tok = token.new(string.byte'1', 12)
+local minus_tok = token_new(string.byte'-', 12)
+local zero_tok = token_new(string.byte'0', 12)
+local one_tok = token_new(string.byte'1', 12)
luacmd('tex_strcmp:D', function()
local first = scan_string()
local second = scan_string()
@@ -267,11 +268,16 @@
put_next(first == second and zero_tok or one_tok)
end
end, 'global')
+local sprint = tex.sprint
local cprint = tex.cprint
luacmd('tex_Ucharcat:D', function()
local charcode = scan_int()
local catcode = scan_int()
- cprint(catcode, utf8_char(charcode))
+ if catcode == 10 then
+ sprint(token_new(charcode, 10))
+ else
+ cprint(catcode, utf8_char(charcode))
+ end
end, 'global')
luacmd('tex_filesize:D', function()
local size = filesize(scan_string())
Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.sty 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.sty 2022-04-11 20:14:43 UTC (rev 63007)
@@ -19,7 +19,7 @@
%% and all files in that bundle must be distributed together.
%%
%% File: expl3.dtx
-\def\ExplFileDate{2022-02-24}%
+\def\ExplFileDate{2022-04-10}%
\let\ExplLoaderFileDate\ExplFileDate
\ProvidesPackage{expl3}
[%
Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/l3debug.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/l3debug.def 2022-04-11 20:11:58 UTC (rev 63006)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3debug.def 2022-04-11 20:14:43 UTC (rev 63007)
@@ -624,7 +624,7 @@
{ \__kernel_debug_log:x { Defining~key~#1~\msg_line_context: } }
}
{ }
- { \__keys_cmd_set:nn }
+ { \__keys_cmd_set_direct:nn }
\__kernel_patch:nnn
{ }
{
More information about the tex-live-commits
mailing list.