summaryrefslogtreecommitdiff
path: root/Master
diff options
context:
space:
mode:
authorKarl Berry <karl@freefriends.org>2019-07-02 21:03:06 +0000
committerKarl Berry <karl@freefriends.org>2019-07-02 21:03:06 +0000
commit6cd9cb9b90a640486b1e6cf9bf4385e1622dc621 (patch)
tree55b66dec7d3519db5b1b299ba0ae90aa4fe2714d /Master
parent0eeaf7545f37a529bbc7549c23ec0f2160e509e0 (diff)
l3 (2jul19)
git-svn-id: svn://tug.org/texlive/trunk@51534 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master')
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/CHANGELOG.md13
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/README.md14
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/l3benchmark/l3benchmark.pdfbin314831 -> 314114 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/l3cctab/l3cctab.pdfbin330992 -> 330372 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/l3color/l3color.pdfbin350273 -> 349672 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw-code.pdfbin623975 -> 612165 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw.pdfbin489014 -> 490929 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/l3graphics/l3graphics.pdfbin363678 -> 363042 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/l3pdf/l3pdf-code.pdfbin0 -> 276381 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/l3pdf/l3pdf-code.tex56
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/l3pdf/l3pdf.pdfbin0 -> 349855 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-convert.pdfbin399965 -> 0 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.pdfbin344992 -> 344302 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/l3sys-shell/l3sys-shell.pdfbin312236 -> 311676 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/xcoffins/xcoffins.pdfbin373457 -> 372654 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/xgalley/l3galley.pdfbin386318 -> 385692 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3experimental/xgalley/xgalley.pdfbin286250 -> 285814 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md19
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/README.md2
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/expl3.pdfbin586893 -> 586475 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/interface3.pdfbin1545384 -> 1523655 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/interface3.tex2
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdfbin263861 -> 263424 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3prefixes.csv182
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3prefixes.pdfbin0 -> 58983 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3prefixes.tex83
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdfbin280597 -> 280183 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex2
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdfbin228301 -> 227906 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex2
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.pdfbin187099 -> 186697 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.tex2
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/source3.pdfbin5817874 -> 5705617 bytes
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/source3.tex2
-rw-r--r--Master/texmf-dist/doc/latex/l3kernel/source3body.tex14
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.dtx4
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3cctab/l3cctab.dtx4
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3color/l3color.dtx6
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-boxes.dtx4
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-layers.dtx6
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-paths.dtx8
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-points.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-scopes.dtx10
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-softpath.dtx12
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-state.dtx32
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-transforms.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx6
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.dtx10
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3pdf/l3pdf.dtx337
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3pdf/l3pdf.ins60
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx4
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3str/l3str.ins35
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.dtx4
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx4
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx4
-rw-r--r--Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx4
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/expl3.dtx9
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3.ins84
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3alloc.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3basics.dtx20
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3box.dtx6
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx6
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3clist.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx4
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3color-base.dtx12
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3doc.dtx35
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3drivers-basics.dtx373
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3drivers-box.dtx473
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3drivers-color.dtx307
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3drivers-draw.dtx1338
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3drivers-graphics.dtx611
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3drivers-pdf.dtx1934
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3drivers.dtx749
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3expan.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3file.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3final.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3flag.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3format.ins88
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fp.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3int.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx112
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3keys.dtx46
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3msg.dtx101
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3names.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3prg.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3prop.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3quark.dtx6
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3regex.dtx4
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3seq.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3skip.dtx4
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3sort.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx (renamed from Master/texmf-dist/source/latex/l3experimental/l3str/l3str-convert.dtx)128
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3str.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3sys.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3tl.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3token.dtx2
-rw-r--r--Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx2
-rw-r--r--Master/texmf-dist/tex/latex/l3experimental/l3benchmark/l3benchmark.sty2
-rw-r--r--Master/texmf-dist/tex/latex/l3experimental/l3cctab/l3cctab.sty2
-rw-r--r--Master/texmf-dist/tex/latex/l3experimental/l3color/l3color.sty4
-rw-r--r--Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty62
-rw-r--r--Master/texmf-dist/tex/latex/l3experimental/l3graphics/l3graphics.sty8
-rw-r--r--Master/texmf-dist/tex/latex/l3experimental/l3pdf/l3pdf.sty104
-rw-r--r--Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-convert.sty574
-rw-r--r--Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-utf16.def206
-rw-r--r--Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-utf32.def156
-rw-r--r--Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-utf8.def190
-rw-r--r--Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-hex.def74
-rw-r--r--Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-name.def95
-rw-r--r--Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-string.def144
-rw-r--r--Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-url.def93
-rw-r--r--Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty2
-rw-r--r--Master/texmf-dist/tex/latex/l3experimental/l3sys-shell/l3sys-shell.sty2
-rw-r--r--Master/texmf-dist/tex/latex/l3experimental/xcoffins/xcoffins.sty2
-rw-r--r--Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty2
-rw-r--r--Master/texmf-dist/tex/latex/l3experimental/xgalley/xgalley.sty2
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex1422
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex4
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/expl3.sty5
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3doc.cls27
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def635
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3dvips.def1176
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3dvisvgm.def487
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def690
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88591.def (renamed from Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88591.def)8
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885910.def (renamed from Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885910.def)8
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885911.def (renamed from Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885911.def)8
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885913.def (renamed from Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885913.def)8
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885914.def (renamed from Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885914.def)8
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885915.def (renamed from Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885915.def)8
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885916.def (renamed from Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885916.def)8
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88592.def (renamed from Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88592.def)8
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88593.def (renamed from Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88593.def)8
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88594.def (renamed from Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88594.def)8
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88595.def (renamed from Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88595.def)8
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88596.def (renamed from Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88596.def)8
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88597.def (renamed from Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88597.def)8
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88598.def (renamed from Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88598.def)8
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88599.def (renamed from Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88599.def)8
-rw-r--r--Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def681
160 files changed, 2813 insertions, 11635 deletions
diff --git a/Master/texmf-dist/doc/latex/l3experimental/CHANGELOG.md b/Master/texmf-dist/doc/latex/l3experimental/CHANGELOG.md
index 9f293b18966..5ec4523e41f 100644
--- a/Master/texmf-dist/doc/latex/l3experimental/CHANGELOG.md
+++ b/Master/texmf-dist/doc/latex/l3experimental/CHANGELOG.md
@@ -7,6 +7,16 @@ this project uses date-based 'snapshot' version identifiers.
## [Unreleased]
+## [2019-07-01]
+
+### Added
+
+- New module `l3pdf`
+
+### Removed
+
+- `l3str-convert` module: moved to `l3kernel` (`expl3` core)
+
## [2019-05-28]
### Added
@@ -85,7 +95,8 @@ this project uses date-based 'snapshot' version identifiers.
- New `l3color` module using `xcolor`-like expression syntax
- New `l3draw` module, based on `pgf` layer of the TikZ system
-[Unreleased]: https://github.com/latex3/latex3/compare/2019-05-28...HEAD
+[Unreleased]: https://github.com/latex3/latex3/compare/2019-07-01...HEAD
+[2019-07-01]: https://github.com/latex3/latex3/compare/2019-05-28...2019-07-01
[2019-05-28]: https://github.com/latex3/latex3/compare/2019-05-03...2019-05-28
[2019-05-03]: https://github.com/latex3/latex3/compare/2019-03-05...2019-05-03
[2019-03-05]: https://github.com/latex3/latex3/compare/2019-01-28...2019-03-05
diff --git a/Master/texmf-dist/doc/latex/l3experimental/README.md b/Master/texmf-dist/doc/latex/l3experimental/README.md
index cf1141be526..f6154aa84eb 100644
--- a/Master/texmf-dist/doc/latex/l3experimental/README.md
+++ b/Master/texmf-dist/doc/latex/l3experimental/README.md
@@ -1,7 +1,7 @@
Experimental LaTeX3 Concepts
============================
-Release 2019-05-28
+Release 2019-07-01
Overview
--------
@@ -26,6 +26,7 @@ bundles:
* `l3color`
* `l3draw`
* `l3graphics`
+* `l3pdf`
* `l3str`
* `l3sys-shell`
* `xcoffins`
@@ -64,14 +65,19 @@ TikZ system.
This module provides interfaces for the inclusion of graphics files
in documents, similar to the `graphics` package.
+`l3pdf`
+-------
+
+This module provides support for core PDF concepts such compression, objects,
+PDF version and so on.
+
`l3str`
-------
A 'string' in TeX terms is a token list in which all of the tokens have
category code 12 ('other'), with the exception of spaces which have the
-category code 10 ('space'). The `l3str` bundle consists of two parts. The
-first is `l3str` itself. This is a collection of functions to act on strings,
-including for manipulations such as UTF8 mappings in pdfTeX.
+category code 10 ('space'). The `l3strf-format` module provides methods
+for formatting such strings.
`l3sys-shell`
-------------
diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3benchmark/l3benchmark.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3benchmark/l3benchmark.pdf
index 4f89389c8ef..4421168e8e1 100644
--- a/Master/texmf-dist/doc/latex/l3experimental/l3benchmark/l3benchmark.pdf
+++ b/Master/texmf-dist/doc/latex/l3experimental/l3benchmark/l3benchmark.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3cctab/l3cctab.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3cctab/l3cctab.pdf
index b8f090325e2..d8df1d5b49e 100644
--- a/Master/texmf-dist/doc/latex/l3experimental/l3cctab/l3cctab.pdf
+++ b/Master/texmf-dist/doc/latex/l3experimental/l3cctab/l3cctab.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3color/l3color.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3color/l3color.pdf
index 6fe80500240..b2dc0b38c21 100644
--- a/Master/texmf-dist/doc/latex/l3experimental/l3color/l3color.pdf
+++ b/Master/texmf-dist/doc/latex/l3experimental/l3color/l3color.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw-code.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw-code.pdf
index ba355b2f459..72ef6b6e342 100644
--- a/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw-code.pdf
+++ b/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw-code.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw.pdf
index 977632190ff..2f75fc31c23 100644
--- a/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw.pdf
+++ b/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3graphics/l3graphics.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3graphics/l3graphics.pdf
index a86638228fe..0ee0184c824 100644
--- a/Master/texmf-dist/doc/latex/l3experimental/l3graphics/l3graphics.pdf
+++ b/Master/texmf-dist/doc/latex/l3experimental/l3graphics/l3graphics.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3pdf/l3pdf-code.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3pdf/l3pdf-code.pdf
new file mode 100644
index 00000000000..eaa6d56757c
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/l3experimental/l3pdf/l3pdf-code.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3pdf/l3pdf-code.tex b/Master/texmf-dist/doc/latex/l3experimental/l3pdf/l3pdf-code.tex
new file mode 100644
index 00000000000..a93342f1f39
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/l3experimental/l3pdf/l3pdf-code.tex
@@ -0,0 +1,56 @@
+\iffalse meta-comment
+
+File: l3pdf-code.tex
+
+Copyright (C) 2019 The LaTeX3 Project
+
+It may be distributed and/or modified under the conditions of the
+LaTeX Project Public License (LPPL), either version 1.3c of this
+license or (at your option) any later version. The latest version
+of this license is in the file
+
+ https://www.latex-project.org/lppl.txt
+
+This file is part of the "l3experimental bundle" (The Work in LPPL)
+and all files in that bundle must be distributed together.
+
+The released version of this bundle is available from CTAN.
+
+-----------------------------------------------------------------------
+
+The development version of the bundle can be found at
+
+ https://github.com/latex3/latex3
+
+for those people who are interested.
+
+\fi
+
+\documentclass{l3doc}
+
+\begin{document}
+
+\makeatletter
+\let\DelayPrintIndex\PrintIndex
+\let\PrintIndex\@empty
+\makeatother
+
+\ExplSyntaxOn
+\clist_gput_right:Nn \g_docinput_clist
+ {
+ l3pdf.dtx ,
+ }
+\ExplSyntaxOff
+
+\part{Implementation}
+
+\def\maketitle{}
+\EnableImplementation
+\DisableDocumentation
+\DocInputAgain
+
+\clearpage
+
+\DelayPrintIndex
+
+\end{document}
diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3pdf/l3pdf.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3pdf/l3pdf.pdf
new file mode 100644
index 00000000000..bcb109226ad
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/l3experimental/l3pdf/l3pdf.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-convert.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-convert.pdf
deleted file mode 100644
index a6de90f27e0..00000000000
--- a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-convert.pdf
+++ /dev/null
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.pdf
index 29b8f8ecb52..b63616b597b 100644
--- a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.pdf
+++ b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3sys-shell/l3sys-shell.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3sys-shell/l3sys-shell.pdf
index 1bf076ed62f..6374c5cb359 100644
--- a/Master/texmf-dist/doc/latex/l3experimental/l3sys-shell/l3sys-shell.pdf
+++ b/Master/texmf-dist/doc/latex/l3experimental/l3sys-shell/l3sys-shell.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3experimental/xcoffins/xcoffins.pdf b/Master/texmf-dist/doc/latex/l3experimental/xcoffins/xcoffins.pdf
index 99ec75598d4..c8b1cc9be15 100644
--- a/Master/texmf-dist/doc/latex/l3experimental/xcoffins/xcoffins.pdf
+++ b/Master/texmf-dist/doc/latex/l3experimental/xcoffins/xcoffins.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3experimental/xgalley/l3galley.pdf b/Master/texmf-dist/doc/latex/l3experimental/xgalley/l3galley.pdf
index ad1722b75ab..212488f8a25 100644
--- a/Master/texmf-dist/doc/latex/l3experimental/xgalley/l3galley.pdf
+++ b/Master/texmf-dist/doc/latex/l3experimental/xgalley/l3galley.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3experimental/xgalley/xgalley.pdf b/Master/texmf-dist/doc/latex/l3experimental/xgalley/xgalley.pdf
index 96353edc24a..654277d64c7 100644
--- a/Master/texmf-dist/doc/latex/l3experimental/xgalley/xgalley.pdf
+++ b/Master/texmf-dist/doc/latex/l3experimental/xgalley/xgalley.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md b/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md
index b9988bdaef2..99e3f9c7acc 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md
+++ b/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md
@@ -7,6 +7,22 @@ this project uses date-based 'snapshot' version identifiers.
## [Unreleased]
+## [2019-07-01]
+
+### Added
+
+- Moved `lstr-convert` module to `l3kernel`
+
+### Changed
+
+- Ensure `\msg_fatal:nn` ends the TeX run if used inside an
+ hbox (see #587)
+- Moved backend code to a separate release schedule
+
+### Fixed
+
+- Handling of control sequences in key names (see #594)
+
## [2019-05-28]
### Added
@@ -418,7 +434,8 @@ this project uses date-based 'snapshot' version identifiers.
- Step func­tions have been added for dim vari­ables,
e.g. `\dim_step_in­line:nnnn`
-[Unreleased]: https://github.com/latex3/latex3/compare/2019-05-28...HEAD
+[Unreleased]: https://github.com/latex3/latex3/compare/2019-07-01...HEAD
+[2019-07-01]: https://github.com/latex3/latex3/compare/2019-05-28...2019-07-01
[2019-05-28]: https://github.com/latex3/latex3/compare/2019-05-09...2019-05-28
[2019-05-09]: https://github.com/latex3/latex3/compare/2019-05-07...2019-05-09
[2019-05-07]: https://github.com/latex3/latex3/compare/2019-05-05...2019-05-07
diff --git a/Master/texmf-dist/doc/latex/l3kernel/README.md b/Master/texmf-dist/doc/latex/l3kernel/README.md
index 1a0d088e6e4..67ae250c4ae 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/README.md
+++ b/Master/texmf-dist/doc/latex/l3kernel/README.md
@@ -1,7 +1,7 @@
LaTeX3 Programming Conventions
==============================
-Release 2019-05-28
+Release 2019-07-01
Overview
--------
diff --git a/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf b/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf
index 7ae7a5c282c..8bc9c3a8357 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf b/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf
index 2630e677388..035ef3ebed5 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/interface3.tex b/Master/texmf-dist/doc/latex/l3kernel/interface3.tex
index 74a5d4a382f..6b398be125a 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/interface3.tex
+++ b/Master/texmf-dist/doc/latex/l3kernel/interface3.tex
@@ -54,7 +54,7 @@ for those people who are interested.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2019-05-28}
+\date{Released 2019-07-01}
\pagenumbering{roman}
\maketitle
diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf
index 421941c18de..d3da423c332 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3prefixes.csv b/Master/texmf-dist/doc/latex/l3kernel/l3prefixes.csv
new file mode 100644
index 00000000000..95e6e0ab1a2
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/l3kernel/l3prefixes.csv
@@ -0,0 +1,182 @@
+Prefix,Module or package,Registrant,Homepage,Source repository,Issue tracker,First registered,Last update,Notes
+ENdiagram,endiagram,Clemens Niederberger,https://bitbucket.org/cgnieder/endiagram/,git@bitbucket.org:cgnieder/endiagram.git,https://bitbucket.org/cgnieder/endiagram/issues,16/03/2013,16/03/2013,
+GS,gs1,Markus Kohm,,,,16/03/2013,16/03/2013,
+MOdiagram,modiagram,Clemens Niederberger,https://bitbucket.org/cgnieder/modiagram/,git@bitbucket.org:cgnieder/modiagram.git,https://bitbucket.org/cgnieder/modiagram/issues,16/03/2013,16/03/2013,
+UFca,citeall,Ulrike Fischer,,,,09/04/2015,26/02/2016,
+acro,acro,Clemens Niederberger,https://bitbucket.org/cgnieder/acro/,git@bitbucket.org:cgnieder/acro.git,https://bitbucket.org/cgnieder/acro/issues,16/03/2013,16/03/2013,
+algobox,algobox,Julien Rivaud,,,,13/06/2018,13/06/2018,
+alignment,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,12/05/2018,12/05/2018,
+alloc,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,27/09/2012,27/09/2012,Internal only but reserved
+ampersand,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,12/05/2018,12/05/2018,
+arch,archaeologie,Lukas C. Bossert,http://www.biblatex-archaeologie.de,https://github.com/LukasCBossert/biblatex-archaeologie.git,https://github.com/LukasCBossert/biblatex-archaeologie/issues,24/03/2017,24/03/2017,
+array,hobby,Andrew Stacey,,,,16/03/2013,16/03/2013,
+atsign,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,12/05/2018,12/05/2018,
+backend,l3backend,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,04/06/2019,04/06/2019,
+backslash,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,12/05/2018,12/05/2018,
+bool,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,27/09/2012,27/09/2012,
+box,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,27/09/2012,27/09/2012,
+bxjh,BXjaholiday,Takuto Asakura,https://github.com/wtsnjp/BXjaholiday,https://github.com/wtsnjp/BXjaholiday.git,https://github.com/wtsnjp/BXjaholiday/issues,02/02/2018,02/02/2019,
+catcode,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,12/05/2018,12/05/2018,
+cctab,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,28/09/2012,28/09/2012,
+cellprops,cellprops,Julien Rivaud,,,,13/06/2018,13/06/2018,
+char,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,27/09/2012,27/09/2012,
+chemformula,chemmacros,Clemens Niederberger,https://bitbucket.org/cgnieder/chemmacros/,git@bitbucket.org:cgnieder/chemmacros.git,https://bitbucket.org/cgnieder/chemmacros/issues,16/03/2013,16/03/2013,
+chemmacros,chemmacros,Clemens Niederberger,https://bitbucket.org/cgnieder/chemmacros/,git@bitbucket.org:cgnieder/chemmacros.git,https://bitbucket.org/cgnieder/chemmacros/issues,16/03/2013,16/03/2013,
+chemnum,chemnum,Clemens Niederberger,https://bitbucket.org/cgnieder/chemnum/,git@bitbucket.org:cgnieder/chemnum.git,https://bitbucket.org/cgnieder/chemnum/issues,16/03/2013,16/03/2013,
+chk,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,27/09/2012,27/09/2012,Currently internal-only but reserved
+circumflex,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,12/05/2018,12/05/2018,
+classics,classics,Eduardo C. Lourenço de Lima,,,,16/03/2013,16/03/2013,
+clist,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,27/09/2012,27/09/2012,
+codedoc,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,27/09/2012,27/09/2012,Somewhat experimental: may change
+coffin,"l3kernel,xcoffins",The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,27/09/2012,27/09/2012,
+colon,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,12/05/2018,12/05/2018,
+color,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,27/09/2012,27/09/2012,
+conteq,conteq,Joachim Breitner,https://github.com/nomeata/conteq,https://github.com/nomeata/conteq.git,https://github.com/nomeata/conteq/issues,26/05/2013,27/05/2013,
+cookingunits,cooking-units,Ben Vitecek,https://github.com/Vidabe/cooking-units,https://github.com/Vidabe/cooking-units.git,https://github.com/Vidabe/cooking-units/issues,26/09/2018,26/09/2018,
+cs,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,27/09/2012,27/09/2012,
+ctex,ctex,Qing Lee,https://github.com/CTeX-org/ctex-kit,https://github.com/CTeX-org/ctex-kit.git,https://github.com/CTeX-org/ctex-kit/issues,08/03/2014,08/03/2014,
+ctuthesis,ctuthesis,Tom Hejda,https://github.com/tohecz/ctuthesis,https://github.com/tohecz/ctuthesis.git,https://github.com/tohecz/ctuthesis/issues,26/07/2015,26/07/2015,
+debug,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,15/07/2017,15/07/2017,
+dim,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,27/09/2012,27/09/2012,
+document,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,02/06/2019,02/06/2019,
+dollar,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,12/05/2018,12/05/2018,
+driver,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,27/09/2012,27/09/2012,
+dry,dry,Michiel Helvensteijn,,,,18/01/2013,18/01/2013,
+ducksay,ducksay,Jonathan P. Spratte,https://github.com/Skillmon/ltx_ducksay,git@github.com:Skillmon/ltx_ducksay.git,https://github.com/Skillmon/ltx_ducksay/issues,07/06/2019,07/06/2019,
+duckuments,duckuments,Jonathan P. Spratte,https://github.com/Skillmon/ltx_duckuments,git@github.com:Skillmon/ltx_duckuments.git,https://github.com/Skillmon/ltx_duckuments/issues,07/06/2019,07/06/2019,
+e,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,12/05/2018,12/05/2018,
+else,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,28/09/2012,28/09/2012,
+empty,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,12/05/2018,12/05/2018,
+enotez,enotez,Clemens Niederberger,https://bitbucket.org/cgnieder/enotez/,git@bitbucket.org:cgnieder/enotez.git,https://bitbucket.org/cgnieder/enotez/issues,16/03/2013,16/03/2013,
+etex,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,27/09/2012,27/09/2012,
+exp,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,27/09/2012,27/09/2012,
+expl,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,27/09/2012,27/09/2012,
+exsheets,exsheets,Clemens Niederberger,https://bitbucket.org/cgnieder/exsheets/,git@bitbucket.org:cgnieder/exsheets.git,https://bitbucket.org/cgnieder/exsheets/issues,16/03/2013,16/03/2013,
+exwf,exwrapfig,Takuto Asakura,https://github.com/wtsnjp/exwrapfig,https://github.com/wtsnjp/exwrapfig.git,https://github.com/wtsnjp/exwrapfig/issues,07/06/2018,07/06/2018,
+fdu,fduthesis,Xiangdong Zeng,https://github.com/Stone-Zeng/fduthesis,https://github.com/Stone-Zeng/fduthesis.git,https://github.com/Stone-Zeng/fduthesis/issues,14/06/2018,14/06/2018,
+fdudoc,fduthesis,Xiangdong Zeng,https://github.com/Stone-Zeng/fduthesis,https://github.com/Stone-Zeng/fduthesis.git,https://github.com/Stone-Zeng/fduthesis/issues,14/06/2018,14/06/2018,
+fdulogo,fduthesis,Xiangdong Zeng,https://github.com/Stone-Zeng/fduthesis,https://github.com/Stone-Zeng/fduthesis.git,https://github.com/Stone-Zeng/fduthesis/issues,14/06/2018,14/06/2018,
+fi,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,28/09/2012,28/09/2012,
+file,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,27/09/2012,27/09/2012,
+flag,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,27/09/2012,13/02/2017,
+fltr,newlfm,Paul Thomson,,,,29/01/2013,29/01/2013,
+fmdug,dashundergaps,Frank Mittelbach,https://www.latex-project.org/,https://github.com/FrankMittelbach/fmitex.git,https://github.com/FrankMittelbach/fmitex/issues,24/06/2018,24/06/2018,
+fmwao,widows-and-orphans,Frank Mittelbach,https://www.latex-project.org/,https://github.com/FrankMittelbach/fmitex.git,https://github.com/FrankMittelbach/fmitex/issues,26/09/2018,26/09/2018,
+fnpct,fnpct,Clemens Niederberger,https://bitbucket.org/cgnieder/fnpct/,git@bitbucket.org:cgnieder/fnpct.git,https://bitbucket.org/cgnieder/fnpct/issues,16/03/2013,16/03/2013,
+fontsizes,fontsizes,Julien Rivaud,,,,,13/06/2018,
+fontspec,fontspec,Will Robertson,https://github.com/wspr/fontspec,https://github.com/wspr/fontspec.git,https://github.com/wspr/fontspec/issues,16/03/2013,16/03/2013,
+fp,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,27/09/2012,27/09/2012,
+galley,l3galley,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,27/09/2012,27/09/2012,
+gatherenum,gatherenum,Julien Rivaud,,,,13/06/2018,14/06/2018,
+ghsystem,chemmacros,Clemens Niederberger,https://bitbucket.org/cgnieder/chemmacros/,git@bitbucket.org:cgnieder/chemmacros.git,https://bitbucket.org/cgnieder/chemmacros/issues,16/03/2013,16/03/2013,
+graph,lt3graph,Michiel Helvensteijn,,,,05/02/2014,05/02/2014,
+group,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,27/09/2012,27/09/2012,
+gtl,gtl,Bruno Le Floch,https://github.com/blefloch/latex-gtl,https://github.com/blefloch/latex-gtl.git,https://github.com/blefloch/latex-gtl/issues,22/09/2015,22/09/2015,
+hash,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,12/05/2018,12/05/2018,
+hbox,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,27/09/2012,27/09/2012,
+hcoffin,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,28/09/2012,28/09/2012,
+hobete,hobete,Tobias Görlach,http://www.disk0s1.de,,,07/11/2012,07/11/2012,
+hook,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,03/06/2019,03/06/2019,
+if,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,27/09/2012,27/09/2012,
+inf,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,12/05/2018,12/05/2018,
+insert,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,28/09/2012,28/09/2012,
+int,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,27/09/2012,27/09/2012,
+intarray,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,06/04/2018,06/04/2018,
+ior,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,27/09/2012,27/09/2012,
+iow,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,27/09/2012,27/09/2012,
+kernel,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,27/09/2012,27/09/2012,
+keys,"l3kernel,l3keys2e",The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,27/09/2012,27/09/2012,
+keyval,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,27/09/2012,27/09/2012,
+kgl,kantlipsum,Enrico Gregorio,,,,16/03/2013,16/03/2013,
+left,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,12/05/2018,12/05/2018,
+lltxmath,lualatex-math,Philipp Stephani,https://github.com/phst/lualatex-math,https://github.com/phst/lualatex-math.git,https://github.com/phst/lualatex-math/issues,07/11/2012,07/11/2012,
+log,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,12/05/2018,12/05/2018,
+lua,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,27/09/2012,27/09/2012,
+luatex,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,27/09/2012,27/09/2012,
+mark,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,12/05/2018,12/05/2018,
+math,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,12/05/2018,12/05/2018,
+max,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,12/05/2018,12/05/2018,
+mcrule,multicolrule,Karl Hagen,https://github.com/polysyllabic/multicolrule,https://github.com/polysyllabic/multicolrule.git,https://github.com/polysyllabic/multicolrule/issues,24/12/2018,24/12/2018,
+mhchem,mhchem,Martin Hensel,,,,05/02/2014,05/02/2014,
+minus,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,12/05/2018,12/05/2018,
+mix,media9,Alexander Grahn,,,,18/01/2013,18/01/2013,
+mode,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,27/09/2012,27/09/2012,
+morewrites,morewrites,Bruno Le Floch,https://github.com/blefloch/latex-morewrites,https://github.com/blefloch/latex-morewrites.git,https://github.com/blefloch/latex-morewrites/issues,16/03/2013,22/09/2015,
+msg,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,27/09/2012,27/09/2012,
+muskip,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,27/09/2012,27/09/2012,
+nan,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,12/05/2018,12/05/2018,
+nil,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,12/05/2018,12/05/2018,
+no,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,12/05/2018,12/05/2018,
+notestobib,notes2bib,Joseph Wright,https://github.com/josephwright/notes2bib,https://github.com/josephwright/notes2bib.git,https://github.com/josephwright/notes2bib/issues,07/11/2012,07/11/2012,
+novalue,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,12/05/2018,12/05/2018,
+ocgbase,ocgx2,Alexander Grahn,,,,26/02/2016,26/02/2016,
+ocgxii,ocgx2,Alexander Grahn,,,,26/02/2016,26/02/2016,
+one,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,12/05/2018,12/05/2018,
+or,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,28/09/2012,28/09/2012,
+parameter,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,12/05/2018,12/05/2018,
+pbs,media9,Alexander Grahn,,,,26/02/2016,26/02/2016,
+pdf,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,02/06/2019,02/06/2019,
+pdftex,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,27/09/2012,27/09/2012,
+peek,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,27/09/2012,27/09/2012,
+percent,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,12/05/2018,12/05/2018,
+pi,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,12/05/2018,12/05/2018,
+pkgploader,pkgploader,Michiel Helvensteijn,,,,05/02/2014,05/02/2014,
+prg,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,27/09/2012,27/09/2012,
+primargs,morewrites,Bruno Le Floch,https://github.com/blefloch/latex-morewrites,https://github.com/blefloch/latex-morewrites.git,https://github.com/blefloch/latex-morewrites/issues,16/03/2013,22/09/2015,
+prop,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,27/09/2012,27/09/2012,
+pseudo,pseudo,Magnus Lie Hetland,https://github.com/mlhetland/pseudo.sty,https://github.com/mlhetland/pseudo.sty.git,https://github.com/mlhetland/pseudo.sty/issues,24/06/2019,24/06/2019,
+ptex,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,28/07/2015,28/07/2015,
+quark,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,27/09/2012,27/09/2012,
+randomwalk,randomwalk,Bruno Le Floch,https://github.com/blefloch/latex-randomwalk,https://github.com/blefloch/latex-randomwalk.git,https://github.com/blefloch/latex-randomwalk/issues,16/03/2013,22/09/2015,
+recursion,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,12/05/2018,12/05/2018,
+regex,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,27/09/2012,06/04/2018,
+reverse,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,28/09/2012,28/09/2012,
+right,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,12/05/2018,12/05/2018,
+rivbook,rivbook,Julien Rivaud,,,,13/06/2018,14/06/2018,
+rivmath,rivmath,Julien Rivaud,,,,13/06/2018,13/06/2018,
+scan,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,27/09/2012,27/09/2012,
+seq,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,27/09/2012,27/09/2012,
+siunitx,siunitx,Joseph Wright,https://github.com/josephwright/siunitx,https://github.com/josephwright/siunitx.git,https://github.com/josephwright/siunitx/issues,04/11/2012,04/11/2012,
+skip,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,27/09/2012,27/09/2012,
+sort,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,27/09/2012,13/02/2017,
+space,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,12/05/2018,12/05/2018,
+statistics,statistics,Julien Rivaud,https://gitlab.com/frnchfrgg-latex/statistics,https://gitlab.com/frnchfrgg-latex/statistics.git,https://gitlab.com/frnchfrgg-latex/statistics/issues,25/06/2018,25/06/2018,
+stm,lt3-stm,CV Radhakrishnan,http://www.cvr.cc/,,,26/02/2014,26/02/2014,
+stop,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,12/05/2018,12/05/2018,
+str,"l3kernel,l3str,l3str-format",The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,27/09/2012,27/09/2012,
+substances,substances,Clemens Niederberger,https://bitbucket.org/cgnieder/substances/,git@bitbucket.org:cgnieder/substances.git,https://bitbucket.org/cgnieder/substances/issues,16/03/2013,16/03/2013,
+sys,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,07/09/2015,08/09/2015,
+tasks,exsheets,Clemens Niederberger,https://bitbucket.org/cgnieder/exsheets/,git@bitbucket.org:cgnieder/exsheets.git,https://bitbucket.org/cgnieder/exsheets/issues,16/03/2013,16/03/2013,
+term,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,12/05/2018,12/05/2018,
+tex,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,27/09/2012,27/09/2012,
+tikzsymbols,tikzsymbols,Ben Vitecek,https://github.com/Vidabe/tikzsymbols,https://github.com/Vidabe/tikzsymbols.git,https://github.com/Vidabe/tikzsymbols/issues,26/09/2018,26/09/2018,
+tilde,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,12/05/2018,12/05/2018,
+tl,"l3kernel,l3tl-analysis,l3tl-build",The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,27/09/2012,27/09/2012,
+tmpa,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,12/05/2018,12/05/2018,
+tmpb,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,12/05/2018,12/05/2018,
+tag,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,02/06/2019,02/06/2019,
+token,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,27/09/2012,27/09/2012,
+uftag,tagpdf,Ulrike Fischer,,,,15/07/2018,15/07/2018,
+um,unicode-math,Will Robertson,https://github.com/wspr/unicode-math,https://github.com/wspr/unicode-math.git,https://github.com/wspr/unicode-math/issues,16/03/2013,16/03/2013,
+underscore,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,12/05/2018,12/05/2018,
+unravel,unravel,Bruno Le Floch,https://github.com/blefloch/latex-unravel,https://github.com/blefloch/latex-unravel.git,https://github.com/blefloch/latex-unravel/issues,22/09/2015,22/09/2015,
+uptex,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,28/07/2015,28/07/2015,
+use,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,27/09/2012,27/09/2012,
+utex,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,28/07/2015,28/07/2015,
+vbox,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,27/09/2012,27/09/2012,
+vcoffin,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,28/09/2012,28/09/2012,
+withargs,withargs,Michiel Helvensteijn,,,,05/02/2014,05/02/2014,
+xeCJK,xecjk,Qing Lee,https://github.com/CTeX-org/ctex-kit,https://github.com/CTeX-org/ctex-kit.git,https://github.com/CTeX-org/ctex-kit/issues,26/05/2013,26/05/2013,
+xetex,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,27/09/2012,27/09/2012,
+xfrac,xfrac,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,27/09/2012,27/09/2012,
+xparse,xparse,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,27/09/2012,27/09/2012,
+xpatch,"regexpatch,xpatch",Enrico Gregorio,,,,16/03/2013,16/03/2013,
+xpeek,xpeek,Joel C. Salomon,,,,16/03/2013,16/03/2013,
+xpinyin,xpinyin,Qing Lee,https://github.com/CTeX-org/ctex-kit,https://github.com/CTeX-org/ctex-kit.git,https://github.com/CTeX-org/ctex-kit/issues,16/03/2013,26/05/2013,
+xsb,xsavebox,Alexander Grahn,,,,26/02/2016,26/02/2016,
+xtemplate,xtemplate,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,27/09/2012,27/09/2012,
+yoin,yoin,Tom Hejda,https://github.com/tohecz/yoin,https://github.com/tohecz/yoin.git,https://github.com/tohecz/yoin/issues,22/02/2016,22/02/2016,
+zero,l3kernel,The LaTeX3 Project,https://www.latex-project.org/latex3.html,https://github.com/latex3/latex3.git,https://github.com/latex3/latex3/issues,12/05/2018,12/05/2018,
+zhlipsum,zhlipsum,Xiangdong Zeng,https://github.com/Stone-Zeng/zhlipsum,https://github.com/Stone-Zeng/zhlipsum.git,https://github.com/Stone-Zeng/zhlipsum/issues,14/06/2018,14/06/2018,
+zhnum,zhnumber,Qing Lee,https://github.com/CTeX-org/ctex-kit,https://github.com/CTeX-org/ctex-kit.git,https://github.com/CTeX-org/ctex-kit/issues,16/03/2013,26/05/2013,
+zxjt,zxjatype,Takayuki Yato,,,,16/03/2013,16/03/2013,
diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3prefixes.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3prefixes.pdf
new file mode 100644
index 00000000000..0e640816cbe
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/l3kernel/l3prefixes.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3prefixes.tex b/Master/texmf-dist/doc/latex/l3kernel/l3prefixes.tex
new file mode 100644
index 00000000000..06b58ea6606
--- /dev/null
+++ b/Master/texmf-dist/doc/latex/l3kernel/l3prefixes.tex
@@ -0,0 +1,83 @@
+\iffalse meta-comment
+
+File:l3prefixes.tex
+
+Copyright (C) 2019 The LaTeX3 Project
+
+It may be distributed and/or modified under the conditions of the
+LaTeX Project Public License (LPPL), either version 1.3c of this
+license or (at your option) any later version. The latest version
+of this license is in the file
+
+ https://www.latex-project.org/lppl.txt
+
+This file is part of the "l3kernel bundle" (The Work in LPPL)
+and all files in that bundle must be distributed together.
+
+The released version of this bundle is available from CTAN.
+
+-----------------------------------------------------------------------
+
+The development version of the bundle can be found at
+
+ https://github.com/latex3/latex3
+
+for those people who are interested.
+
+\fi
+
+\documentclass{article}
+\usepackage{expl3}
+\usepackage{array}
+\usepackage{booktabs}
+\usepackage{longtable}
+\ExplSyntaxOn
+\cs_new_protected:Npn \__prefix_readi:w #1 " #2 " #3 \q_stop
+ {
+ \quark_if_nil:nTF {#2}
+ { \__prefix_readii:w #1 \q_stop }
+ { \__prefix_readi:w #1 {#2} #3 \q_stop }
+ }
+\cs_new_protected:Npn \__prefix_readii:w #1 , #2 , #3 , #4 \q_stop
+ { \__prefix_readiii:nnw {#1} {#3} #2 , \q_stop }
+\cs_new_protected:Npn \__prefix_readiii:nnw #1 #2 #3 , #4 \q_stop
+ {
+ \tl_put_right:Nn \l_tmpb_tl { #1 & #3 & #2 \\ }
+ \tl_if_blank:nF {#4}
+ { \clist_map_inline:nn {#4} { \tl_put_right:Nn \l_tmpb_tl { & ##1 \\ } } }
+ }
+\ior_new:N \l_tmpa_ior
+\ior_open:Nn \l_tmpa_ior { l3prefixes.csv }
+\ior_get:NN \l_tmpa_ior \l_tmpa_tl % Throw away
+\cs_new_protected:Npn \PrintTable
+ {
+ \tl_set:Nn \l_tmpb_tl
+ {
+ \begin { longtable } { @{} *{2}{>{\ttfamily}l} l @{} }
+ \toprule
+ \multicolumn{1}{@{}l}{Prefix}
+ & \multicolumn{1}{l@{}}{Module}
+ & Registrant \\
+ \midrule
+ \endhead
+ \bottomrule
+ \endfoot
+ }
+ \ior_map_inline:Nn \l_tmpa_ior
+ { \__prefix_readi:w ##1 " \q_nil " \q_stop }
+ \tl_put_right:Nn \l_tmpb_tl { \end { longtable } }
+ \tl_replace_all:Nnn \l_tmpb_tl { LaTeX3 } { \LaTeX3 }
+ \tl_use:N \l_tmpb_tl
+ }
+\ExplSyntaxOff
+\begin{document}
+
+This file lists the prefixes which have been registered with the \LaTeX{}
+team for use in \textsf{expl3} code. Programmers are invited to register their
+(public) prefix use by contacting the team. We recommend that short prefixes
+are avoided as there are a limited number of these very general names available.
+The file \texttt{l3prefixes.csv} contains more details on each module, for
+example any information on source repository or issue tracker.
+
+\PrintTable
+\end{document} \ No newline at end of file
diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf
index 143c0636a2e..441ae7bbee7 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex b/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex
index 75a3ac45ef6..eb34428965f 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex
+++ b/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex
@@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2019-05-28}
+\date{Released 2019-07-01}
\begin{document}
diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf
index d8de4454b82..42ffdc4118b 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex b/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex
index 444f4ea3255..043cbe68094 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex
+++ b/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex
@@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2019-05-28}
+\date{Released 2019-07-01}
\newcommand{\TF}{\textit{(TF)}}
diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.pdf
index 29b6ebee14d..71ee5e5b237 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.tex b/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.tex
index e2d694bbd7a..cea0cb83329 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.tex
+++ b/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.tex
@@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2019-05-28}
+\date{Released 2019-07-01}
\newcommand{\TF}{\textit{(TF)}}
diff --git a/Master/texmf-dist/doc/latex/l3kernel/source3.pdf b/Master/texmf-dist/doc/latex/l3kernel/source3.pdf
index 97d91022f56..3460e5c42d9 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/source3.pdf
+++ b/Master/texmf-dist/doc/latex/l3kernel/source3.pdf
Binary files differ
diff --git a/Master/texmf-dist/doc/latex/l3kernel/source3.tex b/Master/texmf-dist/doc/latex/l3kernel/source3.tex
index 0690e2883dd..b9fafb25816 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/source3.tex
+++ b/Master/texmf-dist/doc/latex/l3kernel/source3.tex
@@ -53,7 +53,7 @@ for those people who are interested.
{latex-team@latex-project.org}%
}%
}
-\date{Released 2019-05-28}
+\date{Released 2019-07-01}
\pagenumbering{roman}
\maketitle
diff --git a/Master/texmf-dist/doc/latex/l3kernel/source3body.tex b/Master/texmf-dist/doc/latex/l3kernel/source3body.tex
index 94f74261d8c..620ac44f849 100644
--- a/Master/texmf-dist/doc/latex/l3kernel/source3body.tex
+++ b/Master/texmf-dist/doc/latex/l3kernel/source3body.tex
@@ -102,6 +102,7 @@ stand-alone \LaTeX3 is developed.
\let\thanks\@gobble
\let\DelayPrintIndex\PrintIndex
\let\PrintIndex\@empty
+\providecommand*{\hexnum}[1]{\text{\texttt{\char`\"}#1}}
\makeatother
\part{Introduction to \pkg{expl3} and this document}
@@ -437,6 +438,7 @@ used on top of \LaTeXe{} if \cs{outer} tokens are used in the arguments.
\DocInput{l3expan.dtx}
\DocInput{l3tl.dtx}
\DocInput{l3str.dtx}
+\DocInput{l3str-convert.dtx}
\DocInput{l3quark.dtx}
\DocInput{l3seq.dtx}
\DocInput{l3int.dtx}
@@ -484,18 +486,6 @@ used on top of \LaTeXe{} if \cs{outer} tokens are used in the arguments.
\DocInput{l3unicode.dtx}
\DocInput{l3legacy.dtx}
\DocInput{l3candidates.dtx}
-\DocInput{l3drivers.dtx}
-\ExplSyntaxOn
-\clist_gput_right:Nn \g_docinput_clist
- {
- l3drivers-basics.dtx ,
- l3drivers-color.dtx ,
- l3drivers-box.dtx ,
- l3drivers-draw.dtx ,
- l3drivers-graphics.dtx ,
- l3drivers-pdf.dtx
- }
-\ExplSyntaxOff
\ExplSyntaxOn
\clist_gput_right:Nn \g_docinput_clist { l3deprecation.dtx }
diff --git a/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.dtx b/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.dtx
index 218988c8050..e06cd58d1d9 100644
--- a/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.dtx
@@ -46,7 +46,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
@@ -130,7 +130,7 @@
%
% \begin{macrocode}
%<*package>
-\ProvidesExplPackage{l3benchmark}{2019-05-28}{}
+\ProvidesExplPackage{l3benchmark}{2019-07-01}{}
{L3 Experimental benchmarking}
%</package>
% \end{macrocode}
diff --git a/Master/texmf-dist/source/latex/l3experimental/l3cctab/l3cctab.dtx b/Master/texmf-dist/source/latex/l3experimental/l3cctab/l3cctab.dtx
index e058c450900..ad4e422bd65 100644
--- a/Master/texmf-dist/source/latex/l3experimental/l3cctab/l3cctab.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/l3cctab/l3cctab.dtx
@@ -46,7 +46,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
@@ -150,7 +150,7 @@
%
% \begin{macrocode}
%<*package>
-\ProvidesExplPackage{l3cctab}{2019-05-28}{}
+\ProvidesExplPackage{l3cctab}{2019-07-01}{}
{L3 Experimental category code tables}
%</package>
% \end{macrocode}
diff --git a/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.dtx b/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.dtx
index 52e60d2b7a2..92e9ff6369c 100644
--- a/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.dtx
@@ -46,7 +46,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
@@ -265,7 +265,7 @@
%
% \begin{macrocode}
%<*package>
-\ProvidesExplPackage{l3color}{2019-05-28}{}
+\ProvidesExplPackage{l3color}{2019-07-01}{}
{L3 Experimental color support}
%</package>
% \end{macrocode}
@@ -448,7 +448,7 @@
\cs_new_protected:Npn \color_parse:nN #1#2
{
%<*package>
- \driver_color_pickup:N \l_@@_current_tl
+ \@@_backend_pickup:N \l_@@_current_tl
\tl_set_eq:cN { l_@@_named_ . _tl } \l_@@_current_tl
%</package>
\exp_args:Ne \@@_parse:nN { \tl_to_str:n {#1} } #2
diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-boxes.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-boxes.dtx
index e3994c49e3c..1f972d673af 100644
--- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-boxes.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-boxes.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
@@ -104,7 +104,7 @@
{
\use:x
{
- \driver_draw_box_use:Nnnnn #1
+ \@@_backend_box_use:Nnnnn #1
{ \fp_use:N \l_@@_matrix_a_fp }
{ \fp_use:N \l_@@_matrix_b_fp }
{ \fp_use:N \l_@@_matrix_c_fp }
diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-layers.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-layers.dtx
index a24b87bb6bd..4c5c0862746 100644
--- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-layers.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-layers.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
@@ -158,10 +158,10 @@
\box_use_drop:N \l_@@_layer_main_box
}
{
- \driver_draw_scope_begin:
+ \@@_backend_scope_begin:
\box_gset_wd:cn { g_@@_layer_ ##1 _box } { 0pt }
\box_use_drop:c { g_@@_layer_ ##1 _box }
- \driver_draw_scope_end:
+ \@@_backend_scope_end:
}
}
}
diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-paths.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-paths.dtx
index f3c76c0f24e..af2f72698da 100644
--- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-paths.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-paths.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
@@ -891,11 +891,11 @@
\@@_softpath_use:
\bool_if:NT \l_@@_path_use_clip_bool
{
- \driver_draw_clip:
+ \@@_backend_clip:
\bool_lazy_or:nnF
{ \l_@@_path_use_fill_bool }
{ \l_@@_path_use_stroke_bool }
- { \driver_draw_discardpath: }
+ { \@@_backend_discardpath: }
}
\bool_lazy_or:nnT
{ \l_@@_path_use_fill_bool }
@@ -903,7 +903,7 @@
{
\use:c
{
- driver_draw_
+ @@_backend_
\bool_if:NT \l_@@_path_use_fill_bool { fill }
\bool_if:NT \l_@@_path_use_stroke_bool { stroke }
:
diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-points.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-points.dtx
index 460e8b122d6..510b6534bd0 100644
--- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-points.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-points.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-scopes.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-scopes.dtx
index 3797642b8fe..036921ef3bb 100644
--- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-scopes.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-scopes.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
@@ -124,7 +124,7 @@
\group_begin:
\int_gincr:N \g_@@_id_int
\hbox_set:Nw \l_@@_main_box
- \driver_draw_begin:
+ \@@_backend_begin:
\@@_reset_bb:
\@@_path_reset_limits:
\bool_set_true:N \l_draw_bb_update_bool
@@ -145,7 +145,7 @@
\exp_args:NNNV \hbox_set_end:
\clist_set:Nn \l_draw_layers_clist \l_draw_layers_clist
\@@_layers_insert:
- \driver_draw_end:
+ \@@_backend_end:
\hbox_set_end:
\dim_compare:nNnT \g_@@_xmin_dim = \c_max_dim
{
@@ -191,7 +191,7 @@
% \begin{macrocode}
\cs_new_protected:Npn \draw_scope_begin:
{
- \driver_draw_scope_begin:
+ \@@_backend_scope_begin:
\group_begin:
\dim_set_eq:NN \l_@@_linewidth_dim \g_@@_linewidth_dim
\draw_path_scope_begin:
@@ -201,7 +201,7 @@
\draw_path_scope_end:
\dim_gset_eq:NN \g_@@_linewidth_dim \l_@@_linewidth_dim
\group_end:
- \driver_draw_scope_end:
+ \@@_backend_scope_end:
}
% \end{macrocode}
% \end{macro}
diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-softpath.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-softpath.dtx
index b1cbf83e5e4..4e334c45d7a 100644
--- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-softpath.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-softpath.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
@@ -221,24 +221,24 @@
% round point, hence being quark-like.
% \begin{macrocode}
\cs_new_protected:Npn \@@_softpath_close_op:nn #1#2
- { \driver_draw_closepath: }
+ { \@@_backend_closepath: }
\cs_new_protected:Npn \@@_softpath_curveto_opi:nn #1#2
{ \@@_softpath_curveto_opi:nnNnnNnn {#1} {#2} }
\cs_new_protected:Npn \@@_softpath_curveto_opi:nnNnnNnn #1#2#3#4#5#6#7#8
- { \driver_draw_curveto:nnnnnn {#1} {#2} {#4} {#5} {#7} {#8} }
+ { \@@_backend_curveto:nnnnnn {#1} {#2} {#4} {#5} {#7} {#8} }
\cs_new_protected:Npn \@@_softpath_curveto_opii:nn #1#2
{ \@@_softpath_curveto_opii:nn }
\cs_new_protected:Npn \@@_softpath_curveto_opiii:nn #1#2
{ \@@_softpath_curveto_opiii:nn }
\cs_new_protected:Npn \@@_softpath_lineto_op:nn #1#2
- { \driver_draw_lineto:nn {#1} {#2} }
+ { \@@_backend_lineto:nn {#1} {#2} }
\cs_new_protected:Npn \@@_softpath_moveto_op:nn #1#2
- { \driver_draw_moveto:nn {#1} {#2} }
+ { \@@_backend_moveto:nn {#1} {#2} }
\cs_new_protected:Npn \@@_softpath_roundpoint_op:nn #1#2 { }
\cs_new_protected:Npn \@@_softpath_rectangle_opi:nn #1#2
{ \@@_softpath_rectangle_opi:nnNnn {#1} {#2} }
\cs_new_protected:Npn \@@_softpath_rectangle_opi:nnNnn #1#2#3#4#5
- { \driver_draw_rectangle:nnnn {#1} {#2} {#4} {#5} }
+ { \@@_backend_rectangle:nnnn {#1} {#2} {#4} {#5} }
\cs_new_protected:Npn \@@_softpath_rectangle_opii:nn #1#2 { }
% \end{macrocode}
% \end{macro}
diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-state.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-state.dtx
index cbf1eca6768..7e646d76c3a 100644
--- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-state.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-state.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
@@ -92,7 +92,7 @@
\cs_new_protected:Npn \draw_linewidth:n #1
{
\dim_gset:Nn \g_@@_linewidth_dim { \fp_to_dim:n {#1} }
- \driver_draw_linewidth:n \g_@@_linewidth_dim
+ \@@_backend_linewidth:n \g_@@_linewidth_dim
}
% \end{macrocode}
% \end{macro}
@@ -109,7 +109,7 @@
{ \fp_to_dim:n {##1} }
\use:x
{
- \driver_draw_dash_pattern:nn
+ \@@_backend_dash_pattern:nn
{ \seq_use:Nn \l_@@_tmp_seq { , } }
{ \fp_to_dim:n {#2} }
}
@@ -124,7 +124,7 @@
% Pass through to the driver layer.
% \begin{macrocode}
\cs_new_protected:Npn \draw_miterlimit:n #1
- { \driver_draw_miterlimit:n { \fp_eval:n {#1} } }
+ { \@@_backend_miterlimit:n { \fp_eval:n {#1} } }
% \end{macrocode}
% \end{macro}
%
@@ -136,14 +136,14 @@
% }
% All straight wrappers.
% \begin{macrocode}
-\cs_new_protected:Npn \draw_cap_butt: { \driver_draw_cap_butt: }
-\cs_new_protected:Npn \draw_cap_rectangle: { \driver_draw_cap_rectangle: }
-\cs_new_protected:Npn \draw_cap_round: { \driver_draw_cap_round: }
-\cs_new_protected:Npn \draw_evenodd_rule: { \driver_draw_evenodd_rule: }
-\cs_new_protected:Npn \draw_nonzero_rule: { \driver_draw_nonzero_rule: }
-\cs_new_protected:Npn \draw_join_bevel: { \driver_draw_join_bevel: }
-\cs_new_protected:Npn \draw_join_miter: { \driver_draw_join_miter: }
-\cs_new_protected:Npn \draw_join_round: { \driver_draw_join_round: }
+\cs_new_protected:Npn \draw_cap_butt: { \@@_backend_cap_butt: }
+\cs_new_protected:Npn \draw_cap_rectangle: { \@@_backend_cap_rectangle: }
+\cs_new_protected:Npn \draw_cap_round: { \@@_backend_cap_round: }
+\cs_new_protected:Npn \draw_evenodd_rule: { \@@_backend_evenodd_rule: }
+\cs_new_protected:Npn \draw_nonzero_rule: { \@@_backend_nonzero_rule: }
+\cs_new_protected:Npn \draw_join_bevel: { \@@_backend_join_bevel: }
+\cs_new_protected:Npn \draw_join_miter: { \@@_backend_join_miter: }
+\cs_new_protected:Npn \draw_join_round: { \@@_backend_join_round: }
% \end{macrocode}
% \end{macro}
%
@@ -182,13 +182,13 @@
\cs_new_protected:Npn \@@_color:nw #1#2 ~ #3 \q_stop
{ \use:c { @@_color_ #2 :nw } {#1} #3 \q_stop }
\cs_new_protected:Npn \@@_color_cmyk:nw #1#2 ~ #3 ~ #4 ~ #5 \q_stop
- { \use:c { driver_draw_color_ #1 _cmyk:nnnn } {#2} {#3} {#4} {#5} }
+ { \use:c { @@_backend_color_ #1 _cmyk:nnnn } {#2} {#3} {#4} {#5} }
\cs_new_protected:Npn \@@_color_gray:nw #1#2 \q_stop
- { \use:c { driver_draw_color_ #1 _gray:n } {#2} }
+ { \use:c { @@_backend_color_ #1 _gray:n } {#2} }
\cs_new_protected:Npn \@@_color_rgb:nw #1#2 ~ #3 ~ #4 \q_stop
- { \use:c { driver_draw_color_ #1 _rgb:nnn } {#2} {#3} {#4} }
+ { \use:c { @@_backend_color_ #1 _rgb:nnn } {#2} {#3} {#4} }
\cs_new_protected:Npn \@@_color_spot:nw #1#2 ~ #3 \q_stop
- { \use:c { driver_draw_color_ #1 _spot:nn } {#2} {#3} }
+ { \use:c { @@_backend_color_ #1 _spot:nn } {#2} {#3} }
% \end{macrocode}
% \end{macro}
% \end{macro}
diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-transforms.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-transforms.dtx
index 77850944890..9b25c60043c 100644
--- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-transforms.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-transforms.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx
index d01788b0c80..bb2661de0c5 100644
--- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx
@@ -110,7 +110,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
@@ -394,7 +394,7 @@
% higher-level functions, for example path construction, and allows parts of
% a drawing to be rotated, scaled or skewed. This occurs before writing any
% data to the driver, and so such manipulations are tracked by the drawing
-% mechanisms. See \cs{driver_draw_cm:nnnn} for driver-level
+% mechanisms. See \cs{@@_backend_cm:nnnn} for backend-level
% manipulation of the canvas axes themselves.
%
% Notice that in contrast to \pkg{pgf} it is possible to give the positions
@@ -1145,7 +1145,7 @@
%
% \begin{macrocode}
%<*package>
-\ProvidesExplPackage{l3draw}{2019-05-28}{}
+\ProvidesExplPackage{l3draw}{2019-07-01}{}
{L3 Experimental core drawing support}
%</package>
% \end{macrocode}
diff --git a/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.dtx b/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.dtx
index b8378682a59..e8e58babb09 100644
--- a/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.dtx
@@ -46,7 +46,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
@@ -241,7 +241,7 @@
%
% \begin{macrocode}
%<*package>
-\ProvidesExplPackage{l3graphics}{2019-05-28}{}
+\ProvidesExplPackage{l3graphics}{2019-07-01}{}
{L3 Experimental graphics inclusion support}
%</package>
% \end{macrocode}
@@ -601,10 +601,10 @@
\cs_new_protected:Npn \@@_include_auxii:n #1
{
\mode_leave_vertical:
- \cs_if_exist:cTF { driver_graphics_include_ #1 :n }
+ \cs_if_exist:cTF { @@_backend_include_ #1 :n }
{
\tl_set_eq:NN \l_graphics_name_tl \l_@@_name_tl
- \exp_args:NnV \use:c { driver_graphics_getbb_ #1 :n }
+ \exp_args:NnV \use:c { @@_backend_getbb_ #1 :n }
\l_@@_name_tl
\seq_gput_right:NV \g_@@_record_seq \l_graphics_name_tl
%<*package>
@@ -649,7 +649,7 @@
{
\hbox_set:Nn \l_@@_internal_box
{
- \exp_args:NnV \use:c { driver_graphics_include_ #1 :n }
+ \exp_args:NnV \use:c { @@_backend_include_ #1 :n }
\l_@@_name_tl
}
\box_set_dp:Nn \l_@@_internal_box { 0pt }
diff --git a/Master/texmf-dist/source/latex/l3experimental/l3pdf/l3pdf.dtx b/Master/texmf-dist/source/latex/l3experimental/l3pdf/l3pdf.dtx
new file mode 100644
index 00000000000..a8eff007f4b
--- /dev/null
+++ b/Master/texmf-dist/source/latex/l3experimental/l3pdf/l3pdf.dtx
@@ -0,0 +1,337 @@
+% \iffalse meta-comment
+%
+%% File: l3pdf.dtx
+%
+% Copyright(C) 2019 The LaTeX3 Project
+%
+% It may be distributed and/or modified under the conditions of the
+% LaTeX Project Public License (LPPL), either version 1.3c of this
+% license or (at your option) any later version. The latest version
+% of this license is in the file
+%
+% http://www.latex-project.org/lppl.txt
+%
+% This file is part of the "l3experimental bundle" (The Work in LPPL)
+% and all files in that bundle must be distributed together.
+%
+% -----------------------------------------------------------------------
+%
+% The development version of the bundle can be found at
+%
+% https://github.com/latex3/latex3
+%
+% for those people who are interested.
+%
+%<*driver|package>
+\RequirePackage{expl3}
+%</driver|package>
+%<*driver>
+\documentclass[full]{l3doc}
+\begin{document}
+ \DocInput{\jobname.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \title{^^A
+% The \pkg{l3pdf} package\\ Core PDF support^^A
+% }
+%
+% \author{^^A
+% The \LaTeX3 Project\thanks
+% {^^A
+% E-mail:
+% \href{mailto:latex-team@latex-project.org}
+% {latex-team@latex-project.org}^^A
+% }^^A
+% }
+%
+% \date{Released 2019-07-01}
+%
+% \maketitle
+%
+% \begin{documentation}
+%
+% \section{\pkg{l3pdf} documentation}
+%
+% \subsection{Objects}
+%
+% \begin{function}[added = 2019-06-02]{\pdf_object_new:nn}
+% \begin{syntax}
+% \cs{pdf_object_new:nn} \Arg{object} \Arg{type}
+% \end{syntax}
+% Declares \meta{object} as a PDF object of \meta{type}, which should be
+% one of
+% \begin{itemize}
+% \item \texttt{array}
+% \item \texttt{dict}
+% \item \texttt{fstream}
+% \item \texttt{stream}
+% \end{itemize}
+% The object may be referenced from this point on, and written later
+% using \cs{pdf_object_write:nn}.
+% \end{function}
+%
+% \begin{function}[added = 2019-06-02]
+% {\pdf_object_write:nn, \pdf_object_write:nx}
+% \begin{syntax}
+% \cs{pdf_object_write:nn} \Arg{object} \Arg{content}
+% \end{syntax}
+% Writes the \meta{content} as content of the \meta{object}. Depending on the
+% \meta{type} declared for the object, the format required for the
+% \meta{data} will vary
+% \begin{itemize}
+% \item[\texttt{array}] A space-separated list of values
+% \item[\texttt{dict}] Key--value pairs in the form
+% \texttt{/\meta{key} \meta{value}}
+% \item[\texttt{fstream}] Two brace groups: \meta{file name} and
+% \meta{file content}
+% \item[\texttt{stream}] Two brace groups: \meta{attributes (dictionary)}
+% and \meta{stream contents}
+% \end{itemize}
+% \end{function}
+%
+% \begin{function}[EXP, added = 2019-06-02]{\pdf_object_ref:n}
+% \begin{syntax}
+% \cs{pdf_object_ref:n} \Arg{object}
+% \end{syntax}
+% Inserts the appropriate information to reference the \meta{object}
+% in for example page resource allocation
+% \end{function}
+%
+% \begin{function}[added = 2019-06-02]
+% {\pdf_object_now:nn, \pdf_object_now:nx}
+% \begin{syntax}
+% \cs{pdf_object_now:nn} \Arg{type} \Arg{content}
+% \end{syntax}
+% Writes the \meta{content} as content of an anonymous object. Depending on the
+% \meta{type}, the format required for the \meta{data} will vary
+% \begin{itemize}
+% \item[\texttt{array}] A space-separated list of values
+% \item[\texttt{dict}] Key--value pairs in the form
+% \texttt{/\meta{key} \meta{value}}
+% \item[\texttt{fstream}] Two brace groups: \meta{file name} and
+% \meta{file content}
+% \item[\texttt{stream}] Two brace groups: \meta{attributes (dictionary)}
+% and \meta{stream contents}
+% \end{itemize}
+% \end{function}
+%
+% \begin{function}[EXP, added = 2019-06-02]{\pdf_object_last:}
+% \begin{syntax}
+% \cs{pdf_object_last:}
+% \end{syntax}
+% Inserts the appropriate information to reference the last \meta{object}
+% created. This is particularly useful for anonymous objects.
+% \end{function}
+%
+% \subsection{Version}
+%
+% \begin{function}[pTF, EXP, added = 2019-06-02]{\pdf_version_compare:Nn}
+% \begin{syntax}
+% \cs{pdf_version_compare:NnTF} \meta{comparator} \Arg{version} \Arg{true code} \Arg{false code}
+% \end{syntax}
+% Compares the version of the PDF being created with the \meta{version}
+% string specified, using the \meta{comparator}. Either the \meta{true code}
+% or \meta{false code} will be left in the output stream.
+% \end{function}
+%
+% \begin{function}[added = 2019-06-02]
+% {\pdf_version_gset:n, \pdf_version_min_gset:n}
+% \begin{syntax}
+% \cs{pdf_version_gset:n} \Arg{version}
+% \end{syntax}
+% Sets the \meta{version} of the PDF being created. The |min| version will
+% not alter the output version unless it is currently lower than the
+% \meta{version} requested.
+%
+% This function may only be used up to the point where the PDF file is
+% initialised.
+% \end{function}
+%
+% \begin{function}[EXP, added = 2019-06-02]
+% {\pdf_version:, \pdf_version_major:, \pdf_version_minor:}
+% \begin{syntax}
+% \cs{pdf_version:}
+% \end{syntax}
+% Expands to the currently-active PDF version.
+% \end{function}
+%
+% \subsection{Compression}
+%
+% \begin{function}[added = 2019-06-02]{\pdf_uncompress:}
+% \begin{syntax}
+% \cs{pdf_uncompress:}
+% \end{syntax}
+% Disables any compression of the PDF, where possible.
+%
+% This function may only be used up to the point where the PDF file is
+% initialised.
+% \end{function}
+%
+% \end{documentation}
+%
+% \begin{implementation}
+%
+% \section{\pkg{l3pdf} implementation}
+%
+% \begin{macrocode}
+%<*initex|package>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<@@=pdf>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<*package>
+\ProvidesExplPackage{l3pdf}{2019-07-01}{}
+ {L3 Experimental core PDF support}
+%</package>
+% \end{macrocode}
+%
+% \begin{variable}{\g_@@_init_bool}
+% A flag so we have some chance of avoiding setting things we are not
+% allowed to.
+% \begin{macrocode}
+\bool_new:N \g_@@_init_bool
+%<*package>
+\cs_if_exist:NT \documentclass
+ {
+ \AtBeginDocument
+ { \bool_gset_true:N \g_@@_init_bool }
+ }
+%</package>
+% \end{macrocode}
+% \end{variable}
+%
+% \subsection{Compression}
+%
+% \begin{macro}{\pdf_uncompress:}
+% Simple to do.
+% \begin{macrocode}
+\cs_new_protected:Npn \pdf_uncompress:
+ {
+ \bool_if:NF \g_@@_init_bool
+ {
+ \@@_backend_compresslevel:n { 0 }
+ \@@_backend_compress_objects:n { \c_false_bool }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Objects}
+%
+% \begin{macro}{\pdf_object_new:nn, \pdf_object_write:nn, \pdf_object_write:nx}
+% \begin{macro}{\pdf_object_ref:n}
+% \begin{macro}{\pdf_object_now:nn, \pdf_object_now:nx}
+% \begin{macro}{\pdf_object_last:}
+% Simple to do.
+% \begin{macrocode}
+\cs_new_protected:Npn \pdf_object_new:nn #1#2
+ { \@@_backend_object_new:nn {#1} {#2} }
+\cs_new_protected:Npn \pdf_object_write:nn #1#2
+ { \@@_backend_object_write:nn {#1} {#2} }
+\cs_generate_variant:Nn \pdf_object_write:nn { nx }
+\cs_new:Npn \pdf_object_ref:n #1 { \@@_backend_object_ref:n {#1} }
+\cs_new_protected:Npn \pdf_object_now:nn #1#2
+ { \@@_backend_object_now:nn {#1} {#2} }
+\cs_generate_variant:Nn \pdf_object_now:nn { nx }
+\cs_new:Npn \pdf_object_last: { \@@_backend_object_last: }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Version}
+%
+% \begin{macro}{\pdf_version_compare:Nn}
+% \begin{macro}
+% {
+% @@_version_compare_=:w ,
+% @@_version_compare_<:w ,
+% @@_version_compare_>:w
+% }
+% \begin{macrocode}
+% To compare version, we need to split the given value then deal with both
+% major and minor version
+\prg_new_conditional:Npnn \pdf_version_compare:Nn #1#2 { p , T , F , TF }
+ { \use:c { @@_version_compare_ #1 :w } #2 . . \q_stop }
+\cs_new:cpn { @@_version_compare_=:w } #1 . #2 . #3 \q_stop
+ {
+ \bool_lazy_and:nnTF
+ { \int_compare_p:nNn \@@_backend_version_major: = {#1} }
+ { \int_compare_p:nNn \@@_backend_version_minor: = {#2} }
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+\cs_new:cpn { @@_version_compare_<:w } #1 . #2 . #3 \q_stop
+ {
+ \bool_lazy_or:nnTF
+ { \int_compare_p:nNn \@@_backend_version_major: < {#1} }
+ {
+ \bool_lazy_and_p:nn
+ { \int_compare_p:nNn \@@_backend_version_major: = {#1} }
+ { \int_compare_p:nNn \@@_backend_version_minor: < {#2} }
+ }
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+\cs_new:cpn { @@_version_compare_>:w } #1 . #2 . #3 \q_stop
+ {
+ \bool_lazy_or:nnTF
+ { \int_compare_p:nNn \@@_backend_version_major: > {#1} }
+ {
+ \bool_lazy_and_p:nn
+ { \int_compare_p:nNn \@@_backend_version_major: = {#1} }
+ { \int_compare_p:nNn \@@_backend_version_minor: > {#2} }
+ }
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\pdf_version_gset:n, \pdf_version_min_gset:n}
+% \begin{macro}{\@@_version_gset:w}
+% Split the version and set.
+% \begin{macrocode}
+\cs_new_protected:Npn \pdf_version_gset:n #1
+ { \@@_version_gset:w #1 . . \q_stop }
+\cs_new_protected:Npn \pdf_version_min_gset:n #1
+ {
+ \pdf_version_compare:NnT < {#1}
+ { \@@_version_gset:w #1 . . \q_stop }
+ }
+\cs_new_protected:Npn \@@_version_gset:w #1 . #2 . #3\q_stop
+ {
+ \bool_if:NF \g_@@_init_bool
+ {
+ \@@_backend_version_major_gset:n {#1}
+ \@@_backend_version_minor_gset:n {#2}
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}[EXP]{\pdf_version:, \pdf_version_major:, \pdf_version_minor:}
+% Wrappers.
+% \begin{macrocode}
+\cs_new:Npn \pdf_version:
+ { \@@_backend_version_major: . \@@_backend_version_minor: }
+\cs_new:Npn \pdf_version_major: { \@@_backend_version_major: }
+\cs_new:Npn \pdf_version_minor: { \@@_backend_version_minor: }
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macrocode}
+%</initex|package>
+% \end{macrocode}
+%
+% \end{implementation}
+%
+% \PrintIndex
diff --git a/Master/texmf-dist/source/latex/l3experimental/l3pdf/l3pdf.ins b/Master/texmf-dist/source/latex/l3experimental/l3pdf/l3pdf.ins
new file mode 100644
index 00000000000..d39eefa1140
--- /dev/null
+++ b/Master/texmf-dist/source/latex/l3experimental/l3pdf/l3pdf.ins
@@ -0,0 +1,60 @@
+\iffalse meta-comment
+
+File: l3pdf.ins
+
+Copyright (C) 2019 The LaTeX3 Project
+
+It may be distributed and/or modified under the conditions of the
+LaTeX Project Public License (LPPL), either version 1.3c of this
+license or (at your option) any later version. The latest version
+of this license is in the file
+
+ http://www.latex-project.org/lppl.txt
+
+This file is part of the "l3experimental bundle" (The Work in LPPL)
+and all files in that bundle must be distributed together.
+
+-----------------------------------------------------------------------
+
+The development version of the bundle can be found at
+
+ https://github.com/latex3/latex3
+
+for those people who are interested.
+
+-----------------------------------------------------------------------
+
+Any modification of this file should ensure that the copyright and
+license information is placed in the derived files.
+
+\fi
+
+\input l3docstrip.tex
+\askforoverwritefalse
+
+\preamble
+
+Copyright (C) 2019 The LaTeX3 Project
+
+It may be distributed and/or modified under the conditions of
+the LaTeX Project Public License (LPPL), either version 1.3c of
+this license or (at your option) any later version. The latest
+version of this license is in the file:
+
+ http://www.latex-project.org/lppl.txt
+
+This file is part of the "l3pdf bundle" (The Work in LPPL)
+and all files in that bundle must be distributed together.
+
+\endpreamble
+% stop docstrip adding \endinput
+\postamble
+\endpostamble
+
+\keepsilent
+
+\generate{\file{l3pdf.sty}
+ {\from{l3pdf.dtx}{package}}
+}
+
+\endbatchfile
diff --git a/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx b/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx
index 70448816fb3..1afe6ea2da4 100644
--- a/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx
@@ -48,7 +48,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
@@ -164,7 +164,7 @@
%
% \begin{macrocode}
%<*package>
-\ProvidesExplPackage{l3str-format}{2019-05-28}{}
+\ProvidesExplPackage{l3str-format}{2019-07-01}{}
{L3 Experimental string formatting}
%</package>
% \end{macrocode}
diff --git a/Master/texmf-dist/source/latex/l3experimental/l3str/l3str.ins b/Master/texmf-dist/source/latex/l3experimental/l3str/l3str.ins
index 959deb3b576..d3f00364e1c 100644
--- a/Master/texmf-dist/source/latex/l3experimental/l3str/l3str.ins
+++ b/Master/texmf-dist/source/latex/l3experimental/l3str/l3str.ins
@@ -53,41 +53,6 @@ and all files in that bundle must be distributed together.
\keepsilent
-\generate{\file{l3str-convert.sty} {\from{l3str-convert.dtx} {package}}}
\generate{\file{l3str-format.sty} {\from{l3str-format.dtx} {package}}}
-% Escapings.
-\generate{%
- \file{l3str-esc-hex.def} {\from{l3str-convert.dtx}{hex}}%
- \file{l3str-esc-name.def} {\from{l3str-convert.dtx}{name}}%
- \file{l3str-esc-string.def} {\from{l3str-convert.dtx}{string}}%
- \file{l3str-esc-url.def} {\from{l3str-convert.dtx}{url}}%
-}
-
-% UTF encodings.
-\generate{%
- \file{l3str-enc-utf8.def} {\from{l3str-convert.dtx}{utf8}}%
- \file{l3str-enc-utf16.def} {\from{l3str-convert.dtx}{utf16}}%
- \file{l3str-enc-utf32.def} {\from{l3str-convert.dtx}{utf32}}%
-}
-
-% ISO-8859 encodings.
-\generate{%
- \file{l3str-enc-iso88591.def} {\from{l3str-convert.dtx}{iso88591}}%
- \file{l3str-enc-iso88592.def} {\from{l3str-convert.dtx}{iso88592}}%
- \file{l3str-enc-iso88593.def} {\from{l3str-convert.dtx}{iso88593}}%
- \file{l3str-enc-iso88594.def} {\from{l3str-convert.dtx}{iso88594}}%
- \file{l3str-enc-iso88595.def} {\from{l3str-convert.dtx}{iso88595}}%
- \file{l3str-enc-iso88596.def} {\from{l3str-convert.dtx}{iso88596}}%
- \file{l3str-enc-iso88597.def} {\from{l3str-convert.dtx}{iso88597}}%
- \file{l3str-enc-iso88598.def} {\from{l3str-convert.dtx}{iso88598}}%
- \file{l3str-enc-iso88599.def} {\from{l3str-convert.dtx}{iso88599}}%
- \file{l3str-enc-iso885910.def} {\from{l3str-convert.dtx}{iso885910}}%
- \file{l3str-enc-iso885911.def} {\from{l3str-convert.dtx}{iso885911}}%
- \file{l3str-enc-iso885913.def} {\from{l3str-convert.dtx}{iso885913}}%
- \file{l3str-enc-iso885914.def} {\from{l3str-convert.dtx}{iso885914}}%
- \file{l3str-enc-iso885915.def} {\from{l3str-convert.dtx}{iso885915}}%
- \file{l3str-enc-iso885916.def} {\from{l3str-convert.dtx}{iso885916}}%
-}
-
\endbatchfile
diff --git a/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.dtx b/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.dtx
index 64ab863d807..da41be80f00 100644
--- a/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.dtx
@@ -46,7 +46,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
@@ -136,7 +136,7 @@
%
% \begin{macrocode}
%<*package>
-\ProvidesExplPackage{l3sys-shell}{2019-05-28}{}
+\ProvidesExplPackage{l3sys-shell}{2019-07-01}{}
{L3 Experimental system shell functions}
%</package>
% \end{macrocode}
diff --git a/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx b/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx
index 59860d70d1d..a86d0701923 100644
--- a/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx
@@ -56,7 +56,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
@@ -675,7 +675,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-\ProvidesExplPackage{xcoffins}{2019-05-28}{}
+\ProvidesExplPackage{xcoffins}{2019-07-01}{}
{L3 Experimental design level coffins}
% \end{macrocode}
%
diff --git a/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx b/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx
index 716bea363ab..34dade048a3 100644
--- a/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx
@@ -61,7 +61,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
@@ -687,7 +687,7 @@
%
% \begin{macrocode}
%<*package>
-\ProvidesExplPackage{l3galley}{2019-05-28}{}
+\ProvidesExplPackage{l3galley}{2019-07-01}{}
{L3 Experimental galley code}
%</package>
% \end{macrocode}
diff --git a/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx b/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx
index deefd7a4416..e10cb7b13b6 100644
--- a/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx
+++ b/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx
@@ -47,7 +47,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
@@ -734,7 +734,7 @@
% \end{macrocode}
%
% \begin{macrocode}
-\ProvidesExplPackage{xgalley}{2019-05-28}{}
+\ProvidesExplPackage{xgalley}{2019-07-01}{}
{L3 Experimental galley}
\RequirePackage{xparse,xtemplate,l3galley}
% \end{macrocode}
diff --git a/Master/texmf-dist/source/latex/l3kernel/expl3.dtx b/Master/texmf-dist/source/latex/l3kernel/expl3.dtx
index 72c1d220e18..b1dd621fda6 100644
--- a/Master/texmf-dist/source/latex/l3kernel/expl3.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/expl3.dtx
@@ -23,7 +23,7 @@
% for those people who are interested.
%
%<*driver|generic|package>
-\def\ExplFileDate{2019-05-28}%
+\def\ExplFileDate{2019-07-01}%
%</driver|generic|package>
%<*driver>
\documentclass[full]{l3doc}
@@ -51,7 +51,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
@@ -1521,7 +1521,8 @@
\ProvidesFile {#1} [ #2~v#3~#4 ]
}
\tl_const:Nn \c__expl_def_ext_tl { def }
- \@onefilewithoptions { l3 \l__expl_driver_tl } [ ] [ ] \c__expl_def_ext_tl
+ \@onefilewithoptions { l3backend- \l__expl_driver_tl } [ ] [ ]
+ \c__expl_def_ext_tl
}
% \end{macrocode}
%
@@ -1728,7 +1729,7 @@
\iow_log:x { File:~#1~#2~v#3~#4 }
}
\tex_input:D
- l3
+ l3backend
\sys_if_engine_xetex:TF
{ xdvipdfmx }
{
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3.ins b/Master/texmf-dist/source/latex/l3kernel/l3.ins
index 7977e037451..8affab2c2d5 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3.ins
+++ b/Master/texmf-dist/source/latex/l3kernel/l3.ins
@@ -96,6 +96,7 @@ and all files in that bundle must be distributed together.
\from{l3fp-random.dtx} {package}
\from{l3fparray.dtx} {package}
\from{l3sort.dtx} {package}
+ \from{l3str-convert.dtx}{package}
\from{l3tl-analysis.dtx}{package}
\from{l3regex.dtx} {package}
\from{l3box.dtx} {package}
@@ -116,71 +117,24 @@ and all files in that bundle must be distributed together.
% not distributed:
%\generate{\file{l3doc.ist} {\from{l3doc.dtx} {docist}}}
-\generate
- {
- \file{l3dvipdfmx.def}
- {
- \from{l3drivers.dtx} {package,dvipdfmx}
- \from{l3drivers-basics.dtx} {package,dvipdfmx}
- \from{l3drivers-color.dtx} {package,dvipdfmx}
- \from{l3drivers-box.dtx} {package,dvipdfmx}
- \from{l3drivers-draw.dtx} {package,dvipdfmx}
- \from{l3drivers-graphics.dtx}{package,dvipdfmx}
- \from{l3drivers-pdf.dtx} {package,dvipdfmx}
- }
- }
-\generate
- {
- \file{l3dvips.def}
- {
- \from{l3drivers.dtx} {package,dvips}
- \from{l3drivers-basics.dtx} {package,dvips}
- \from{l3drivers-color.dtx} {package,dvips}
- \from{l3drivers-box.dtx} {package,dvips}
- \from{l3drivers-draw.dtx} {package,dvips}
- \from{l3drivers-graphics.dtx}{package,dvips}
- \from{l3drivers-pdf.dtx} {package,dvips}
- }
- }
-\generate
- {
- \file{l3dvisvgm.def}
- {
- \from{l3drivers.dtx} {package,dvisvgm}
- \from{l3drivers-basics.dtx} {package,dvisvgm}
- \from{l3drivers-color.dtx} {package,dvisvgm}
- \from{l3drivers-box.dtx} {package,dvisvgm}
- \from{l3drivers-draw.dtx} {package,dvisvgm}
- \from{l3drivers-graphics.dtx}{package,dvisvgm}
- \from{l3drivers-pdf.dtx} {package,dvisvgm}
- }
- }
-\generate
- {
- \file{l3pdfmode.def}
- {
- \from{l3drivers.dtx} {package,pdfmode}
- \from{l3drivers-basics.dtx} {package,pdfmode}
- \from{l3drivers-color.dtx} {package,pdfmode}
- \from{l3drivers-box.dtx} {package,pdfmode}
- \from{l3drivers-draw.dtx} {package,pdfmode}
- \from{l3drivers-graphics.dtx}{package,pdfmode}
- \from{l3drivers-pdf.dtx} {package,pdfmode}
- }
- }
-\generate
- {
- \file{l3xdvipdfmx.def}
- {
- \from{l3drivers.dtx} {package,xdvipdfmx}
- \from{l3drivers-basics.dtx} {package,xdvipdfmx}
- \from{l3drivers-color.dtx} {package,xdvipdfmx}
- \from{l3drivers-box.dtx} {package,xdvipdfmx}
- \from{l3drivers-draw.dtx} {package,xdvipdfmx}
- \from{l3drivers-graphics.dtx}{package,xdvipdfmx}
- \from{l3drivers-pdf.dtx} {package,xdvipdfmx}
- }
- }
+% ISO-8859 encodings.
+\generate{%
+ \file{l3str-enc-iso88591.def} {\from{l3str-convert.dtx}{iso88591}}%
+ \file{l3str-enc-iso88592.def} {\from{l3str-convert.dtx}{iso88592}}%
+ \file{l3str-enc-iso88593.def} {\from{l3str-convert.dtx}{iso88593}}%
+ \file{l3str-enc-iso88594.def} {\from{l3str-convert.dtx}{iso88594}}%
+ \file{l3str-enc-iso88595.def} {\from{l3str-convert.dtx}{iso88595}}%
+ \file{l3str-enc-iso88596.def} {\from{l3str-convert.dtx}{iso88596}}%
+ \file{l3str-enc-iso88597.def} {\from{l3str-convert.dtx}{iso88597}}%
+ \file{l3str-enc-iso88598.def} {\from{l3str-convert.dtx}{iso88598}}%
+ \file{l3str-enc-iso88599.def} {\from{l3str-convert.dtx}{iso88599}}%
+ \file{l3str-enc-iso885910.def} {\from{l3str-convert.dtx}{iso885910}}%
+ \file{l3str-enc-iso885911.def} {\from{l3str-convert.dtx}{iso885911}}%
+ \file{l3str-enc-iso885913.def} {\from{l3str-convert.dtx}{iso885913}}%
+ \file{l3str-enc-iso885914.def} {\from{l3str-convert.dtx}{iso885914}}%
+ \file{l3str-enc-iso885915.def} {\from{l3str-convert.dtx}{iso885915}}%
+ \file{l3str-enc-iso885916.def} {\from{l3str-convert.dtx}{iso885916}}%
+}
\generate{\file{l3docstrip.tex} {\from{l3docstrip.dtx} {program}}}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3alloc.dtx b/Master/texmf-dist/source/latex/l3kernel/l3alloc.dtx
index 01fcdcf977e..f83a3e1981a 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3alloc.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3alloc.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx b/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx
index 188fbfd0f8d..85443ca382d 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
@@ -990,6 +990,17 @@
% is removed.
% \end{function}
%
+% \begin{function}[EXP, added = 2019-06-02]{\use_ii_i:nn}
+% \begin{syntax}
+% \cs{use_ii_i:nnn} \Arg{arg_1} \Arg{arg_2}
+% \end{syntax}
+% This function absorbs two arguments and leaves the content of the
+% second and first in the input stream. The category code of
+% these tokens is also fixed (if it has not already been by
+% some other absorption). A single expansion is needed for the
+% function to take effect.
+% \end{function}
+%
% \begin{function}[EXP]
% {
% \use_none:n ,
@@ -1597,6 +1608,13 @@
% \end{macrocode}
% \end{macro}
%
+% \begin{macro}[EXP]{\use_ii_i:nn}
+% \begin{macrocode}
+\cs_set:Npn \use_ii_i:nn #1#2 { #2 #1 }
+% \end{macrocode}
+% \end{macro}
+%
+%
% \begin{macro}[EXP]
% {
% \use_none_delimit_by_q_nil:w ,
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx b/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx
index ffda0047028..611b830c52e 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3box.dtx b/Master/texmf-dist/source/latex/l3kernel/l3box.dtx
index 91eb4593b05..3a67fc2718c 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3box.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3box.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
@@ -1796,7 +1796,7 @@
\tex_kern:D -\l_@@_left_new_dim
\hbox:n
{
- \driver_box_use_rotate:Nn
+ \@@_backend_rotate:Nn
\l_@@_internal_box
\l_@@_angle_fp
}
@@ -2224,7 +2224,7 @@
{
\hbox_set:Nn \l_@@_internal_box
{
- \driver_box_use_scale:Nnn
+ \@@_backend_scale:Nnn
#1
\l_@@_scale_x_fp
\l_@@_scale_y_fp
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx b/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx
index de5a5011bb8..4014877d525 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
@@ -1373,10 +1373,10 @@
% A wrapper around the driver-dependent code.
% \begin{macrocode}
\cs_new_protected:Npn \box_clip:N #1
- { \hbox_set:Nn #1 { \driver_box_use_clip:N #1 } }
+ { \hbox_set:Nn #1 { \@@_backend_clip:N #1 } }
\cs_generate_variant:Nn \box_clip:N { c }
\cs_new_protected:Npn \box_gclip:N #1
- { \hbox_gset:Nn #1 { \driver_box_use_clip:N #1 } }
+ { \hbox_gset:Nn #1 { \@@_backend_clip:N #1 } }
\cs_generate_variant:Nn \box_gclip:N { c }
% \end{macrocode}
% \end{macro}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx b/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx
index fe91c5a5baf..b905161ae9a 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx b/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx
index 0aaadefe1a0..901a5b7b8d2 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
@@ -1960,7 +1960,7 @@
\cs_generate_variant:Nn \coffin_attach:NnnNnnnn { c , Nnnc , cnnc }
\cs_new_protected:Npn \coffin_gattach:NnnNnnnn #1#2#3#4#5#6#7#8
{
- \@@_gattach:NnnNnnnnN #1 {#2} {#3} #4 {#5} {#6} {#7} {#8}
+ \@@_attach:NnnNnnnnN #1 {#2} {#3} #4 {#5} {#6} {#7} {#8}
\coffin_gset_eq:NN
}
\cs_generate_variant:Nn \coffin_gattach:NnnNnnnn { c , Nnnc , cnnc }
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3color-base.dtx b/Master/texmf-dist/source/latex/l3kernel/l3color-base.dtx
index 0773fc95a4a..781c6693e7b 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3color-base.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3color-base.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
@@ -140,7 +140,7 @@
\cs_new_protected:Npn \color_ensure_current:
{
%<*package>
- \driver_color_pickup:N \l_@@_current_tl
+ \@@_backend_pickup:N \l_@@_current_tl
%</package>
\@@_select:V \l_@@_current_tl
}
@@ -161,13 +161,13 @@
\cs_new_protected:Npn \@@_select:w #1 ~ #2 \q_stop
{ \use:c { @@_select_ #1 :w } #2 \q_stop }
\cs_new_protected:Npn \@@_select_cmyk:w #1 ~ #2 ~ #3 ~ #4 \q_stop
- { \driver_color_cmyk:nnnn {#1} {#2} {#3} {#4} }
+ { \@@_backend_cmyk:nnnn {#1} {#2} {#3} {#4} }
\cs_new_protected:Npn \@@_select_gray:w #1 \q_stop
- { \driver_color_gray:n {#1} }
+ { \@@_backend_gray:n {#1} }
\cs_new_protected:Npn \@@_select_rgb:w #1 ~ #2 ~ #3 \q_stop
- { \driver_color_rgb:nnn {#1} {#2} {#3} }
+ { \@@_backend_rgb:nnn {#1} {#2} {#3} }
\cs_new_protected:Npn \@@_select_spot:w #1 ~ #2 \q_stop
- { \driver_color_spot:nn {#1} {#2} }
+ { \@@_backend_spot:nn {#1} {#2} }
% \end{macrocode}
% \end{macro}
% \end{macro}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx b/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx
index 12b990b8d53..11b3cfc8214 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx b/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx
index 1bbc500dc1a..bfac8aa6125 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx
@@ -79,7 +79,7 @@ and all files in that bundle must be distributed together.
%
% \title{The \cls{l3doc} class}
% \author{\Team}
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
% \maketitle
% \tableofcontents
%
@@ -3786,9 +3786,9 @@ and all files in that bundle must be distributed together.
% name automatically. We need to be careful: no |<@@=| should appear
% as such in the code below since \pkg{l3doc} is also typeset using
% this code.
-% TODO: right now, in a line containing |<@@=|\meta{module}|>|, the
-% |@@| are replaced (using different values of the \meta{module}
-% before and after the assignment). Is this a waste?
+% At each |<@@=| found, replace the \meta{module} in the code behind
+% it, update the \meta{module}, and loop to check for further
+% occurrences of |<@@=|.
% \begin{macrocode}
\group_begin:
\char_set_catcode_other:N \^^A
@@ -3813,8 +3813,9 @@ and all files in that bundle must be distributed together.
\char_set_catcode_active:N \>
\cs_new_protected:Npn \@@_xmacro_code:n #1
{
+ \tl_clear:N \l_@@_tmpa_tl
\tl_if_in:nnTF {#1} { < @ @ = }
- { \@@_xmacro_code:w #1 \q_stop }
+ { \@@_xmacro_code:w #1 < @ @ = \q_recursion_tail > \q_recursion_stop }
{
\tl_set:Nn \l_@@_tmpa_tl {#1}
\@@_detect_internals:N \l_@@_tmpa_tl
@@ -3822,21 +3823,21 @@ and all files in that bundle must be distributed together.
\tl_use:N \l_@@_tmpa_tl
}
}
- \cs_new_protected:Npn \@@_xmacro_code:w #1 < @ @ = #2 > #3 \q_stop
+ \cs_new_protected:Npn \@@_xmacro_code:w #1 < @ @ = #2 >
{
- \tl_set:Nn \l_@@_tmpa_tl {#1}
- \@@_detect_internals:N \l_@@_tmpa_tl
- \@@_replace_at_at:N \l_@@_tmpa_tl
-
- \tl_gset:Nn \g_@@_module_name_tl {#2}
- \tl_put_right:Nn \l_@@_tmpa_tl { < \text { \verbatim@font @ @ = #2 } > }
-
- \tl_set:Nn \l_@@_tmpb_tl {#3}
+ % Add code before <@@=...>
+ \tl_set:Nn \l_@@_tmpb_tl {#1}
\@@_detect_internals:N \l_@@_tmpb_tl
\@@_replace_at_at:N \l_@@_tmpb_tl
- \tl_put_right:No \l_@@_tmpa_tl { \l_@@_tmpb_tl }
-
- \tl_use:N \l_@@_tmpa_tl
+ \tl_put_right:NV \l_@@_tmpa_tl \l_@@_tmpb_tl
+ % Check for \q_recursion_tail
+ \quark_if_recursion_tail_stop_do:nn {#2}
+ { \tl_use:N \l_@@_tmpa_tl }
+ % Change module name and add <@@=#2> to typeset output
+ \tl_gset:Nn \g_@@_module_name_tl {#2}
+ \tl_put_right:Nn \l_@@_tmpa_tl { < \text { \verbatim@font @ @ = #2 } > }
+ % Loop
+ \@@_xmacro_code:w
}
\group_end:
% \end{macrocode}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx b/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx
index 9265e066746..00d5e43d4f2 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx
@@ -63,7 +63,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3drivers-basics.dtx b/Master/texmf-dist/source/latex/l3kernel/l3drivers-basics.dtx
deleted file mode 100644
index 2ff21a9d65b..00000000000
--- a/Master/texmf-dist/source/latex/l3kernel/l3drivers-basics.dtx
+++ /dev/null
@@ -1,373 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3drivers-basics.dtx
-%
-% Copyright (C) 2011-2019 The LaTeX3 Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \textsf{l3drivers-basics} package\\ Driver basics^^A
-% }
-%
-% \author{^^A
-% The \LaTeX3 Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2019-05-28}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3drivers-basics} Implementation}
-%
-% \begin{macrocode}
-%<*initex|package>
-%<@@=driver>
-% \end{macrocode}
-%
-% Whilst there is a reasonable amount of code overlap between drivers,
-% it is much clearer to have the blocks more-or-less separated than run
-% in together and DocStripped out in parts. As such, most of the following
-% is set up on a per-driver basis, though there is some common code (again
-% given in blocks not interspersed with other material).
-%
-% All the file identifiers are up-front so that they come out in the right
-% place in the files.
-% \begin{macrocode}
-%<*package>
-\ProvidesExplFile
-%<*dvipdfmx>
- {l3dvipdfmx.def}{2019-04-06}{}
- {L3 Experimental driver: dvipdfmx}
-%</dvipdfmx>
-%<*dvips>
- {l3dvips.def}{2019-04-06}{}
- {L3 Experimental driver: dvips}
-%</dvips>
-%<*dvisvgm>
- {l3dvisvgm.def}{2019-04-06}{}
- {L3 Experimental driver: dvisvgm}
-%</dvisvgm>
-%<*pdfmode>
- {l3pdfmode.def}{2019-04-06}{}
- {L3 Experimental driver: PDF mode}
-%</pdfmode>
-%<*xdvipdfmx>
- {l3xdvipdfmx.def}{2019-04-06}{}
- {L3 Experimental driver: xdvipdfmx}
-%</xdvipdfmx>
-%</package>
-% \end{macrocode}
-%
-% The order of the driver code here is such that we get somewhat logical
-% outcomes in terms of code sharing whilst keeping things readable. (Trying to
-% mix all of the code by concept is almost unmanageable.) The key parts which
-% are shared are
-% \begin{itemize}
-% \item Color support is either \texttt{dvips}-like or \texttt{pdfmode}-like.
-% \item \texttt{pdfmode} and \texttt{(x)dvipdfmx} share drawing routines.
-% \item \texttt{xdvipdfmx} is largely the same as \texttt{dvipdfmx} so
-% takes most of the same code.
-% \end{itemize}
-%
-% \begin{macro}{\@@_literal:e, \@@_literal:n, \@@_literal:x}
-% The one shared function for all drivers is access to the basic
-% \tn{special} primitive: it has slightly odd expansion behaviour
-% so a wrapper is provided.
-% \begin{macrocode}
-\cs_new_eq:NN \@@_literal:e \tex_special:D
-\cs_new_protected:Npn \@@_literal:n #1
- { \@@_literal:e { \exp_not:n {#1} } }
-\cs_generate_variant:Nn \@@_literal:n { x }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}{\l_@@_internal_box}
-% A scratch box.
-% \begin{macrocode}
-\box_new:N \l_@@_internal_box
-% \end{macrocode}
-% \end{variable}
-%
-% \subsection{\texttt{dvips} driver}
-%
-% \begin{macrocode}
-%<*dvips>
-% \end{macrocode}
-%
-% \begin{macro}{\@@_literal_postscript:n, \@@_literal_postscript:x}
-% Literal PostScript can be included using a few low-level formats. Here,
-% we use the form with no positioning: this is overall more convenient as
-% a wrapper. Note that this does require that where position is important,
-% an appropriate wrapper is included.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_literal_postscript:n #1
- { \@@_literal:n { ps:: #1 } }
-\cs_generate_variant:Nn \@@_literal_postscript:n { x }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_postscript:n, \@@_postscript:x}
-% PostScript data that does have positioning, and also applying
-% a shift to |SDict| (which is not done automatically by
-% |ps:| or |ps::|, in contrast to |!| or |"|).
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_postscript:n #1
- { \@@_literal:n { ps: SDict ~ begin ~ #1 ~ end } }
-\cs_generate_variant:Nn \@@_postscript:n { x }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_postscript_header:n}
-% PostScript for the header: a small saving but makes the code clearer.
-% This is held until the start of shipout such that a document with no
-% actual output does not write anything.
-% \begin{macrocode}
-\cs_new_protected:Npx \@@_postscript_header:n #1
-%<*initex>
- { \@@_literal:n { ! #1 } }
-%</initex>
-%<*package>
- {
- \cs_if_exist:NTF \AtBeginDvi
- { \exp_not:N \AtBeginDvi }
- { \use:n }
- { \@@_literal:n { ! #1 } }
- }
-%</package>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_align_currentpoint_begin:, \@@_align_currentpoint_end:}
-% In \texttt{dvips} there is no build-in saving of the current
-% position, and so some additional PostScript is required to set up the
-% transformation matrix and also to restore it afterwards. Notice the use
-% of the stack to save the current position \enquote{up front} and to
-% move back to it at the end of the process. Notice that the |[begin]|/^^A
-% |[end]| pair here mean that we can use a run of PostScript statements
-% in separate lines: not \emph{required} but does make the code and
-% output more clear.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_align_currentpoint_begin:
- {
- \@@_literal:n { ps::[begin] }
- \@@_literal_postscript:n { currentpoint }
- \@@_literal_postscript:n { currentpoint~translate }
- }
-\cs_new_protected:Npn \@@_align_currentpoint_end:
- {
- \@@_literal_postscript:n { neg~exch~neg~exch~translate }
- \@@_literal:n { ps::[end] }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_scope_begin:, \@@_scope_end:}
-% Saving/restoring scope for general operations needs to be done with
-% \texttt{dvips} positioning (try without to see this!). Thus we need the
-% |ps:| version of the special here. As only the graphics state is ever
-% altered within this pairing, we use the lower-cost |g|-versions.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_scope_begin:
- { \@@_literal:n { ps:gsave } }
-\cs_new_protected:Npn \@@_scope_end:
- { \@@_literal:n { ps:grestore } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</dvips>
-% \end{macrocode}
-%
-% \subsection{\texttt{pdfmode} driver}
-%
-% \begin{macrocode}
-%<*pdfmode>
-% \end{macrocode}
-%
-% The direct PDF driver covers both \pdfTeX{} and \LuaTeX{}. The latter
-% renames and restructures the driver primitives but this can be handled
-% at one level of abstraction. As such, we avoid using two separate drivers
-% for this material at the cost of some \texttt{x}-type definitions to get
-% everything expanded up-front.
-%
-% \begin{macro}{\@@_literal_pdf:n, \@@_literal_pdf:x}
-% This is equivalent to \verb|\special{pdf:}| but the engine can
-% track it. Without the \texttt{direct} keyword everything is kept in
-% sync: the transformation matrix is set to the current point automatically.
-% Note that this is still inside the text (\texttt{BT} \dots \texttt{ET}
-% block).
-% \begin{macrocode}
-\cs_new_protected:Npx \@@_literal_pdf:n #1
- {
- \cs_if_exist:NTF \tex_pdfextension:D
- { \tex_pdfextension:D literal }
- { \tex_pdfliteral:D }
- { \exp_not:N \exp_not:n {#1} }
- }
-\cs_generate_variant:Nn \@@_literal_pdf:n { x }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_scope_begin:, \@@_scope_end:}
-% Higher-level interfaces for saving and restoring the graphic state.
-% \begin{macrocode}
-\cs_new_protected:Npx \@@_scope_begin:
- {
- \cs_if_exist:NTF \tex_pdfextension:D
- { \tex_pdfextension:D save \scan_stop: }
- { \tex_pdfsave:D }
- }
-\cs_new_protected:Npx \@@_scope_end:
- {
- \cs_if_exist:NTF \tex_pdfextension:D
- { \tex_pdfextension:D restore \scan_stop: }
- { \tex_pdfrestore:D }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_matrix:n, \@@_matrix:x}
-% Here the appropriate function is set up to insert an affine matrix
-% into the PDF. With \pdfTeX{} and \LuaTeX{} in direct PDF output mode there
-% is a primitive for this, which only needs the rotation/scaling/skew part.
-% \begin{macrocode}
-\cs_new_protected:Npx \@@_matrix:n #1
- {
- \cs_if_exist:NTF \tex_pdfextension:D
- { \tex_pdfextension:D setmatrix }
- { \tex_pdfsetmatrix:D }
- { \exp_not:N \exp_not:n {#1} }
- }
-\cs_generate_variant:Nn \@@_matrix:n { x }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</pdfmode>
-% \end{macrocode}
-%
-% \subsection{\texttt{dvipdfmx} driver}
-%
-% \begin{macrocode}
-%<*dvipdfmx|xdvipdfmx>
-% \end{macrocode}
-%
-% The \texttt{dvipdfmx} shares code with the PDF mode one (using the common
-% section to this file) but also with \texttt{xdvipdfmx}. The latter is close
-% to identical to \texttt{dvipdfmx} and so all of the code here is extracted
-% for both drivers, with some \texttt{clean up} for \texttt{xdvipdfmx} as
-% required.
-%
-% \begin{macro}{\@@_literal_pdf:n, \@@_literal_pdf:x}
-% Equivalent to \texttt{pdf:content} but favored as the link to
-% the \pdfTeX{} primitive approach is clearer.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_literal_pdf:n #1
- { \@@_literal:n { pdf:literal~ #1 } }
-\cs_generate_variant:Nn \@@_literal_pdf:n { x }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_scope_begin:, \@@_scope_end:}
-% Scoping is done using the driver-specific specials.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_scope_begin:
- { \@@_literal:n { x:gsave } }
-\cs_new_protected:Npn \@@_scope_end:
- { \@@_literal:n { x:grestore } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</dvipdfmx|xdvipdfmx>
-% \end{macrocode}
-%
-% \subsection{\texttt{dvisvgm} driver}
-%
-% \begin{macrocode}
-%<*dvisvgm>
-% \end{macrocode}
-%
-% \begin{macro}{\@@_literal_svg:n, \@@_literal_svg:x}
-% Unlike the other drivers, the requirements for making SVG files mean
-% that we can't conveniently transform all operations to the current point.
-% That makes life a bit more tricky later as that needs to be accounted for.
-% A new line is added after each call to help to keep the output readable
-% for debugging.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_literal_svg:n #1
- { \@@_literal:n { dvisvgm:raw~ #1 { ?nl } } }
-\cs_generate_variant:Nn \@@_literal_svg:n { x }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_scope_begin:, \@@_scope_end:}
-% A scope in SVG terms is slightly different to the other drivers as
-% operations have to be \enquote{tied} to these not simply inside them.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_scope_begin:
- { \@@_literal_svg:n { <g> } }
-\cs_new_protected:Npn \@@_scope_end:
- { \@@_literal_svg:n { </g> } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_scope_begin:n, \@@_scope_begin:x}
-% In SVG transformations, clips and so on are attached directly to scopes so
-% we need a way or allowing for that. This is rather more useful than
-% \cs{@@_scope_begin:} as a result. No assumptions are made about the nature
-% of the scoped operation(s).
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_scope_begin:n #1
- { \@@_literal_svg:n { <g~ #1 > } }
-\cs_generate_variant:Nn \@@_scope_begin:n { x }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</dvisvgm>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%</initex|package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3drivers-box.dtx b/Master/texmf-dist/source/latex/l3kernel/l3drivers-box.dtx
deleted file mode 100644
index 945a93dc6ef..00000000000
--- a/Master/texmf-dist/source/latex/l3kernel/l3drivers-box.dtx
+++ /dev/null
@@ -1,473 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3drivers-box.dtx
-%
-% Copyright (C) 2011-2019 The LaTeX3 Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \textsf{l3drivers-box} package\\ Driver box support^^A
-% }
-%
-% \author{^^A
-% The \LaTeX3 Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2019-05-28}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3drivers-box} Implementation}
-%
-% \begin{macrocode}
-%<*initex|package>
-%<@@=driver>
-% \end{macrocode}
-%
-% \subsection{\texttt{dvips} driver}
-%
-% \begin{macrocode}
-%<*dvips>
-% \end{macrocode}
-%
-% \begin{macro}{\driver_box_use_clip:N}
-% The \texttt{dvips} driver scales all absolute dimensions based on the
-% output resolution selected and any \TeX{} magnification. Thus for any
-% operation involving absolute lengths there is a correction to make. See
-% \texttt{normalscale} from \texttt{special.pro} for the variables, noting
-% that here everything is saved on the stack rather than as a separate
-% variable. Once all of that is done, the actual clipping is trivial.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_box_use_clip:N #1
- {
- \@@_scope_begin:
- \@@_align_currentpoint_begin:
- \@@_literal_postscript:n { matrix~currentmatrix }
- \@@_literal_postscript:n
- { Resolution~72~div~VResolution~72~div~scale }
- \@@_literal_postscript:n { DVImag~dup~scale }
- \@@_literal_postscript:x
- {
- 0 ~
- \dim_to_decimal_in_bp:n { \box_dp:N #1 } ~
- \dim_to_decimal_in_bp:n { \box_wd:N #1 } ~
- \dim_to_decimal_in_bp:n { -\box_ht:N #1 - \box_dp:N #1 } ~
- rectclip
- }
- \@@_literal_postscript:n { setmatrix }
- \@@_align_currentpoint_end:
- \hbox_overlap_right:n { \box_use:N #1 }
- \@@_scope_end:
- \skip_horizontal:n { \box_wd:N #1 }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\driver_box_use_rotate:Nn}
-% \begin{macro}{\@@_box_use_rotate:Nn}
-% Rotating using \texttt{dvips} does not require that the box dimensions
-% are altered and has a very convenient built-in operation. Zero rotation
-% must be written as |0| not |-0| so there is a quick test.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_box_use_rotate:Nn #1#2
- { \exp_args:NNf \@@_box_use_rotate:Nn #1 { \fp_eval:n {#2} } }
-\cs_new_protected:Npn \@@_box_use_rotate:Nn #1#2
- {
- \@@_scope_begin:
- \@@_align_currentpoint_begin:
- \@@_literal_postscript:x
- {
- \fp_compare:nNnTF {#2} = \c_zero_fp
- { 0 }
- { \fp_eval:n { round ( -(#2) , 5 ) } } ~
- rotate
- }
- \@@_align_currentpoint_end:
- \box_use:N #1
- \@@_scope_end:
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\driver_box_use_scale:Nnn}
-% The \texttt{dvips} driver once again has a dedicated operation we can
-% use here.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_box_use_scale:Nnn #1#2#3
- {
- \@@_scope_begin:
- \@@_align_currentpoint_begin:
- \@@_literal_postscript:x
- {
- \fp_eval:n { round ( #2 , 5 ) } ~
- \fp_eval:n { round ( #3 , 5 ) } ~
- scale
- }
- \@@_align_currentpoint_end:
- \hbox_overlap_right:n { \box_use:N #1 }
- \@@_scope_end:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</dvips>
-% \end{macrocode}
-%
-% \subsection{\texttt{pdfmode} driver}
-%
-% \begin{macrocode}
-%<*pdfmode>
-% \end{macrocode}
-%
-% \begin{macro}{\driver_box_use_clip:N}
-% The general method is to save the current location, define a clipping path
-% equivalent to the bounding box, then insert the content at the current
-% position and in a zero width box. The \enquote{real} width is then made up
-% using a horizontal skip before tidying up. There are other approaches that
-% can be taken (for example using XForm objects), but the logic here shares
-% as much code as possible and uses the same conversions (and so same
-% rounding errors) in all cases.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_box_use_clip:N #1
- {
- \@@_scope_begin:
- \@@_literal_pdf:x
- {
- 0~
- \dim_to_decimal_in_bp:n { -\box_dp:N #1 } ~
- \dim_to_decimal_in_bp:n { \box_wd:N #1 } ~
- \dim_to_decimal_in_bp:n { \box_ht:N #1 + \box_dp:N #1 } ~
- re~W~n
- }
- \hbox_overlap_right:n { \box_use:N #1 }
- \@@_scope_end:
- \skip_horizontal:n { \box_wd:N #1 }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\driver_box_use_rotate:Nn}
-% \begin{macro}{\@@_box_use_rotate:Nn}
-% \begin{variable}{\l_@@_cos_fp, \l_@@_sin_fp}
-% Rotations are set using an affine transformation matrix which therefore
-% requires sine/cosine values not the angle itself. We store the rounded
-% values to avoid rounding twice. There are also a couple of comparisons to
-% ensure that |-0| is not written to the output, as this avoids any issues
-% with problematic display programs. Note that numbers are compared to~$0$
-% after rounding.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_box_use_rotate:Nn #1#2
- { \exp_args:NNf \@@_box_use_rotate:Nn #1 { \fp_eval:n {#2} } }
-\cs_new_protected:Npn \@@_box_use_rotate:Nn #1#2
- {
- \@@_scope_begin:
- \box_set_wd:Nn #1 { 0pt }
- \fp_set:Nn \l_@@_cos_fp { round ( cosd ( #2 ) , 5 ) }
- \fp_compare:nNnT \l_@@_cos_fp = \c_zero_fp
- { \fp_zero:N \l_@@_cos_fp }
- \fp_set:Nn \l_@@_sin_fp { round ( sind ( #2 ) , 5 ) }
- \@@_matrix:x
- {
- \fp_use:N \l_@@_cos_fp \c_space_tl
- \fp_compare:nNnTF \l_@@_sin_fp = \c_zero_fp
- { 0~0 }
- {
- \fp_use:N \l_@@_sin_fp
- \c_space_tl
- \fp_eval:n { -\l_@@_sin_fp }
- }
- \c_space_tl
- \fp_use:N \l_@@_cos_fp
- }
- \box_use:N #1
- \@@_scope_end:
- }
-\fp_new:N \l_@@_cos_fp
-\fp_new:N \l_@@_sin_fp
-% \end{macrocode}
-% \end{variable}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\driver_box_use_scale:Nnn}
-% The same idea as for rotation but without the complexity of signs and
-% cosines.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_box_use_scale:Nnn #1#2#3
- {
- \@@_scope_begin:
- \@@_matrix:x
- {
- \fp_eval:n { round ( #2 , 5 ) } ~
- 0~0~
- \fp_eval:n { round ( #3 , 5 ) }
- }
- \hbox_overlap_right:n { \box_use:N #1 }
- \@@_scope_end:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</pdfmode>
-% \end{macrocode}
-%
-% \subsection{\texttt{dvipdfmx} driver}
-%
-% \begin{macrocode}
-%<*dvipdfmx|xdvipdfmx>
-% \end{macrocode}
-%
-% \begin{macro}{\driver_box_use_clip:N}
-% The code here is identical to that for \texttt{pdfmode}: unlike rotation and
-% scaling, there is no higher-level support in the driver for clipping.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_box_use_clip:N #1
- {
- \@@_scope_begin:
- \@@_literal_pdf:x
- {
- 0~
- \dim_to_decimal_in_bp:n { -\box_dp:N #1 } ~
- \dim_to_decimal_in_bp:n { \box_wd:N #1 } ~
- \dim_to_decimal_in_bp:n { \box_ht:N #1 + \box_dp:N #1 } ~
- re~W~n
- }
- \hbox_overlap_right:n { \box_use:N #1 }
- \@@_scope_end:
- \skip_horizontal:n { \box_wd:N #1 }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\driver_box_use_rotate:Nn}
-% \begin{macro}{\@@_box_use_rotate:Nn}
-% Rotating in \texttt{(x)}dvipdmfx can be implemented using either PDF or
-% driver-specific code. The former approach however is not \enquote{aware}
-% of the content of boxes: this means that any embedded links would not be
-% adjusted by the rotation. As such, the driver-native approach is preferred:
-% the code therefore is similar (though not identical) to the \texttt{dvips}
-% version (notice the rotation angle here is positive). As for
-% \texttt{dvips}, zero rotation is written as |0| not |-0|.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_box_use_rotate:Nn #1#2
- { \exp_args:NNf \@@_box_use_rotate:Nn #1 { \fp_eval:n {#2} } }
-\cs_new_protected:Npn \@@_box_use_rotate:Nn #1#2
- {
- \@@_scope_begin:
- \@@_literal:x
- {
- x:rotate~
- \fp_compare:nNnTF {#2} = \c_zero_fp
- { 0 }
- { \fp_eval:n { round ( #2 , 5 ) } }
- }
- \box_use:N #1
- \@@_scope_end:
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\driver_box_use_scale:Nnn}
-% Much the same idea for scaling: use the higher-level driver operation to allow
-% for box content.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_box_use_scale:Nnn #1#2#3
- {
- \@@_scope_begin:
- \@@_literal:x
- {
- x:scale~
- \fp_eval:n { round ( #2 , 5 ) } ~
- \fp_eval:n { round ( #3 , 5 ) }
- }
- \hbox_overlap_right:n { \box_use:N #1 }
- \@@_scope_end:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</dvipdfmx|xdvipdfmx>
-% \end{macrocode}
-%
-% \subsection{\texttt{dvisvgm} driver}
-%
-% \begin{macrocode}
-%<*dvisvgm>
-% \end{macrocode}
-%
-% \begin{macro}{\driver_box_use_clip:N}
-% \begin{variable}{\g_@@_clip_path_int}
-% Clipping in SVG is more involved than with other drivers. The first issue
-% is that the clipping path must be defined separately from where it is used,
-% so we need to track how many paths have applied. The naming here uses
-% \texttt{l3cp} as the namespace with a number following. Rather than use
-% a rectangular operation, we define the path manually as this allows it to
-% have a depth: easier than the alternative approach of shifting content
-% up and down using scopes to allow for the depth of the \TeX{} box and
-% keep the reference point the same!
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_box_use_clip:N #1
- {
- \int_gincr:N \g_@@_clip_path_int
- \@@_literal_svg:x
- { < clipPath~id = " l3cp \int_use:N \g_@@_clip_path_int " > }
- \@@_literal_svg:x
- {
- <
- path ~ d =
- "
- M ~ 0 ~
- \dim_to_decimal:n { -\box_dp:N #1 } ~
- L ~ \dim_to_decimal:n { \box_wd:N #1 } ~
- \dim_to_decimal:n { -\box_dp:N #1 } ~
- L ~ \dim_to_decimal:n { \box_wd:N #1 } ~
- \dim_to_decimal:n { \box_ht:N #1 + \box_dp:N #1 } ~
- L ~ 0 ~
- \dim_to_decimal:n { \box_ht:N #1 + \box_dp:N #1 } ~
- Z
- "
- />
- }
- \@@_literal_svg:n
- { < /clipPath > }
-% \end{macrocode}
-% In general the SVG set up does not try to transform coordinates to the
-% current point. For clipping we need to do that, so have a transformation
-% here to get us to the right place, and a matching one just before the
-% \TeX{} box is inserted to get things back on track. The clip path needs to
-% come between those two such that if lines up with the current point, as
-% does the \TeX{} box.
-% \begin{macrocode}
- \@@_scope_begin:n
- {
- transform =
- "
- translate ( { ?x } , { ?y } ) ~
- scale ( 1 , -1 )
- "
- }
- \@@_scope_begin:x
- {
- clip-path =
- "url ( \c_hash_str l3cp \int_use:N \g_@@_clip_path_int ) "
- }
- \@@_scope_begin:n
- {
- transform =
- "
- scale ( -1 , 1 ) ~
- translate ( { ?x } , { ?y } ) ~
- scale ( -1 , -1 )
- "
- }
- \box_use:N #1
- \@@_scope_end:
- \@@_scope_end:
- \@@_scope_end:
-% \skip_horizontal:n { \box_wd:N #1 }
- }
-\int_new:N \g_@@_clip_path_int
-% \end{macrocode}
-% \end{variable}
-% \end{macro}
-%
-% \begin{macro}{\driver_box_use_rotate:Nn}
-% Rotation has a dedicated operation which includes a centre-of-rotation
-% optional pair. That can be picked up from the driver syntax, so there is
-% no need to worry about the transformation matrix.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_box_use_rotate:Nn #1#2
- {
- \@@_scope_begin:x
- {
- transform =
- "
- rotate
- ( \fp_eval:n { round ( -(#2) , 5 ) } , ~ { ?x } , ~ { ?y } )
- "
- }
- \box_use:N #1
- \@@_scope_end:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\driver_box_use_scale:Nnn}
-% In contrast to rotation, we have to account for the current position in this
-% case. That is done using a couple of translations in addition to the scaling
-% (which is therefore done backward with a flip).
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_box_use_scale:Nnn #1#2#3
- {
- \@@_scope_begin:x
- {
- transform =
- "
- translate ( { ?x } , { ?y } ) ~
- scale
- (
- \fp_eval:n { round ( -#2 , 5 ) } ,
- \fp_eval:n { round ( -#3 , 5 ) }
- ) ~
- translate ( { ?x } , { ?y } ) ~
- scale ( -1 )
- "
- }
- \hbox_overlap_right:n { \box_use:N #1 }
- \@@_scope_end:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</dvisvgm>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%</initex|package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3drivers-color.dtx b/Master/texmf-dist/source/latex/l3kernel/l3drivers-color.dtx
deleted file mode 100644
index 4d5c22462ca..00000000000
--- a/Master/texmf-dist/source/latex/l3kernel/l3drivers-color.dtx
+++ /dev/null
@@ -1,307 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3drivers-color.dtx
-%
-% Copyright (C) 2011-2019 The LaTeX3 Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \textsf{l3drivers-color} package\\ Driver color support^^A
-% }
-%
-% \author{^^A
-% The \LaTeX3 Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2019-05-28}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3drivers-color} Implementation}
-%
-% \begin{macrocode}
-%<*initex|package>
-%<@@=driver>
-% \end{macrocode}
-%
-% Color support is split into two parts: a \enquote{general} concept and
-% one directly linked to drawings (or rather the split between filling
-% and stroking). General color is relatively easy to handle: we have a color
-% stack available with all modern drivers, and can use that.%
-% Whilst \texttt{(x)dvipdfmx} does have its own approach to color specials,
-% it is easier to use \texttt{dvips}-like ones for all cases except direct
-% PDF output.
-%
-% \subsection{\texttt{dvips}-style}
-%
-% \begin{macrocode}
-%<*dvisvgm|dvipdfmx|dvips|xdvipdfmx>
-% \end{macrocode}
-%
-% \begin{macro}{\driver_color_pickup:N}
-% \begin{macro}{\@@_color_pickup:w}
-% Allow for \LaTeXe{} color. Here, the possible input values are limited:
-% \texttt{dvips}-style colors can mainly be taken as-is with the exception
-% spot ones (here we need a model and a tint).
-% \begin{macrocode}
-%<*package>
-\cs_new_protected:Npn \driver_color_pickup:N #1 { }
-\AtBeginDocument
- {
- \@ifpackageloaded { color }
- {
- \cs_set_protected:Npn \driver_color_pickup:N #1
- {
- \exp_args:NV \tl_if_head_is_space:nTF \current@color
- {
- \tl_set:Nx #1
- {
- spot ~
- \exp_after:wN \use:n \current@color \c_space_tl 1
- }
- }
- {
- \exp_last_unbraced:Nx \@@_color_pickup:w
- { \current@color } \q_stop #1
- }
- }
- \cs_new_protected:Npn \@@_color_pickup:w #1 ~ #2 \q_stop #3
- { \tl_set:Nn #3 { #1 ~ #2 } }
- }
- { }
- }
-%</package>
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\driver_color_cmyk:nnnn}
-% \begin{macro}{\driver_color_gray:n}
-% \begin{macro}{\driver_color_rgb:nnn}
-% \begin{macro}{\driver_color_spot:nn}
-% \begin{macro}{\@@_color_select:n, \@@_color_select:x}
-% \begin{macro}{\@@_color_reset:}
-% \begin{macro}{driver.fc}
-% Push the data to the stack. In the case of \texttt{dvips} also reset the
-% drawing fill color in raw PostScript.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_color_cmyk:nnnn #1#2#3#4
- {
- \@@_color_select:x
- {
- cmyk~
- \fp_eval:n {#1} ~ \fp_eval:n {#2} ~
- \fp_eval:n {#3} ~ \fp_eval:n {#4}
- }
- }
-\cs_new_protected:Npn \driver_color_gray:n #1
- { \@@_color_select:x { gray~ \fp_eval:n {#1} } }
-\cs_new_protected:Npn \driver_color_rgb:nnn #1#2#3
- {
- \@@_color_select:x
- { rgb~ \fp_eval:n {#1} ~ \fp_eval:n {#2} ~ \fp_eval:n {#3} }
- }
-\cs_new_protected:Npn \driver_color_spot:nn #1#2
- { \@@_color_select:n { #1 } }
-\cs_new_protected:Npn \@@_color_select:n #1
- {
- \@@_literal:n { color~push~ #1 }
-%<*dvips>
- \@@_postscript:n { /driver.fc~{ }~def }
-%</dvips>
- \group_insert_after:N \@@_color_reset:
- }
-\cs_generate_variant:Nn \@@_color_select:n { x }
-\cs_new_protected:Npn \@@_color_reset:
- { \@@_literal:n { color~pop } }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macrocode}
-%</dvisvgm|dvipdfmx|dvips|xdvipdfmx>
-% \end{macrocode}
-%
-% \subsection{\texttt{pdfmode}}
-%
-% \begin{macrocode}
-%<*pdfmode>
-% \end{macrocode}
-%
-% \begin{macro}{\driver_color_pickup:N}
-% \begin{macro}{\@@_color_pickup:w}
-% The current color in driver-dependent format: pick up the package-mode
-% data if available. We end up converting back and forward in this route as
-% we store our color data in \texttt{dvips} format.
-% The \tn{current@color} needs to be \texttt{x}-expanded before
-% \cs{@@_color_pickup:w} breaks it apart, because for instance
-% \pkg{xcolor} sets it to be instructions to generate a colour
-% \begin{macrocode}
-%<*package>
-\cs_new_protected:Npn \driver_color_pickup:N #1 { }
-\AtBeginDocument
- {
- \@ifpackageloaded { color }
- {
- \cs_set_protected:Npn \driver_color_pickup:N #1
- {
- \exp_last_unbraced:Nx \@@_color_pickup:w
- { \current@color } ~ 0 ~ 0 ~ 0 \q_stop #1
- }
- \cs_new_protected:Npn \@@_color_pickup:w
- #1 ~ #2 ~ #3 ~ #4 ~ #5 ~ #6 \q_stop #7
- {
- \str_if_eq:nnTF {#2} { g }
- { \tl_set:Nn #7 { gray ~ #1 } }
- {
- \str_if_eq:nnTF {#4} { rg }
- { \tl_set:Nn #7 { rgb ~ #1 ~ #2 ~ #3 } }
- {
- \str_if_eq:nnTF {#5} { k }
- { \tl_set:Nn #7 { cmyk ~ #1 ~ #2 ~ #3 ~ #4 } }
- {
- \str_if_eq:nnTF {#2} { cs }
- {
- \tl_set:Nx #7 { spot ~ \use_none:n #1 ~ #5 }
- }
- {
- \tl_set:Nn #7 { gray ~ 0 }
- }
- }
- }
- }
- }
- }
- { }
- }
-%</package>
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{variable}{\l_@@_color_stack_int}
-% \pdfTeX{} and \LuaTeX{} have multiple stacks available, and to track
-% which one is in use a variable is required.
-% \begin{macrocode}
-\int_new:N \l_@@_color_stack_int
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\driver_color_cmyk:nnnn, \@@_color_cmyk:nnnn}
-% \begin{macro}{\driver_color_gray:n, \@@_color_gray:n}
-% \begin{macro}{\driver_color_rgb:nnn, \@@_color_rgb:nnn}
-% \begin{macro}{\driver_color_spot:nn}
-% \begin{macro}{\@@_color_select:n, \@@_color_select:x}
-% \begin{macro}{\@@_color_reset:}
-% Simply dump the data, but allowing for \LuaTeX{}.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_color_cmyk:nnnn #1#2#3#4
- {
- \use:x
- {
- \@@_color_cmyk:nnnn
- { \fp_eval:n {#1} }
- { \fp_eval:n {#2} }
- { \fp_eval:n {#3} }
- { \fp_eval:n {#4} }
- }
- }
-\cs_new_protected:Npn \@@_color_cmyk:nnnn #1#2#3#4
- {
- \@@_color_select:n
- { #1 ~ #2 ~ #3 ~ #4 ~ k ~ #1 ~ #2 ~ #3 ~ #4 ~ K }
- }
-\cs_new_protected:Npn \driver_color_gray:n #1
- { \exp_args:Nx \@@_color_gray:n { \fp_eval:n {#1} } }
-\cs_new_protected:Npn \@@_color_gray:n #1
- { \@@_color_select:n { #1 ~ g ~ #1 ~ G } }
-\cs_new_protected:Npn \driver_color_rgb:nnn #1#2#3
- {
- \use:x
- {
- \@@_color_rgb:nnn
- { \fp_eval:n {#1} }
- { \fp_eval:n {#2} }
- { \fp_eval:n {#3} }
- }
- }
-\cs_new_protected:Npn \@@_color_rgb:nnn #1#2#3
- { \@@_color_select:n { #1 ~ #2 ~ #3 ~ rg ~ #1 ~ #2 ~ #3 ~ RG } }
-\cs_new_protected:Npn \driver_color_spot:nn #1#2
- { \@@_color_select:n { /#1 ~ cs ~ /#1 ~ CS ~ #2 ~ sc ~ #2 ~ SC } }
-\cs_new_protected:Npx \@@_color_select:n #1
- {
- \cs_if_exist:NTF \tex_pdfextension:D
- { \tex_pdfextension:D colorstack }
- { \tex_pdfcolorstack:D }
- \exp_not:N \l_@@_color_stack_int push {#1}
- \group_insert_after:N \exp_not:N \@@_color_reset:
- }
-\cs_generate_variant:Nn \@@_color_select:n { x }
-\cs_new_protected:Npx \@@_color_reset:
- {
- \cs_if_exist:NTF \tex_pdfextension:D
- { \tex_pdfextension:D colorstack }
- { \tex_pdfcolorstack:D }
- \exp_not:N \l_@@_color_stack_int pop \scan_stop:
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macrocode}
-%</pdfmode>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%</initex|package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3drivers-draw.dtx b/Master/texmf-dist/source/latex/l3kernel/l3drivers-draw.dtx
deleted file mode 100644
index 1e213647b46..00000000000
--- a/Master/texmf-dist/source/latex/l3kernel/l3drivers-draw.dtx
+++ /dev/null
@@ -1,1338 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3drivers-draw.dtx
-%
-% Copyright (C) 2011-2019 The LaTeX3 Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \textsf{l3drivers-draw} package\\ Driver drawing support^^A
-% }
-%
-% \author{^^A
-% The \LaTeX3 Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2019-05-28}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3drivers-draw} Implementation}
-%
-% \begin{macrocode}
-%<*initex|package>
-%<@@=driver>
-% \end{macrocode}
-%
-% \subsection{\texttt{dvips} driver}
-%
-% \begin{macrocode}
-%<*dvips>
-% \end{macrocode}
-%
-% \begin{macro}{\@@_draw_literal:n, \@@_draw_literal:x}
-% The same as literal PostScript: same arguments about positioning apply
-% her.
-% \begin{macrocode}
-\cs_new_eq:NN \@@_draw_literal:n \@@_literal_postscript:n
-\cs_generate_variant:Nn \@@_draw_literal:n { x }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\driver_draw_begin:, \driver_draw_end:}
-% \begin{macro}{driver.fc}
-% The |ps::[begin]| special here deals with positioning but allows us to
-% continue on to a matching |ps::[end]|: contrast with |ps:|, which positions
-% but where we can't split material between separate calls. The
-% |@beginspecial|/|@endspecial| pair are from |special.pro| and correct the
-% scale and $y$-axis direction. The definition of |/driver.fc| deals with fill
-% color in paths. In contrast to \pkg{pgf}, we don't save the current point:
-% discussion with Tom Rokici suggested a better way to handle the necessary
-% translations (see \cs{driver_draw_box_use:Nnnnn}). (Note that
-% |@beginspecial|/|@endspecial| forms a driver scope.) The |[begin]|/^^A
-% |[end]| lines are handled differently from the rest as they are
-% conceptually different: not really drawing literals but instructions to
-% \texttt{dvips} itself.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_draw_begin:
- {
- \@@_literal:n { ps::[begin] }
- \@@_draw_literal:n { @beginspecial }
- \@@_darw_literal:n { SDict ~ begin ~ /driver.fc ~ { } ~ def ~ end }
- }
-\cs_new_protected:Npn \driver_draw_end:
- {
- \@@_draw_literal:n { @endspecial }
- \@@_literal:n { ps::[end] }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\driver_draw_scope_begin:, \driver_draw_scope_end:}
-% Scope here may need to contain saved definitions, so the entire memory
-% rather than just the graphic state has to be sent to the stack.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_draw_scope_begin:
- { \@@_draw_literal:n { save } }
-\cs_new_protected:Npn \driver_draw_scope_end:
- { \@@_draw_literal:n { restore } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\driver_draw_moveto:nn, \driver_draw_lineto:nn}
-% \begin{macro}{\driver_draw_rectangle:nnnn}
-% \begin{macro}{\driver_draw_curveto:nnnnnn}
-% Path creation operations mainly resolve directly to PostScript primitive
-% steps, with only the need to convert to \texttt{bp}. Notice that
-% \texttt{x}-type expansion is included here to ensure that any variable
-% values are forced to literals before any possible caching. There is
-% no native rectangular path command (without also clipping, filling or
-% stroking), so that task is done using a small amount of PostScript.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_draw_moveto:nn #1#2
- {
- \@@_draw_literal:x
- {
- \dim_to_decimal_in_bp:n {#1} ~
- \dim_to_decimal_in_bp:n {#2} ~ moveto
- }
- }
-\cs_new_protected:Npn \driver_draw_lineto:nn #1#2
- {
- \@@_draw_literal:x
- {
- \dim_to_decimal_in_bp:n {#1} ~
- \dim_to_decimal_in_bp:n {#2} ~ lineto
- }
- }
-\cs_new_protected:Npn \driver_draw_rectangle:nnnn #1#2#3#4
- {
- \@@_draw_literal:x
- {
- \dim_to_decimal_in_bp:n {#4} ~ \dim_to_decimal_in_bp:n {#3} ~
- \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~
- moveto~dup~0~rlineto~exch~0~exch~rlineto~neg~0~rlineto~closepath
- }
- }
-\cs_new_protected:Npn \driver_draw_curveto:nnnnnn #1#2#3#4#5#6
- {
- \@@_draw_literal:x
- {
- \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~
- \dim_to_decimal_in_bp:n {#3} ~ \dim_to_decimal_in_bp:n {#4} ~
- \dim_to_decimal_in_bp:n {#5} ~ \dim_to_decimal_in_bp:n {#6} ~
- curveto
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\driver_draw_evenodd_rule:, \driver_draw_nonzero_rule:}
-% \begin{variable}{\g_@@_draw_eor_bool}
-% The even-odd rule here can be implemented as a simply switch.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_draw_evenodd_rule:
- { \bool_gset_true:N \g_@@_draw_eor_bool }
-\cs_new_protected:Npn \driver_draw_nonzero_rule:
- { \bool_gset_false:N \g_@@_draw_eor_bool }
-\bool_new:N \g_@@_draw_eor_bool
-% \end{macrocode}
-% \end{variable}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \driver_draw_closepath: ,
-% \driver_draw_stroke: ,
-% \driver_draw_closestroke: ,
-% \driver_draw_fill: ,
-% \driver_draw_fillstroke: ,
-% \driver_draw_clip: ,
-% \driver_draw_discardpath:
-% }
-% \begin{variable}{\g_@@_draw_clip_bool}
-% Unlike PDF, PostScript doesn't track separate colors for strokes and other
-% elements. It is also desirable to have the |clip| keyword after a stroke or
-% fill. To achieve those outcomes, there is some work to do. For color, the
-% stoke color is simple but the fill one has to be inserted by hand. For
-% clipping, the required ordering is achieved using a \TeX{} switch. All of
-% the operations end with a new path instruction as they do not terminate
-% (again in contrast to PDF).
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_draw_closepath:
- { \@@_draw_literal:n { closepath } }
-\cs_new_protected:Npn \driver_draw_stroke:
- {
- \@@_draw_literal:n { stroke }
- \bool_if:NT \g_@@_draw_clip_bool
- {
- \@@_draw_literal:x
- {
- \bool_if:NT \g_@@_draw_eor_bool { eo }
- clip
- }
- }
- \@@_draw_literal:n { newpath }
- \bool_gset_false:N \g_@@_draw_clip_bool
- }
-\cs_new_protected:Npn \driver_draw_closestroke:
- {
- \driver_draw_closepath:
- \driver_draw_stroke:
- }
-\cs_new_protected:Npn \driver_draw_fill:
- {
- \@@_draw_literal:n { gsave }
- \@@_draw_literal:n { driver.fc }
- \@@_draw_literal:x
- {
- \bool_if:NT \g_@@_draw_eor_bool { eo }
- fill
- }
- \@@_draw_literal:n { grestore }
- \bool_if:NT \g_@@_draw_clip_bool
- {
- \@@_draw_literal:x
- {
- \bool_if:NT \g_@@_draw_eor_bool { eo }
- clip
- }
- }
- \@@_draw_literal:n { newpath }
- \bool_gset_false:N \g_@@_draw_clip_bool
- }
-\cs_new_protected:Npn \driver_draw_fillstroke:
- {
- \@@_draw_literal:n { gsave }
- \@@_draw_literal:n { driver.fc }
- \@@_draw_literal:x
- {
- \bool_if:NT \g_@@_draw_eor_bool { eo }
- fill
- }
- \@@_draw_literal:n { grestore }
- \@@_draw_literal:n { stroke }
- \bool_if:NT \g_@@_draw_clip_bool
- {
- \@@_draw_literal:x
- {
- \bool_if:NT \g_@@_draw_eor_bool { eo }
- clip
- }
- }
- \@@_draw_literal:n { newpath }
- \bool_gset_false:N \g_@@_draw_clip_bool
- }
-\cs_new_protected:Npn \driver_draw_clip:
- { \bool_gset_true:N \g_@@_draw_clip_bool }
-\bool_new:N \g_@@_draw_clip_bool
-\cs_new_protected:Npn \driver_draw_discardpath:
- {
- \bool_if:NT \g_@@_draw_clip_bool
- {
- \@@_draw_literal:x
- {
- \bool_if:NT \g_@@_draw_eor_bool { eo }
- clip
- }
- }
- \@@_draw_literal:n { newpath }
- \bool_gset_false:N \g_@@_draw_clip_bool
- }
-% \end{macrocode}
-% \end{variable}
-% \end{macro}
-%
-% \begin{macro}{\driver_draw_dash_pattern:nn}
-% \begin{macro}{\@@_draw_dash:n}
-% \begin{macro}{\driver_draw_linewidth:n}
-% \begin{macro}{\driver_draw_miterlimit:n}
-% \begin{macro}
-% {
-% \driver_draw_cap_butt:, \driver_draw_cap_round:, \driver_draw_cap_rectangle:,
-% \driver_draw_join_miter:, \driver_draw_join_round:, \driver_draw_join_bevel:
-% }
-% Converting paths to output is again a case of mapping directly to
-% PostScript operations.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_draw_dash_pattern:nn #1#2
- {
- \@@_draw_literal:x
- {
- [
- \exp_args:Nf \use:n
- { \clist_map_function:nN {#1} \@@_draw_dash:n }
- ] ~
- \dim_to_decimal_in_bp:n {#2} ~ setdash
- }
- }
-\cs_new:Npn \@@_draw_dash:n #1
- { ~ \dim_to_decimal_in_bp:n {#1} }
-\cs_new_protected:Npn \driver_draw_linewidth:n #1
- {
- \@@_draw_literal:x
- { \dim_to_decimal_in_bp:n {#1} ~ setlinewidth }
- }
-\cs_new_protected:Npn \driver_draw_miterlimit:n #1
- { \@@_draw_literal:x { \fp_eval:n {#1} ~ setmiterlimit } }
-\cs_new_protected:Npn \driver_draw_cap_butt:
- { \@@_draw_literal:n { 0 ~ setlinecap } }
-\cs_new_protected:Npn \driver_draw_cap_round:
- { \@@_draw_literal:n { 1 ~ setlinecap } }
-\cs_new_protected:Npn \driver_draw_cap_rectangle:
- { \@@_draw_literal:n { 2 ~ setlinecap } }
-\cs_new_protected:Npn \driver_draw_join_miter:
- { \@@_draw_literal:n { 0 ~ setlinejoin } }
-\cs_new_protected:Npn \driver_draw_join_round:
- { \@@_draw_literal:n { 1 ~ setlinejoin } }
-\cs_new_protected:Npn \driver_draw_join_bevel:
- { \@@_draw_literal:n { 2 ~ setlinejoin } }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \driver_draw_color_fill_cmyk:nnnn ,
-% \driver_draw_color_stroke_cmyk:nnnn
-% }
-% \begin{macro}
-% {
-% \driver_draw_color_fill_gray:n ,
-% \driver_draw_color_stroke_gray:n
-% }
-% \begin{macro}
-% {
-% \driver_draw_color_fill_rgb:nnn ,
-% \driver_draw_color_stroke_rgb:nnn
-% }
-% \begin{macro}
-% {
-% \@@_draw_color_fill:n, \@@_draw_color_fill:x,
-% \@@_draw_color_stroke:n, \@@_draw_color_stroke:x
-% }
-% For \texttt{dvips}, we can use the standard color stack to deal with
-% stroke color, but for fills have to switch to raw PostScript. This is
-% thus not handled by the stack, but the context is very restricted. See
-% also how fills are implemented.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_draw_color_fill_cmyk:nnnn #1#2#3#4
- {
- \@@_draw_color_fill:x
- {
- \fp_eval:n {#1} ~ \fp_eval:n {#2} ~
- \fp_eval:n {#3} ~ \fp_eval:n {#4} ~
- setcmykcolor
- }
- }
-\cs_new_protected:Npn \driver_draw_color_stroke_cmyk:nnnn #1#2#3#4
- {
- \@@_draw_color_stroke:x
- {
- cmyk ~
- \fp_eval:n {#1} ~ \fp_eval:n {#2} ~
- \fp_eval:n {#3} ~ \fp_eval:n {#4}
- }
- }
-\cs_new_protected:Npn \driver_draw_color_fill_gray:n #1
- { \@@_draw_color_fill:x { \fp_eval:n {#1} ~ setgray } }
-\cs_new_protected:Npn \driver_draw_color_stroke_gray:n #1
- { \@@_draw_color_stroke:x { gray ~ \fp_eval:n {#1} } }
-\cs_new_protected:Npn \driver_draw_color_fill_rgb:nnn #1#2#3
- {
- \@@_draw_color_fill:x
- { \fp_eval:n {#1} ~ \fp_eval:n {#2} ~ \fp_eval:n {#3} ~ setrgbcolor }
- }
-\cs_new_protected:Npn \driver_draw_color_stroke_rgb:nnn #1#2#3
- {
- \@@_draw_color_stroke:x
- { rgb ~ \fp_eval:n {#1} ~ \fp_eval:n {#2} ~ \fp_eval:n {#3} }
- }
-\cs_new_protected:Npn \@@_draw_color_fill:n #1
- { \@@_postscript:n { SDict ~ begin ~ /driver.fc ~ { #1 } ~ def ~ end } }
-\cs_generate_variant:Nn \@@_draw_color_fill:n { x }
-\cs_new_protected:Npn \@@_draw_color_stroke:n #1
- {
- \@@_literal:n { color~push~#1 }
- \group_insert_after:N \@@_color_reset:
- }
-\cs_generate_variant:Nn \@@_draw_color_stroke:n { x }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\driver_draw_cm:nnnn}
-% In \texttt{dvips}, keeping the transformations in line with the engine
-% is unfortunately not possible for scaling and rotations: even if we
-% decompose the matrix into those operations, there is still no driver
-% tracking (\emph{cf.}~\texttt{(x)dvipdfmx}). Thus we take the shortest
-% path available and simply dump the matrix as given.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_draw_cm:nnnn #1#2#3#4
- {
- \@@_draw_literal:n
- {
- [
- \fp_eval:n {#1} ~ \fp_eval:n {#2} ~
- \fp_eval:n {#3} ~ \fp_eval:n {#4} ~
- 0 ~ 0
- ] ~
- concat
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\driver_draw_box_use:Nnnnn}
-% Inside a picture |@beginspecial|/|@endspecial| are active, which is
-% normally a good thing but means that the position and scaling would be off
-% if the box was inserted directly. To deal with that, there are a number of
-% possible approaches. The implementation here was suggested by Tom Rokici
-% (author of \texttt{dvips}). We end the current special placement, then
-% set the current point with a literal |[begin]|. As for general
-% literals, we then use the stack to store the current point and move to
-% it. To insert the required transformation, we have to flip the $y$-axis,
-% once before and once after it. Then we get back to the \TeX{} reference
-% point to insert our content. The clean up has to happen in the right
-% places, hence the |[begin]|/|[end]| pair around |restore|. Finally,
-% we can return to \enquote{normal} drawing mode. Notice that the set up
-% here is very similar to that in \cs{@@_align_currentpoint_\ldots}, but
-% the ordering of saving and restoring is different (intermixed).
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_draw_box_use:Nnnnn #1#2#3#4#5
- {
- \@@_draw_literal:n { @endspecial }
- \@@_draw_literal:n { [end] }
- \@@_draw_literal:n { [begin] }
- \@@_draw_literal:n { save }
- \@@_draw_literal:n { currentpoint }
- \@@_draw_literal:n { currentpoint~translate }
- \driver_draw_cm:nnnn { 1 } { 0 } { 0 } { -1 }
- \driver_draw_cm:nnnn {#2} {#3} {#4} {#5}
- \driver_draw_cm:nnnn { 1 } { 0 } { 0 } { -1 }
- \@@_draw_literal:n { neg~exch~neg~exch~translate }
- \@@_draw_literal:n { [end] }
- \hbox_overlap_right:n { \box_use:N #1 }
- \@@_draw_literal:n { [begin] }
- \@@_draw_literal:n { restore }
- \@@_draw_literal:n { [end] }
- \@@_draw_literal:n { [begin] }
- \@@_draw_literal:n { @beginspecial }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</dvips>
-% \end{macrocode}
-%
-% \subsection{\texttt{pdfmode} and \texttt{(x)dvipdfmx}}
-%
-% Both \texttt{pdfmode} and \texttt{(x)dvipdfmx} directly produce PDF output
-% and understand a shared set of specials for drawing commands.
-%
-% \begin{macrocode}
-%<*dvipdfmx|pdfmode|xdvipdfmx>
-% \end{macrocode}
-%
-% \subsubsection{Drawing}
-%
-% \begin{macro}{\@@_draw_literal:n, \@@_draw_literal:x}
-% Pass data through using a dedicated interface.
-% \begin{macrocode}
-\cs_new_eq:NN \@@_draw_literal:n \@@_literal_pdf:n
-\cs_generate_variant:Nn \@@_draw_literal:n { x }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\driver_draw_begin:, \driver_draw_end:}
-% No special requirements here, so simply set up a drawing scope.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_draw_begin:
- { \driver_draw_scope_begin: }
-\cs_new_protected:Npn \driver_draw_end:
- { \driver_draw_scope_end: }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\driver_draw_scope_begin:, \driver_draw_scope_end:}
-% Use the driver-level scope mechanisms.
-% \begin{macrocode}
-\cs_new_eq:NN \driver_draw_scope_begin: \@@_scope_begin:
-\cs_new_eq:NN \driver_draw_scope_end: \@@_scope_end:
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\driver_draw_moveto:nn, \driver_draw_lineto:nn}
-% \begin{macro}{\driver_draw_curveto:nnnnnn}
-% \begin{macro}{\driver_draw_rectangle:nnnn}
-% Path creation operations all resolve directly to PDF primitive steps, with
-% only the need to convert to \texttt{bp}.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_draw_moveto:nn #1#2
- {
- \@@_draw_literal:x
- { \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~ m }
- }
-\cs_new_protected:Npn \driver_draw_lineto:nn #1#2
- {
- \@@_draw_literal:x
- { \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~ l }
- }
-\cs_new_protected:Npn \driver_draw_curveto:nnnnnn #1#2#3#4#5#6
- {
- \@@_draw_literal:x
- {
- \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~
- \dim_to_decimal_in_bp:n {#3} ~ \dim_to_decimal_in_bp:n {#4} ~
- \dim_to_decimal_in_bp:n {#5} ~ \dim_to_decimal_in_bp:n {#6} ~
- c
- }
- }
-\cs_new_protected:Npn \driver_draw_rectangle:nnnn #1#2#3#4
- {
- \@@_draw_literal:x
- {
- \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~
- \dim_to_decimal_in_bp:n {#3} ~ \dim_to_decimal_in_bp:n {#4} ~
- re
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\driver_draw_evenodd_rule:, \driver_draw_nonzero_rule:}
-% \begin{variable}{\g_@@_draw_eor_bool}
-% The even-odd rule here can be implemented as a simply switch.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_draw_evenodd_rule:
- { \bool_gset_true:N \g_@@_draw_eor_bool }
-\cs_new_protected:Npn \driver_draw_nonzero_rule:
- { \bool_gset_false:N \g_@@_draw_eor_bool }
-\bool_new:N \g_@@_draw_eor_bool
-% \end{macrocode}
-% \end{variable}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \driver_draw_closepath: ,
-% \driver_draw_stroke: ,
-% \driver_draw_closestroke: ,
-% \driver_draw_fill: ,
-% \driver_draw_fillstroke: ,
-% \driver_draw_clip: ,
-% \driver_draw_discardpath:
-% }
-% Converting paths to output is again a case of mapping directly to
-% PDF operations.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_draw_closepath:
- { \@@_draw_literal:n { h } }
-\cs_new_protected:Npn \driver_draw_stroke:
- { \@@_draw_literal:n { S } }
-\cs_new_protected:Npn \driver_draw_closestroke:
- { \@@_draw_literal:n { s } }
-\cs_new_protected:Npn \driver_draw_fill:
- {
- \@@_draw_literal:x
- { f \bool_if:NT \g_@@_draw_eor_bool * }
- }
-\cs_new_protected:Npn \driver_draw_fillstroke:
- {
- \@@_draw_literal:x
- { B \bool_if:NT \g_@@_draw_eor_bool * }
- }
-\cs_new_protected:Npn \driver_draw_clip:
- {
- \@@_draw_literal:x
- { W \bool_if:NT \g_@@_draw_eor_bool * }
- }
-\cs_new_protected:Npn \driver_draw_discardpath:
- { \@@_draw_literal:n { n } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\driver_draw_dash_pattern:nn}
-% \begin{macro}{\@@_draw_dash:n}
-% \begin{macro}{\driver_draw_linewidth:n}
-% \begin{macro}{\driver_draw_miterlimit:n}
-% \begin{macro}
-% {
-% \driver_draw_cap_butt:, \driver_draw_cap_round:, \driver_draw_cap_rectangle:,
-% \driver_draw_join_miter:, \driver_draw_join_round:, \driver_draw_join_bevel:
-% }
-% Converting paths to output is again a case of mapping directly to
-% PDF operations.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_draw_dash_pattern:nn #1#2
- {
- \@@_draw_literal:x
- {
- [
- \exp_args:Nf \use:n
- { \clist_map_function:nN {#1} \@@_draw_dash:n }
- ] ~
- \dim_to_decimal_in_bp:n {#2} ~ d
- }
- }
-\cs_new:Npn \@@_draw_dash:n #1
- { ~ \dim_to_decimal_in_bp:n {#1} }
-\cs_new_protected:Npn \driver_draw_linewidth:n #1
- {
- \@@_draw_literal:x
- { \dim_to_decimal_in_bp:n {#1} ~ w }
- }
-\cs_new_protected:Npn \driver_draw_miterlimit:n #1
- { \@@_draw_literal:x { \fp_eval:n {#1} ~ M } }
-\cs_new_protected:Npn \driver_draw_cap_butt:
- { \@@_draw_literal:n { 0 ~ J } }
-\cs_new_protected:Npn \driver_draw_cap_round:
- { \@@_draw_literal:n { 1 ~ J } }
-\cs_new_protected:Npn \driver_draw_cap_rectangle:
- { \@@_draw_literal:n { 2 ~ J } }
-\cs_new_protected:Npn \driver_draw_join_miter:
- { \@@_draw_literal:n { 0 ~ j } }
-\cs_new_protected:Npn \driver_draw_join_round:
- { \@@_draw_literal:n { 1 ~ j } }
-\cs_new_protected:Npn \driver_draw_join_bevel:
- { \@@_draw_literal:n { 2 ~ j } }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \driver_draw_color_fill_cmyk:nnnn ,
-% \driver_draw_color_stroke_cmyk:nnnn
-% }
-% \begin{macro}
-% {
-% \driver_draw_color_fill_gray:n ,
-% \driver_draw_color_stroke_gray:n
-% }
-% \begin{macro}
-% {
-% \driver_draw_color_fill_rgb:nnn ,
-% \driver_draw_color_stroke_rgb:nnn
-% }
-% \begin{macro}{\@@_color_fill_select:n, \@@_color_fill_select:x}
-% For the stroke color, all engines here can use the color stack to handle
-% the setting. However, that is not the case for fill color: the stack in
-% \texttt{(x)dvipdfmx} only covers one type of color. So we have to use
-% different approaches for the two sets of engines.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_draw_color_fill_cmyk:nnnn #1#2#3#4
- {
- \@@_color_fill_select:x
- {
- \fp_eval:n {#1} ~ \fp_eval:n {#2} ~
- \fp_eval:n {#3} ~ \fp_eval:n {#4} ~
- k
- }
- }
-\cs_new_protected:Npn \driver_draw_color_stroke_cmyk:nnnn #1#2#3#4
- {
- \@@_color_select:x
- {
- \fp_eval:n {#1} ~ \fp_eval:n {#2} ~
- \fp_eval:n {#3} ~ \fp_eval:n {#4} ~
- k
- }
- }
-\cs_new_protected:Npn \driver_draw_color_fill_gray:n #1
- { \@@_color_fill_select:x { \fp_eval:n {#1} ~ g } }
-\cs_new_protected:Npn \driver_draw_color_stroke_gray:n #1
- { \@@_color_select:x { \fp_eval:n {#1} ~ G } }
-\cs_new_protected:Npn \driver_draw_color_fill_rgb:nnn #1#2#3
- {
- \@@_color_fill_select:x
- { \fp_eval:n {#1} ~ \fp_eval:n {#2} ~ \fp_eval:n {#3} ~ rg }
- }
-\cs_new_protected:Npn \driver_draw_color_stroke_rgb:nnn #1#2#3
- {
- \@@_color_select:x
- { \fp_eval:n {#1} ~ \fp_eval:n {#2} ~ \fp_eval:n {#3} ~ RG }
- }
-%<*pdfmode>
-\cs_new_eq:NN \@@_color_fill_select:n \@@_color_select:n
-%</pdfmode>
-%<*dvipdfmx|xdvipdfmx>
-\cs_new_eq:NN \@@_color_fill_select:n \@@_draw_literal:n
-%</dvipdfmx|xdvipdfmx>
-\cs_generate_variant:Nn \@@_color_fill_select:n { x }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\driver_draw_cm:nnnn}
-% \begin{macro}{\@@_draw_cm:nnnn}
-% Another split here between \texttt{pdfmode} and \texttt{(x)dvipdfmx}.
-% In the former, we have a direct method to maintain alignment: the driver
-% can use a matrix itself. For \texttt{(x)dvipdfmx}, we can to decompose the
-% matrix into rotations and a scaling, then use those operations as they
-% are handled by the driver. (There is driver support for matrix operations in
-% \texttt{(x)dvipdfmx}, but as a matched pair so not suitable for the
-% \enquote{stand alone} transformation set up here.)
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_draw_cm:nnnn #1#2#3#4
- {
-%<*pdfmode>
- \@@_matrix:x
- {
- \fp_eval:n {#1} ~ \fp_eval:n {#2} ~
- \fp_eval:n {#3} ~ \fp_eval:n {#4}
- }
-%</pdfmode>
-%<*dvipdfmx|xdvipdfmx>
- \@@_draw_cm_decompose:nnnnN {#1} {#2} {#3} {#4}
- \@@_draw_cm:nnnn
-%</dvipdfmx|xdvipdfmx>
- }
-%<*dvipdfmx|xdvipdfmx>
-\cs_new_protected:Npn \@@_draw_cm:nnnn #1#2#3#4
- {
- \@@_literal:x
- {
- x:rotate~
- \fp_compare:nNnTF {#1} = \c_zero_fp
- { 0 }
- { \fp_eval:n { round ( -#1 , 5 ) } }
- }
- \@@_literal:x
- {
- x:scale~
- \fp_eval:n { round ( #2 , 5 ) } ~
- \fp_eval:n { round ( #3 , 5 ) }
- }
- \@@_literal:x
- {
- x:rotate~
- \fp_compare:nNnTF {#4} = \c_zero_fp
- { 0 }
- { \fp_eval:n { round ( -#4 , 5 ) } }
- }
- }
-%</dvipdfmx|xdvipdfmx>
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_draw_cm_decompose:nnnnN}
-% \begin{macro}
-% {
-% \@@_draw_cm_decompose_auxi:nnnnN,
-% \@@_draw_cm_decompose_auxii:nnnnN,
-% \@@_draw_cm_decompose_auxiii:nnnnN,
-% }
-% Internally, transformations for drawing are tracked as a matrix. Not all
-% engines provide a way of dealing with this: if we use a raw matrix, the
-% engine looses track of positions (for example for hyperlinks), and this is
-% not desirable. They do, however, allow us to track rotations and scalings.
-% Luckily, we can decompose any (two-dimensional) matrix into two rotations
-% and a single scaling:
-% \[
-% \begin{bmatrix}
-% A & B \\ C & D
-% \end{bmatrix}
-% =
-% \begin{bmatrix}
-% \cos\beta & \sin\beta \\ -\sin\beta & \cos\beta
-% \end{bmatrix}
-% \begin{bmatrix}
-% w_{1} & 0 \\ 0 & w_{2}
-% \end{bmatrix}
-% \begin{bmatrix}
-% \cos\gamma & \sin\gamma \\ -\sin\gamma & \cos\gamma
-% \end{bmatrix}
-% \]
-% The parent matrix can be converted to
-% \[
-% \begin{bmatrix}
-% A & B \\ C & D
-% \end{bmatrix}
-% =
-% \begin{bmatrix}
-% E & H \\-H & E
-% \end{bmatrix}
-% +
-% \begin{bmatrix}
-% F & G \\ G & -F
-% \end{bmatrix}
-% \]
-% From these, we can find that
-% \begin{align*}
-% \frac{w_{1} + w_{2}}{2} &= \sqrt{E^{2} + H^{2}} \\
-% \frac{w_{1} - w_{2}}{2} &= \sqrt{F^{2} + G^{2}} \\
-% \gamma - \beta &= \tan^{-1}(G/F) \\
-% \gamma + \beta &= \tan^{-1}(H/E)
-% \end{align*}
-% at which point we just have to do various pieces of re-arrangement to
-% get all of the values. (See J.~Blinn, \emph{IEEE Comput.\ Graph.\ Appl.},
-% 1996, \textbf{16}, 82--88.) There is one wrinkle: the PostScript (and PDF)
-% way of specifying a transformation matrix exchanges where one would
-% normally expect $B$ and $C$ to be.
-% \begin{macrocode}
-%<*dvipdfmx|xdvipdfmx>
-\cs_new_protected:Npn \@@_draw_cm_decompose:nnnnN #1#2#3#4#5
- {
- \use:x
- {
- \@@_draw_cm_decompose_auxi:nnnnN
- { \fp_eval:n { (#1 + #4) / 2 } }
- { \fp_eval:n { (#1 - #4) / 2 } }
- { \fp_eval:n { (#3 + #2) / 2 } }
- { \fp_eval:n { (#3 - #2) / 2 } }
- }
- #5
- }
-\cs_new_protected:Npn \@@_draw_cm_decompose_auxi:nnnnN #1#2#3#4#5
- {
- \use:x
- {
- \@@_draw_cm_decompose_auxii:nnnnN
- { \fp_eval:n { 2 * sqrt ( #1 * #1 + #4 * #4 ) } }
- { \fp_eval:n { 2 * sqrt ( #2 * #2 + #3 * #3 ) } }
- { \fp_eval:n { atand ( #3 , #2 ) } }
- { \fp_eval:n { atand ( #4 , #1 ) } }
- }
- #5
- }
-\cs_new_protected:Npn \@@_draw_cm_decompose_auxii:nnnnN #1#2#3#4#5
- {
- \use:x
- {
- \@@_draw_cm_decompose_auxiii:nnnnN
- { \fp_eval:n { ( #4 - #3 ) / 2 } }
- { \fp_eval:n { ( #1 + #2 ) / 2 } }
- { \fp_eval:n { ( #1 - #2 ) / 2 } }
- { \fp_eval:n { ( #4 + #3 ) / 2 } }
- }
- #5
- }
-\cs_new_protected:Npn \@@_draw_cm_decompose_auxiii:nnnnN #1#2#3#4#5
- {
- \fp_compare:nNnTF { abs( #2 ) } > { abs ( #3 ) }
- { #5 {#1} {#2} {#3} {#4} }
- { #5 {#1} {#3} {#2} {#4} }
- }
-%</dvipdfmx|xdvipdfmx>
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\driver_draw_box_use:Nnnnn}
-% Inserting a \TeX{} box transformed to the requested position and using
-% the current matrix is done using a mixture of \TeX{} and low-level
-% manipulation. The offset can be handled by \TeX{}, so only any rotation/^^A
-% skew/scaling component needs to be done using the matrix operation. As this
-% operation can never be cached, the scope is set directly not using the
-% \texttt{draw} version.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_draw_box_use:Nnnnn #1#2#3#4#5
- {
- \@@_scope_begin:
-%<*pdfmode>
- \driver_draw_cm:nnnn {#2} {#3} {#4} {#5}
-%</pdfmode>
-%<*dvipdfmx|xdvipdfmx>
- \@@_literal:x
- {
- pdf:btrans~matrix~
- \fp_eval:n {#2} ~ \fp_eval:n {#3} ~
- \fp_eval:n {#4} ~ \fp_eval:n {#5} ~
- 0 ~ 0
- }
-%</dvipdfmx|xdvipdfmx>
- \hbox_overlap_right:n { \box_use:N #1 }
-%<*dvipdfmx|xdvipdfmx>
- \@@_literal:n { pdf:etrans }
-%</dvipdfmx|xdvipdfmx>
- \@@_scope_end:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</dvipdfmx|pdfmode|xdvipdfmx>
-% \end{macrocode}
-%
-% \subsection{\texttt{dvisvgm} driver}
-%
-% \begin{macrocode}
-%<*dvisvgm>
-% \end{macrocode}
-%
-% \begin{macro}{\@@_draw_literal:n, \@@_draw_literal:x}
-% The same as the more general literal call.
-% \begin{macrocode}
-\cs_new_eq:NN \@@_draw_literal:n \@@_literal_svg:n
-\cs_generate_variant:Nn \@@_draw_literal:n { x }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\driver_draw_begin:, \driver_draw_end:}
-% A drawing needs to be set up such that the co-ordinate system is
-% translated. That is done inside a scope, which as described below
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_draw_begin:
- {
- \driver_draw_scope_begin:
- \@@_draw_scope:n { transform="translate({?x},{?y})~scale(1,-1)" }
- }
-\cs_new_protected:Npn \driver_draw_end:
- { \driver_draw_scope_end: }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\driver_draw_scope_begin:, \driver_draw_scope_end:}
-% \begin{macro}{\@@_draw_scope:n, \@@_draw_scope:x}
-% \begin{variable}{\g_@@_draw_scope_int, \l_@@_draw_scope_int}
-% Several settings that with other drivers are \enquote{stand alone} have
-% to be given as part of a scope in SVG. As a result, there is a need to
-% provide a mechanism to automatically close these extra scopes. That is
-% done using a dedicated function and a pair of tracking variables. Within
-% each graphics scope we use a global variable to do the work, with a group
-% used to save the value between scopes. The result is that no direct action
-% is needed when creating a scope.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_draw_scope_begin:
- {
- \int_set_eq:NN
- \l_@@_draw_scope_int
- \g_@@_draw_scope_int
- \group_begin:
- \int_gzero:N \g_@@_draw_scope_int
- }
-\cs_new_protected:Npn \driver_draw_scope_end:
- {
- \prg_replicate:nn
- { \g_@@_draw_scope_int }
- { \@@_draw_literal:n { </g> } }
- \group_end:
- \int_gset_eq:NN
- \g_@@_draw_scope_int
- \l_@@_draw_scope_int
- }
-\cs_new_protected:Npn \@@_draw_scope:n #1
- {
- \@@_draw_literal:n { <g~ #1 > }
- \int_gincr:N \g_@@_draw_scope_int
- }
-\cs_generate_variant:Nn \@@_draw_scope:n { x }
-\int_new:N \g_@@_draw_scope_int
-\int_new:N \l_@@_draw_scope_int
-% \end{macrocode}
-% \end{variable}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\driver_draw_moveto:nn, \driver_draw_lineto:nn}
-% \begin{macro}{\driver_draw_rectangle:nnnn}
-% \begin{macro}{\driver_draw_curveto:nnnnnn}
-% \begin{macro}{\@@_draw_add_to_path:n}
-% \begin{variable}{\g_@@_draw_path_tl}
-% Once again, some work is needed to get path constructs correct. Rather
-% then write the values as they are given, the entire path needs to be
-% collected up before being output in one go. For that we use a dedicated
-% storage routine, which adds spaces as required. Since paths should
-% be fully expanded there is no need to worry about the internal
-% \texttt{x}-type expansion.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_draw_moveto:nn #1#2
- {
- \@@_draw_add_to_path:n
- { M ~ \dim_to_decimal:n {#1} ~ \dim_to_decimal:n {#2} }
- }
-\cs_new_protected:Npn \driver_draw_lineto:nn #1#2
- {
- \@@_draw_add_to_path:n
- { L ~ \dim_to_decimal:n {#1} ~ \dim_to_decimal:n {#2} }
- }
-\cs_new_protected:Npn \driver_draw_rectangle:nnnn #1#2#3#4
- {
- \@@_draw_add_to_path:n
- {
- M ~ \dim_to_decimal:n {#1} ~ \dim_to_decimal:n {#2}
- h ~ \dim_to_decimal:n {#3} ~
- v ~ \dim_to_decimal:n {#4} ~
- h ~ \dim_to_decimal:n { -#3 } ~
- Z
- }
- }
-\cs_new_protected:Npn \driver_draw_curveto:nnnnnn #1#2#3#4#5#6
- {
- \@@_draw_add_to_path:n
- {
- C ~
- \dim_to_decimal:n {#1} ~ \dim_to_decimal:n {#2} ~
- \dim_to_decimal:n {#3} ~ \dim_to_decimal:n {#4} ~
- \dim_to_decimal:n {#5} ~ \dim_to_decimal:n {#6}
- }
- }
-\cs_new_protected:Npn \@@_draw_add_to_path:n #1
- {
- \tl_gset:Nx \g_@@_draw_path_tl
- {
- \g_@@_draw_path_tl
- \tl_if_empty:NF \g_@@_draw_path_tl { \c_space_tl }
- #1
- }
- }
-\tl_new:N \g_@@_draw_path_tl
-% \end{macrocode}
-% \end{variable}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\driver_draw_evenodd_rule:, \driver_draw_nonzero_rule:}
-% The fill rules here have to be handled as scopes.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_draw_evenodd_rule:
- { \@@_draw_scope:n { fill-rule="evenodd" } }
-\cs_new_protected:Npn \driver_draw_nonzero_rule:
- { \@@_draw_scope:n { fill-rule="nonzero" } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_draw_path:n}
-% \begin{macro}
-% {
-% \driver_draw_closepath: ,
-% \driver_draw_stroke: ,
-% \driver_draw_closestroke: ,
-% \driver_draw_fill: ,
-% \driver_draw_fillstroke: ,
-% \driver_draw_clip: ,
-% \driver_draw_discardpath:
-% }
-% \begin{variable}{\g_@@_draw_clip_bool}
-% \begin{variable}{\g_@@_draw_path_int}
-% Setting fill and stroke effects and doing clipping all has to be done using
-% scopes. This means setting up the various requirements in a shared
-% auxiliary which deals with the bits and pieces. Clipping paths are reused
-% for path drawing: not essential but avoids constructing them twice.
-% Discarding a path needs a separate function as it's not quite the same.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_draw_closepath:
- { \@@_draw_add_to_path:n { Z } }
-\cs_new_protected:Npn \@@_draw_path:n #1
- {
- \bool_if:NTF \g_@@_draw_clip_bool
- {
- \int_gincr:N \g_@@_clip_path_int
- \@@_draw_literal:x
- {
- < clipPath~id = " l3cp \int_use:N \g_@@_clip_path_int " >
- { ?nl }
- <path~d=" \g_@@_draw_path_tl "/> { ?nl }
- < /clipPath > { ? nl }
- <
- use~xlink:href =
- "\c_hash_str l3path \int_use:N \g_@@_path_int " ~
- #1
- />
- }
- \@@_draw_scope:x
- {
- clip-path =
- "url( \c_hash_str l3cp \int_use:N \g_@@_clip_path_int)"
- }
- }
- {
- \@@_draw_literal:x
- { <path ~ d=" \g_@@_draw_path_tl " ~ #1 /> }
- }
- \tl_gclear:N \g_@@_draw_path_tl
- \bool_gset_false:N \g_@@_draw_clip_bool
- }
-\int_new:N \g_@@_path_int
-\cs_new_protected:Npn \driver_draw_stroke:
- { \@@_draw_path:n { style="fill:none" } }
-\cs_new_protected:Npn \driver_draw_closestroke:
- {
- \driver_draw_closepath:
- \driver_draw_stroke:
- }
-\cs_new_protected:Npn \driver_draw_fill:
- { \@@_draw_path:n { style="stroke:none" } }
-\cs_new_protected:Npn \driver_draw_fillstroke:
- { \@@_draw_path:n { } }
-\cs_new_protected:Npn \driver_draw_clip:
- { \bool_gset_true:N \g_@@_draw_clip_bool }
-\bool_new:N \g_@@_draw_clip_bool
-\cs_new_protected:Npn \driver_draw_discardpath:
- {
- \bool_if:NT \g_@@_draw_clip_bool
- {
- \int_gincr:N \g_@@_clip_path_int
- \@@_draw_literal:x
- {
- < clipPath~id = " l3cp \int_use:N \g_@@_clip_path_int " >
- { ?nl }
- <path~d=" \g_@@_draw_path_tl "/> { ?nl }
- < /clipPath >
- }
- \@@_draw_scope:x
- {
- clip-path =
- "url( \c_hash_str l3cp \int_use:N \g_@@_clip_path_int)"
- }
- }
- \tl_gclear:N \g_@@_draw_path_tl
- \bool_gset_false:N \g_@@_draw_clip_bool
- }
-% \end{macrocode}
-% \end{variable}
-% \end{variable}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\driver_draw_dash_pattern:nn}
-% \begin{macro}{\@@_draw_dash:n}
-% \begin{macro}{\@@_draw_dash_aux:nn}
-% \begin{macro}{\driver_draw_linewidth:n}
-% \begin{macro}{\driver_draw_miterlimit:n}
-% \begin{macro}
-% {
-% \driver_draw_cap_butt:, \driver_draw_cap_round:, \driver_draw_cap_rectangle:,
-% \driver_draw_join_miter:, \driver_draw_join_round:, \driver_draw_join_bevel:
-% }
-% All of these ideas are properties of scopes in SVG. The only slight
-% complexity is converting the dash array properly (doing any required
-% maths).
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_draw_dash_pattern:nn #1#2
- {
- \use:x
- {
- \@@_draw_dash_aux:nn
- { \clist_map_function:nn {#1} \@@_draw_dash:n }
- { \dim_to_decimal:n {#2} }
- }
- }
-\cs_new:Npn \@@_draw_dash:n #1
- { , \dim_to_decimal_in_bp:n {#1} }
-\cs_new_protected:Npn \@@_draw_dash_aux:nn #1#2
- {
- \@@_draw_scope:x
- {
- stroke-dasharray =
- "
- \tl_if_empty:oTF { \use_none:n #1 }
- { none }
- { \use_none:n #1 }
- " ~
- stroke-offset=" #2 "
- }
- }
-\cs_new_protected:Npn \driver_draw_linewidth:n #1
- { \@@_draw_scope:x { stroke-width=" \dim_to_decimal:n {#1} " } }
-\cs_new_protected:Npn \driver_draw_miterlimit:n #1
- { \@@_draw_scope:x { stroke-miterlimit=" \fp_eval:n {#1} " } }
-\cs_new_protected:Npn \driver_draw_cap_butt:
- { \@@_draw_scope:n { stroke-linecap="butt" } }
-\cs_new_protected:Npn \driver_draw_cap_round:
- { \@@_draw_scope:n { stroke-linecap="round" } }
-\cs_new_protected:Npn \driver_draw_cap_rectangle:
- { \@@_draw_scope:n { stroke-linecap="square" } }
-\cs_new_protected:Npn \driver_draw_join_miter:
- { \@@_draw_scope:n { stroke-linejoin="miter" } }
-\cs_new_protected:Npn \driver_draw_join_round:
- { \@@_draw_scope:n { stroke-linejoin="round" } }
-\cs_new_protected:Npn \driver_draw_join_bevel:
- { \@@_draw_scope:n { stroke-linejoin="bevel" } }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \driver_draw_color_fill_cmyk:nnnn ,
-% \driver_draw_color_stroke_cmyk:nnnn
-% }
-% \begin{macro}
-% {
-% \driver_draw_color_fill_gray:n ,
-% \driver_draw_color_stroke_gray:n
-% }
-% \begin{macro}
-% {
-% \driver_draw_color_fill_rgb:nnn ,
-% \driver_draw_color_stroke_rgb:nnn
-% }
-% \begin{macro}{\@@_draw_color_fill:nnn}
-% SVG fill color has to be covered outside of the stack, as for
-% \texttt{dvips}. Here, we are only allowed RGB colors so there is some
-% conversion to do.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_draw_color_fill_cmyk:nnnn #1#2#3#4
- {
- \use:x
- {
- \@@_draw_color_fill:nnn
- { \fp_eval:n { -100 * ( (#1) * ( 1 - (#4) ) - 1 ) } }
- { \fp_eval:n { -100 * ( (#2) * ( 1 - (#4) ) + #4 - 1 ) } }
- { \fp_eval:n { -100 * ( (#3) * ( 1 - (#4) ) + #4 - 1 ) } }
- }
- }
-\cs_new_eq:NN \driver_draw_color_stroke_cmyk:nnnn \driver_color_cmyk:nnnn
-\cs_new_protected:Npn \driver_draw_color_fill_gray:n #1
- {
- \use:x
- {
- \@@_draw_color_gray_aux:n
- { \fp_eval:n { 100 * (#1) } }
- }
- }
-\cs_new_protected:Npn \@@_draw_color_gray_aux:n #1
- { \@@_draw_color_fill:nnn {#1} {#1} {#1} }
-\cs_new_eq:NN \driver_draw_color_stroke_gray:n \driver_color_gray:n
-\cs_new_protected:Npn \driver_draw_color_fill_rgb:nnn #1#2#3
- {
- \use:x
- {
- \@@_draw_color_fill:nnn
- { \fp_eval:n { 100 * (#1) } }
- { \fp_eval:n { 100 * (#2) } }
- { \fp_eval:n { 100 * (#3) } }
- }
- }
-\cs_new_protected:Npn \@@_draw_color_fill:nnn #1#2#3
- {
- \@@_draw_scope:x
- {
- fill =
- "
- rgb
- (
- #1 \c_percent_str ,
- #2 \c_percent_str ,
- #3 \c_percent_str
- )
- "
- }
- }
-\cs_new_eq:NN \driver_draw_color_stroke_rgb:nnn \driver_color_rgb:nnn
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\driver_draw_cm:nnnn}
-% The four arguments here are floats (the affine matrix), the last
-% two are a displacement vector.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_draw_cm:nnnn #1#2#3#4
- {
- \@@_draw_scope:n
- {
- transform =
- "
- matrix
- (
- \fp_eval:n {#1} , \fp_eval:n {#2} ,
- \fp_eval:n {#3} , \fp_eval:n {#4} ,
- 0pt , 0pt
- )
- "
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\driver_draw_box_use:Nnnnn}
-% No special savings can be made here: simply displace the box inside
-% a scope. As there is nothing to re-box, just make the box passed of
-% zero size.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_draw_box_use:Nnnnn #1#2#3#4#5#6#7
- {
- \@@_scope_begin:
- \driver_draw_cm:nnnn {#2} {#3} {#4} {#5}
- \@@_literal_svg:n
- {
- < g~
- stroke="none"~
- transform="scale(-1,1)~translate({?x},{?y})~scale(-1,-1)"
- >
- }
- \box_set_wd:Nn #1 { 0pt }
- \box_set_ht:Nn #1 { 0pt }
- \box_set_dp:Nn #1 { 0pt }
- \box_use:N #1
- \@@_literal_svg:n { </g> }
- \@@_scope_end:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</dvisvgm>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%</initex|package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3drivers-graphics.dtx b/Master/texmf-dist/source/latex/l3kernel/l3drivers-graphics.dtx
deleted file mode 100644
index 86bfcfeb1f7..00000000000
--- a/Master/texmf-dist/source/latex/l3kernel/l3drivers-graphics.dtx
+++ /dev/null
@@ -1,611 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3drivers-graphics.dtx
-%
-% Copyright (C) 2019 The LaTeX3 Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \textsf{l3drivers-graphics} package\\ Driver graphics support^^A
-% }
-%
-% \author{^^A
-% The \LaTeX3 Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2019-05-28}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3drivers-graphics} Implementation}
-%
-% \begin{macrocode}
-%<*initex|package>
-%<@@=driver>
-% \end{macrocode}
-%
-% \subsection{\texttt{dvips} driver}
-%
-% \begin{macrocode}
-%<*dvips>
-% \end{macrocode}
-%
-% \begin{macro}{\driver_graphics_getbb_eps:n}
-% Simply use the generic function.
-% \begin{macrocode}
-%<*initex>
-\use:n
-%</initex>
-%<*package>
-\AtBeginDocument
-%</package>
- { \cs_new_eq:NN \driver_graphics_getbb_eps:n \graphics_read_bb:n }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\driver_graphics_include_eps:n}
-% The special syntax is relatively clear here: remember we need PostScript
-% sizes here.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_graphics_include_eps:n #1
- {
- \@@_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
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</dvips>
-% \end{macrocode}
-%
-% \subsection{\texttt{pdfmode} driver}
-%
-% \begin{macrocode}
-%<*pdfmode>
-% \end{macrocode}
-%
-% \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
-% occurs as the graphic dictionary approach means they are read as part of
-% the bounding box operation. As such, it is easier to track additional
-% attributes using a dedicated |tl| rather than build up the same data
-% twice.
-% \begin{macrocode}
-\tl_new:N \l_@@_graphics_attr_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}
-% {
-% \driver_graphics_getbb_jpg:n,
-% \driver_graphics_getbb_pdf:n,
-% \driver_graphics_getbb_png:n
-% }
-% \begin{macro}
-% {\@@_graphics_getbb_auxi:n, \@@_graphics_getbb_auxii:n}
-% 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
-% to do in terms of auxiliaries. The key here is to notice that we need
-% two forms of the attributes: a \enquote{short} set to allow us to
-% track for caching, and the full form to pass to the primitive.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_graphics_getbb_jpg:n #1
- {
- \int_zero:N \l_graphics_page_int
- \tl_clear:N \l_graphics_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
- { :I }
- }
- \tl_clear:N \l_@@_graphics_attr_tl
- \@@_graphics_getbb_auxi:n {#1}
- }
-\cs_new_eq:NN \driver_graphics_getbb_png:n \driver_graphics_getbb_jpg:n
-\cs_new_protected:Npn \driver_graphics_getbb_pdf:n #1
- {
- \tl_clear:N \l_graphics_decodearray_tl
- \bool_set_false:N \l_graphics_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 }
- }
- \@@_graphics_getbb_auxi:n {#1}
- }
-\cs_new_protected:Npn \@@_graphics_getbb_auxi:n #1
- {
- \graphics_bb_restore:xF { #1 \l_@@_graphics_attr_tl }
- { \@@_graphics_getbb_auxii:n {#1} }
- }
-% \begin{macrocode}
-% 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.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_graphics_getbb_auxii: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 }
- {
- attr ~
- {
- \tl_if_empty:NF \l_graphics_decodearray_tl
- { /Decode~[ \l_graphics_decodearray_tl ] }
- \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 }
- {#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 }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \driver_graphics_include_jpg:n,
-% \driver_graphics_include_pdf:n,
-% \driver_graphics_include_png:n
-% }
-% Images are already loaded for the measurement part of the code, so
-% inclusion is straight-forward, with only any attributes to worry about. The
-% latter carry through from determination of the bounding box.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_graphics_include_jpg:n #1
- {
- \tex_pdfrefximage:D
- \int_use:c { c_@@_graphics_ #1 \l_@@_graphics_attr_tl _int }
- }
-\cs_new_eq:NN \driver_graphics_include_pdf:n \driver_graphics_include_jpg:n
-\cs_new_eq:NN \driver_graphics_include_png:n \driver_graphics_include_jpg:n
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\driver_graphics_getbb_eps:n}
-% \begin{macro}{\@@_graphics_getbb_eps:nm}
-% \begin{macro}{\driver_graphics_include_eps:n}
-% \begin{variable}{\l_@@_dir_str, \l_@@_name_str, \l_@@_ext_str}
-% EPS graphics may be included in \texttt{pdfmode} by conversion to
-% PDF: this requires restricted shell escape. Modelled on the \pkg{epstopdf}
-% \LaTeXe{} package, but simplified, conversion takes place here if we have
-% shell access.
-% \begin{macrocode}
-\sys_if_shell:T
- {
- \str_new:N \l_@@_dir_str
- \str_new:N \l_@@_name_str
- \str_new:N \l_@@_ext_str
- \cs_new_protected:Npn \driver_graphics_getbb_eps:n #1
- {
- \file_parse_full_name:nNNN {#1}
- \l_@@_dir_str
- \l_@@_name_str
- \l_@@_ext_str
- \exp_args:Nx \@@_graphics_getbb_eps:nn
- {
- \l_@@_name_str - \str_tail:N \l_@@_ext_str
- -converted-to.pdf
- }
- {#1}
- }
- \cs_new_protected:Npn \@@_graphics_getbb_eps:nn #1#2
- {
- \file_compare_timestamp:nNnT {#2} > {#1}
- {
- \sys_shell_now:n
- { repstopdf ~ #2 ~ #1 }
- }
- \tl_set:Nn \l_graphics_name_tl {#1}
- \driver_graphics_getbb_pdf:n {#1}
- }
- \cs_new_protected:Npn \driver_graphics_include_eps:n #1
- {
- \file_parse_full_name:nNNN {#1}
- \l_@@_dir_str \l_@@_name_str \l_@@_ext_str
- \exp_args:Nx \driver_graphics_include_pdf:n
- {
- \l_@@_name_str - \str_tail:N \l_@@_ext_str
- -converted-to.pdf
- }
- }
- }
-% \end{macrocode}
-% \end{variable}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macrocode}
-%</pdfmode>
-% \end{macrocode}
-%
-% \subsection{\texttt{dvipdfmx} driver}
-%
-% \begin{macrocode}
-%<*dvipdfmx|xdvipdfmx>
-% \end{macrocode}
-%
-% \begin{macro}
-% {
-% \driver_graphics_getbb_eps:n, \driver_graphics_getbb_jpg:n,
-% \driver_graphics_getbb_pdf:n, \driver_graphics_getbb_png:n
-% }
-% Simply use the generic functions: only for \texttt{dvipdfmx} in the
-% extraction cases.
-% \begin{macrocode}
-%<*initex>
-\use:n
-%</initex>
-%<*package>
-\AtBeginDocument
-%</package>
- { \cs_new_eq:NN \driver_graphics_getbb_eps:n \graphics_read_bb:n }
-%<*dvipdfmx>
-\cs_new_protected:Npn \driver_graphics_getbb_jpg: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 \driver_graphics_getbb_png:n \driver_graphics_getbb_jpg:n
-\cs_new_protected:Npn \driver_graphics_getbb_pdf:n #1
- {
- \tl_clear:N \l_graphics_decodearray_tl
- \bool_set_false:N \l_graphics_interpolate_bool
- \graphics_extract_bb:n {#1}
- }
-%</dvipdfmx>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}{\g_@@_graphics_int}
-% Used to track the object number associated with each graphic.
-% \begin{macrocode}
-\int_new:N \g_@@_graphics_int
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}
-% {
-% \driver_graphics_include_eps:n, \driver_graphics_include_jpg:n,
-% \driver_graphics_include_pdf:n, \driver_graphics_include_png:n
-% }
-% \begin{macro}{\@@_graphics_include_auxi:nn}
-% \begin{macro}{\@@_graphics_include_auxii:nnn, \@@_graphics_include_auxii:xnn}
-% \begin{macro}{\@@_graphics_include_auxiii:nnn}
-% The special syntax depends on the file type. There is a difference in
-% how PDF graphics are best handled between |dvipdfmx| and |xdvipdfmx|: for
-% the latter it is better to use the primitive route. The relevant code for
-% that is included later in this file.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_graphics_include_eps:n #1
- {
- \@@_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
- }
- }
-\cs_new_protected:Npn \driver_graphics_include_jpg:n #1
- { \@@_graphics_include_auxi:nn {#1} { image } }
-\cs_new_eq:NN \driver_graphics_include_png:n \driver_graphics_include_jpg:n
-%<*dvipdfmx>
-\cs_new_protected:Npn \driver_graphics_include_pdf:n #1
- { \@@_graphics_include_auxi:nn {#1} { epdf } }
-%</dvipdfmx>
-% \end{macrocode}
-% Graphic inclusion is set up to use the fact that each image is stored in
-% the PDF as an XObject. This means that we can include repeated images
-% only once and refer to them. To allow that, track the nature of each
-% image: much the same as for the direct PDF mode case.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_graphics_include_auxi:nn #1#2
- {
- \@@_graphics_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
- { :I }
- }
- {#1} {#2}
- }
-\cs_new_protected:Npn \@@_graphics_include_auxii:nnn #1#2#3
- {
- \int_if_exist:cTF { c_@@_graphics_ #2#1 _int }
- {
- \@@_literal:x
- { pdf:usexobj~@graphic \int_use:c { c_@@_graphics_ #2#1 _int } }
- }
- { \@@_graphics_include_auxiii:nnn {#2} {#1} {#3} }
- }
-\cs_generate_variant:Nn \@@_graphics_include_auxii:nnn { x }
-% \end{macrocode}
-% Inclusion using the specials is relatively straight-forward, but there
-% is one wrinkle. To get the |pagebox| correct for PDF graphics in all cases,
-% it is necessary to provide both that information and the |bbox| argument:
-% odd things happen otherwise!
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_graphics_include_auxiii:nnn #1#2#3
- {
- \int_gincr:N \g_@@_graphics_int
- \int_const:cn { c_@@_graphics_ #1#2 _int } { \g_@@_graphics_int }
- \@@_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
- {
- 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
- }
- (#1)
- \bool_lazy_or:nnT
- { \l_graphics_interpolate_bool }
- { ! \tl_if_empty_p:N \l_graphics_decodearray_tl }
- {
- <<
- \tl_if_empty:NF \l_graphics_decodearray_tl
- { /Decode~[ \l_graphics_decodearray_tl ] }
- \bool_if:NT \l_graphics_interpolate_bool
- { /Interpolate~true> }
- >>
- }
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macrocode}
-%</dvipdfmx|xdvipdfmx>
-% \end{macrocode}
-%
-% \subsection{\texttt{xdvipdfmx} driver}
-%
-% \begin{macrocode}
-%<*xdvipdfmx>
-% \end{macrocode}
-%
-% \subsubsection{Images}
-%
-% \begin{macro}
-% {
-% \driver_graphics_getbb_jpg:n,
-% \driver_graphics_getbb_pdf:n,
-% \driver_graphics_getbb_png:n
-% }
-% \begin{macro}{\@@_graphics_getbb_auxi:nN}
-% \begin{macro}{\@@_graphics_getbb_auxii:nnN, \@@_graphics_getbb_auxii:VnN}
-% \begin{macro}{\@@_graphics_getbb_auxiii:nNnn}
-% \begin{macro}{\@@_graphics_getbb_auxiv:nnNnn, \@@_graphics_getbb_auxiv:VnNnn}
-% \begin{macro}{\@@_graphics_getbb_auxv:nNnn, \@@_graphics_getbb_auxv:nNnn}
-% \begin{macro}[EXP]{\@@_graphics_getbb_pagebox:w}
-% For \texttt{xdvipdfmx}, there are two primitives that allow us to obtain
-% the bounding box without needing \texttt{extractbb}. The only complexity
-% is passing the various minor variations to a common core process. The
-% \XeTeX{} primitive omits the text |box| from the page box specification,
-% so there is also some \enquote{trimming} to do here.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_graphics_getbb_jpg:n #1
- {
- \int_zero:N \l_graphics_page_int
- \tl_clear:N \l_graphics_pagebox_tl
- \@@_graphics_getbb_auxi:nN {#1} \tex_XeTeXpicfile:D
- }
-\cs_new_eq:NN \driver_graphics_getbb_png:n \driver_graphics_getbb_jpg:n
-\cs_new_protected:Npn \driver_graphics_getbb_pdf:n #1
- {
- \tl_clear:N \l_graphics_decodearray_tl
- \bool_set_false:N \l_graphics_interpolate_bool
- \@@_graphics_getbb_auxi:nN {#1} \tex_XeTeXpdffile:D
- }
-\cs_new_protected:Npn \@@_graphics_getbb_auxi:nN #1#2
- {
- \int_compare:nNnTF \l_graphics_page_int > 1
- { \@@_graphics_getbb_auxii:VnN \l_graphics_page_int {#1} #2 }
- { \@@_graphics_getbb_auxiii:nNnn {#1} #2 { :P 1 } { page 1 } }
- }
-\cs_new_protected:Npn \@@_graphics_getbb_auxii:nnN #1#2#3
- { \@@_graphics_getbb_auxiii:nNnn {#2} #3 { :P #1 } { page #1 } }
-\cs_generate_variant:Nn \@@_graphics_getbb_auxii:nnN { V }
-\cs_new_protected:Npn \@@_graphics_getbb_auxiii:nNnn #1#2#3#4
- {
- \tl_if_empty:NTF \l_graphics_pagebox_tl
- { \@@_graphics_getbb_auxiv:VnNnn \l_graphics_pagebox_tl }
- { \@@_graphics_getbb_auxv:nNnn }
- {#1} #2 {#3} {#4}
- }
-\cs_new_protected:Npn \@@_graphics_getbb_auxiv:nnNnn #1#2#3#4#5
- {
- \use:x
- {
- \@@_graphics_getbb_auxv:nNnn {#2} #3 { : #1 #4 }
- { #5 ~ \@@_graphics_getbb_pagebox:w #1 }
- }
- }
-\cs_generate_variant:Nn \@@_graphics_getbb_auxiv:nnNnn { V }
-\cs_new_protected:Npn \@@_graphics_getbb_auxv:nNnn #1#2#3#4
- {
- \graphics_bb_restore:nF {#1#3}
- { \@@_graphics_getbb_auxvi:nNnn {#1} #2 {#3} {#4} }
- }
-\cs_new_protected:Npn \@@_graphics_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}
- }
-\cs_new:Npn \@@_graphics_getbb_pagebox:w #1 box {#1}
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\driver_graphics_include_pdf:n}
-% \begin{macro}{\@@_graphics_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
-% stage that there must be some valid setting for \cs{l_graphics_pagebox_tl}.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_graphics_include_pdf:n #1
- {
- \tex_XeTeXpdffile:D
- \@@_graphics_include_pdf_quote:w #1 "#1" \q_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_getbb_pagebox:w \l_graphics_pagebox_tl
- }
-\cs_new:Npn \@@_graphics_include_pdf_quote:w #1 " #2 " #3 \q_stop
- { " #2 " }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macrocode}
-%</xdvipdfmx>
-% \end{macrocode}
-%
-% \subsection{\texttt{dvisvgm} driver}
-%
-% \begin{macrocode}
-%<*dvisvgm>
-% \end{macrocode}
-%
-% \begin{macro}{\driver_graphics_getbb_png:n, \driver_graphics_getbb_jpg:n}
-% These can be included by extracting the bounding box data.
-% \begin{macrocode}
-%<*initex>
-\use:n
-%</initex>
-%<*package>
-\AtBeginDocument
-%</package>
- {
- \cs_new_eq:NN \driver_graphics_getbb_png:n \graphics_extract_bb:n
- \cs_new_eq:NN \driver_graphics_getbb_jpg:n \graphics_extract_bb:n
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\driver_graphics_include_png:n, \driver_graphics_include_jpg:n}
-% \begin{macro}{\@@_graphics_include_bitmap_quote:w}
-% The driver here has built-in support for basic graphic inclusion (see
-% \texttt{dvisvgm.def} for a more complex approach, needed if clipping,
-% \emph{etc.}, is covered at the graphic driver level). The only issue is
-% that |#1| must be quote-corrected. The \texttt{dvisvgm:img} operation
-% quotes the file name, but if it is already quoted (contains spaces)
-% then we have an issue: we simply strip off any quotes as a result.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_graphics_include_png:n #1
- {
- \@@_literal:x
- {
- dvisvgm:img~
- \dim_to_decimal:n { \l_graphics_ury_dim } ~
- \dim_to_decimal:n { \l_graphics_ury_dim } ~
- \@@_graphics_include_bitmap_quote:w #1 " #1 " \q_stop
- }
- }
-\cs_new_eq:NN \driver_graphics_include_jpg:n \driver_graphics_include_png:n
-\cs_new:Npn \@@_graphics_include_bitmap_quote:w #1 " #2 " #3 \q_stop
- { " #2 " }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macrocode}
-%</dvisvgm>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%</initex|package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3drivers-pdf.dtx b/Master/texmf-dist/source/latex/l3kernel/l3drivers-pdf.dtx
deleted file mode 100644
index 62a3bea1119..00000000000
--- a/Master/texmf-dist/source/latex/l3kernel/l3drivers-pdf.dtx
+++ /dev/null
@@ -1,1934 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3drivers-pdf.dtx
-%
-% Copyright (C) 2011-2019 The LaTeX3 Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \textsf{l3drivers-pdf} package\\ Driver PDF features^^A
-% }
-%
-% \author{^^A
-% The \LaTeX3 Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2019-05-28}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3drivers-pdf} Implementation}
-%
-% \begin{macrocode}
-%<*initex|package>
-%<@@=driver>
-% \end{macrocode}
-%
-% Setting up PDF resources is a complex area with only limited documentation
-% in the engine manuals. The following code builds heavily on existing ideas
-% from \pkg{hyperref} work by Sebastian Rahtz and Heiko Oberdiek, and
-% significant contributions by Alexander Grahn, in addition to the specific
-% code referenced a various points.
-%
-% \subsection{Shared code}
-%
-% A very small number of items that belong at the driver level but which
-% are common to all drivers.
-%
-% \subsection{\texttt{dvips} driver}
-%
-% \begin{macrocode}
-%<*dvips>
-% \end{macrocode}
-%
-% \begin{macro}{\@@_pdfmark:n, \@@_pdfmark:x}
-% Used often enough it should be a separate function.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_pdfmark:n #1
- { \@@_postscript:n { mark #1 ~ pdfmark } }
-\cs_generate_variant:Nn \@@_pdfmark:n { x }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Catalogue entries}
-%
-% \begin{macro}{\driver_pdf_catalog_gput:nn, \driver_pdf_info_gput:nn}
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_pdf_catalog_gput:nn #1#2
- { \@@_pdfmark:n { { Catalog } << /#1 ~ #2 >> /PUT } }
-\cs_new_protected:Npn \driver_pdf_info_gput:nn #1#2
- { \@@_pdfmark:n { /#1 ~ #2 /DOCINFO } }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Objects}
-%
-% \begin{variable}{\g_@@_pdf_object_int, \g_@@_pdf_object_prop}
-% For tracking objects to allow finalisation.
-% \begin{macrocode}
-\int_new:N \g_@@_pdf_object_int
-\prop_new:N \g_@@_pdf_object_prop
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\driver_pdf_object_new:nn}
-% \begin{macro}[EXP]{\driver_pdf_object_ref:n}
-% Tracking objects is similar to \texttt{dvipdfmx}.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_pdf_object_new:nn #1#2
- {
- \int_gincr:N \g_@@_pdf_object_int
- \int_const:cn
- { c_@@_pdf_object_ \tl_to_str:n {#1} _int }
- { \g_@@_pdf_object_int }
- \prop_gput:Nnn \g_@@_pdf_object_prop {#1} {#2}
- }
-\cs_new:Npn \driver_pdf_object_ref:n #1
- { { driver.obj \int_use:c { c_@@_pdf_object_ \tl_to_str:n {#1} _int } } }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\driver_pdf_object_write:nn}
-% \begin{macro}
-% {
-% \@@_pdf_object_write_array:nn ,
-% \@@_pdf_object_write_dict:nn ,
-% \@@_pdf_object_write_stream:nn
-% }
-% \begin{macro}{\@@_pdf_object_write_stream:nnn}
-% This is where we choose the actual type: some work to get things
-% right.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_pdf_object_write:nn #1#2
- {
- \@@_pdfmark:x
- {
- /_objdef ~ \driver_pdf_object_ref:n {#1}
- /type
- \str_case_e:nn
- { \prop_item:Nn \g_@@_pdf_object_prop {#1} }
- {
- { array } { /array }
- { dict } { /dict }
- { fstream } { /stream }
- { stream } { /stream }
- }
- /OBJ
- }
- \use:c
- { @@_pdf_object_write_ \prop_item:Nn \g_@@_pdf_object_prop {#1} :nn }
- {#1} {#2}
- }
-\cs_new_protected:Npn \@@_pdf_object_write_array:nn #1#2
- {
- \@@_pdfmark:x
- {
- \driver_pdf_object_ref:n {#1}
- [ ~ \exp_not:n {#2} ~ ] ~ /PUTINTERVAL
- }
- }
-\cs_new_protected:Npn \@@_pdf_object_write_dict:nn #1#2
- {
- \@@_pdfmark:x
- {
- \driver_pdf_object_ref:n {#1}
- << \exp_not:n {#2} >> /PUT
- }
- }
-\cs_new_protected:Npn \@@_pdf_object_write_stream:nn #1#2
- {
- \exp_args:Nx
- \@@_pdf_object_write_stream:nnn
- { \driver_pdf_object_ref:n {#1} }
- #2
- }
-\cs_new_protected:Npn \@@_pdf_object_write_stream:nnn #1#2#3
- {
- \@@_postscript:n
- {
- [nobreak]
- mark ~ #1 ~ ( #3 ) /PUT ~ pdfmark ~
- mark ~ #1 ~ << #2 >> /PUT ~ pdfmark
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsubsection{Annotations}
-%
-% In \texttt{dvips}, annotations have to be constructed manually. As such,
-% we need the object code above for some definitions.
-%
-% \begin{macro}{driver.globaldict}
-% A small global dictionary for driver use.
-% \begin{macrocode}
-\@@_postscript_header:n
- {
- true ~ setglobal ~
- /driver.globaldict ~ 4 ~ dict ~ def ~
- false ~ setglobal
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% driver.cvs ,
-% driver.dvi.pt ,
-% driver.pt.dvi ,
-% driver.rect.ht
-% }
-% Small utilities for PostScript manipulations. Conversion to DVI dimensions
-% is done here to allow for |Resolution|. The total height of a rectangle
-% (an array) needs a little maths, in contrast to simply extracting a value.
-% \begin{macrocode}
-\@@_postscript_header:n
- {
- /driver.cvs { 65534 ~ string ~ cvs } def
- /driver.dvi.pt { 72.27 ~ mul ~ Resolution ~ div } def
- /driver.pt.dvi { 72.27 ~ div ~ Resolution ~ mul } def
- /driver.rect.ht { dup ~ 1 ~ get ~ neg ~ exch ~ 3 ~ get ~ add } def
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{driver.linkmargin, driver.linkdp.pad, driver.linkht.pad}
-% Settings which are defined up-front in |SDict|.
-% \begin{macrocode}
-\@@_postscript_header:n
- {
- /driver.linkmargin { 1 ~ driver.pt.dvi } def
- /driver.linkdp.pad { 0 } def
- /driver.linkht.pad { 0 } def
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% driver.rect ,
-% driver.save.ll ,
-% driver.save.ur ,
-% driver.save.linkll ,
-% driver.save.linkur ,
-% driver.llx ,
-% driver.lly ,
-% driver.urx ,
-% driver.ury
-% }
-% Functions for marking the limits of an annotation/link, plus drawing the
-% border. We separate links for generic annotations to support adding a
-% margin and setting a minimal size.
-% \begin{macrocode}
-\@@_postscript_header:n
- {
- /driver.rect
- { /Rect [ driver.llx ~ driver.lly ~ driver.urx ~ driver.ury ] } def
- /driver.save.ll
- {
- currentpoint
- /driver.lly ~ exch ~ def
- /driver.llx ~ exch ~ def
- }
- def
- /driver.save.ur
- {
- currentpoint
- /driver.ury ~ exch ~ def
- /driver.urx ~ exch ~ def
- }
- def
- /driver.save.linkll
- {
- currentpoint ~
- driver.linkmargin ~ add ~
- driver.linkdp.pad ~ add
- /driver.lly ~ exch ~ def ~
- driver.linkmargin ~ sub
- /driver.llx ~ exch ~ def
- }
- def
- /driver.save.linkur
- {
- currentpoint ~
- driver.linkmargin ~ sub ~
- driver.linkht.pad ~ sub
- /driver.ury ~ exch ~ def ~
- driver.linkmargin ~ add
- /driver.urx ~ exch ~ def
- }
- def
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% driver.dest.anchor ,
-% driver.dest.x ,
-% driver.dest.y ,
-% driver.dest.point ,
-% driver.dest2device ,
-% driver.dev.x ,
-% driver.dev.y ,
-% driver.tmpa ,
-% driver.tmpb ,
-% driver.tmpc ,
-% driver.tmpd
-% }
-% For finding the anchor point of a destination link. We make the use case
-% a separate function as it comes up a lot, and as this makes it easier to
-% adjust if we need additional effects. We also need a more complex approach
-% to convert a co-ordinate pair correctly when defining a rectangle: this
-% can otherwise be out when using a landscape page. (Thanks to Alexander
-% Grahn for the approach here.)
-% \begin{macrocode}
-\@@_postscript_header:n
- {
- /driver.dest.anchor
- {
- currentpoint ~ exch ~
- driver.dvi.pt ~ 72 ~ add ~
- /driver.dest.x ~ exch ~ def ~
- driver.dvi.pt ~
- vsize ~ 72 ~ sub ~ exch ~ sub ~
- /driver.dest.y ~ exch ~ def
- }
- def
- /driver.dest.point
- { driver.dest.x ~ driver.dest.y } def
- /driver.dest2device
- {
- /driver.dest.y ~ exch ~ def
- /driver.dest.x ~ exch ~ def ~
- matrix ~ currentmatrix ~
- matrix ~ defaultmatrix ~
- matrix ~ invertmatrix ~
- matrix ~ concatmatrix ~
- cvx ~ exec
- /driver.dev.y ~ exch ~ def
- /driver.dev.x ~ exch ~ def
- /driver.tmpd ~ exch ~ def
- /driver.tmpc ~ exch ~ def
- /driver.tmpb ~ exch ~ def
- /driver.tmpa ~ exch ~ def ~
- driver.dest.x ~ driver.tmpa ~ mul ~
- driver.dest.y ~ driver.tmpc ~ mul ~ add ~
- driver.dev.x ~ add ~
- driver.dest.x ~ driver.tmpb ~ mul ~
- driver.dest.y ~ driver.tmpd ~ mul ~ add ~
- driver.dev.y ~ add
- }
- def
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% driver.bordertracking ,
-% driver.bordertracking.begin ,
-% driver.bordertracking.end ,
-% driver.leftboundary ,
-% driver.rightboundary ,
-% driver.brokenlink.rect ,
-% driver.brokenlink.skip ,
-% driver.brokenlink.dict ,
-% driver.bordertracking.endpage ,
-% driver.bordertracking.continue ,
-% driver.originx ,
-% driver.originy
-% }
-% To know where a breakable link can go, we need to track the boundary
-% rectangle. That can be done by hooking into |a| and |x| operations:
-% those names have to be retained. The boundary is stored at the end of
-% the operation. Special effort is needed at the start and end of pages
-% (or rather galleys), such that everything works properly.
-% \begin{macrocode}
-\@@_postscript_header:n
- {
- /driver.bordertracking ~ false ~ def
- /driver.bordertracking.begin
- {
- SDict ~ /driver.bordertracking ~ true ~ put ~
- SDict ~ /driver.leftboundary ~ undef ~
- SDict ~ /driver.rightboundary ~ undef ~
- /a ~ where
- {
- /a
- {
- currentpoint ~ pop ~
- SDict /driver.rightboundary ~ known ~ dup
- {
- SDict /driver.rightboundary ~ get ~ 2 ~ index ~ lt
- { not }
- if
- }
- if
- { pop }
- { SDict ~ exch /driver.rightboundary ~ exch ~ put }
- ifelse ~
- moveto ~
- currentpoint ~ pop ~
- SDict /driver.leftboundary ~ known ~ dup
- {
- SDict /driver.leftboundary ~ get ~ 2 ~ index ~ gt
- { not }
- if
- }
- if
- { pop }
- { SDict ~ exch /driver.leftboundary ~ exch ~ put }
- ifelse
- }
- put
- }
- if
- }
- def
- /driver.bordertracking.end
- {
- /a ~ where { /a { moveto } put } if
- /x ~ where { /x { 0 ~ exch ~ rmoveto } put } if ~
- SDict /driver.leftboundary ~ known
- { driver.outerbox ~ 0 ~ driver.leftboundary ~ put }
- if ~
- SDict /driver.rightboundary ~ known
- { driver.outerbox ~ 2 ~ driver.rightboundary ~ put }
- if ~
- SDict /driver.bordertracking ~ false ~ put
- }
- def
- /driver.bordertracking.endpage
- {
- driver.bordertracking
- {
- driver.bordertracking.end ~
- true ~ setglobal ~
- driver.globaldict
- /driver.brokenlink.rect [ driver.outerbox ~ aload ~ pop ] put ~
- driver.globaldict
- /driver.brokenlink.skip ~ driver.baselineskip ~ put ~
- driver.globaldict
- /driver.brokenlink.dict ~
- driver.link.dict ~ driver.cvs ~ put ~
- false ~ setglobal ~
- mark ~ driver.link.dict ~ cvx ~ exec ~ /Rect
- [
- driver.llx ~
- driver.lly ~
- driver.outerbox ~ 2 ~ get ~ driver.linkmargin ~ add ~
- currentpoint ~ exch ~ pop ~
- driver.outerbox ~ driver.rect.ht ~ sub ~ driver.linkmargin ~ sub
- ]
- /ANN ~ driver.pdfmark
- }
- if
- }
- def
- /driver.bordertracking.continue
- {
- /driver.link.dict ~ driver.globaldict
- /driver.brokenlink.dict ~ get ~ def
- /driver.outerbox ~ driver.globaldict
- /driver.brokenlink.rect ~ get ~ def
- /driver.baselineskip ~ driver.globaldict
- /driver.brokenlink.skip ~ get ~ def ~
- driver.globaldict ~ dup ~ dup
- /driver.brokenlink.dict ~ undef
- /driver.brokenlink.skip ~ undef
- /driver.brokenlink.rect ~ undef ~
- currentpoint
- /driver.originy ~ exch ~ def
- /driver.originx ~ exch ~ def
- /a ~ where
- {
- /a
- {
- moveto ~
- SDict ~
- begin ~
- currentpoint ~ driver.originy ~ ne ~ exch ~
- driver.originx ~ ne ~ or
- {
- driver.save.linkll
- /driver.lly ~
- driver.lly ~ driver.outerbox ~ 1 ~ get ~ sub ~ def ~
- driver.bordertracking.begin
- }
- if ~
- end
- }
- put
- }
- if
- /x ~ where
- {
- /x
- {
- 0 ~ exch ~ rmoveto ~
- SDict~
- begin ~
- currentpoint ~
- driver.originy ~ ne ~ exch ~ driver.originx ~ ne ~ or
- {
- driver.save.linkll
- /driver.lly ~
- driver.lly ~ driver.outerbox ~ 1 ~ get ~ sub ~ def ~
- driver.bordertracking.begin
- }
- if ~
- end
- }
- put
- }
- if
- }
- def
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% driver.breaklink ,
-% driver.breaklink.write ,
-% driver.count ,
-% driver.currentrect
-% }
-% Dealing with link breaking itself has multiple stage. The first step is to
-% find the |Rect| entry in the dictionary, looping over key--value pairs.
-% The first line is handled first, adjusting the rectangle to stay inside the
-% text area. The second phase is a loop over the height of the bulk of the
-% link area, done on the basis of a number of baselines. Finally, the end of
-% the link area is tidied up, again from the boundary of the text area.
-% \begin{macrocode}
-\@@_postscript_header:n
- {
- /driver.breaklink
- {
- pop ~
- counttomark ~ 2 ~ mod ~ 0 ~ eq
- {
- counttomark /driver.count ~ exch ~ def
- {
- driver.count ~ 0 ~ eq { exit } if ~
- counttomark ~ 2 ~ roll ~
- 1 ~ index ~ /Rect ~ eq
- {
- dup ~ 4 ~ array ~ copy ~
- dup ~ dup ~
- 1 ~ get ~
- driver.outerbox ~ driver.rect.ht ~
- driver.linkmargin ~ 2 ~ mul ~ add ~ sub ~
- 3 ~ exch ~ put ~
- dup ~
- driver.outerbox ~ 2 ~ get ~
- driver.linkmargin ~ add ~
- 2 ~ exch ~ put ~
- dup ~ dup ~
- 3 ~ get ~
- driver.outerbox ~ driver.rect.ht ~
- driver.linkmargin ~ 2 ~ mul ~ add ~ add ~
- 1 ~ exch ~ put
- /driver.currentrect ~ exch ~ def ~
- driver.breaklink.write
- {
- driver.currentrect ~
- dup ~
- driver.outerbox ~ 0 ~ get ~
- driver.linkmargin ~ sub ~
- 0 ~ exch ~ put ~
- dup ~
- driver.outerbox ~ 2 ~ get ~
- driver.linkmargin ~ add ~
- 2 ~ exch ~ put ~
- dup ~ dup ~
- 1 ~ get ~
- driver.baselineskip ~ add ~
- 1 ~ exch ~ put ~
- dup ~ dup ~
- 3 ~ get ~
- driver.baselineskip ~ add ~
- 3 ~ exch ~ put ~
- /driver.currentrect ~ exch ~ def ~
- driver.breaklink.write
- }
- 1 ~ index ~ 3 ~ get ~
- driver.linkmargin ~ 2 ~ mul ~ add ~
- driver.outerbox ~ driver.rect.ht ~ add ~
- 2 ~ index ~ 1 ~ get ~ sub ~
- driver.baselineskip ~ div ~ round ~ cvi ~ 1 ~ sub ~
- exch ~
- repeat ~
- driver.currentrect ~
- dup ~
- driver.outerbox ~ 0 ~ get ~
- driver.linkmargin ~ sub ~
- 0 ~ exch ~ put ~
- dup ~ dup ~
- 1 ~ get ~
- driver.baselineskip ~ add ~
- 1 ~ exch ~ put ~
- dup ~ dup ~
- 3 ~ get ~
- driver.baselineskip ~ add ~
- 3 ~ exch ~ put ~
- dup ~ 2 ~ index ~ 2 ~ get ~ 2 ~ exch ~ put
- /driver.currentrect ~ exch ~ def ~
- driver.breaklink.write ~
- SDict /driver.pdfmark.good ~ false ~ put ~
- exit
- }
- { driver.count ~ 2 ~ sub /driver.count ~ exch ~ def }
- ifelse
- }
- loop
- }
- if
- /ANN
- }
- def
- /driver.breaklink.write
- {
- counttomark ~ 1 ~ sub ~
- index /_objdef ~ eq
- {
- counttomark ~ -2 ~ roll ~
- dup ~ wcheck ~
- {
- readonly ~
- counttomark ~ 2 ~ roll
- }
- { pop ~ pop }
- ifelse
- }
- if ~
- counttomark ~ 1 ~ add ~ copy ~
- pop ~ driver.currentrect
- /ANN ~ pdfmark
- }
- def
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% driver.pdfmark ,
-% driver.pdfmark.good ,
-% driver.outerbox ,
-% driver.baselineskip ,
-% driver.pdfmark.dict
-% }
-% The business end of breaking links starts by hooking into |pdfmarks|.
-% Unlike \pkg{hypdvips}, we avoid altering any links we have not created
-% by using a copy of the core |pdfmarks| function. Only mark types which
-% are known are altered. At present, this is purely |ANN| marks, which are
-% measured relative to the size of the baseline skip. If they are
-% more than one apparent line high, breaking is applied.
-% \begin{macrocode}
-\@@_postscript_header:n
- {
- /driver.pdfmark
- {
- SDict /driver.pdfmark.good ~ true ~ put ~
- dup /ANN ~ eq
- {
- driver.pdfmark.store ~
- driver.pdfmark.dict ~
- begin ~
- Subtype /Link ~ eq ~
- currentdict /Rect ~ known ~ and ~
- SDict /driver.outerbox ~ known ~ and ~
- SDict /driver.baselineskip ~ known ~ and ~
- {
- Rect ~ 3 ~ get ~
- driver.linkmargin ~ 2 ~ mul ~ add ~
- driver.outerbox ~ driver.rect.ht ~ add ~
- Rect ~ 1 ~ get ~ sub ~
- driver.baselineskip ~ div ~ round ~ cvi ~ 0 ~ gt
- { driver.breaklink }
- if
- }
- if ~
- end ~
- SDict /driver.outerbox ~ undef ~
- SDict /driver.baselineskip ~ undef ~
- currentdict /driver.pdfmark.dict ~ undef ~
- }
- if ~
- driver.pdfmark.good
- { pdfmark }
- { cleartomark }
- ifelse
- }
- def
- /driver.pdfmark.store
- {
- /driver.pdfmark.dict ~ 65534 ~ dict ~ def ~
- counttomark ~ 1 ~ add ~ copy ~
- pop
- {
- dup ~ mark ~ eq
- {
- pop ~
- exit
- }
- {
- driver.pdfmark.dict ~
- begin ~ def ~ end
- }
- ifelse
- }
- loop
- }
- def
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}{\l_@@_pdf_content_box}
-% The content of an annotation.
-% \begin{macrocode}
-\box_new:N \l_@@_pdf_content_box
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_pdf_model_box}
-% For creating model sizing for links.
-% \begin{macrocode}
-\box_new:N \l_@@_pdf_model_box
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\g_@@_pdf_annotation_int}
-% Needed as objects which are not annotations could be created.
-% \begin{macrocode}
-\int_new:N \g_@@_pdf_annotation_int
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\driver_pdf_annotation:nnnn, \@@_pdf_annotation:nnnn}
-% \begin{macro}{driver.llx, driver.lly, driver.urx, driver.ury}
-% Annotations are objects, but we track them separately. Notably, they are
-% not in the object data lists. Here, to get the co-ordinates of the
-% annotation, we need to have the data collected at the PostScript level.
-% That requires a bit of box trickery (effectively a \LaTeXe{} |picture|
-% of zero size). Once the data is collected, use it to set up the annotation
-% border. There is a split into two parts here to allow an easy way of
-% applying the Adobe Reader fix.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_pdf_annotation:nnnn #1#2#3#4
- {
- \@@_pdf_annotation:nnnn {#1} {#2} {#3} {#4}
- \int_gincr:N \g_@@_pdf_object_int
- \int_gset_eq:NN \g_@@_pdf_annotation_int \g_@@_pdf_object_int
- \@@_pdfmark:x
- {
-
- /_objdef { driver.obj \int_use:N \g_@@_pdf_object_int }
- driver.rect ~
- #4 ~
- /ANN
- }
- }
-\cs_new_protected:Npn \@@_pdf_annotation:nnnn #1#2#3#4
- {
- \box_move_down:nn {#3}
- { \hbox:n { \@@_postscript:n { driver.save.ll } } }
- \hbox:n {#4}
- \box_move_up:nn {#2}
- {
- \hbox:n
- {
- \tex_kern:D \dim_eval:n {#1} \scan_stop:
- \@@_postscript:n { driver.save.ur }
- }
- }
- \int_gincr:N \g_@@_pdf_object_int
- \int_gset_eq:NN \g_@@_pdf_annotation_int \g_@@_pdf_object_int
- \@@_pdfmark:x
- {
- /_objdef { driver.obj \int_use:N \g_@@_pdf_object_int }
- driver.rect
- /ANN
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\driver_pdf_annotation_last:}
-% Provide the last annotation we created: could get tricky of course if
-% other packages are loaded.
-% \begin{macrocode}
-\cs_new:Npn \driver_pdf_annotation_last:
- { { driver.obj \int_use:N \g_@@_pdf_annotation_int } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}{\g_@@_pdf_link_int}
-% To track annotations which are links.
-% \begin{macrocode}
-\int_new:N \g_@@_pdf_link_int
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\g_@@_pdf_link_dict_tl}
-% To pass information to the end-of-link function.
-% \begin{macrocode}
-\tl_new:N \g_@@_pdf_link_dict_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\g_@@_pdf_link_sf_int}
-% Needed to save/restore space factor, which is needed to deal with the face
-% we need a box.
-% \begin{macrocode}
-\int_new:N \g_@@_pdf_link_sf_int
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\g_@@_pdf_link_math_bool}
-% Needed to save/restore math mode.
-% \begin{macrocode}
-\bool_new:N \g_@@_pdf_link_math_bool
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\g_@@_pdf_link_bool}
-% Track link formation: we cannot nest at all.
-% \begin{macrocode}
-\bool_new:N \g_@@_pdf_link_bool
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_breaklink_pdfmark_tl}
-% Swappable content for link breaking.
-% \begin{macrocode}
-\tl_new:N \l_@@_breaklink_pdfmark_tl
-\tl_set:Nn \l_@@_breaklink_pdfmark_tl { pdfmark }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\@@_breaklink_postscript:n}
-% To allow dropping material unless link breaking is active.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_breaklink_postscript:n #1 { }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\@@_breaklink_usebox:N}
-% Swappable box unpacking or use.
-% \begin{macrocode}
-\cs_new_eq:NN \@@_breaklink_usebox:N \box_use:N
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\driver_pdf_link_begin_goto:nnw, \driver_pdf_link_begin_user:nnw}
-% \begin{macro}{\@@_pdf_link:nw, \@@_pdf_link_aux:nw}
-% \begin{macro}{\driver_pdf_link_end:, \@@_pdf_link_end:}
-% \begin{macro}{\@@_pdf_link_minima:}
-% \begin{macro}{\@@_pdf_link_outerbox:n}
-% \begin{macro}{\@@_pdf_link_sf_save:, \@@_pdf_link_sf_restore:}
-% \begin{macro}
-% {
-% driver.linkdp.pad ,
-% driver.linkht.pad ,
-% driver.llx, driver.lly ,
-% driver.ury, driver.ury ,
-% driver.link.dict ,
-% driver.outerbox ,
-% driver.baselineskip
-% }
-% Links are crated like annotations but with dedicated code to allow for
-% adjusting the size of the rectangle. In contrast to \pkg{hyperref}, we
-% grab the link content as a box which can then unbox: this allows the same
-% interface as for \pdfTeX{}.
-%
-% Taking the idea of |evenboxes| from \pkg{hypdvips}, we implement a minimum
-% box height and depth for link placement. This means that \enquote{underlining}
-% with a hyperlink will generally give an even appearance. However, to ensure
-% that the full content is always above the link border, we do not allow
-% this to be negative (contrast \pkg{hypdvips} approach). The result should
-% be similar to \pdfTeX{} in the vast majority of foreseeable cases.
-%
-% The object number for a link is saved separately from the rest of the
-% dictionary as this allows us to insert it just once, at either an
-% unbroken link or only in the first line of a broken one. That makes the
-% code clearer but also avoids a low-level PostScript error with the code
-% as taken from \pkg{hypdvips}.
-%
-% Getting the outer dimensions of the text area may be better using a two-pass
-% approach and |\tex_savepos:D|. That plus format mode are still to re-examine.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_pdf_link_begin_goto:nnw #1#2
- { \@@_pdf_link_begin:nw { #1 /Subtype /Link /A << /S /GoTo /D ( #2 ) >> } }
-\cs_new_protected:Npn \driver_pdf_link_begin_user:nnw #1#2
- { \@@_pdf_link_begin:nw {#1#2} }
-\cs_new_protected:Npn \@@_pdf_link_begin:nw #1
- {
- \bool_if:NF \g_@@_pdf_link_bool
- { \@@_pdf_link_begin_aux:nw {#1} }
- }
-\cs_new_protected:Npn \@@_pdf_link_begin_aux:nw #1
- {
- \bool_gset_true:N \g_@@_pdf_link_bool
- \@@_postscript:n
- { /driver.link.dict ( #1 ) def }
- \tl_gset:Nn \g_@@_pdf_link_dict_tl {#1}
- \@@_pdf_link_sf_save:
- \mode_if_math:TF
- { \bool_gset_true:N \g_@@_pdf_link_math_bool }
- { \bool_gset_false:N \g_@@_pdf_link_math_bool }
- \hbox_set:Nw \l_@@_pdf_content_box
- \@@_pdf_link_sf_restore:
- \bool_if:NT \g_@@_pdf_link_math_bool
- { \c_math_toggle_token }
- }
-\cs_new_protected:Npn \driver_pdf_link_end:
- {
- \bool_if:NT \g_@@_pdf_link_bool
- { \@@_pdf_link_end: }
- }
-\cs_new_protected:Npn \@@_pdf_link_end:
- {
- \bool_if:NT \g_@@_pdf_link_math_bool
- { \c_math_toggle_token }
- \@@_pdf_link_sf_save:
- \hbox_set_end:
- \@@_pdf_link_minima:
- \hbox_set:Nn \l_@@_pdf_model_box { Gg }
- \exp_args:Nx \@@_driver_link_outerbox:n
- {
-%<*initex>
- \l_galley_total_left_margin_dim
-%</initex>
-%<*package>
- \int_if_odd:nTF { \value { page } }
- { \oddsidemargin }
- { \evensidemargin }
-%</package>
- }
- \box_move_down:nn { \box_dp:N \l_@@_pdf_content_box }
- { \hbox:n { \@@_postscript:n { driver.save.linkll } } }
- \@@_breaklink_postscript:n { driver.bordertracking.begin }
- \@@_breaklink_usebox:N \l_@@_pdf_content_box
- \@@_breaklink_postscript:n { driver.bordertracking.end }
- \box_move_up:nn { \box_ht:N \l_@@_pdf_content_box }
- {
- \hbox:n
- { \@@_postscript:n { driver.save.linkur } }
- }
- \int_gincr:N \g_@@_pdf_object_int
- \int_gset_eq:NN \g_@@_pdf_link_int \g_@@_pdf_object_int
- \@@_postscript:x
- {
- mark
- /_objdef { driver.obj \int_use:N \g_@@_pdf_link_int }
- \g_@@_pdf_link_dict_tl \c_space_tl
- driver.rect
- /ANN ~ \l_@@_breaklink_pdfmark_tl
- }
- \@@_pdf_link_sf_restore:
- \bool_gset_false:N \g_@@_pdf_link_bool
- }
-\cs_new_protected:Npn \@@_pdf_link_minima:
- {
- \hbox_set:Nn \l_@@_pdf_model_box { Gg }
- \@@_postscript:x
- {
- /driver.linkdp.pad ~
- \dim_to_decimal:n
- {
- \dim_max:nn
- {
- \box_dp:N \l_@@_pdf_model_box
- - \box_dp:N \l_@@_pdf_content_box
- }
- { 0pt }
- } ~
- driver.pt.dvi ~ def
- /driver.linkht.pad ~
- \dim_to_decimal:n
- {
- \dim_max:nn
- {
- \box_ht:N \l_@@_pdf_model_box
- - \box_ht:N \l_@@_pdf_content_box
- }
- { 0pt }
- } ~
- driver.pt.dvi ~ def
- }
- }
-\cs_new_protected:Npn \@@_driver_link_outerbox:n #1
- {
- \@@_postscript:x
- {
- /driver.outerbox
- [
- \dim_to_decimal:n {#1} ~
- \dim_to_decimal:n { -\box_dp:N \l_@@_pdf_model_box } ~
-%<*initex>
- \dim_to_decimal:n { #1 + \l_galley_text_width_dim } ~
-%</initex>
-%<*package>
- \dim_to_decimal:n { #1 + \textwidth } ~
-%</package>
- \dim_to_decimal:n { \box_ht:N \l_@@_pdf_model_box }
- ]
- [ exch { driver.pt.dvi } forall ] def
- /driver.baselineskip ~
- \dim_to_decimal:n { \tex_baselineskip:D } ~ dup ~ 0 ~ gt
- { driver.pt.dvi ~ def }
- { pop ~ pop }
- ifelse
- }
- }
-\cs_new_protected:Npn \@@_pdf_link_sf_save:
- {
- \int_gset:Nn \g_@@_pdf_link_sf_int
- {
- \mode_if_horizontal:TF
- { \tex_spacefactor:D }
- { 0 }
- }
- }
-\cs_new_protected:Npn \@@_pdf_link_sf_restore:
- {
- \mode_if_horizontal:T
- {
- \int_compare:nNnT \g_@@_pdf_link_sf_int > { 0 }
- { \int_set_eq:NN \tex_spacefactor:D \g_@@_pdf_link_sf_int }
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@makecol@hook}
-% Hooks to allow link breaking: something will be needed in format mode
-% at some stage. At present this code is disabled as there is an open
-% question about the name of the hook: to be resolved at the \LaTeXe{}
-% end.
-% \begin{macrocode}
-%<*package>
-\use_none:n
- {
- \cs_if_exist:NT \@makecol@hook
- {
- \tl_put_right:Nn \@makecol@hook
- {
- \box_if_empty:NF \@cclv
- {
- \vbox_set:Nn \@cclv
- {
- \@@_postscript:n
- {
- driver.globaldict /driver.brokenlink.rect ~ known
- { driver.bordertracking.continue }
- if
- }
- \vbox_unpack_drop:N \@cclv
- \@@_postscript:n
- { driver.bordertracking.endpage }
- }
- }
- }
- \tl_set:Nn \l_@@_breaklink_pdfmark_tl { driver.pdfmark }
- \cs_set_eq:NN \@@_breaklink_postscript:n \@@_postscript:n
- \cs_set_eq:NN \@@_breaklink_usebox:N \hbox_unpack:N
- }
- }
-%</package>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\driver_pdf_link_last:}
-% The same as annotations, but with a custom integer.
-% \begin{macrocode}
-\cs_new:Npn \driver_pdf_link_last:
- { { driver.obj \int_use:N \g_@@_pdf_link_int } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\driver_pdf_link_margin:n}
-% Convert to big points and pass to PostScript.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_pdf_link_margin:n #1
- {
- \@@_postscript:x
- {
- /driver.linkmargin { \dim_to_decimal:n {#1} ~ driver.pt.dvi } def
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\driver_pdf_destination:nn, \driver_pdf_destination_rectangle:nn}
-% Here, we need to turn the zoom into a scale. We also need to know where
-% the current anchor point actually is: worked out in PostScript. For the
-% rectangle version, we have a bit more PostScript: we need two points.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_pdf_destination:nn #1#2
- {
- \@@_postscript:n { driver.dest.anchor }
- \@@_pdfmark:x
- {
- /View
- [
- \str_case:nnF {#2}
- {
- { xyz } { /XYZ ~ driver.dest.point ~ null }
- { fit } { /Fit }
- { fitb } { /FitB }
- { fitbh } { /FitBH ~ driver.dest.y }
- { fitbv } { /FitBV ~ driver.dest.x }
- { fith } { /FitH ~ driver.dest.y }
- { fitv } { /FitV ~ driver.dest.x }
- }
- {
- /XYZ ~ driver.dest.point ~ \fp_eval:n { (#2) / 100 }
- }
- ]
- /Dest ( \exp_not:n {#1} ) cvn
- /DEST
- }
- }
-\cs_new_protected:Npn \driver_pdf_destination_rectangle:nn #1#2
- {
- \group_begin:
- \hbox_set:Nn \l_@@_internal_box {#2}
- \box_move_down:nn
- { \box_dp:N \l_@@_internal_box }
- { \hbox:n { \@@_postscript:n { driver.save.ll } } }
- \box_use:N \l_@@_internal_box
- \box_move_up:nn
- { \box_ht:N \l_@@_internal_box }
- { \hbox:n { \@@_postscript:n { driver.save.ur } } }
- \@@_pdfmark:n
- {
- /View
- [
- /FitR ~
- driver.llx ~ driver.lly ~ driver.dest2device ~
- driver.urx ~ driver.ury ~ driver.dest2device
- ]
- /Dest ( #1 ) cvn
- /DEST
- }
- \group_end:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Structure}
-%
-% \begin{macro}{\driver_pdf_compresslevel:n}
-% \begin{macro}{\driver_pdf_compress_objects:n}
-% These are all no-ops.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_pdf_compresslevel:n #1 { }
-\cs_new_protected:Npn \driver_pdf_compress_objects:n #1 { }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {\driver_pdf_version_major_gset:n, \driver_pdf_version_minor_gset:n}
-% Data not available!
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_pdf_version_major_gset:n #1 { }
-\cs_new_protected:Npn \driver_pdf_version_minor_gset:n #1 { }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\driver_pdf_version_major:, \driver_pdf_version_minor:}
-% Data not available!
-% \begin{macrocode}
-\cs_new:Npn \driver_pdf_version_major: { -1 }
-\cs_new:Npn \driver_pdf_version_minor: { -1 }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</dvips>
-% \end{macrocode}
-%
-% \subsection{\texttt{pdfmode} driver}
-%
-% \begin{macrocode}
-%<*pdfmode>
-% \end{macrocode}
-%
-% \subsubsection{Annotations}
-%
-% \begin{macro}{\driver_pdf_annotation:nnnn}
-% Simply pass the raw data through, just dealing with evaluation of dimensions.
-% \begin{macrocode}
-\cs_new_protected:Npx \driver_pdf_annotation:nnnn #1#2#3#4
- {
- \cs_if_exist:NTF \tex_pdfextension:D
- { \tex_pdfextension:D annot ~ }
- { \tex_pdfannot:D }
- width ~ \exp_not:N \dim_eval:n {#1} ~
- height ~ \exp_not:N \dim_eval:n {#2} ~
- depth ~ \exp_not:N \dim_eval:n {#3} ~
- {#4}
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\driver_pdf_annotation_last:}
-% A tiny amount of extra data gets added here.
-% \begin{macrocode}
-\cs_new:Npx \driver_pdf_annotation_last:
- {
- \exp_not:N \tex_the:D
- \cs_if_exist:NTF \tex_pdffeedback:D
- { \exp_not:N \tex_pdffeedback:D annot ~ }
- { \exp_not:N \tex_pdflastannot:D }
- 0 ~ R
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {\driver_pdf_link_begin_goto:nnw, \driver_pdf_link_begin_user:nnw}
-% \begin{macro}{\@@_pdf_link_begin:nnnw}
-% \begin{macro}{\driver_pdf_link_end:}
-% Links are all created using the same internals.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_pdf_link_begin_goto:nnw #1#2
- { \@@_pdf_link_begin:nnnw {#1} { goto~name } {#2} }
-\cs_new_protected:Npn \driver_pdf_link_begin_user:nnw #1#2
- { \@@_pdf_link_begin:nnnw {#1} { user } {#2} }
-\cs_new_protected:Npx \@@_pdf_link_begin:nnnw #1#2#3
- {
- \cs_if_exist:NTF \tex_pdfextension:D
- { \tex_pdfextension:D startlink ~ }
- { \tex_pdfstartlink:D }
- attr {#1}
- #2 {#3}
- }
-\cs_new_protected:Npx \driver_pdf_link_end:
- {
- \cs_if_exist:NTF \tex_pdfextension:D
- { \tex_pdfextension:D endlink \scan_stop: }
- { \tex_pdfendlink:D }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\driver_pdf_link_last:}
-% Formatted for direct use.
-% \begin{macrocode}
-\cs_new:Npx \driver_pdf_link_last:
- {
- \exp_not:N \tex_the:D
- \cs_if_exist:NTF \tex_pdffeedback:D
- { \exp_not:N \tex_pdffeedback:D lastlink \scan_stop: }
- { \exp_not:N \tex_pdflastlink:D }
- ~ 0 ~ R
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\driver_pdf_link_margin:n}
-% A simple task: pass the data to the primitive.
-% \begin{macrocode}
-\cs_new_protected:Npx \driver_pdf_link_margin:n #1
- {
- \cs_if_exist:NTF \tex_pdfvariable:D
- { \exp_not:N \tex_pdfvariable:D linkmargin }
- { \exp_not:N \tex_pdflinkmargin:D }
- \exp_not:N \dim_eval:n {#1} \scan_stop:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\driver_pdf_destination:nn, \driver_pdf_destination_rectangle:nn}
-% A simple task: pass the data to the primitive. The |\scan_stop:| deals
-% with the danger of an unterminated keyword. The zoom given here is a
-% percentage, but we need to pass it as \emph{per mille}. The rectangle
-% version is also easy as everything is build in.
-% \begin{macrocode}
-\cs_new_protected:Npx \driver_pdf_destination:nn #1#2
- {
- \cs_if_exist:NTF \tex_pdfextension:D
- { \exp_not:N \tex_pdfextension:D dest ~ }
- { \exp_not:N \tex_pdfdest:D }
- name {#1}
- \exp_not:N \str_case:nnF {#2}
- {
- { xyz } { xyz }
- { fit } { fit }
- { fitb } { fitb }
- { fitbh } { fitbh }
- { fitbv } { fitbv }
- { fith } { fith }
- { fitv } { fitv }
- }
- { xyz ~ zoom \exp_not:N \fp_eval:n { #2 * 10 } }
- \scan_stop:
- }
-\cs_new_protected:Npx \driver_pdf_destination_rectangle:nn #1#2
- {
- \group_begin:
- \hbox_set:Nn \l_@@_internal_box {#2}
- \cs_if_exist:NTF \tex_pdfextension:D
- { \exp_not:N \tex_pdfextension:D dest ~ }
- { \exp_not:N \tex_pdfdest:D }
- name {#1}
- fitr ~
- width \exp_not:N \box_wd:N \l_@@_internal_box
- height \exp_not:N \box_ht:N \l_@@_internal_box
- depth \exp_not:N \box_dp:N \l_@@_internal_box
- \box_use:N \l_@@_internal_box
- \group_end:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Catalogue entries}
-%
-% \begin{macro}{\driver_pdf_catalog_gput:nn, \driver_pdf_info_gput:nn}
-% \begin{macrocode}
-\cs_new_protected:Npx \driver_pdf_catalog_gput:nn #1#2
- {
- \cs_if_exist:NTF \tex_pdfextension:D
- { \tex_pdfextension:D catalog }
- { \tex_pdfcatalog:D }
- { / #1 ~ #2 }
- }
-\cs_new_protected:Npx \driver_pdf_info_gput:nn #1#2
- {
- \cs_if_exist:NTF \tex_pdfextension:D
- { \tex_pdfextension:D info }
- { \tex_pdfinfo:D }
- { / #1 ~ #2 }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Objects}
-%
-% \begin{variable}{\g_@@_pdf_object_prop}
-% For tracking objects to allow finalisation.
-% \begin{macrocode}
-\prop_new:N \g_@@_pdf_object_prop
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\driver_pdf_object_new:nn}
-% \begin{macro}[EXP]{\driver_pdf_object_ref:n}
-% Declaring objects means reserving at the PDF level plus starting
-% tracking.
-% \begin{macrocode}
-\group_begin:
- \cs_set_protected:Npn \@@_tmp:w #1#2
- {
- \cs_new_protected:Npx \driver_pdf_object_new:nn ##1##2
- {
- #1 reserveobjnum ~
- \int_const:cn
- { c_@@_pdf_object_ \exp_not:N \tl_to_str:n {##1} _int }
- {#2}
- \prop_gput:Nnn \exp_not:N \g_@@_pdf_object_prop {##1} {##2}
- }
- }
- \cs_if_exist:NTF \tex_pdfextension:D
- {
- \@@_tmp:w
- { \tex_pdfextension:D obj ~ }
- { \exp_not:N \tex_pdffeedback:D lastobj }
- }
- { \@@_tmp:w { \tex_pdfobj:D } { \tex_pdflastobj:D } }
-\group_end:
-\cs_new:Npn \driver_pdf_object_ref:n #1
- { \int_use:c { c_@@_pdf_object_ \tl_to_str:n {#1} _int } ~ 0 ~ R }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\driver_pdf_object_write:nn}
-% \begin{macro}[EXP]{\@@_exp_not_i:nn, \@@_exp_not_ii:nn}
-% Writing the data needs a little information about the structure of the
-% object.
-% \begin{macrocode}
-\group_begin:
- \cs_set_protected:Npn \@@_tmp:w #1
- {
- \cs_new_protected:Npn \driver_pdf_object_write:nn ##1##2
- {
- \tex_immediate:D #1 useobjnum ~
- \int_use:c
- { c_@@_pdf_object_ \tl_to_str:n {##1} _int }
- \str_case_e:nn
- { \prop_item:Nn \g_@@_pdf_object_prop {##1} }
- {
- { array } { { [ ~ \exp_not:n {##2} ~ ] } }
- { dict } { { << ~ \exp_not:n {##2} ~ >> } }
- { fstream }
- {
- stream ~ attr ~ { \@@_exp_not_i:nn ##2 } ~
- file ~ { \@@_exp_not_ii:nn ##2 }
- }
- { stream }
- {
- stream ~ attr ~ { \@@_exp_not_i:nn ##2 } ~
- { \@@_exp_not_ii:nn ##2 }
- }
- }
- }
- }
- \cs_if_exist:NTF \tex_pdfextension:D
- { \@@_tmp:w { \tex_pdfextension:D obj ~ } }
- { \@@_tmp:w { \tex_pdfobj:D } }
-\group_end:
-\cs_new:Npn \@@_exp_not_i:nn #1#2 { \exp_not:n {#1} }
-\cs_new:Npn \@@_exp_not_ii:nn #1#2 { \exp_not:n {#2} }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \subsubsection{Structure}
-%
-% \begin{macro}{\driver_pdf_compresslevel:n}
-% \begin{macro}{\driver_pdf_compress_objects:n}
-% \begin{macro}{\@@_pdf_objcompresslevel:n}
-% Simply pass data to the engine.
-% \begin{macrocode}
-\cs_new_protected:Npx \driver_pdf_compresslevel:n #1
- {
- \exp_not:N \tex_global:D
- \cs_if_exist:NTF \tex_pdfcompresslevel:D
- { \tex_pdfcompresslevel:D }
- { \tex_pdfvariable:D compresslevel }
- \exp_not:N \int_value:w \exp_not:N \int_eval:n {#1} \scan_stop:
- }
-\cs_new_protected:Npn \driver_pdf_compress_objects:n #1
- {
- \str_if_eq:nnTF {#1} { true }
- { \@@_pdf_objcompresslevel:n { 2 } }
- { \@@_pdf_objcompresslevel:n { 0 } }
- }
-\cs_new_protected:Npx \@@_pdf_objcompresslevel:n #1
- {
- \exp_not:N \tex_global:D
- \cs_if_exist:NTF \tex_pdfobjcompresslevel:D
- { \tex_pdfobjcompresslevel:D }
- { \tex_pdfvariable:D objcompresslevel }
- #1 \scan_stop:
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {\driver_pdf_version_major_gset:n, \driver_pdf_version_minor_gset:n}
-% At present, we don't have a primitive for the major version in \pdfTeX{},
-% but we anticipate one \ldots
-% \begin{macrocode}
-\cs_new_protected:Npx \driver_pdf_version_major_gset:n #1
- {
- \cs_if_exist:NTF \tex_pdfvariable:D
- {
- \int_compare:nNnT \tex_luatexversion:D > { 106 }
- {
- \exp_not:N \tex_global:D \tex_pdfvariable:D majorversion
- \exp_not:N \int_eval:n {#1} \scan_stop:
- }
- }
- {
- \cs_if_exist:NT \tex_pdfmajorversion:D
- {
- \exp_not:N \tex_global:D \tex_pdfmajorversion:D
- \exp_not:N \int_eval:n {#1} \scan_stop:
- }
- }
- }
-\cs_new_protected:Npx \driver_pdf_version_minor_gset:n #1
- {
- \exp_not:N \tex_global:D
- \cs_if_exist:NTF \tex_pdfminorversion:D
- { \exp_not:N \tex_pdfminorversion:D }
- { \tex_pdfvariable:D minorversion }
- \exp_not:N \int_eval:n {#1} \scan_stop:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\driver_pdf_version_major:, \driver_pdf_version_minor:}
-% At present, we don't have a primitive for the major version!
-% \begin{macrocode}
-\cs_new:Npx \driver_pdf_version_major:
- {
- \cs_if_exist:NTF \tex_pdfvariable:D
- {
- \int_compare:nNnTF \tex_luatexversion:D > { 106 }
- { \exp_not:N \tex_the:D \tex_pdfvariable:D majorversion }
- { 1 }
- }
- {
- \cs_if_exist:NTF \tex_pdfmajorversion:D
- { \exp_not:N \tex_the:D \tex_pdfmajorversion:D }
- { 1 }
- }
- }
-\cs_new:Npx \driver_pdf_version_minor:
- {
- \exp_not:N \tex_the:D
- \cs_if_exist:NTF \tex_pdfminorversion:D
- { \exp_not:N \tex_pdfminorversion:D }
- { \tex_pdfvariable:D minorversion }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</pdfmode>
-% \end{macrocode}
-%
-% \subsection{\texttt{dvipdfmx} driver}
-%
-% \begin{macrocode}
-%<*dvipdfmx|xdvipdfmx>
-% \end{macrocode}
-%
-% \begin{macro}{\@@_pdf:n, \@@_pdf:x}
-% A generic function for the driver PDF specials: used where we can.
-% \begin{macrocode}
-\cs_new_protected:Npx \@@_pdf:n #1
- { \@@_literal:n { pdf: #1 } }
-\cs_generate_variant:Nn \@@_pdf:n { x }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Catalogue entries}
-%
-% \begin{macro}{\driver_pdf_catalog_gput:nn, \driver_pdf_info_gput:nn}
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_pdf_catalog_gput:nn #1#2
- { \@@_pdf:n { put ~ @catalog << /#1 ~ #2 >> } }
-\cs_new_protected:Npn \driver_pdf_info_gput:nn #1#2
- { \@@_pdf:n { docinfo << /#1 ~ #2 >> } }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Objects}
-%
-% \begin{variable}{\g_@@_pdf_object_int, \g_@@_pdf_object_prop}
-% For tracking objects to allow finalisation.
-% \begin{macrocode}
-\int_new:N \g_@@_pdf_object_int
-\prop_new:N \g_@@_pdf_object_prop
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\driver_pdf_object_new:nn}
-% \begin{macro}[EXP]{\driver_pdf_object_ref:n}
-% Objects are tracked at the macro level, but we don't have to do anything
-% at this stage.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_pdf_object_new:nn #1#2
- {
- \int_gincr:N \g_@@_pdf_object_int
- \int_const:cn
- { g_@@_pdf_object_ \tl_to_str:n {#1} _int }
- { \g_@@_pdf_object_int }
- \prop_gput:Nnn \g_@@_pdf_object_prop {#1} {#2}
- }
-\cs_new:Npn \driver_pdf_object_ref:n #1
- { @driver.obj \int_use:c { g_@@_pdf_object_ \tl_to_str:n {#1} _int } }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\driver_pdf_object_write:nn}
-% \begin{macro}{\@@_pdf_object_write:nnn}
-% \begin{macro}
-% {
-% \@@_pdf_object_write_array:nn ,
-% \@@_pdf_object_write_dict:nn ,
-% \@@_pdf_object_write_fstream:nn ,
-% \@@_pdf_object_write_stream:nn
-% }
-% \begin{macro}{\@@_pdf_object_write_stream:nnnn}
-% This is where we choose the actual type.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_pdf_object_write:nn #1#2
- {
- \exp_args:Nx \@@_pdf_object_write:nnn
- { \prop_item:Nn \g_@@_pdf_object_prop {#1} } {#1} {#2}
- }
-\cs_new_protected:Npn \@@_pdf_object_write:nnn #1#2#3
- { \use:c { @@_pdf_object_write_ #1 :nn } {#2} {#3} }
-\cs_new_protected:Npn \@@_pdf_object_write_array:nn #1#2
- {
- \@@_pdf:x
- {
- obj ~ \driver_pdf_object_ref:n {#1} ~
- [ ~ \exp_not:n {#2} ~ ]
- }
- }
-\cs_new_protected:Npn \@@_pdf_object_write_dict:nn #1#2
- {
- \@@_pdf:x
- {
- obj ~ \driver_pdf_object_ref:n {#1} ~
- << ~ \exp_not:n {#2} ~ >>
- }
- }
-\cs_new_protected:Npn \@@_pdf_object_write_fstream:nn #1#2
- { \@@_pdf_object_write_stream:nnnn { f } {#1} #2 }
-\cs_new_protected:Npn \@@_pdf_object_write_stream:nn #1#2
- { \@@_pdf_object_write_stream:nnnn { } {#1} #2 }
-\cs_new_protected:Npn \@@_pdf_object_write_stream:nnnn #1#2#3#4
- {
- \@@_pdf:x
- {
- #1 stream ~ \driver_pdf_object_ref:n {#2} ~
- ( \exp_not:n {#4} ) ~ << \exp_not:n {#3} >>
-
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsubsection{Annotations}
-%
-% \begin{variable}{\g_@@_landscape_bool}
-% There is a bug in \texttt{(x)dvipdfmx} which means annotations do
-% not rotate. As such, we need to know if landscape is active.
-% \begin{macrocode}
-\bool_new:N \g_@@_landscape_bool
-%<*package>
-\AtBeginDocument
- {
- \cs_if_exist:NT \landscape
- {
- \tl_put_right:Nn \landscape
- { \bool_gset_true:N \g_@@_landscape_bool }
- \tl_put_left:Nn \endlandscape
- { \bool_gset_false:N \g_@@_landscape_bool }
- }
- }
-%</package>
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\g_@@_pdf_annotation_int}
-% Needed as objects which are not annotations could be created.
-% \begin{macrocode}
-\int_new:N \g_@@_pdf_annotation_int
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\driver_pdf_annotation:nnnn, \@@_pdf_annotation:nnnn}
-% Simply pass the raw data through, just dealing with evaluation of dimensions.
-% The only wrinkle is landscape: we have to adjust by hand.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_pdf_annotation:nnnn #1#2#3#4
- {
- \bool_if:NTF \g_@@_landscape_bool
- {
- \box_move_up:nn {#2}
- {
- \vbox:n
- {
- \@@_pdf_annotation:nnnn
- { #2 + #3 } {#1} { 0pt } {#4}
- }
- }
- }
- { \@@_pdf_annotation:nnnn {#1} {#2} {#3} {#4} }
- }
-\cs_new_protected:Npn \@@_pdf_annotation:nnnn #1#2#3#4
- {
- \int_gincr:N \g_@@_pdf_object_int
- \int_gset_eq:NN \g_@@_pdf_annotation_int \g_@@_pdf_object_int
- \@@_pdf:x
- {
- ann ~ @driver.obj \int_use:N \g_@@_pdf_object_int \c_space_tl
- width ~ \dim_eval:n {#1} ~
- height ~ \dim_eval:n {#2} ~
- depth ~ \dim_eval:n {#3} ~
- << #4 >>
- }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {\driver_pdf_link_begin_goto:nnw, \driver_pdf_link_begin_user:nnw}
-% \begin{macro}{\@@_pdf_link_begin:n}
-% \begin{macro}{\driver_pdf_link_end:}
-% All created using the same internals.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_pdf_link_begin_goto:nnw #1#2
- { \@@_pdf_link_begin:n { #1 /Subtype /Link /A << /S /GoTo /D ( #2 ) >> } }
-\cs_new_protected:Npn \driver_pdf_link_begin_user:nnw #1#2
- { \@@_pdf_link_begin:n {#1#2} }
-\cs_new_protected:Npn \@@_pdf_link_begin:n #1
- {
- \@@_pdf:n
- {
- bann
- <<
- /Type /Annot
- #1
- >>
- }
- }
-\cs_new_protected:Npn \driver_pdf_link_end:
- { \@@_pdf:n { eann } }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\driver_pdf_link_last:}
-% Data not available.
-% \begin{macrocode}
-\cs_new:Npn \driver_pdf_link_last: { }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\driver_pdf_link_margin:n}
-% Pass to \texttt{dvipdfmx}.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_pdf_link_margin:n #1
- { \@@_literal:x { dvipdfmx:config~g~ \dim_eval:n {#1} } }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\driver_pdf_destination:nn, \driver_pdf_destination_rectangle:nn}
-% Here, we need to turn the zoom into a scale. The method for \texttt{FitR}
-% is from Alexander Grahn: the idea is to avoid needing to do any calculations
-% in \TeX{} by using the driver data for \texttt{@xpos} and \texttt{@ypos}.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_pdf_destination:nn #1#2
- {
- \@@_pdf:x
- {
- dest ~ ( \exp_not:n {#1} )
- [
- @thispage
- \str_case:nnF {#2}
- {
- { xyz } { /XYZ ~ @xpos ~ @ypos ~ null }
- { fit } { /Fit }
- { fitb } { /FitB }
- { fitbh } { /FitBH }
- { fitbv } { /FitBV ~ @xpos }
- { fith } { /FitH ~ @ypos }
- { fitv } { /FitV ~ @xpos }
- }
- { /XYZ ~ @xpos ~ @ypos ~ \fp_eval:n { (#2) / 100 } }
- ]
- }
- }
-\cs_new_protected:Npn \driver_pdf_destination_rectangle:nn #1#2
- {
- \group_begin:
- \hbox_set:Nn \l_@@_internal_box {#2}
- \box_move_down:nn { \box_dp:N \l_@@_internal_box }
- {
- \hbox:n
- {
- \@@_pdf:n { obj ~ @driver_#1_llx ~ @xpos }
- \@@_pdf:n { obj ~ @driver_#1_lly ~ @ypos }
- }
- }
- \box_use:N \l_@@_internal_box
- \box_move_up:nn { \box_ht:N \l_@@_internal_box }
- {
- \hbox:n
- {
- \@@_pdf:n
- {
- dest ~ (#1)
- [
- @thispage
- /FitR ~
- @driver_#1_llx ~ @driver_#1_lly ~
- @xpos ~ @ypos
- ]
- }
- }
- }
- \group_end:
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Structure}
-%
-% \begin{macro}{\driver_pdf_compresslevel:n}
-% \begin{macro}{\driver_pdf_compress_objects:n}
-% Pass data to the driver: these are a one-shot.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_pdf_compresslevel:n #1
- { \@@_literal:x { dvipdfmx:config~z~ \int_eval:n {#1} } }
-\cs_new_protected:Npn \driver_pdf_compress_objects:n #1
- {
- \str_if_eq:nnF {#1} { true }
- { \@@_literal:n { dvipdfmx:config~C~0x40 } }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {\driver_pdf_version_major_gset:n, \driver_pdf_version_minor_gset:n}
-% We start with the assumption that the default is active.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_pdf_version_major:n #1
- {
- \cs_gset:Npx \driver_pdf_version_major: { \int_eval:n {#1} }
- \@@_literal:x { pdf:majorversion \driver_pdf_version_major: }
- }
-\cs_new_protected:Npn \driver_pdf_version_minor:n #1
- {
- \cs_gset:Npx \driver_pdf_version_minor: { \int_eval:n {#1} }
- \@@_literal:x { pdf:minorversion \driver_pdf_version_minor: }
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\driver_pdf_version_major:, \driver_pdf_version_minor:}
-% We start with the assumption that the default is active.
-% \begin{macrocode}
-\cs_new:Npn \driver_pdf_version_major: { 1 }
-\cs_new:Npn \driver_pdf_version_minor: { 5 }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</dvipdfmx|xdvipdfmx>
-% \end{macrocode}
-%
-% \subsection{\texttt{dvisvgm} driver}
-%
-% \begin{macrocode}
-%<*dvisvgm>
-% \end{macrocode}
-%
-% \subsubsection{Catalogue entries}
-%
-% \begin{macro}{\driver_pdf_catalog_gput:nn, \driver_pdf_info_gput:nn}
-% No-op.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_pdf_catalog_gput:nn #1#2 { }
-\cs_new_protected:Npn \driver_pdf_info_gput:nn #1#2 { }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsubsection{Objects}
-%
-% \begin{macro}{\driver_pdf_object_new:nn}
-% \begin{macro}[EXP]{\driver_pdf_object_ref:n}
-% \begin{macro}{\driver_pdf_object_write:nn}
-% All no-ops here.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_pdf_object_new:nn #1#2 { }
-\cs_new:Npn \driver_pdf_object_ref:n #1 { }
-\cs_new_protected:Npn \driver_pdf_object_write:nn #1#2 { }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \subsubsection{Structure}
-%
-% \begin{macro}{\driver_pdf_compresslevel:n}
-% \begin{macro}{\driver_pdf_compress_objects:n}
-% These are all no-ops.
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_pdf_compresslevel:n #1 { }
-\cs_new_protected:Npn \driver_pdf_compress_objects:n #1 { }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}
-% {\driver_pdf_version_major_gset:n, \driver_pdf_version_minor_gset:n}
-% Data not available!
-% \begin{macrocode}
-\cs_new_protected:Npn \driver_pdf_version_major_gset:n #1 { }
-\cs_new_protected:Npn \driver_pdf_version_minor_gset:n #1 { }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}[EXP]{\driver_pdf_version_major:, \driver_pdf_version_minor:}
-% Data not available!
-% \begin{macrocode}
-\cs_new:Npn \driver_pdf_version_major: { -1 }
-\cs_new:Npn \driver_pdf_version_minor: { -1 }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macrocode}
-%</dvisvgm>
-% \end{macrocode}
-%
-% \begin{macrocode}
-%</initex|package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3drivers.dtx b/Master/texmf-dist/source/latex/l3kernel/l3drivers.dtx
deleted file mode 100644
index 8e22549f2ae..00000000000
--- a/Master/texmf-dist/source/latex/l3kernel/l3drivers.dtx
+++ /dev/null
@@ -1,749 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3drivers.dtx
-%
-% Copyright (C) 2011-2019 The LaTeX3 Project
-%
-% It may be distributed and/or modified under the conditions of the
-% LaTeX Project Public License (LPPL), either version 1.3c of this
-% license or (at your option) any later version. The latest version
-% of this license is in the file
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3kernel bundle" (The Work in LPPL)
-% and all files in that bundle must be distributed together.
-%
-% -----------------------------------------------------------------------
-%
-% The development version of the bundle can be found at
-%
-% https://github.com/latex3/latex3
-%
-% for those people who are interested.
-%
-%<*driver>
-\documentclass[full,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \textsf{l3drivers} package\\ Drivers^^A
-% }
-%
-% \author{^^A
-% The \LaTeX3 Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2019-05-28}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% \TeX{} relies on drivers in order to carry out a number of tasks, such
-% as using color, including graphics and setting up hyper-links. The nature
-% of the code required depends on the exact driver in use. Currently,
-% \LaTeX3 is aware of the following drivers:
-% \begin{itemize}
-% \item \texttt{pdfmode}: The \enquote{driver} for direct PDF output by
-% \emph{both} \pdfTeX{} and \LuaTeX{} (no separate driver is used in this
-% case: the engine deals with PDF creation itself).
-% \item \texttt{dvips}: The \texttt{dvips} program, which works in
-% conjugation with \pdfTeX{} or \LuaTeX{} in DVI mode.
-% \item \texttt{dvipdfmx}: The \texttt{dvipdfmx} program, which works in
-% conjugation with \pdfTeX{} or \LuaTeX{} in DVI mode.
-% \item \texttt{dvisvgm}: The \texttt{dvisvgm} program, which works in
-% conjugation with \pdfTeX{} or \LuaTeX{} when run in DVI mode as well
-% as with (u)\pTeX{} and \XeTeX{}.
-% \item \texttt{xdvipdfmx}: The driver used by \XeTeX{}.
-% \end{itemize}
-%
-% This module provides code closely tied to the exact driver in use: broadly,
-% the functions here are implemented entirely independently for each case.
-% As such, they often rely on higher-level code to provide necessary but
-% shared operations. For example, in box rotation and scaling the functions
-% here do no correct the final size of the box: this will always be required
-% and thus is handled in the \pkg{box} module.
-%
-% Several of the operations here are low-level, and so may be used only in
-% restricted contexts. Some also require understanding of PostScript/PDF
-% concepts to be used corrected as they take \enquote{raw} arguments, similar
-% in format to those used by the underlying driver.
-%
-% Given the close coupling of these functions to higher-level interfaces, at
-% present the functions given here may change if this is useful for higher-level
-% changes. However, equivalent \emph{functionality} will be provided for any
-% higher-level function which is itself stable. For example,
-% \cs{driver_box_use_rotate:Nn} is needed to implement the stable box rotation
-% functions. As such, even if \cs{driver_box_use_rotate:Nn} were to be removed,
-% a replacement would be provided.
-%
-% \section{Box clipping}
-%
-% \begin{function}[added = 2017-12-13]{\driver_box_use_clip:N}
-% \begin{syntax}
-% \cs{driver_box_use_clip:N} \meta{box}
-% \end{syntax}
-% Inserts the content of the \meta{box} at the current insertion point
-% such that any material outside of the bounding box is not displayed
-% by the driver. The material in the \meta{box} is still placed in the
-% output stream: the clipping takes place at a driver level.
-% \end{function}
-%
-% \section{Box rotation and scaling}
-%
-% \begin{function}[added = 2017-12-13, updated = 2018-04-26]
-% {\driver_box_use_rotate:Nn}
-% \begin{syntax}
-% \cs{driver_box_use_rotate:Nn} \meta{box} \Arg{angle}
-% \end{syntax}
-% Inserts the content of the \meta{box} at the current insertion point
-% rotated by the \meta{angle} (an \meta{fp expression} expressed in degrees).
-% The material is
-% rotated such the the \TeX{} reference point of the box is the center of
-% rotation and remains the reference point after rotation. It is the
-% responsibility of the code using this function to adjust the apparent
-% size of the inserted material.
-% \end{function}
-%
-% \begin{function}[added = 2017-12-13, updated = 2018-04-26]
-% {\driver_box_use_scale:Nnn}
-% \begin{syntax}
-% \cs{driver_box_use_scale:Nnn} \meta{box} \Arg{x-scale} \Arg{y-scale}
-% \end{syntax}
-% Inserts the content of the \meta{box} at the current insertion point
-% scale by the \meta{x-scale} and \meta{y-scale} (both \meta{fp expressions}).
-% The reference point
-% of the material will be unchanged. It is the responsibility of the
-% code using this function to adjust the apparent size of the inserted
-% material.
-% \end{function}
-%
-% \section{Color support}
-%
-% \begin{function}[added = 2018-02-20]{\driver_color_cmyk:nnnn}
-% \begin{syntax}
-% \cs{driver_color_cmyk:nnnn} \Arg{cyan} \Arg{magenta} \Arg{yellow}
-% \Arg{black}
-% \end{syntax}
-% Sets the color to the CMYK values specified, all of which are
-% fp denotations in the range $0$ and $1$. For drawing colors, see
-% \cs{driver_draw_stroke_cmyk:nnnn}, \emph{etc.}
-% \end{function}
-%
-% \begin{function}[added = 2018-02-20]{\driver_color_gray:n}
-% \begin{syntax}
-% \cs{driver_color_gray:n} \Arg{gray}
-% \end{syntax}
-% Sets the color to the grayscale value specified, which is
-% fp denotations in the range $0$ and $1$. For drawing colors, see
-% \cs{driver_draw_stroke_gray:n}, \emph{etc.}
-% \end{function}
-%
-% \begin{function}[added = 2018-02-20]{\driver_color_rgb:nnn}
-% \begin{syntax}
-% \cs{driver_color_rgb:nnn} \Arg{red} \Arg{green} \Arg{blue}
-% \end{syntax}
-% Sets the color to the RGB values specified, all of which are
-% fp denotations in the range $0$ and $1$. For drawing colors, see
-% \cs{driver_draw_stroke_rgb:nnn}, \emph{etc.}
-% \end{function}
-%
-% \begin{function}[added = 2018-02-20]{\driver_color_pickup:N}
-% \begin{syntax}
-% \cs{driver_color_pickup:N} \meta{tl}
-% \end{syntax}
-% In \LaTeXe{} package mode, collects data on the current color from
-% \tn{current@color} and stores it in the low-level format used by \pkg{expl3}
-% in the \meta{tl}.
-% \end{function}
-%
-% \section{Drawing}
-%
-% These functions
-% are inspired heavily by the system layer of \pkg{pgf} (most have the
-% same interface as the same functions in the latter's \cs{pgfsys@\ldots}
-% namespace). They are intended to form the basis for higher level drawing
-% interfaces, which themselves are likely to be further abstracted for user
-% access. Again, this model is heavily inspired by \pkg{pgf} and
-% Ti\textit{k}z.
-%
-% These low level drawing interfaces abstract from the driver raw requirements
-% but still require an appreciation of the concepts of PostScript/PDF/SVG
-% graphic creation.
-%
-% \begin{function}
-% {\driver_draw_begin:, \driver_draw_end:}
-% \begin{syntax}
-% \cs{driver_draw_begin:}
-% \meta{content}
-% \cs{driver_draw_end:}
-% \end{syntax}
-% Defines a drawing environment. This is a scope for the purposes of
-% the graphics state. Depending on the driver, other set up may or may not
-% take place here. The natural size of the \meta{content} should be zero
-% from the \TeX{} perspective: allowance for the size of the content must
-% be made at a higher level (or indeed this can be skipped if the content is
-% to overlap other material).
-% \end{function}
-%
-% \begin{function}
-% {\driver_draw_scope_begin:, \driver_draw_scope_end:}
-% \begin{syntax}
-% \cs{driver_draw_scope_begin:}
-% \meta{content}
-% \cs{driver_draw_scope_end:}
-% \end{syntax}
-% Defines a scope for drawing settings and so on. Changes to the graphic
-% state and concepts such as color or linewidth are localised to a scope.
-% This function pair must never be used if an partial path is under
-% construction: such paths must be entirely contained at one unbroken
-% scope level. Note that scopes do not form \TeX{} groups and may not
-% be aligned with them.
-% \end{function}
-%
-% \subsection{Path construction}
-%
-% \begin{function}{\driver_draw_moveto:nn}
-% \begin{syntax}
-% \cs{driver_draw_move:nn} \Arg{x} \Arg{y}
-% \end{syntax}
-% Moves the current drawing reference point to (\meta{x}, \meta{y});
-% any active transformation matrix applies.
-% \end{function}
-%
-% \begin{function}{\driver_draw_lineto:nn}
-% \begin{syntax}
-% \cs{driver_draw_lineto:nn} \Arg{x} \Arg{y}
-% \end{syntax}
-% Adds a path from the current drawing reference point to
-% (\meta{x}, \meta{y}); any active transformation matrix applies. Note
-% that nothing is drawn until a fill or stroke operation is applied, and that
-% the path may be discarded or used as a clip without appearing itself.
-% \end{function}
-%
-% \begin{function}{\driver_draw_curveto:nnnnnn}
-% \begin{syntax}
-% \cs{driver_draw_curveto:nnnnnn} \Arg{x_1} \Arg{y_1}
-% \Arg{x_2} \Arg{y_2} \Arg{x_3} \Arg{y_3}
-% \end{syntax}
-% Adds a Bezier curve path from the current drawing reference point to
-% (\meta{x_3}, \meta{y_3}), using (\meta{x_1}, \meta{y_1}) and
-% (\meta{x_2}, \meta{y_2}) as control points; any active transformation
-% matrix applies. Note that nothing is drawn until a fill or stroke
-% operation is applied, and that the path may be discarded or used as a clip
-% without appearing itself.
-% \end{function}
-%
-% \begin{function}{\driver_draw_rectangle:nnnn}
-% \begin{syntax}
-% \cs{driver_draw_rectangle:nnnn} \Arg{x} \Arg{y} \Arg{width} \Arg{height}
-% \end{syntax}
-% Adds rectangular path from (\meta{x_1}, \meta{y_1}) of \meta{height}
-% and \meta{width}; any active transformation matrix applies. Note that
-% nothing is drawn until a fill or stroke operation is applied, and that the
-% path may be discarded or used as a clip without appearing itself.
-% \end{function}
-%
-% \begin{function}{\driver_draw_closepath:}
-% \begin{syntax}
-% \cs{driver_draw_closepath:}
-% \end{syntax}
-% Closes an existing path, adding a line from the current point to the
-% start of path. Note that nothing is drawn until a fill or stroke
-% operation is applied, and that the path may be discarded or used as a clip
-% without appearing itself.
-% \end{function}
-%
-% \subsection{Stroking and filling}
-%
-% \begin{function}{\driver_draw_stroke:, \driver_draw_closestroke:}
-% \begin{syntax}
-% \meta{path construction}
-% \cs{driver_draw_stroke:}
-% \end{syntax}
-% Draws a line along the current path, which is also closed in the case of
-% \cs{driver_draw_closestroke:}. The nature of the line drawn
-% is influenced by settings for
-% \begin{itemize}
-% \item Line thickness
-% \item Stroke color (or the current color if no specific stroke color
-% is set)
-% \item Line capping (how non-closed line ends should look)
-% \item Join style (how a bend in the path should be rendered)
-% \item Dash pattern
-% \end{itemize}
-% The path may also be used for clipping.
-% \end{function}
-%
-% \begin{function}{\driver_draw_fill:, \driver_draw_fillstroke:}
-% \begin{syntax}
-% \meta{path construction}
-% \cs{driver_draw_fill:}
-% \end{syntax}
-% Fills the area surrounded by the current path: this will be closed prior
-% to filling if it is not already. The \texttt{fillstroke} version also
-% strokes the path as described for \cs{driver_draw_stroke:}. The fill is
-% influenced by the setting for fill color (or the current color if no
-% specific stroke color is set). The path may also be used for clipping.
-% For paths which are self-intersecting or comprising multiple parts, the
-% determination of which areas are inside the path is made using the non-zero
-% winding number rule unless the even-odd rule is active.
-% \end{function}
-%
-% \begin{function}{\driver_draw_nonzero_rule:, \driver_draw_evenodd_rule:}
-% \begin{syntax}
-% \cs{driver_draw_nonzero_rule:}
-% \end{syntax}
-% Active either the non-zero winding number or the even-odd rule,
-% respectively, for determining what is inside a fill or clip area.
-% For technical reasons, these command are not influenced by scoping
-% and apply on an ongoing basis.
-% \end{function}
-%
-% \begin{function}{\driver_draw_clip:}
-% \begin{syntax}
-% \meta{path construction}
-% \cs{driver_draw_clip:}
-% \end{syntax}
-% Indicates that the current path should be used for clipping, such that
-% any subsequent material outside of the path (but within the current
-% scope) will not be shown. This command should be given once a path is
-% complete but before it is stroked or filled (if appropriate). This
-% command is \emph{not} affected by scoping: it applies to exactly one
-% path as shown.
-% \end{function}
-%
-% \begin{function}{\driver_draw_discardpath:}
-% \begin{syntax}
-% \meta{path construction}
-% \cs{driver_draw_discardpath:}
-% \end{syntax}
-% Discards the current path without stroking or filling. This is primarily
-% useful for paths constructed purely for clipping, as this alone does not
-% end the paths existence.
-% \end{function}
-%
-% \subsection{Stroke options}
-%
-% \begin{function}{\driver_draw_linewidth:n}
-% \begin{syntax}
-% \cs{driver_draw_linewidth:n} \Arg{dimexpr}
-% \end{syntax}
-% Sets the width to be used for stroking to \meta{dimexpr}.
-% \end{function}
-%
-% \begin{function}{\driver_draw_dash_pattern:nn}
-% \begin{syntax}
-% \cs{driver_draw_dash:nn} \Arg{dash pattern} \Arg{phase}
-% \end{syntax}
-% Sets the pattern of dashing to be used when stroking a line. The
-% \meta{dash pattern} should be a comma-separated list of dimension
-% expressions. This is then interpreted as a series of pairs of line-on
-% and line-off lengths. For example \texttt{3pt, 4pt} means that $3$\,pt on,
-% $4$\,pt off, $3$\,pt on, and so on. A more complex pattern will also
-% repeat: \texttt{3pt, 4pt, 1pt, 2pt} results in $3$\,pt on, $4$\,pt off,
-% $1$\,pt on, $2$\,pt off, $3$\,pt on, and so on. An odd number of entries
-% means that the last is repeated, for example \texttt{3pt} is equal to
-% \texttt{3pt, 3pt}. An empty pattern yields a solid line.
-%
-% The \meta{phase} specifies an offset at the start of the cycle. For
-% example, with a pattern \texttt{3pt} a phase of \texttt{1pt} means
-% that the output is $2$\,pt on, $3$\,pt off, $3$\,pt on, $3$\,pt on,
-% \emph{etc.}
-% \end{function}
-%
-% \begin{function}
-% {
-% \driver_draw_cap_butt: ,
-% \driver_draw_cap_rectangle: ,
-% \driver_draw_cap_round:
-% }
-% \begin{syntax}
-% \cs{driver_draw_cap_butt:}
-% \end{syntax}
-% Sets the style of terminal stroke position to one of butt, rectangle or
-% round.
-% \end{function}
-%
-% \begin{function}
-% {
-% \driver_draw_join_bevel: ,
-% \driver_draw_join_miter: ,
-% \driver_draw_join_round:
-% }
-% \begin{syntax}
-% \cs{driver_draw_cap_butt:}
-% \end{syntax}
-% Sets the style of stroke joins to one of bevel, miter or round.
-% \end{function}
-%
-% \begin{function}{\driver_draw_miterlimit:n}
-% \begin{syntax}
-% \cs{driver_draw_miterlimit:n} \Arg{factor}
-% \end{syntax}
-% Sets the miter limit of lines joined as a miter, as described in the
-% PDF and PostScript manuals. The \meta{factor} here is an
-% \meta{fp expression}.
-% \end{function}
-%
-% \subsection{Color}
-%
-% \begin{function}
-% {
-% \driver_draw_color_fill_cmyk:nnnn ,
-% \driver_draw_color_stroke_cmyk:nnnn
-% }
-% \begin{syntax}
-% \cs{driver_draw_color_fill_cmyk:nnnn} \Arg{cyan} \Arg{magenta} \Arg{yellow}
-% \Arg{black}
-% \end{syntax}
-% Sets the color for drawing to the CMYK values specified, all of which are
-% fp denotations in the range $0$ and $1$.
-% \end{function}
-%
-% \begin{function}
-% {
-% \driver_draw_color_fill_gray:n ,
-% \driver_draw_color_stroke_gray:n
-% }
-% \begin{syntax}
-% \cs{driver_draw_color_fill_gray:n} \Arg{gray}
-% \end{syntax}
-% Sets the color for drawing to the grayscale value specified, which is
-% fp denotations in the range $0$ and $1$.
-% \end{function}
-%
-% \begin{function}
-% {
-% \driver_draw_color_fill_rgb:nnn ,
-% \driver_draw_color_stroke_rgb:nnn
-% }
-% \begin{syntax}
-% \cs{driver_draw_color_fill_rgb:nnn} \Arg{red} \Arg{green} \Arg{blue}
-% \end{syntax}
-% Sets the color for drawing to the RGB values specified, all of which are
-% fp denotations in the range $0$ and $1$.
-% \end{function}
-%
-% \subsection{Inserting \TeX{} material}
-%
-% \begin{function}{\driver_draw_box_use:Nnnnn}
-% \begin{syntax}
-% \cs{driver_draw_box_use:Nnnnn} \meta{box}
-% \Arg{a} \Arg{b} \Arg{c} \Arg{d} \Arg{x} \Arg{y}
-% \end{syntax}
-% Inserts the \meta{box} as an hbox with the box reference point placed
-% at ($x$, $y$). The transformation matrix $[a b c d]$ is applied
-% to the box, allowing it to be in synchronisation with any scaling, rotation
-% or skewing applying more generally. Note that \TeX{} material should not
-% be inserted directly into a drawing as it would not be in the correct
-% location. Also note that this function must be used inside a box of zero
-% size, shifted appropriately for the correct result; a low-level engine
-% error may result if this is not the case.
-% \end{function}
-%
-% \subsection{Coordinate system transformations}
-%
-% \begin{function}{\driver_draw_cm:nnnn}
-% \begin{syntax}
-% \cs{driver_draw_cm:nnnn} \Arg{a} \Arg{b} \Arg{c} \Arg{d}
-% \end{syntax}
-% Applies the transformation matrix $[a b c d]$ to the current graphic state.
-% This affects any subsequent items in the same scope but not those already
-% given.
-% \end{function}
-%
-% \section{Graphics inclusion}
-%
-% Graphics inclusion support is closely tied to the higher-level \pkg{l3graphics}
-% module. This arises as information concerning images (\emph{e.g.}~page
-% numbers in multi-page files) is needed to correct cache image data. As
-% such, the driver code here assumes the following are defined
-% \begin{itemize}
-% \item \cs{l_image_decodearray_tl}
-% \item \cs{l_image_interpolate_tl}
-% \item \cs{l_image_page_tl}
-% \item \cs{l_image_pagebox_tl}
-% \end{itemize}
-%
-% Note also that the functions defined will depend on the file types supported
-% by the driver. As such, a calling function should typically test for the
-% existence of an appropriate function to determine if the image file is
-% supported.
-%
-% \begin{function}[added = 2019-05-07]
-% {
-% \driver_graphics_getbb_eps:n,
-% \driver_graphics_getbb_jpg:n,
-% \driver_graphics_getbb_pdf:n,
-% \driver_graphics_getbb_png:n
-% }
-% \begin{syntax}
-% \cs{driver_graphics_getbb_pdf:n} \Arg{file}
-% \end{syntax}
-% These functions load the requested image \meta{file} and obtain the
-% bounding box information on the file. They may also cache the image for
-% subsequent inclusion: this is driver-dependent. The bounding box data
-% will be stored in \cs{l_image_llx_dim}, \cs{l_image_lly_dim},
-% \cs{l_image_urx_dim}, and \cs{l_image_ury_dim} after use of these
-% functions.
-% \end{function}
-%
-% \begin{function}[added = 2019-05-07]
-% {
-% \driver_graphics_include_eps:n,
-% \driver_graphics_include_jpg:n,
-% \driver_graphics_include_pdf:n,
-% \driver_graphics_include_png:n
-% }
-% \begin{syntax}
-% \cs{driver_graphics_include_pdf:n} \Arg{file}
-% \end{syntax}
-% These functions include the appropriate image type at the current position.
-% They should be preceded by use of the matching \texttt{getbb} function to
-% set the bounding box correctly; in some drivers, the \texttt{getbb}
-% function is also responsible for caching the image for later inclusion.
-% \end{function}
-%
-% \section{PDF Features}
-%
-% A range of PDF features are exposed by \pdfTeX{} and \LuaTeX{} in direct PDF
-% output mode, and the vast majority of these are also controllable using
-% the \texttt{(x)dvipdfmx} driver (as DVI instructions are converted directly
-% to PDF). Some of these functions are also available for cases where PDFs
-% are generated by \texttt{dvips}: this depends on being able to pass
-% information through correctly.
-%
-% \subsection{PDF Annotations}
-%
-% \begin{function}[added = 2019-04-10]
-% {\driver_pdf_annotation:nnnn}
-% \begin{syntax}
-% \cs{driver_pdf_annotation:nnnn} \Arg{width} \Arg{height} \Arg{depth} \Arg{dictionary}
-% \end{syntax}
-% Creates a generic PDF annotation of the given \meta{height}, \meta{width}
-% and \meta{depth} and featuring the \meta{dictionary}.
-% \end{function}
-%
-% \begin{function}[added = 2019-04-17, updated = 2019-05-03]
-% {
-% \driver_pdf_link_begin_goto:nnw,
-% \driver_pdf_link_begin_user:nnw,
-% \driver_pdf_link_end:
-% }
-% \begin{syntax}
-% \cs{driver_pdf_link_begin_user:nnw} \Arg{attributes} \Arg{action}
-% \Arg{content}
-% \cs{driver_pdf_link_end:}
-% \cs{driver_pdf_link_begin_goto:nnw} \Arg{attributes} \Arg{target}
-% \Arg{content}
-% \cs{driver_pdf_link_end:}
-% \end{syntax}
-% Creates a link of the \meta{type} |goto| or |user| with the given
-% \meta{attributes}, points toward the \meta{action} and surround the
-% \TeX{} \meta{content}. The |begin| and |end| functions must be given
-% at the same box level. Depending upon the back-end in use, the
-% \meta{content} may be placed in a hbox as part of processing.
-% The |goto| type will automatically add |/Subtype /Link| to the PDF
-% dictionary for the annotation produced; other classes do not add
-% this, so the |/Subtype| must be provided as part of the \meta{action}.
-% \end{function}
-%
-% \begin{function}[EXP, added = 2019-04-09]{\driver_pdf_link_last:}
-% \begin{syntax}
-% \cs{driver_pdf_link_last:}
-% \end{syntax}
-% Expands to the object reference
-% \end{function}
-%
-% \begin{function}[EXP, added = 2019-04-11]{\driver_pdf_link_margin:n}
-% \begin{syntax}
-% \cs{driver_pdf_link_margin:n} \Arg{dimen}
-% \end{syntax}
-% Sets the length of the margin between content and the border of a link.
-% Different back-ends treat the scoping of this value in different ways:
-% \pdfTeX{} and \LuaTeX{} apply this at shipout (so it is global, once per
-% page), whilst with
-% \texttt{dvips} the scope is managed at the PostScript level. For
-% \texttt{(x)dvipdfmx}, this setting applies to \emph{all} annotations
-% (\emph{i.e.}~it is global), and thus it may be necessary to set to
-% \texttt{0pt} to avoid breaking for example animations. In general,
-% this setting should be applied once per document, prior to the
-% first page being shipped out.
-% \end{function}
-%
-% \begin{function}[added = 2019-04-26]{\driver_pdf_destination:nn}
-% \begin{syntax}
-% \cs{driver_pdf_destination:nn} \Arg{name} \Arg{action}
-% \end{syntax}
-% Creates a destination (anchor) called \meta{name}; when a jump is made
-% by a link to the destination, one of the following actions may take
-% place
-% \begin{itemize}
-% \item \texttt{xyz} Move the view such that the target point is at the
-% top-left of the viewer screen
-% \item \texttt{\meta{scale}} As for \texttt{xyz}, but also sets the
-% viewer \meta{scale}
-% \item \texttt{fit} Display the page containing the destination and fit
-% the entire page within the viewer window
-% \item \texttt{fitb} Display the page containing the destination and fit
-% the bounding box of the page within the viewer window
-% \item \texttt{fitbh} Move to the destination page such that the
-% anchor point is at the top of the viewer screen, and scale
-% such that the bounding box fills the viewer width
-% \item \texttt{fitbv} Move to the destination page such that the
-% anchor point is at the left of the viewer screen, and scale
-% such that the bounding box fills the viewer height
-% \item \texttt{fith} Move to the destination page such that the
-% anchor point is at the top of the viewer screen, and scale
-% such that the page fills the viewer width
-% \item \texttt{fitv} Move to the destination page such that the
-% anchor point is at the left of the viewer screen, and scale
-% such that the page fills the viewer height
-% \end{itemize}
-% A \meta{scale} of zero is equivalent to \texttt{xyz}.
-% \end{function}
-%
-% \begin{function}[added = 2019-04-28]{\driver_pdf_destination_rectangle:nn}
-% \begin{syntax}
-% \cs{driver_pdf_destination_rectangle:nn} \Arg{name} \Arg{content}
-% \end{syntax}
-% Creates a destination (anchor) called \meta{name}; when a jump is made
-% by a link to the destination, the viewer will set the zoom such that all
-% of the \meta{content} is visible taking up the full width or height of the
-% viewer area.
-% \end{function}
-%
-% \subsection{PDF Catalogue entries}
-%
-% \begin{function}[added = 2019-04-28]{\driver_pdf_catalog_gput:nn}
-% \begin{syntax}
-% \cs{driver_pdf_catalog_gput:nn} \Arg{key} \Arg{value}
-% \end{syntax}
-% Adds the key--value pair to the PDF catalog. The \meta{key} should
-% be given \emph{without} the leading |/|. The \meta{value} should be
-% a \enquote{raw} PDF dictionary entry, including the |(|/|)| pair for
-% a string, a leading |/| for a boolean, \emph{etc.}
-% \end{function}
-%
-% \begin{function}[added = 2019-04-28]{\driver_pdf_info_gput:nn}
-% \begin{syntax}
-% \cs{driver_pdf_info_gput:nn} \Arg{key} \Arg{value}
-% \end{syntax}
-% Adds the key--value pair to the PDF information. The \meta{key} should
-% be given \emph{without} the leading |/|. The \meta{value} should be
-% a \enquote{raw} PDF dictionary entry, including the |(|/|)| pair for
-% a string or leading |/| for a boolean.
-% \end{function}
-%
-% \subsection{PDF Objects}
-%
-% Objects are used to provide a range of data structures in a PDF. At the
-% driver level, different PDF object types are declared separately. Objects
-% are only \emph{written} to the PDF when referenced.
-%
-% \begin{function}{\driver_pdf_object_new:nn}
-% \begin{syntax}
-% \cs{driver_pdf_object_new:n} \Arg{name} \Arg{type}
-% \end{syntax}
-% Declares \meta{name} as a PDF object. The \texttt{type} should be one of
-% |array| or |dict|, |fstream| or |stream|.
-% \end{function}
-%
-% \begin{function}[EXP]{\driver_pdf_object_ref:n}
-% \begin{syntax}
-% \cs{driver_pdf_object_ref:n} \Arg{object}
-% \end{syntax}
-% Inserts the appropriate information to reference the \meta{object}
-% in for example page resource allocation.
-% \end{function}
-%
-% \begin{function}{\driver_pdf_object_write:nn}
-% \begin{syntax}
-% \cs{driver_pdf_object_write:nn} \Arg{name} \Arg{data}
-% \end{syntax}
-% Writes the \meta{data} as content of the \meta{object}. Depending on the
-% \meta{type} declared for the object, the format required for the
-% \meta{data} will vary
-% \begin{itemize}
-% \item[\texttt{array}] A space-separated list of values
-% \item[\texttt{dict}] Key--value pairs in the form
-% \texttt{/\meta{key} \meta{value}}
-% \item[\texttt{fstream}] Two brace groups: \meta{file name} and
-% \meta{content}
-% \item[\texttt{stream}] Two brace groups: \meta{attributes (dictionary)}
-% and \meta{content}
-% \end{itemize}
-% \end{function}
-%
-% \subsection{PDF structure}
-%
-% \begin{function}{\driver_pdf_compresslevel:n}
-% \begin{syntax}
-% \cs{driver_pdf_compresslevel:n} \Arg{level}
-% \end{syntax}
-% Sets the degree of compression used for PDF files: the \meta{level} should
-% be in the range $0$ to $9$ (higher is more compression). Typically, either
-% compression is disables ($0$) or maximised ($9$). When used with
-% \texttt{(x)dvipdfmx}, this setting may only be applied globally: it should
-% be set only once.
-% \end{function}
-%
-% \begin{function}[added = 2019-05-07]{\driver_pdf_objects:}
-% \begin{syntax}
-% \cs{driver_pdf_compress_objects:n} \Arg{switch}
-% \end{syntax}
-% Enables or disables the compression of non-stream objects when writing
-% the PDF. This depends on the \meta{switch}: either \texttt{true} or
-% \texttt{false}). Compression of non-stream objects is used to
-% reduce the size of PDFs, and typically are enabled as standard. When used
-% with \texttt{(x)dvipdfmx}, object creation can be disabled but not
-% re-enabled, and this setting may only be applied globally: it should
-% be set only once. Note that for \texttt{dvips} this setting has no action,
-% as control of this functionality is dependent on the conversion from
-% PostScript to PDF.
-% \end{function}
-%
-% \begin{function}[EXP, added = 2019-04-11]
-% {\driver_pdf_version_major:, \driver_pdf_version_minor:}
-% \begin{syntax}
-% \cs{driver_pdf_version_major:}
-% \cs{driver_pdf_version_minor:}
-% \end{syntax}
-% Expands to the current value of the major or minor version of PDF being
-% created, a non-negative integer. Where a value is not available at the
-% \TeX{} run level, the result is $-1$. (This is necessary as the minor
-% version may be $0$.)
-% \end{function}
-%
-% \begin{function}[EXP, added = 2019-04-11]
-% {\driver_pdf_version_major_gset:n, \driver_pdf_version_minor_gset:n}
-% \begin{syntax}
-% \cs{driver_pdf_version_major_gset:n} \Arg{integer}
-% \cs{driver_pdf_version_minor_gset:n} \Arg{integer}
-% \end{syntax}
-% Sets the PDF version as specified: the allowable range is not checked
-% at this level.
-% \end{function}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3drivers} Implementation}
-%
-% Nothing to see here: everything is in the subfiles!
-%
-% \end{implementation}
-%
-% \PrintIndex
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx b/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx
index 4f0d3af3ef1..6b319f99231 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3file.dtx b/Master/texmf-dist/source/latex/l3kernel/l3file.dtx
index 886e6011167..ef11f76a971 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3file.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3file.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3final.dtx b/Master/texmf-dist/source/latex/l3kernel/l3final.dtx
index 9695d202e05..0b4747e55a3 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3final.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3final.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx b/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx
index 3b487b0bec1..cfb6c52dac5 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3format.ins b/Master/texmf-dist/source/latex/l3kernel/l3format.ins
index a0ba292e390..35279ca592b 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3format.ins
+++ b/Master/texmf-dist/source/latex/l3kernel/l3format.ins
@@ -64,7 +64,7 @@ and all files in that bundle must be distributed together.
\from{l3expan.dtx} {initex}
\from{l3tl.dtx} {initex}
\from{l3str.dtx} {initex}
- \from{l3quark.dtx} {package}
+ \from{l3quark.dtx} {initex}
\from{l3seq.dtx} {initex}
% ======== FORMAT ONLY =========
\from{l3alloc.dtx} {initex}
@@ -94,8 +94,9 @@ and all files in that bundle must be distributed together.
\from{l3fp-trig.dtx} {initex}
\from{l3fp-convert.dtx} {initex}
\from{l3fp-random.dtx} {initex}
- \from{l3fparray.dtx} {package}
+ \from{l3fparray.dtx} {initex}
\from{l3sort.dtx} {initex}
+ \from{l3str-convert.dtx}{initex}
\from{l3tl-analysis.dtx}{initex}
\from{l3regex.dtx} {initex}
\from{l3box.dtx} {initex}
@@ -111,71 +112,24 @@ and all files in that bundle must be distributed together.
}
}
-\generate
- {
- \file{l3dvipdfmx.ltx}
- {
- \from{l3drivers.dtx} {initex,dvipdfmx}
- \from{l3drivers-basics.dtx} {initex,dvipdfmx}
- \from{l3drivers-color.dtx} {initex,dvipdfmx}
- \from{l3drivers-box.dtx} {initex,dvipdfmx}
- \from{l3drivers-draw.dtx} {initex,dvipdfmx}
- \from{l3drivers-graphics.dtx}{initex,dvipdfmx}
- \from{l3drivers-pdf.dtx} {initex,dvipdfmx}
- }
- }
-\generate
- {
- \file{l3dvips.ltx}
- {
- \from{l3drivers.dtx} {initex,dvips}
- \from{l3drivers-basics.dtx} {initex,dvips}
- \from{l3drivers-color.dtx} {initex,dvips}
- \from{l3drivers-box.dtx} {initex,dvips}
- \from{l3drivers-draw.dtx} {initex,dvips}
- \from{l3drivers-graphics.dtx}{initex,dvips}
- \from{l3drivers-pdf.dtx} {initex,dvips}
- }
- }
-\generate
- {
- \file{l3dvisvgm.ltx}
- {
- \from{l3drivers.dtx} {initex,dvisvgm}
- \from{l3drivers-basics.dtx} {initex,dvisvgm}
- \from{l3drivers-color.dtx} {initex,dvisvgm}
- \from{l3drivers-box.dtx} {initex,dvisvgm}
- \from{l3drivers-draw.dtx} {initex,dvisvgm}
- \from{l3drivers-graphics.dtx}{initex,dvisvgm}
- \from{l3drivers-pdf.dtx} {initex,dvisvgm}
- }
- }
-\generate
- {
- \file{l3pdfmode.ltx}
- {
- \from{l3drivers.dtx} {initex,pdfmode}
- \from{l3drivers-basics.dtx} {initex,pdfmode}
- \from{l3drivers-color.dtx} {initex,pdfmode}
- \from{l3drivers-box.dtx} {initex,pdfmode}
- \from{l3drivers-draw.dtx} {initex,pdfmode}
- \from{l3drivers-graphics.dtx}{initex,pdfmode}
- \from{l3drivers-pdf.dtx} {initex,pdfmode}
- }
- }
-\generate
- {
- \file{l3xdvipdfmx.ltx}
- {
- \from{l3drivers.dtx} {initex,xdvipdfmx}
- \from{l3drivers-basics.dtx} {initex,xdvipdfmx}
- \from{l3drivers-color.dtx} {initex,xdvipdfmx}
- \from{l3drivers-box.dtx} {initex,xdvipdfmx}
- \from{l3drivers-draw.dtx} {initex,xdvipdfmx}
- \from{l3drivers-graphics.dtx}{initex,xdvipdfmx}
- \from{l3drivers-pdf.dtx} {initex,xdvipdfmx}
- }
- }
+% ISO-8859 encodings.
+\generate{%
+ \file{l3str-enc-iso88591.def} {\from{l3str-convert.dtx}{iso88591}}%
+ \file{l3str-enc-iso88592.def} {\from{l3str-convert.dtx}{iso88592}}%
+ \file{l3str-enc-iso88593.def} {\from{l3str-convert.dtx}{iso88593}}%
+ \file{l3str-enc-iso88594.def} {\from{l3str-convert.dtx}{iso88594}}%
+ \file{l3str-enc-iso88595.def} {\from{l3str-convert.dtx}{iso88595}}%
+ \file{l3str-enc-iso88596.def} {\from{l3str-convert.dtx}{iso88596}}%
+ \file{l3str-enc-iso88597.def} {\from{l3str-convert.dtx}{iso88597}}%
+ \file{l3str-enc-iso88598.def} {\from{l3str-convert.dtx}{iso88598}}%
+ \file{l3str-enc-iso88599.def} {\from{l3str-convert.dtx}{iso88599}}%
+ \file{l3str-enc-iso885910.def} {\from{l3str-convert.dtx}{iso885910}}%
+ \file{l3str-enc-iso885911.def} {\from{l3str-convert.dtx}{iso885911}}%
+ \file{l3str-enc-iso885913.def} {\from{l3str-convert.dtx}{iso885913}}%
+ \file{l3str-enc-iso885914.def} {\from{l3str-convert.dtx}{iso885914}}%
+ \file{l3str-enc-iso885915.def} {\from{l3str-convert.dtx}{iso885915}}%
+ \file{l3str-enc-iso885916.def} {\from{l3str-convert.dtx}{iso885916}}%
+}
\generate{\file{l3docstrip.tex}{\from{l3docstrip.dtx}{program}}}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx
index 4029c929517..63a526acf80 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
% \maketitle
%
% \begin{documentation}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx
index 79aa81924ec..d4a5e7bcf53 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx
index 2d5dc0d66ae..4d169181279 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx
index cab359055de..dc65bb1b0bd 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx
index 192a7d447c1..79a2fa3b28d 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx
index e5d41df0b39..d9acdd178af 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx
index 57441d7ebdc..c6ca99f654f 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx
index ff05d8a2260..5dadc84440e 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx
index b45b27d3ea1..352ff795796 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx
index 75e0dd7653d..a618771bc2e 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx
index b1bf6c6ec13..e71bc4cf45e 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
% \maketitle
%
% \begin{documentation}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx
index 9e68208c9cb..2347a106f94 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx
@@ -40,7 +40,7 @@
% {latex-team@latex-project.org}^^A
% }^^A
% }
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx
index 620944118d7..91b5d1a5e17 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx
@@ -49,7 +49,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx
index 0aec3f16fb1..1256fef4295 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3int.dtx b/Master/texmf-dist/source/latex/l3kernel/l3int.dtx
index 5ea71b0afb6..382ff92955a 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3int.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3int.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx b/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx
index 59bbffa95c2..0d3c32b664d 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx b/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx
index 17255a50305..3a197294024 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
@@ -527,6 +527,116 @@
% only a single expansion.
% \end{function}
%
+% \section{Kernel backend functions}
+%
+% These functions are required to pass information to the backend. The nature
+% of these means that they are defined only when the relevant backend is in
+% use.
+%
+% \begin{function}
+% {
+% \__kernel_backend_literal:n,
+% \__kernel_backend_literal:e,
+% \__kernel_backend_literal:x
+% }
+% \begin{syntax}
+% \cs{__kernel_backend_literal:n} \Arg{content}
+% \end{syntax}
+% Adds the \meta{content} literally to the current vertical list as a
+% whatsit. The nature of the \meta{content} will depend on the backend in
+% use.
+% \end{function}
+%
+% \begin{function}
+% {
+% \__kernel_backend_literal_postscript:n,
+% \__kernel_backend_literal_postscript:x
+% }
+% \begin{syntax}
+% \cs{__kernel_backend_literal_postscript:n} \Arg{PostScript}
+% \end{syntax}
+% Adds the \meta{PostScript} literally to the current vertical list as a
+% whatsit. No positioning is applied.
+% \end{function}
+%
+% \begin{function}
+% {
+% \__kernel_backend_literal_pdf:n,
+% \__kernel_backend_literal_pdf:x
+% }
+% \begin{syntax}
+% \cs{__kernel_backend_literal_pdf:n} \Arg{PDF instructions}
+% \end{syntax}
+% Adds the \meta{PDF instructions} literally to the current vertical list as
+% a whatsit. No positioning is applied.
+% \end{function}
+%
+% \begin{function}
+% {
+% \__kernel_backend_literal_svg:n,
+% \__kernel_backend_literal_svg:x
+% }
+% \begin{syntax}
+% \cs{__kernel_backend_literal_svg:n} \Arg{SVG instructions}
+% \end{syntax}
+% Adds the \meta{SVG instructions} literally to the current vertical list as
+% a whatsit. No positioning is applied.
+% \end{function}
+%
+% \begin{function}
+% {
+% \__kernel_backend_postscript:n,
+% \__kernel_backend_postscript:x
+% }
+% \begin{syntax}
+% \cs{__kernel_backend_postscript:n} \Arg{PostScript}
+% \end{syntax}
+% Adds the \meta{PostScript} to the current vertical list as a
+% whatsit. The PostScript reference point is adjusted to match the
+% current position. The PostScript is inserted inside a |SDict begin|/|end|
+% pair.
+% \end{function}
+%
+% \begin{function}{\__kernel_backend_postscript_header:n}
+% \begin{syntax}
+% \cs{__kernel_backend_postscript_header:n} \Arg{PostScript}
+% \end{syntax}
+% Adds the \meta{PostScript} to the PostScript header.
+% \end{function}
+%
+% \begin{function}{\__kernel_backend_align_begin:, \__kernel_backend_align_end:}
+% \begin{syntax}
+% \cs{__kernel_backend_align_begin:}
+% \meta{PostScript literals}
+% \cs{__kernel_backend_align_end:}
+% \end{syntax}
+% Arranges to align the PostScript and DVI current positions and scales.
+% \end{function}
+%
+% \begin{function}{\__kernel_backend_scope_begin:, \__kernel_backend_scope_end:}
+% \begin{syntax}
+% \cs{__kernel_backend_scope_begin:}
+% \meta{content}
+% \cs{__kernel_backend_scope_end:}
+% \end{syntax}
+% Creates a scope for instructions at the backend level.
+% \end{function}
+%
+% \begin{function}
+% {
+% \__kernel_backend_matrix:n,
+% \__kernel_backend_matrix:x
+% }
+% \begin{syntax}
+% \cs{__kernel_backend_matrix:n} \Arg{matrix}
+% \end{syntax}
+% Applies the \meta{matrix} to the current transformation matrix.
+% \end{function}
+%
+% \begin{function}{\l__kernel_color_stack_int}
+% The color stack used in \pdfTeX{} and \LuaTeX{} for the main color.
+% \end{function}
+%
% \end{implementation}
%
% \PrintIndex
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx b/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx
index 511d1fd9b7a..bf34793cd57 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
@@ -125,8 +125,8 @@
% \cs{keys_define:nn} \Arg{module} \Arg{keyval list}
% \end{syntax}
% Parses the \meta{keyval list} and defines the keys listed there for
-% \meta{module}. The \meta{module} name should be a text value, but
-% there are no restrictions on the nature of the text. In practice the
+% \meta{module}. The \meta{module} name is treated as a string.
+% In practice the
% \meta{module} should be chosen to be unique to the module in question
% (unless deliberately adding keys to an existing module).
%
@@ -1346,7 +1346,8 @@
{
\@@_property_find:n {#1}
\cs_if_exist:cTF { \c_@@_props_root_tl \l_@@_property_tl }
- { \@@_define_code:n {#2} }
+ { \@@_define_code:n {#2}
+ }
{
\tl_if_empty:NF \l_@@_property_tl
{
@@ -1386,7 +1387,7 @@
{
\tl_if_empty:NF \l_@@_module_tl
{ \l_@@_module_tl / }
- #1
+ \tl_trim_spaces:n {#1}
}
\tl_set:Nn \l_@@_property_tl { . #2 }
}
@@ -1436,7 +1437,7 @@
{ \use:c { \c_@@_props_root_tl \l_@@_property_tl } {#1} }
}
\exp_last_unbraced:NNNNo
- \cs_new:Npn \__keys_define_code:w #1 \c_colon_str #2 \q_stop
+ \cs_new:Npn \@@_define_code:w #1 \c_colon_str #2 \q_stop
{ \tl_if_empty:nTF {#2} }
% \end{macrocode}
% \end{macro}
@@ -2680,12 +2681,41 @@
% \end{macro}
%
% \begin{macro}[EXP]{\@@_trim_spaces:n}
-% Used in a few places so worth handling as a dedicated function.
+% \begin{macro}[EXP]
+% {
+% \@@_trim_spaces_auxi:w ,
+% \@@_trim_spaces_auxii:w ,
+% \@@_trim_spaces_auxiii:w
+% }
+% Space stripping has to allow for the fact that the key here might have
+% several parts, and spaces need to be stripped from each part.
% \begin{macrocode}
\cs_new:Npn \@@_trim_spaces:n #1
- { \tl_trim_spaces:o { \tl_to_str:n {#1} } }
+ {
+ \exp_after:wN \@@_trim_spaces_auxi:w \tl_to_str:n {#1}
+ / \q_nil \q_stop
+
+ }
+\cs_new:Npn \@@_trim_spaces_auxi:w #1 / #2 \q_stop
+ {
+ \quark_if_nil:nTF {#2}
+ { \tl_trim_spaces:n {#1} }
+ { \@@_trim_spaces_auxii:w #1 / #2 }
+ }
+\cs_new:Npn \@@_trim_spaces_auxii:w #1 / #2 / \q_nil
+ {
+ \tl_trim_spaces:n {#1}
+ \@@_trim_spaces_auxiii:w #2 / \q_recursion_tail / \q_recursion_stop
+ }
+\cs_set:Npn \@@_trim_spaces_auxiii:w #1 /
+ {
+ \quark_if_recursion_tail_stop:n {#1}
+ \tl_trim_spaces:n { / #1 }
+ \@@_trim_spaces_auxiii:w
+ }
% \end{macrocode}
% \end{macro}
+% \end{macro}
%
% \begin{macro}[EXP,pTF]{\keys_if_exist:nn}
% A utility for others to see if a key exists.
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx b/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx
index a67517b667f..fee6219c20e 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx b/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx
index 1b623da7f46..3d9bce20273 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx b/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx
index 4f3d8a69327..733c6b5e844 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
@@ -290,7 +290,8 @@
% \end{syntax}
% Issues \meta{module} error \meta{message}, passing \meta{arg one} to
% \meta{arg four} to the text-creating functions. After issuing a
-% fatal error the \TeX{} run halts.
+% fatal error the \TeX{} run halts. No PDF file will be produced in
+% this case (DVI mode runs may produce a truncated DVI file).
% \end{function}
%
% \begin{function}[updated = 2012-08-11]
@@ -509,10 +510,10 @@
%<@@=msg>
% \end{macrocode}
%
-% \begin{variable}{\l_@@_tmp_tl}
+% \begin{variable}{\l_@@_internal_tl}
% A general scratch for the module.
% \begin{macrocode}
-\tl_new:N \l_@@_tmp_tl
+\tl_new:N \l_@@_internal_tl
% \end{macrocode}
% \end{variable}
%
@@ -674,31 +675,48 @@
% \subsection{Showing messages: low level mechanism}
%
% \begin{macro}{\@@_interrupt:Nnnn}
+% \begin{macro}{\@@_no_more_text:nnnn}
% The low-level interruption macro is rather opaque, unfortunately.
% Depending on the availability of more information there is a choice
% of how to set up the further help. We feed the extra help text and
% the message itself to a wrapping auxiliary, in this order because we
% must first setup \TeX{}'s \tn{errhelp} register before issuing an
-% \tn{errmessage}.
+% \tn{errmessage}. To deal with the various cases of critical or fatal
+% errors with and without help text, there is a bit of argument-passing
+% to do.
% \begin{macrocode}
-\cs_new_protected:Npn \@@_interrupt:Nnnn #1#2#3#4
+\cs_new_protected:Npn \@@_interrupt:NnnnN #1#2#3#4#5
{
\str_set:Nx \l_@@_text_str { #1 {#2} }
\str_set:Nx \l_@@_name_str { \msg_module_name:n {#2} }
- \tl_if_empty:nTF {#4}
+ \cs_if_eq:cNTF
+ { \c_@@_more_text_prefix_tl #2 / #3 }
+ \@@_no_more_text:nnnn
{
- \@@_interrupt_wrap:nnn {#3}
+ \@@_interrupt_wrap:nnn
+ { \use:c { \c_@@_text_prefix_tl #2 / #3 } #4 }
{ \c_@@_continue_text_tl }
- { \c_@@_no_info_text_tl }
+ {
+ \c_@@_no_info_text_tl
+ \tl_if_empty:NF #5
+ { \\ \\ #5 }
+ }
}
{
- \@@_interrupt_wrap:nnn {#3}
+ \@@_interrupt_wrap:nnn
+ { \use:c { \c_@@_text_prefix_tl #2 / #3 } #4 }
{ \c_@@_help_text_tl }
- {#4}
+ {
+ \use:c { \c_@@_more_text_prefix_tl #2 / #3 } #4
+ \tl_if_empty:NF #5
+ { \\ \\ #5 }
+ }
}
}
+\cs_new:Npn \@@_no_more_text:nnnn #1#2#3#4 { }
% \end{macrocode}
% \end{macro}
+% \end{macro}
%
% \begin{macro}{\@@_interrupt_wrap:nnn}
% \begin{macro}{\@@_interrupt_text:n, \@@_interrupt_more_text:n}
@@ -730,13 +748,13 @@
{ ~ }
}
{ } \@@_interrupt_text:n
- \iow_wrap:nnnN { \l_@@_tmp_tl \\ \\ #2 } { } { }
+ \iow_wrap:nnnN { \l_@@_internal_tl \\ \\ #2 } { } { }
\@@_interrupt:n
}
\cs_new_protected:Npn \@@_interrupt_text:n #1
{
\group_end:
- \tl_set:Nn \l_@@_tmp_tl {#1}
+ \tl_set:Nn \l_@@_internal_tl {#1}
}
\cs_new_protected:Npn \@@_interrupt_more_text:n #1
{ \exp_args:Nx \tex_errhelp:D { #1 \iow_newline: } }
@@ -967,19 +985,27 @@
% \msg_fatal:nnxx ,
% \msg_fatal:nnx
% }
-% For fatal errors, after the error message \TeX{} bails out.
+% \begin{macro}{\@@_fatal_exit:}
+% For fatal errors, after the error message \TeX{} bails out. We force
+% a bail out rather than using \tn{end} as this means it does not
+% matter if we are in a context where normally the run cannot end.
% \begin{macrocode}
\@@_class_new:nn { fatal }
{
- \@@_interrupt:Nnnn
- \msg_fatal_text:n
- {#1}
- { \use:c { \c_@@_text_prefix_tl #1 / #2 } {#3} {#4} {#5} {#6} }
- { \c_@@_fatal_text_tl }
- \tex_end:D
+ \@@_interrupt:NnnnN
+ \msg_fatal_text:n {#1} {#2}
+ { {#3} {#4} {#5} {#6} }
+ \c_@@_fatal_text_tl
+ \@@_fatal_exit:
+ }
+ \cs_new_protected:Npn \@@_fatal_exit:
+ {
+ \tex_batchmode:D
+ \tex_read:D -1 to \l_@@_internal_tl
}
% \end{macrocode}
% \end{macro}
+% \end{macro}
%
% \begin{macro}
% {
@@ -997,11 +1023,10 @@
% \begin{macrocode}
\@@_class_new:nn { critical }
{
- \@@_interrupt:Nnnn
- \msg_critical_text:n
- {#1}
- { \use:c { \c_@@_text_prefix_tl #1 / #2 } {#3} {#4} {#5} {#6} }
- { \c_@@_critical_text_tl }
+ \@@_interrupt:NnnnN
+ \msg_critical_text:n {#1} {#2}
+ { {#3} {#4} {#5} {#6} }
+ \c_@@_critical_text_tl
\tex_endinput:D
}
% \end{macrocode}
@@ -1019,33 +1044,19 @@
% \msg_error:nnxx ,
% \msg_error:nnx
% }
-% \begin{macro}{\@@_error:cnnnnn, \@@_no_more_text:nnnn}
% For an error, the interrupt routine is called. We check if there is
% a \enquote{more text} by comparing that control sequence with a
% permanently empty text.
% \begin{macrocode}
\@@_class_new:nn { error }
{
- \@@_error:cnnnnn
- { \c_@@_more_text_prefix_tl #1 / #2 }
- {#3} {#4} {#5} {#6}
- {
- \@@_interrupt:Nnnn
- \msg_error_text:n
- {#1}
- { \use:c { \c_@@_text_prefix_tl #1 / #2 } {#3} {#4} {#5} {#6} }
- }
+ \@@_interrupt:NnnnN
+ \msg_error_text:n {#1} {#2}
+ { {#3} {#4} {#5} {#6} }
+ \c_empty_tl
}
- \cs_new_protected:Npn \@@_error:cnnnnn #1#2#3#4#5#6
- {
- \cs_if_eq:cNTF {#1} \@@_no_more_text:nnnn
- { #6 { } }
- { #6 { \use:c {#1} {#2} {#3} {#4} {#5} } }
- }
- \cs_new:Npn \@@_no_more_text:nnnn #1#2#3#4 { }
% \end{macrocode}
% \end{macro}
-% \end{macro}
%
% \begin{macro}
% {
@@ -1215,13 +1226,13 @@
{
\tl_if_empty:nF {#1}
{ \exp_args:No \iow_term:n { \use_none:n #1 } }
- \tl_set:Nn \l_@@_tmp_tl {#2}
+ \tl_set:Nn \l_@@_internal_tl {#2}
\__kernel_iow_with:Nnn \tex_newlinechar:D { 10 }
{
\__kernel_iow_with:Nnn \tex_errorcontextlines:D { -1 }
{
\tex_showtokens:D \exp_after:wN \exp_after:wN \exp_after:wN
- { \exp_after:wN \l_@@_tmp_tl }
+ { \exp_after:wN \l_@@_internal_tl }
}
}
}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3names.dtx b/Master/texmf-dist/source/latex/l3kernel/l3names.dtx
index ed464e73e3a..523a1718c35 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3names.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3names.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx b/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx
index 8380415d069..f52242e1351 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx b/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx
index 7658d804780..442e22b1333 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx b/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx
index 6a5b3f4cf5a..1d791ad9199 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
@@ -222,7 +222,7 @@
% \end{syntax}
% Tests if \meta{token} contains only the marker
% \cs{q_recursion_tail}, and if so uses
-% \cs{use_none_delimit_by_q_recursion_stop:w} to terminate the
+% \cs{use_i_delimit_by_q_recursion_stop:w} to terminate the
% recursion that this belongs to. The
% recursion input must include the marker tokens \cs{q_recursion_tail}
% and \cs{q_recursion_stop} as the last two items. The \meta{insertion}
@@ -237,7 +237,7 @@
% \end{syntax}
% Tests if the \meta{token list} contains only
% \cs{q_recursion_tail}, and if so uses
-% \cs{use_none_delimit_by_q_recursion_stop:w} to terminate the
+% \cs{use_i_delimit_by_q_recursion_stop:w} to terminate the
% recursion that this belongs to. The
% recursion input must include the marker tokens \cs{q_recursion_tail}
% and \cs{q_recursion_stop} as the last two items. The \meta{insertion}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx b/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx
index 7246e30ed7f..0b9b3a675ec 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
@@ -706,7 +706,7 @@
% \begin{itemize}
% \item Shift arrays so that the useful information starts at
% position~$1$.
-% \item Only build \c{...} once.
+% \item Only build |\c{...}| once.
% \item Use arrays for the left and right state stacks when
% compiling a regex.
% \item Should \cs{__regex_action_free_group:n} only be used for greedy
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx b/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx
index 91051b576a4..e9d47de6a00 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx b/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx
index eded1d719ee..719fd507046 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
@@ -940,7 +940,7 @@
% \cs{muskip_sub:Nn} \meta{muskip} \Arg{muskip expression}
% \end{syntax}
% Subtracts the result of the \meta{muskip expression} from the
-% current content of the \meta{skip}.
+% current content of the \meta{muskip}.
% \end{function}
%
% \section{Using \texttt{muskip} expressions and variables}
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx b/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx
index 9b2b0fdc1f8..c467a056590 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-convert.dtx b/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx
index fb218771a5a..90e625f61b0 100644
--- a/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-convert.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3str-convert.dtx
@@ -11,7 +11,7 @@
%
% https://www.latex-project.org/lppl.txt
%
-% This file is part of the "l3experimental bundle" (The Work in LPPL)
+% This file is part of the "l3kernel bundle" (The Work in LPPL)
% and all files in that bundle must be distributed together.
%
% -----------------------------------------------------------------------
@@ -22,12 +22,8 @@
%
% for those people who are interested.
%
-%<*driver|package>
-\RequirePackage{expl3}
-%</driver|package>
%<*driver>
-\documentclass[full]{l3doc}
-\usepackage{amsmath}
+\documentclass[full,kernel]{l3doc}
\begin{document}
\DocInput{\jobname.dtx}
\end{document}
@@ -48,11 +44,10 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
-% \newcommand{\hexnum}[1]{\text{\texttt{\char`\"}#1}}
% \begin{documentation}
%
% \section{Encoding and escaping schemes}
@@ -191,6 +186,19 @@
% encoding. Instead, the \meta{false code} is performed.
% \end{function}
%
+% \section{Creating $8$-bit mappings}
+%
+% \begin{function}{\str_declare_eight_bit_encoding:nnn}
+% \begin{syntax}
+% \cs{str_declare_eight_bit_encoding:nnn} \Arg{name} \Arg{mapping} \Arg{missing}
+% \end{syntax}
+% Declares the encoding \meta{name} to map bytes to Unicode
+% characters according to the \meta{mapping}, and map those bytes
+% which are not mentioned in the \meta{mapping} either to the
+% replacement character (if they appear in \meta{missing}), or to
+% themselves.
+% \end{function}
+%
% \section{Possibilities, and things to do}
%
% Encoding/escaping-related tasks.
@@ -225,7 +233,7 @@
%
% \begin{implementation}
%
-% \section{\pkg{l3str} implementation}
+% \section{\pkg{l3str-convert} implementation}
%
% \begin{macrocode}
%<*initex|package>
@@ -235,23 +243,8 @@
%<@@=str>
% \end{macrocode}
%
-% \begin{macrocode}
-\ProvidesExplPackage{l3str-convert}{2019-05-28}{}
- {L3 Experimental string encoding conversions}
-% \end{macrocode}
-%
% \subsection{Helpers}
%
-% \subsubsection{A function unrelated to strings}
-%
-% \begin{macro}[EXP]{\use_ii_i:nn}
-% A function used to swap its arguments.
-% \begin{macrocode}
-\cs_if_exist:NF \use_ii_i:nn
- { \cs_new:Npn \use_ii_i:nn #1#2 { #2 #1 } }
-% \end{macrocode}
-% \end{macro}
-%
% \subsubsection{Variables and constants}
%
% \begin{macro}{\@@_tmp:w}
@@ -1087,18 +1080,9 @@
% All the 8-bit encodings which \pkg{l3str} supports rely on the same
% internal functions.
%
-% \begin{macro}{\@@_declare_eight_bit_encoding:nnn}
-% \begin{syntax}
-% \cs{@@_declare_eight_bit_encoding:nnn} \Arg{name} \Arg{mapping} \Arg{missing}
-% \end{syntax}
-% This declares the encoding \meta{name} to map bytes to Unicode
-% characters according to the \meta{mapping}, and map those bytes
-% which are not mentioned in the \meta{mapping} either to the
-% replacement character (if they appear in \meta{missing}), or to
-% themselves.
-%
+% \begin{macro}{\str_declare_eight_bit_encoding:nnn}
% All the 8-bit encoding definition file start with
-% \cs{@@_declare_eight_bit_encoding:nnn} \Arg{encoding name}
+% \cs{str_declare_eight_bit_encoding:nnn} \Arg{encoding name}
% \Arg{mapping} \Arg{missing bytes}. The \meta{mapping} argument is a
% token list of pairs \Arg{byte} \Arg{Unicode} expressed in uppercase
% hexadecimal notation. The \meta{missing} argument is a token list
@@ -1106,7 +1090,7 @@
% \meta{mapping} nor the \meta{missing} lists maps to the same code
% point in Unicode.
% \begin{macrocode}
-\cs_new_protected:Npn \@@_declare_eight_bit_encoding:nnn #1#2#3
+\cs_new_protected:Npn \str_declare_eight_bit_encoding:nnn #1#2#3
{
\tl_set:Nn \l_@@_internal_tl {#1}
\cs_new_protected:cpn { @@_convert_decode_#1: }
@@ -1299,11 +1283,7 @@
}
% \end{macrocode}
%
-% \begin{macrocode}
-%</initex|package>
-% \end{macrocode}
-%
-% \subsection{Escaping definition files}
+% \subsection{Escaping definitions}
%
% Several of those encodings are defined by the pdf file format. The
% following byte storage methods are defined:
@@ -1330,7 +1310,6 @@
% hexadecimal digits gets |0| appended to it: this is equivalent to
% appending a |0| in all cases, and dropping it if it is alone.
% \begin{macrocode}
-%<*hex>
\cs_new_protected:Npn \@@_convert_unescape_hex:
{
\group_begin:
@@ -1377,7 +1356,6 @@
Some~characters~in~the~string~you~asked~to~convert~are~not~
hexadecimal~digits~(0-9,~A-F,~a-f)~nor~spaces.
}
-%</hex>
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -1408,7 +1386,6 @@
% flag, and call the looping function followed by the two characters
% (remove \cs{use_i:nnn}).
% \begin{macrocode}
-%<*name|url>
\cs_set_protected:Npn \@@_tmp:w #1#2#3
{
\cs_new_protected:cpn { @@_convert_unescape_#2: }
@@ -1455,15 +1432,10 @@
two~hexadecimal~digits.~This~is~invalid~in~the~escaping~'#2'.
}
}
-%</name|url>
-%<*name>
\exp_after:wN \@@_tmp:w \c_hash_str { name }
\@@_unescape_name_loop:wNN
-%</name>
-%<*url>
\exp_after:wN \@@_tmp:w \c_percent_str { url }
\@@_unescape_url_loop:wNN
-%</url>
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -1497,7 +1469,6 @@
% end-of-line are ignored. If followed by anything else, the backslash
% is ignored, raising the error flag.
% \begin{macrocode}
-%<*string>
\group_begin:
\char_set_catcode_other:N \^^J
\char_set_catcode_other:N \^^M
@@ -1586,7 +1557,6 @@
of~a~line.
}
\group_end:
-%</string>
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -1602,12 +1572,10 @@
% \begin{macro}[rEXP]{\@@_escape_hex_char:N}
% Loop and convert each byte to hexadecimal.
% \begin{macrocode}
-%<*hex>
\cs_new_protected:Npn \@@_convert_escape_hex:
{ \@@_convert_gmap:N \@@_escape_hex_char:N }
\cs_new:Npn \@@_escape_hex_char:N #1
{ \@@_output_hexadecimal:n { `#1 } }
-%</hex>
% \end{macrocode}
% \end{macro}
% \end{macro}
@@ -1624,7 +1592,6 @@
% hash-encoded, and characters in the \cs{c_@@_escape_name_str} are
% encoded.
% \begin{macrocode}
-%<*name>
\str_const:Nn \c_@@_escape_name_not_str { ! " $ & ' } %$
\str_const:Nn \c_@@_escape_name_str { {}/<>[] }
\cs_new_protected:Npn \@@_convert_escape_name:
@@ -1648,7 +1615,6 @@
\fi:
\fi:
}
-%</name>
% \end{macrocode}
% \end{variable}
% \end{variable}
@@ -1664,7 +1630,6 @@
% (and including) \texttt{del}, are converted to octal. One backslash
% is added before each parenthesis and backslash.
% \begin{macrocode}
-%<*string>
\str_const:Nx \c_@@_escape_string_str
{ \c_backslash_str ( ) }
\cs_new_protected:Npn \@@_convert_escape_string:
@@ -1697,7 +1662,6 @@
\fi:
\fi:
}
-%</string>
% \end{macrocode}
% \end{variable}
% \end{macro}
@@ -1710,7 +1674,6 @@
% This function is similar to \cs{@@_convert_escape_name:}, escaping
% different characters.
% \begin{macrocode}
-%<*url>
\cs_new_protected:Npn \@@_convert_escape_url:
{ \@@_convert_gmap:N \@@_escape_url_char:N }
\cs_new:Npn \@@_escape_url_char:N #1
@@ -1732,13 +1695,12 @@
\fi:
\fi:
}
-%</url>
% \end{macrocode}
% \end{macro}
% \end{macro}
% \end{macro}
%
-% \subsection{Encoding definition files}
+% \subsection{Encoding definitions}
%
% The \texttt{native} encoding is automatically defined. Other encodings
% are loaded as needed. The following encodings are supported:
@@ -1752,10 +1714,6 @@
%
% \subsubsection{\textsc{utf-8} support}
%
-% \begin{macrocode}
-%<*utf8>
-% \end{macrocode}
-%
% \begin{macro}{\@@_convert_encode_utf8:}
% \begin{macro}[rEXP]{\@@_encode_utf_viii_char:n}
% \begin{macro}[rEXP]{\@@_encode_utf_viii_loop:wwnnw}
@@ -2070,16 +2028,11 @@
% \end{macro}
% \end{macro}
%
-% \begin{macrocode}
-%</utf8>
-% \end{macrocode}
-%
% \subsubsection{\textsc{utf-16} support}
%
% The definitions are done in a category code regime where the bytes
% $254$ and $255$ used by the byte order mark have catcode~$12$.
% \begin{macrocode}
-%<*utf16>
\group_begin:
\char_set_catcode_other:N \^^fe
\char_set_catcode_other:N \^^ff
@@ -2398,7 +2351,6 @@
% Restore the original catcodes of bytes $254$ and $255$.
% \begin{macrocode}
\group_end:
-%</utf16>
% \end{macrocode}
%
% \subsubsection{\textsc{utf-32} support}
@@ -2407,7 +2359,6 @@
% $0$, $254$ and $255$ used by the byte order mark have catcode
% \enquote{other}.
% \begin{macrocode}
-%<*utf32>
\group_begin:
\char_set_catcode_other:N \^^00
\char_set_catcode_other:N \^^fe
@@ -2614,7 +2565,10 @@
% Restore the original catcodes of bytes $0$, $254$ and $255$.
% \begin{macrocode}
\group_end:
-%</utf32>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</initex|package>
% \end{macrocode}
%
% \subsubsection{\textsc{iso 8859} support}
@@ -2624,7 +2578,7 @@
% family, we keep track only of differences, and of unassigned bytes.
% \begin{macrocode}
%<*iso88591>
-\@@_declare_eight_bit_encoding:nnn { iso88591 }
+\str_declare_eight_bit_encoding:nnn { iso88591 }
{
}
{
@@ -2634,7 +2588,7 @@
%
% \begin{macrocode}
%<*iso88592>
-\@@_declare_eight_bit_encoding:nnn { iso88592 }
+\str_declare_eight_bit_encoding:nnn { iso88592 }
{
{ A1 } { 0104 }
{ A2 } { 02D8 }
@@ -2701,7 +2655,7 @@
%
% \begin{macrocode}
%<*iso88593>
-\@@_declare_eight_bit_encoding:nnn { iso88593 }
+\str_declare_eight_bit_encoding:nnn { iso88593 }
{
{ A1 } { 0126 }
{ A2 } { 02D8 }
@@ -2746,7 +2700,7 @@
%
% \begin{macrocode}
%<*iso88594>
-\@@_declare_eight_bit_encoding:nnn { iso88594 }
+\str_declare_eight_bit_encoding:nnn { iso88594 }
{
{ A1 } { 0104 }
{ A2 } { 0138 }
@@ -2806,7 +2760,7 @@
%
% \begin{macrocode}
%<*iso88595>
-\@@_declare_eight_bit_encoding:nnn { iso88595 }
+\str_declare_eight_bit_encoding:nnn { iso88595 }
{
{ A1 } { 0401 }
{ A2 } { 0402 }
@@ -2910,7 +2864,7 @@
%
% \begin{macrocode}
%<*iso88596>
-\@@_declare_eight_bit_encoding:nnn { iso88596 }
+\str_declare_eight_bit_encoding:nnn { iso88596 }
{
{ AC } { 060C }
{ BB } { 061B }
@@ -3000,7 +2954,7 @@
%
% \begin{macrocode}
%<*iso88597>
-\@@_declare_eight_bit_encoding:nnn { iso88597 }
+\str_declare_eight_bit_encoding:nnn { iso88597 }
{
{ A1 } { 2018 }
{ A2 } { 2019 }
@@ -3089,7 +3043,7 @@
%
% \begin{macrocode}
%<*iso88598>
-\@@_declare_eight_bit_encoding:nnn { iso88598 }
+\str_declare_eight_bit_encoding:nnn { iso88598 }
{
{ AA } { 00D7 }
{ BA } { 00F7 }
@@ -3166,7 +3120,7 @@
%
% \begin{macrocode}
%<*iso88599>
-\@@_declare_eight_bit_encoding:nnn { iso88599 }
+\str_declare_eight_bit_encoding:nnn { iso88599 }
{
{ D0 } { 011E }
{ DD } { 0130 }
@@ -3182,7 +3136,7 @@
%
% \begin{macrocode}
%<*iso885910>
-\@@_declare_eight_bit_encoding:nnn { iso885910 }
+\str_declare_eight_bit_encoding:nnn { iso885910 }
{
{ A1 } { 0104 }
{ A2 } { 0112 }
@@ -3238,7 +3192,7 @@
%
% \begin{macrocode}
%<*iso885911>
-\@@_declare_eight_bit_encoding:nnn { iso885911 }
+\str_declare_eight_bit_encoding:nnn { iso885911 }
{
{ A1 } { 0E01 }
{ A2 } { 0E02 }
@@ -3339,7 +3293,7 @@
%
% \begin{macrocode}
%<*iso885913>
-\@@_declare_eight_bit_encoding:nnn { iso885913 }
+\str_declare_eight_bit_encoding:nnn { iso885913 }
{
{ A1 } { 201D }
{ A5 } { 201E }
@@ -3405,7 +3359,7 @@
%
% \begin{macrocode}
%<*iso885914>
-\@@_declare_eight_bit_encoding:nnn { iso885914 }
+\str_declare_eight_bit_encoding:nnn { iso885914 }
{
{ A1 } { 1E02 }
{ A2 } { 1E03 }
@@ -3446,7 +3400,7 @@
%
% \begin{macrocode}
%<*iso885915>
-\@@_declare_eight_bit_encoding:nnn { iso885915 }
+\str_declare_eight_bit_encoding:nnn { iso885915 }
{
{ A4 } { 20AC }
{ A6 } { 0160 }
@@ -3464,7 +3418,7 @@
%
% \begin{macrocode}
%<*iso885916>
-\@@_declare_eight_bit_encoding:nnn { iso885916 }
+\str_declare_eight_bit_encoding:nnn { iso885916 }
{
{ A1 } { 0104 }
{ A2 } { 0105 }
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3str.dtx b/Master/texmf-dist/source/latex/l3kernel/l3str.dtx
index 213625ab677..2174e1d1787 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3str.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3str.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx b/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx
index b411adb645e..f1daed203cb 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx b/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx
index 1a32c91153a..83f80530cef 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx b/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx
index 9c6fb5f7bf7..dbbd36b8078 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3token.dtx b/Master/texmf-dist/source/latex/l3kernel/l3token.dtx
index 29581bb5c9b..bf98314907d 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3token.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3token.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
diff --git a/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx b/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx
index 77675742962..c671f5da53c 100644
--- a/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx
+++ b/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2019-05-28}
+% \date{Released 2019-07-01}
%
% \maketitle
%
diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3benchmark/l3benchmark.sty b/Master/texmf-dist/tex/latex/l3experimental/l3benchmark/l3benchmark.sty
index 6c8cdc9cfde..8bd62620334 100644
--- a/Master/texmf-dist/tex/latex/l3experimental/l3benchmark/l3benchmark.sty
+++ b/Master/texmf-dist/tex/latex/l3experimental/l3benchmark/l3benchmark.sty
@@ -20,7 +20,7 @@
%%
%% File: l3benchmark.dtx
\RequirePackage{expl3}
-\ProvidesExplPackage{l3benchmark}{2019-05-28}{}
+\ProvidesExplPackage{l3benchmark}{2019-07-01}{}
{L3 Experimental benchmarking}
\sys_if_engine_luatex:TF
{
diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3cctab/l3cctab.sty b/Master/texmf-dist/tex/latex/l3experimental/l3cctab/l3cctab.sty
index d25f70e3f34..cffe3a07e4d 100644
--- a/Master/texmf-dist/tex/latex/l3experimental/l3cctab/l3cctab.sty
+++ b/Master/texmf-dist/tex/latex/l3experimental/l3cctab/l3cctab.sty
@@ -20,7 +20,7 @@
%%
%% File: l3cctab.dtx
\RequirePackage{expl3}
-\ProvidesExplPackage{l3cctab}{2019-05-28}{}
+\ProvidesExplPackage{l3cctab}{2019-07-01}{}
{L3 Experimental category code tables}
\int_new:N \g__cctab_allocate_int
\int_gset:Nn \g__cctab_allocate_int { -1 }
diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3color/l3color.sty b/Master/texmf-dist/tex/latex/l3experimental/l3color/l3color.sty
index 1285abf7ae1..8450eb9e1ee 100644
--- a/Master/texmf-dist/tex/latex/l3experimental/l3color/l3color.sty
+++ b/Master/texmf-dist/tex/latex/l3experimental/l3color/l3color.sty
@@ -20,7 +20,7 @@
%%
%% File: l3color.dtx
\RequirePackage{expl3}
-\ProvidesExplPackage{l3color}{2019-05-28}{}
+\ProvidesExplPackage{l3color}{2019-07-01}{}
{L3 Experimental color support}
\tl_new:N \l__color_internal_tl
\prg_new_conditional:Npnn \__color_if_defined:n #1 { T, F, TF }
@@ -86,7 +86,7 @@
\tl_new:N \l__color_next_value_tl
\cs_new_protected:Npn \color_parse:nN #1#2
{
- \driver_color_pickup:N \l__color_current_tl
+ \__color_backend_pickup:N \l__color_current_tl
\tl_set_eq:cN { l__color_named_ . _tl } \l__color_current_tl
\exp_args:Ne \__color_parse:nN { \tl_to_str:n {#1} } #2
}
diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty b/Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty
index e6a07862985..5b152e2b9b3 100644
--- a/Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty
+++ b/Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty
@@ -28,7 +28,7 @@
%%
%% File: l3draw.dtx
\RequirePackage{expl3}
-\ProvidesExplPackage{l3draw}{2019-05-28}{}
+\ProvidesExplPackage{l3draw}{2019-07-01}{}
{L3 Experimental core drawing support}
\RequirePackage { l3color }
%% File: l3draw-boxes.dtx
@@ -60,7 +60,7 @@
{
\use:x
{
- \driver_draw_box_use:Nnnnn #1
+ \__draw_backend_box_use:Nnnnn #1
{ \fp_use:N \l__draw_matrix_a_fp }
{ \fp_use:N \l__draw_matrix_b_fp }
{ \fp_use:N \l__draw_matrix_c_fp }
@@ -149,10 +149,10 @@
\box_use_drop:N \l__draw_layer_main_box
}
{
- \driver_draw_scope_begin:
+ \__draw_backend_scope_begin:
\box_gset_wd:cn { g__draw_layer_ ##1 _box } { 0pt }
\box_use_drop:c { g__draw_layer_ ##1 _box }
- \driver_draw_scope_end:
+ \__draw_backend_scope_end:
}
}
}
@@ -696,11 +696,11 @@
\__draw_softpath_use:
\bool_if:NT \l__draw_path_use_clip_bool
{
- \driver_draw_clip:
+ \__draw_backend_clip:
\bool_lazy_or:nnF
{ \l__draw_path_use_fill_bool }
{ \l__draw_path_use_stroke_bool }
- { \driver_draw_discardpath: }
+ { \__draw_backend_discardpath: }
}
\bool_lazy_or:nnT
{ \l__draw_path_use_fill_bool }
@@ -708,7 +708,7 @@
{
\use:c
{
- driver_draw_
+ __draw_backend_
\bool_if:NT \l__draw_path_use_fill_bool { fill }
\bool_if:NT \l__draw_path_use_stroke_bool { stroke }
:
@@ -1218,7 +1218,7 @@
\group_begin:
\int_gincr:N \g__draw_id_int
\hbox_set:Nw \l__draw_main_box
- \driver_draw_begin:
+ \__draw_backend_begin:
\__draw_reset_bb:
\__draw_path_reset_limits:
\bool_set_true:N \l_draw_bb_update_bool
@@ -1239,7 +1239,7 @@
\exp_args:NNNV \hbox_set_end:
\clist_set:Nn \l_draw_layers_clist \l_draw_layers_clist
\__draw_layers_insert:
- \driver_draw_end:
+ \__draw_backend_end:
\hbox_set_end:
\dim_compare:nNnT \g__draw_xmin_dim = \c_max_dim
{
@@ -1268,7 +1268,7 @@
\tl_new:N \l__draw_stroke_color_tl
\cs_new_protected:Npn \draw_scope_begin:
{
- \driver_draw_scope_begin:
+ \__draw_backend_scope_begin:
\group_begin:
\dim_set_eq:NN \l__draw_linewidth_dim \g__draw_linewidth_dim
\draw_path_scope_begin:
@@ -1278,7 +1278,7 @@
\draw_path_scope_end:
\dim_gset_eq:NN \g__draw_linewidth_dim \l__draw_linewidth_dim
\group_end:
- \driver_draw_scope_end:
+ \__draw_backend_scope_end:
}
\dim_new:N \l__draw_xmax_dim
\dim_new:N \l__draw_xmin_dim
@@ -1385,24 +1385,24 @@
}
\cs_generate_variant:Nn \__draw_softpath_roundpoint:nn { VV }
\cs_new_protected:Npn \__draw_softpath_close_op:nn #1#2
- { \driver_draw_closepath: }
+ { \__draw_backend_closepath: }
\cs_new_protected:Npn \__draw_softpath_curveto_opi:nn #1#2
{ \__draw_softpath_curveto_opi:nnNnnNnn {#1} {#2} }
\cs_new_protected:Npn \__draw_softpath_curveto_opi:nnNnnNnn #1#2#3#4#5#6#7#8
- { \driver_draw_curveto:nnnnnn {#1} {#2} {#4} {#5} {#7} {#8} }
+ { \__draw_backend_curveto:nnnnnn {#1} {#2} {#4} {#5} {#7} {#8} }
\cs_new_protected:Npn \__draw_softpath_curveto_opii:nn #1#2
{ \__draw_softpath_curveto_opii:nn }
\cs_new_protected:Npn \__draw_softpath_curveto_opiii:nn #1#2
{ \__draw_softpath_curveto_opiii:nn }
\cs_new_protected:Npn \__draw_softpath_lineto_op:nn #1#2
- { \driver_draw_lineto:nn {#1} {#2} }
+ { \__draw_backend_lineto:nn {#1} {#2} }
\cs_new_protected:Npn \__draw_softpath_moveto_op:nn #1#2
- { \driver_draw_moveto:nn {#1} {#2} }
+ { \__draw_backend_moveto:nn {#1} {#2} }
\cs_new_protected:Npn \__draw_softpath_roundpoint_op:nn #1#2 { }
\cs_new_protected:Npn \__draw_softpath_rectangle_opi:nn #1#2
{ \__draw_softpath_rectangle_opi:nnNnn {#1} {#2} }
\cs_new_protected:Npn \__draw_softpath_rectangle_opi:nnNnn #1#2#3#4#5
- { \driver_draw_rectangle:nnnn {#1} {#2} {#4} {#5} }
+ { \__draw_backend_rectangle:nnnn {#1} {#2} {#4} {#5} }
\cs_new_protected:Npn \__draw_softpath_rectangle_opii:nn #1#2 { }
\tl_new:N \l__draw_softpath_main_tl
\tl_new:N \l__draw_softpath_part_tl
@@ -1641,7 +1641,7 @@
\cs_new_protected:Npn \draw_linewidth:n #1
{
\dim_gset:Nn \g__draw_linewidth_dim { \fp_to_dim:n {#1} }
- \driver_draw_linewidth:n \g__draw_linewidth_dim
+ \__draw_backend_linewidth:n \g__draw_linewidth_dim
}
\cs_new_protected:Npn \draw_dash_pattern:nn #1#2
{
@@ -1651,7 +1651,7 @@
{ \fp_to_dim:n {##1} }
\use:x
{
- \driver_draw_dash_pattern:nn
+ \__draw_backend_dash_pattern:nn
{ \seq_use:Nn \l__draw_tmp_seq { , } }
{ \fp_to_dim:n {#2} }
}
@@ -1659,15 +1659,15 @@
}
\seq_new:N \l__draw_tmp_seq
\cs_new_protected:Npn \draw_miterlimit:n #1
- { \driver_draw_miterlimit:n { \fp_eval:n {#1} } }
-\cs_new_protected:Npn \draw_cap_butt: { \driver_draw_cap_butt: }
-\cs_new_protected:Npn \draw_cap_rectangle: { \driver_draw_cap_rectangle: }
-\cs_new_protected:Npn \draw_cap_round: { \driver_draw_cap_round: }
-\cs_new_protected:Npn \draw_evenodd_rule: { \driver_draw_evenodd_rule: }
-\cs_new_protected:Npn \draw_nonzero_rule: { \driver_draw_nonzero_rule: }
-\cs_new_protected:Npn \draw_join_bevel: { \driver_draw_join_bevel: }
-\cs_new_protected:Npn \draw_join_miter: { \driver_draw_join_miter: }
-\cs_new_protected:Npn \draw_join_round: { \driver_draw_join_round: }
+ { \__draw_backend_miterlimit:n { \fp_eval:n {#1} } }
+\cs_new_protected:Npn \draw_cap_butt: { \__draw_backend_cap_butt: }
+\cs_new_protected:Npn \draw_cap_rectangle: { \__draw_backend_cap_rectangle: }
+\cs_new_protected:Npn \draw_cap_round: { \__draw_backend_cap_round: }
+\cs_new_protected:Npn \draw_evenodd_rule: { \__draw_backend_evenodd_rule: }
+\cs_new_protected:Npn \draw_nonzero_rule: { \__draw_backend_nonzero_rule: }
+\cs_new_protected:Npn \draw_join_bevel: { \__draw_backend_join_bevel: }
+\cs_new_protected:Npn \draw_join_miter: { \__draw_backend_join_miter: }
+\cs_new_protected:Npn \draw_join_round: { \__draw_backend_join_round: }
\tl_new:N \l__draw_color_tmp_tl
\cs_new_eq:NN \draw_color:n \color_select:n
\cs_new_protected:Npn \draw_color_fill:n #1
@@ -1685,13 +1685,13 @@
\cs_new_protected:Npn \__draw_color:nw #1#2 ~ #3 \q_stop
{ \use:c { __draw_color_ #2 :nw } {#1} #3 \q_stop }
\cs_new_protected:Npn \__draw_color_cmyk:nw #1#2 ~ #3 ~ #4 ~ #5 \q_stop
- { \use:c { driver_draw_color_ #1 _cmyk:nnnn } {#2} {#3} {#4} {#5} }
+ { \use:c { __draw_backend_color_ #1 _cmyk:nnnn } {#2} {#3} {#4} {#5} }
\cs_new_protected:Npn \__draw_color_gray:nw #1#2 \q_stop
- { \use:c { driver_draw_color_ #1 _gray:n } {#2} }
+ { \use:c { __draw_backend_color_ #1 _gray:n } {#2} }
\cs_new_protected:Npn \__draw_color_rgb:nw #1#2 ~ #3 ~ #4 \q_stop
- { \use:c { driver_draw_color_ #1 _rgb:nnn } {#2} {#3} {#4} }
+ { \use:c { __draw_backend_color_ #1 _rgb:nnn } {#2} {#3} {#4} }
\cs_new_protected:Npn \__draw_color_spot:nw #1#2 ~ #3 \q_stop
- { \use:c { driver_draw_color_ #1 _spot:nn } {#2} {#3} }
+ { \use:c { __draw_backend_color_ #1 _spot:nn } {#2} {#3} }
%% File: l3draw-transforms.dtx
\bool_new:N \l__draw_matrix_active_bool
\fp_new:N \l__draw_matrix_a_fp
diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3graphics/l3graphics.sty b/Master/texmf-dist/tex/latex/l3experimental/l3graphics/l3graphics.sty
index 361523ef595..1e171d1d2ee 100644
--- a/Master/texmf-dist/tex/latex/l3experimental/l3graphics/l3graphics.sty
+++ b/Master/texmf-dist/tex/latex/l3experimental/l3graphics/l3graphics.sty
@@ -20,7 +20,7 @@
%%
%% File: l3graphics.dtx
\RequirePackage{expl3}
-\ProvidesExplPackage{l3graphics}{2019-05-28}{}
+\ProvidesExplPackage{l3graphics}{2019-07-01}{}
{L3 Experimental graphics inclusion support}
\ior_new:N \l__graphics_tmp_ior
\tl_new:N \l__graphics_tmp_tl
@@ -220,10 +220,10 @@
\cs_new_protected:Npn \__graphics_include_auxii:n #1
{
\mode_leave_vertical:
- \cs_if_exist:cTF { driver_graphics_include_ #1 :n }
+ \cs_if_exist:cTF { __graphics_backend_include_ #1 :n }
{
\tl_set_eq:NN \l_graphics_name_tl \l__graphics_name_tl
- \exp_args:NnV \use:c { driver_graphics_getbb_ #1 :n }
+ \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
\clist_if_exist:NT \@filelist
@@ -264,7 +264,7 @@
{
\hbox_set:Nn \l__graphics_internal_box
{
- \exp_args:NnV \use:c { driver_graphics_include_ #1 :n }
+ \exp_args:NnV \use:c { __graphics_backend_include_ #1 :n }
\l__graphics_name_tl
}
\box_set_dp:Nn \l__graphics_internal_box { 0pt }
diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3pdf/l3pdf.sty b/Master/texmf-dist/tex/latex/l3experimental/l3pdf/l3pdf.sty
new file mode 100644
index 00000000000..f2d48731832
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/l3experimental/l3pdf/l3pdf.sty
@@ -0,0 +1,104 @@
+%%
+%% This is file `l3pdf.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% l3pdf.dtx (with options: `package')
+%%
+%% Copyright (C) 2019 The LaTeX3 Project
+%%
+%% It may be distributed and/or modified under the conditions of
+%% the LaTeX Project Public License (LPPL), either version 1.3c of
+%% this license or (at your option) any later version. The latest
+%% version of this license is in the file:
+%%
+%% http://www.latex-project.org/lppl.txt
+%%
+%% This file is part of the "l3pdf bundle" (The Work in LPPL)
+%% and all files in that bundle must be distributed together.
+%%
+%% File: l3pdf.dtx
+\RequirePackage{expl3}
+\ProvidesExplPackage{l3pdf}{2019-07-01}{}
+ {L3 Experimental core PDF support}
+\bool_new:N \g__pdf_init_bool
+\cs_if_exist:NT \documentclass
+ {
+ \AtBeginDocument
+ { \bool_gset_true:N \g__pdf_init_bool }
+ }
+\cs_new_protected:Npn \pdf_uncompress:
+ {
+ \bool_if:NF \g__pdf_init_bool
+ {
+ \__pdf_backend_compresslevel:n { 0 }
+ \__pdf_backend_compress_objects:n { \c_false_bool }
+ }
+ }
+\cs_new_protected:Npn \pdf_object_new:nn #1#2
+ { \__pdf_backend_object_new:nn {#1} {#2} }
+\cs_new_protected:Npn \pdf_object_write:nn #1#2
+ { \__pdf_backend_object_write:nn {#1} {#2} }
+\cs_generate_variant:Nn \pdf_object_write:nn { nx }
+\cs_new:Npn \pdf_object_ref:n #1 { \__pdf_backend_object_ref:n {#1} }
+\cs_new_protected:Npn \pdf_object_now:nn #1#2
+ { \__pdf_backend_object_now:nn {#1} {#2} }
+\cs_generate_variant:Nn \pdf_object_now:nn { nx }
+\cs_new:Npn \pdf_object_last: { \__pdf_backend_object_last: }
+\prg_new_conditional:Npnn \pdf_version_compare:Nn #1#2 { p , T , F , TF }
+ { \use:c { __pdf_version_compare_ #1 :w } #2 . . \q_stop }
+\cs_new:cpn { __pdf_version_compare_=:w } #1 . #2 . #3 \q_stop
+ {
+ \bool_lazy_and:nnTF
+ { \int_compare_p:nNn \__pdf_backend_version_major: = {#1} }
+ { \int_compare_p:nNn \__pdf_backend_version_minor: = {#2} }
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+\cs_new:cpn { __pdf_version_compare_<:w } #1 . #2 . #3 \q_stop
+ {
+ \bool_lazy_or:nnTF
+ { \int_compare_p:nNn \__pdf_backend_version_major: < {#1} }
+ {
+ \bool_lazy_and_p:nn
+ { \int_compare_p:nNn \__pdf_backend_version_major: = {#1} }
+ { \int_compare_p:nNn \__pdf_backend_version_minor: < {#2} }
+ }
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+\cs_new:cpn { __pdf_version_compare_>:w } #1 . #2 . #3 \q_stop
+ {
+ \bool_lazy_or:nnTF
+ { \int_compare_p:nNn \__pdf_backend_version_major: > {#1} }
+ {
+ \bool_lazy_and_p:nn
+ { \int_compare_p:nNn \__pdf_backend_version_major: = {#1} }
+ { \int_compare_p:nNn \__pdf_backend_version_minor: > {#2} }
+ }
+ { \prg_return_true: }
+ { \prg_return_false: }
+ }
+\cs_new_protected:Npn \pdf_version_gset:n #1
+ { \__pdf_version_gset:w #1 . . \q_stop }
+\cs_new_protected:Npn \pdf_version_min_gset:n #1
+ {
+ \pdf_version_compare:NnT < {#1}
+ { \__pdf_version_gset:w #1 . . \q_stop }
+ }
+\cs_new_protected:Npn \__pdf_version_gset:w #1 . #2 . #3\q_stop
+ {
+ \bool_if:NF \g__pdf_init_bool
+ {
+ \__pdf_backend_version_major_gset:n {#1}
+ \__pdf_backend_version_minor_gset:n {#2}
+ }
+ }
+\cs_new:Npn \pdf_version:
+ { \__pdf_backend_version_major: . \__pdf_backend_version_minor: }
+\cs_new:Npn \pdf_version_major: { \__pdf_backend_version_major: }
+\cs_new:Npn \pdf_version_minor: { \__pdf_backend_version_minor: }
+%%
+%%
+%% End of file `l3pdf.sty'.
diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-convert.sty b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-convert.sty
deleted file mode 100644
index f9b7c2b0e02..00000000000
--- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-convert.sty
+++ /dev/null
@@ -1,574 +0,0 @@
-%%
-%% This is file `l3str-convert.sty',
-%% generated with the docstrip utility.
-%%
-%% The original source files were:
-%%
-%% l3str-convert.dtx (with options: `package')
-%%
-%% Copyright (C) 2011-2019 The LaTeX3 Project
-%%
-%% It may be distributed and/or modified under the conditions of
-%% the LaTeX Project Public License (LPPL), either version 1.3c of
-%% this license or (at your option) any later version. The latest
-%% version of this license is in the file:
-%%
-%% http://www.latex-project.org/lppl.txt
-%%
-%% This file is part of the "l3experimental bundle" (The Work in LPPL)
-%% and all files in that bundle must be distributed together.
-%%
-%% File: l3str-convert.dtx
-\RequirePackage{expl3}
-\ProvidesExplPackage{l3str-convert}{2019-05-28}{}
- {L3 Experimental string encoding conversions}
-\cs_if_exist:NF \use_ii_i:nn
- { \cs_new:Npn \use_ii_i:nn #1#2 { #2 #1 } }
-\cs_new_protected:Npn \__str_tmp:w { }
-\tl_new:N \l__str_internal_tl
-\int_new:N \l__str_internal_int
-\tl_new:N \g__str_result_tl
-\int_const:Nn \c__str_replacement_char_int { "FFFD }
-\int_const:Nn \c__str_max_byte_int { 255 }
-\prop_new:N \g__str_alias_prop
-\prop_gput:Nnn \g__str_alias_prop { latin1 } { iso88591 }
-\prop_gput:Nnn \g__str_alias_prop { latin2 } { iso88592 }
-\prop_gput:Nnn \g__str_alias_prop { latin3 } { iso88593 }
-\prop_gput:Nnn \g__str_alias_prop { latin4 } { iso88594 }
-\prop_gput:Nnn \g__str_alias_prop { latin5 } { iso88599 }
-\prop_gput:Nnn \g__str_alias_prop { latin6 } { iso885910 }
-\prop_gput:Nnn \g__str_alias_prop { latin7 } { iso885913 }
-\prop_gput:Nnn \g__str_alias_prop { latin8 } { iso885914 }
-\prop_gput:Nnn \g__str_alias_prop { latin9 } { iso885915 }
-\prop_gput:Nnn \g__str_alias_prop { latin10 } { iso885916 }
-\prop_gput:Nnn \g__str_alias_prop { utf16le } { utf16 }
-\prop_gput:Nnn \g__str_alias_prop { utf16be } { utf16 }
-\prop_gput:Nnn \g__str_alias_prop { utf32le } { utf32 }
-\prop_gput:Nnn \g__str_alias_prop { utf32be } { utf32 }
-\prop_gput:Nnn \g__str_alias_prop { hexadecimal } { hex }
-\bool_new:N \g__str_error_bool
-\flag_new:n { str_byte }
-\flag_new:n { str_error }
-\prg_new_conditional:Npnn \__str_if_contains_char:NN #1#2 { T , TF }
- {
- \exp_after:wN \__str_if_contains_char_aux:NN \exp_after:wN #2
- #1 { \prg_break:n { ? \fi: } }
- \prg_break_point:
- \prg_return_false:
- }
-\prg_new_conditional:Npnn \__str_if_contains_char:nN #1#2 { TF }
- {
- \__str_if_contains_char_aux:NN #2 #1 { \prg_break:n { ? \fi: } }
- \prg_break_point:
- \prg_return_false:
- }
-\cs_new:Npn \__str_if_contains_char_aux:NN #1#2
- {
- \if_charcode:w #1 #2
- \exp_after:wN \__str_if_contains_char_true:
- \fi:
- \__str_if_contains_char_aux:NN #1
- }
-\cs_new:Npn \__str_if_contains_char_true:
- { \prg_break:n { \prg_return_true: \use_none:n } }
-\prg_new_conditional:Npnn \__str_octal_use:N #1 { TF }
- {
- \if_int_compare:w 1 < '1 \token_to_str:N #1 \exp_stop_f:
- #1 \prg_return_true:
- \else:
- \prg_return_false:
- \fi:
- }
-\prg_new_conditional:Npnn \__str_hexadecimal_use:N #1 { TF }
- {
- \if_int_compare:w 1 < "1 \token_to_str:N #1 \exp_stop_f:
- #1 \prg_return_true:
- \else:
- \if_case:w \int_eval:n { \exp_after:wN ` \token_to_str:N #1 - `a }
- A
- \or: B
- \or: C
- \or: D
- \or: E
- \or: F
- \else:
- \prg_return_false:
- \exp_after:wN \use_none:n
- \fi:
- \prg_return_true:
- \fi:
- }
-\group_begin:
- \tl_set:Nx \l__str_internal_tl { \tl_to_str:n { 0123456789ABCDEF } }
- \tl_map_inline:Nn \l__str_internal_tl
- {
- \tl_map_inline:Nn \l__str_internal_tl
- {
- \tl_const:cx { c__str_byte_ \int_eval:n {"#1##1} _tl }
- { \char_generate:nn { "#1##1 } { 12 } #1 ##1 }
- }
- }
-\group_end:
-\tl_const:cn { c__str_byte_-1_tl } { { } \use_none:n { } }
-\cs_new:Npn \__str_output_byte:n #1
- { \__str_output_byte:w #1 \__str_output_end: }
-\cs_new:Npn \__str_output_byte:w
- {
- \exp_after:wN \exp_after:wN
- \exp_after:wN \use_i:nnn
- \cs:w c__str_byte_ \int_eval:w
- }
-\cs_new:Npn \__str_output_hexadecimal:n #1
- {
- \exp_after:wN \exp_after:wN
- \exp_after:wN \use_none:n
- \cs:w c__str_byte_ \int_eval:n {#1} _tl \cs_end:
- }
-\cs_new:Npn \__str_output_end:
- { \scan_stop: _tl \cs_end: }
-\cs_new:Npn \__str_output_byte_pair_be:n #1
- {
- \exp_args:Nf \__str_output_byte_pair:nnN
- { \int_div_truncate:nn { #1 } { "100 } } {#1} \use:nn
- }
-\cs_new:Npn \__str_output_byte_pair_le:n #1
- {
- \exp_args:Nf \__str_output_byte_pair:nnN
- { \int_div_truncate:nn { #1 } { "100 } } {#1} \use_ii_i:nn
- }
-\cs_new:Npn \__str_output_byte_pair:nnN #1#2#3
- {
- #3
- { \__str_output_byte:n { #1 } }
- { \__str_output_byte:n { #2 - #1 * "100 } }
- }
-\cs_new_protected:Npn \__str_convert_gmap:N #1
- {
- \tl_gset:Nx \g__str_result_tl
- {
- \exp_after:wN \__str_convert_gmap_loop:NN
- \exp_after:wN #1
- \g__str_result_tl { ? \prg_break: }
- \prg_break_point:
- }
- }
-\cs_new:Npn \__str_convert_gmap_loop:NN #1#2
- {
- \use_none:n #2
- #1#2
- \__str_convert_gmap_loop:NN #1
- }
-\cs_new_protected:Npn \__str_convert_gmap_internal:N #1
- {
- \tl_gset:Nx \g__str_result_tl
- {
- \exp_after:wN \__str_convert_gmap_internal_loop:Nww
- \exp_after:wN #1
- \g__str_result_tl \s__tl \q_stop \prg_break: \s__tl
- \prg_break_point:
- }
- }
-\cs_new:Npn \__str_convert_gmap_internal_loop:Nww #1 #2 \s__tl #3 \s__tl
- {
- \use_none_delimit_by_q_stop:w #3 \q_stop
- #1 {#3}
- \__str_convert_gmap_internal_loop:Nww #1
- }
-\cs_new_protected:Npn \__str_if_flag_error:nnx #1
- {
- \flag_if_raised:nTF {#1}
- { \__kernel_msg_error:nnx { str } }
- { \use_none:nn }
- }
-\cs_new_protected:Npn \__str_if_flag_no_error:nnx #1#2#3
- { \flag_if_raised:nT {#1} { \bool_gset_true:N \g__str_error_bool } }
-\cs_new:Npn \__str_if_flag_times:nT #1#2
- { \flag_if_raised:nT {#1} { #2~(x \flag_height:n {#1} ) } }
-\cs_new_protected:Npn \str_set_convert:Nnnn
- { \__str_convert:nNNnnn { } \tl_set_eq:NN }
-\cs_new_protected:Npn \str_gset_convert:Nnnn
- { \__str_convert:nNNnnn { } \tl_gset_eq:NN }
-\prg_new_protected_conditional:Npnn
- \str_set_convert:Nnnn #1#2#3#4 { T , F , TF }
- {
- \bool_gset_false:N \g__str_error_bool
- \__str_convert:nNNnnn
- { \cs_set_eq:NN \__str_if_flag_error:nnx \__str_if_flag_no_error:nnx }
- \tl_set_eq:NN #1 {#2} {#3} {#4}
- \bool_if:NTF \g__str_error_bool \prg_return_false: \prg_return_true:
- }
-\prg_new_protected_conditional:Npnn
- \str_gset_convert:Nnnn #1#2#3#4 { T , F , TF }
- {
- \bool_gset_false:N \g__str_error_bool
- \__str_convert:nNNnnn
- { \cs_set_eq:NN \__str_if_flag_error:nnx \__str_if_flag_no_error:nnx }
- \tl_gset_eq:NN #1 {#2} {#3} {#4}
- \bool_if:NTF \g__str_error_bool \prg_return_false: \prg_return_true:
- }
-\cs_new_protected:Npn \__str_convert:nNNnnn #1#2#3#4#5#6
- {
- \group_begin:
- #1
- \tl_gset:Nx \g__str_result_tl { \__kernel_str_to_other_fast:n {#4} }
- \exp_after:wN \__str_convert:wwwnn
- \tl_to_str:n {#5} /// \q_stop
- { decode } { unescape }
- \prg_do_nothing:
- \__str_convert_decode_:
- \exp_after:wN \__str_convert:wwwnn
- \tl_to_str:n {#6} /// \q_stop
- { encode } { escape }
- \use_ii_i:nn
- \__str_convert_encode_:
- \group_end:
- #2 #3 \g__str_result_tl
- }
-\cs_new_protected:Npn \__str_convert:wwwnn
- #1 / #2 // #3 \q_stop #4#5
- {
- \__str_convert:nnn {enc} {#4} {#1}
- \__str_convert:nnn {esc} {#5} {#2}
- \exp_args:Ncc \__str_convert:NNnNN
- { __str_convert_#4_#1: } { __str_convert_#5_#2: } {#2}
- }
-\cs_new_protected:Npn \__str_convert:NNnNN #1#2#3#4#5
- {
- \if_meaning:w #1 #5
- \tl_if_empty:nF {#3}
- { \__kernel_msg_error:nnx { str } { native-escaping } {#3} }
- #1
- \else:
- #4 #2 #1
- \fi:
- }
-\cs_new_protected:Npn \__str_convert:nnn #1#2#3
- {
- \cs_if_exist:cF { __str_convert_#2_#3: }
- {
- \exp_args:Nx \__str_convert:nnnn
- { \__str_convert_lowercase_alphanum:n {#3} }
- {#1} {#2} {#3}
- }
- }
-\cs_new_protected:Npn \__str_convert:nnnn #1#2#3#4
- {
- \cs_if_exist:cF { __str_convert_#3_#1: }
- {
- \prop_get:NnNF \g__str_alias_prop {#1} \l__str_internal_tl
- { \tl_set:Nn \l__str_internal_tl {#1} }
- \cs_if_exist:cF { __str_convert_#3_ \l__str_internal_tl : }
- {
- \file_if_exist:nTF { l3str-#2- \l__str_internal_tl .def }
- {
- \group_begin:
- \__str_load_catcodes:
- \file_input:n { l3str-#2- \l__str_internal_tl .def }
- \group_end:
- }
- {
- \tl_clear:N \l__str_internal_tl
- \__kernel_msg_error:nnxx { str } { unknown-#2 } {#4} {#1}
- }
- }
- \cs_if_exist:cF { __str_convert_#3_#1: }
- {
- \cs_gset_eq:cc { __str_convert_#3_#1: }
- { __str_convert_#3_ \l__str_internal_tl : }
- }
- }
- \cs_gset_eq:cc { __str_convert_#3_#4: } { __str_convert_#3_#1: }
- }
-\cs_new:Npn \__str_convert_lowercase_alphanum:n #1
- {
- \exp_after:wN \__str_convert_lowercase_alphanum_loop:N
- \tl_to_str:n {#1} { ? \prg_break: }
- \prg_break_point:
- }
-\cs_new:Npn \__str_convert_lowercase_alphanum_loop:N #1
- {
- \use_none:n #1
- \if_int_compare:w `#1 > `Z \exp_stop_f:
- \if_int_compare:w `#1 > `z \exp_stop_f: \else:
- \if_int_compare:w `#1 < `a \exp_stop_f: \else:
- #1
- \fi:
- \fi:
- \else:
- \if_int_compare:w `#1 < `A \exp_stop_f:
- \if_int_compare:w 1 < 1#1 \exp_stop_f:
- #1
- \fi:
- \else:
- \__str_output_byte:n { `#1 + `a - `A }
- \fi:
- \fi:
- \__str_convert_lowercase_alphanum_loop:N
- }
-\cs_new_protected:Npn \__str_load_catcodes:
- {
- \char_set_catcode_escape:N \\
- \char_set_catcode_group_begin:N \{
- \char_set_catcode_group_end:N \}
- \char_set_catcode_math_toggle:N \$
- \char_set_catcode_alignment:N \&
- \char_set_catcode_parameter:N \#
- \char_set_catcode_math_superscript:N \^
- \char_set_catcode_ignore:N \ %
- \char_set_catcode_space:N \~
- \tl_map_function:nN { abcdefghijklmnopqrstuvwxyz_:ABCDEFILNPSTUX }
- \char_set_catcode_letter:N
- \tl_map_function:nN { 0123456789"'?*+-.(),`!/<>[];= }
- \char_set_catcode_other:N
- \char_set_catcode_comment:N \%
- \int_set:Nn \tex_endlinechar:D {32}
- }
-\bool_lazy_any:nTF
- {
- \sys_if_engine_luatex_p:
- \sys_if_engine_xetex_p:
- }
- {
- \cs_new:Npn \__str_filter_bytes:n #1
- {
- \__str_filter_bytes_aux:N #1
- { ? \prg_break: }
- \prg_break_point:
- }
- \cs_new:Npn \__str_filter_bytes_aux:N #1
- {
- \use_none:n #1
- \if_int_compare:w `#1 < 256 \exp_stop_f:
- #1
- \else:
- \flag_raise:n { str_byte }
- \fi:
- \__str_filter_bytes_aux:N
- }
- }
- { \cs_new_eq:NN \__str_filter_bytes:n \use:n }
-\bool_lazy_any:nTF
- {
- \sys_if_engine_luatex_p:
- \sys_if_engine_xetex_p:
- }
- {
- \cs_new_protected:Npn \__str_convert_unescape_:
- {
- \flag_clear:n { str_byte }
- \tl_gset:Nx \g__str_result_tl
- { \exp_args:No \__str_filter_bytes:n \g__str_result_tl }
- \__str_if_flag_error:nnx { str_byte } { non-byte } { bytes }
- }
- }
- { \cs_new_protected:Npn \__str_convert_unescape_: { } }
-\cs_new_eq:NN \__str_convert_unescape_bytes: \__str_convert_unescape_:
-\cs_new_protected:Npn \__str_convert_escape_: { }
-\cs_new_eq:NN \__str_convert_escape_bytes: \__str_convert_escape_:
-\cs_new_protected:Npn \__str_convert_decode_:
- { \__str_convert_gmap:N \__str_decode_native_char:N }
-\cs_new:Npn \__str_decode_native_char:N #1
- { #1 \s__tl \int_value:w `#1 \s__tl }
-\bool_lazy_any:nTF
- {
- \sys_if_engine_luatex_p:
- \sys_if_engine_xetex_p:
- }
- {
- \cs_new_protected:Npn \__str_convert_encode_:
- { \__str_convert_gmap_internal:N \__str_encode_native_char:n }
- \cs_new:Npn \__str_encode_native_char:n #1
- { \char_generate:nn {#1} {12} }
- }
- {
- \cs_new_protected:Npn \__str_convert_encode_:
- {
- \flag_clear:n { str_error }
- \__str_convert_gmap_internal:N \__str_encode_native_char:n
- \__str_if_flag_error:nnx { str_error }
- { native-overflow } { }
- }
- \cs_new:Npn \__str_encode_native_char:n #1
- {
- \if_int_compare:w #1 > \c__str_max_byte_int
- \flag_raise:n { str_error }
- ?
- \else:
- \char_generate:nn {#1} {12}
- \fi:
- }
- \__kernel_msg_new:nnnn { str } { native-overflow }
- { Character~code~too~large~for~this~engine. }
- {
- This~engine~only~support~8-bit~characters:~
- valid~character~codes~are~in~the~range~[0,255].~
- To~manipulate~arbitrary~Unicode,~use~LuaTeX~or~XeTeX.
- }
- }
-\cs_new_protected:Npn \__str_convert_decode_clist:
- {
- \clist_gset:No \g__str_result_tl \g__str_result_tl
- \tl_gset:Nx \g__str_result_tl
- {
- \exp_args:No \clist_map_function:nN
- \g__str_result_tl \__str_decode_clist_char:n
- }
- }
-\cs_new:Npn \__str_decode_clist_char:n #1
- { #1 \s__tl \int_eval:n {#1} \s__tl }
-\cs_new_protected:Npn \__str_convert_encode_clist:
- {
- \__str_convert_gmap_internal:N \__str_encode_clist_char:n
- \tl_gset:Nx \g__str_result_tl { \tl_tail:N \g__str_result_tl }
- }
-\cs_new:Npn \__str_encode_clist_char:n #1 { , #1 }
-\cs_new_protected:Npn \__str_declare_eight_bit_encoding:nnn #1#2#3
- {
- \tl_set:Nn \l__str_internal_tl {#1}
- \cs_new_protected:cpn { __str_convert_decode_#1: }
- { \__str_convert_decode_eight_bit:n {#1} }
- \cs_new_protected:cpn { __str_convert_encode_#1: }
- { \__str_convert_encode_eight_bit:n {#1} }
- \tl_const:cn { c__str_encoding_#1_tl } {#2}
- \tl_const:cn { c__str_encoding_#1_missing_tl } {#3}
- }
-\cs_new_protected:Npn \__str_convert_decode_eight_bit:n #1
- {
- \group_begin:
- \int_zero:N \l__str_internal_int
- \exp_last_unbraced:Nx \__str_decode_eight_bit_load:nn
- { \tl_use:c { c__str_encoding_#1_tl } }
- { \q_stop \prg_break: } { }
- \prg_break_point:
- \exp_last_unbraced:Nx \__str_decode_eight_bit_load_missing:n
- { \tl_use:c { c__str_encoding_#1_missing_tl } }
- { \q_stop \prg_break: }
- \prg_break_point:
- \flag_clear:n { str_error }
- \__str_convert_gmap:N \__str_decode_eight_bit_char:N
- \__str_if_flag_error:nnx { str_error } { decode-8-bit } {#1}
- \group_end:
- }
-\cs_new_protected:Npn \__str_decode_eight_bit_load:nn #1#2
- {
- \use_none_delimit_by_q_stop:w #1 \q_stop
- \tex_dimen:D "#1 = \l__str_internal_int sp \scan_stop:
- \tex_skip:D \l__str_internal_int = "#1 sp \scan_stop:
- \tex_toks:D \l__str_internal_int \exp_after:wN { \int_value:w "#2 }
- \int_incr:N \l__str_internal_int
- \__str_decode_eight_bit_load:nn
- }
-\cs_new_protected:Npn \__str_decode_eight_bit_load_missing:n #1
- {
- \use_none_delimit_by_q_stop:w #1 \q_stop
- \tex_dimen:D "#1 = \l__str_internal_int sp \scan_stop:
- \tex_skip:D \l__str_internal_int = "#1 sp \scan_stop:
- \tex_toks:D \l__str_internal_int \exp_after:wN
- { \int_use:N \c__str_replacement_char_int }
- \int_incr:N \l__str_internal_int
- \__str_decode_eight_bit_load_missing:n
- }
-\cs_new:Npn \__str_decode_eight_bit_char:N #1
- {
- #1 \s__tl
- \if_int_compare:w \tex_dimen:D `#1 < \l__str_internal_int
- \if_int_compare:w \tex_skip:D \tex_dimen:D `#1 = `#1 \exp_stop_f:
- \tex_the:D \tex_toks:D \tex_dimen:D
- \fi:
- \fi:
- \int_value:w `#1 \s__tl
- }
-\cs_new_protected:Npn \__str_convert_encode_eight_bit:n #1
- {
- \group_begin:
- \int_zero:N \l__str_internal_int
- \exp_last_unbraced:Nx \__str_encode_eight_bit_load:nn
- { \tl_use:c { c__str_encoding_#1_tl } }
- { \q_stop \prg_break: } { }
- \prg_break_point:
- \flag_clear:n { str_error }
- \__str_convert_gmap_internal:N \__str_encode_eight_bit_char:n
- \__str_if_flag_error:nnx { str_error } { encode-8-bit } {#1}
- \group_end:
- }
-\cs_new_protected:Npn \__str_encode_eight_bit_load:nn #1#2
- {
- \use_none_delimit_by_q_stop:w #1 \q_stop
- \tex_dimen:D "#2 = \l__str_internal_int sp \scan_stop:
- \tex_skip:D \l__str_internal_int = "#2 sp \scan_stop:
- \exp_args:NNf \tex_toks:D \l__str_internal_int
- { \__str_output_byte:n { "#1 } }
- \int_incr:N \l__str_internal_int
- \__str_encode_eight_bit_load:nn
- }
-\cs_new:Npn \__str_encode_eight_bit_char:n #1
- {
- \if_int_compare:w #1 > \c_max_register_int
- \flag_raise:n { str_error }
- \else:
- \if_int_compare:w \tex_dimen:D #1 < \l__str_internal_int
- \if_int_compare:w \tex_skip:D \tex_dimen:D #1 = #1 \exp_stop_f:
- \tex_the:D \tex_toks:D \tex_dimen:D #1 \exp_stop_f:
- \exp_after:wN \exp_after:wN \exp_after:wN \use_none:nn
- \fi:
- \fi:
- \__str_encode_eight_bit_char_aux:n {#1}
- \fi:
- }
-\cs_new:Npn \__str_encode_eight_bit_char_aux:n #1
- {
- \if_int_compare:w #1 > \c__str_max_byte_int
- \flag_raise:n { str_error }
- \else:
- \__str_output_byte:n {#1}
- \fi:
- }
-\__kernel_msg_new:nnn { str } { unknown-esc }
- { Escaping~scheme~'#1'~(filtered:~'#2')~unknown. }
-\__kernel_msg_new:nnn { str } { unknown-enc }
- { Encoding~scheme~'#1'~(filtered:~'#2')~unknown. }
-\__kernel_msg_new:nnnn { str } { native-escaping }
- { The~'native'~encoding~scheme~does~not~support~any~escaping. }
- {
- Since~native~strings~do~not~consist~in~bytes,~
- none~of~the~escaping~methods~make~sense.~
- The~specified~escaping,~'#1',~will be ignored.
- }
-\__kernel_msg_new:nnn { str } { file-not-found }
- { File~'l3str-#1.def'~not~found. }
-\bool_lazy_any:nT
- {
- \sys_if_engine_luatex_p:
- \sys_if_engine_xetex_p:
- }
- {
- \__kernel_msg_new:nnnn { str } { non-byte }
- { String~invalid~in~escaping~'#1':~it~may~only~contain~bytes. }
- {
- Some~characters~in~the~string~you~asked~to~convert~are~not~
- 8-bit~characters.~Perhaps~the~string~is~a~'native'~Unicode~string?~
- If~it~is,~try~using\\
- \\
- \iow_indent:n
- {
- \iow_char:N\\str_set_convert:Nnnn \\
- \ \ <str~var>~\{~<string>~\}~\{~native~\}~\{~<target~encoding>~\}
- }
- }
- }
-\__kernel_msg_new:nnnn { str } { decode-8-bit }
- { Invalid~string~in~encoding~'#1'. }
- {
- LaTeX~came~across~a~byte~which~is~not~defined~to~represent~
- any~character~in~the~encoding~'#1'.
- }
-\__kernel_msg_new:nnnn { str } { encode-8-bit }
- { Unicode~string~cannot~be~converted~to~encoding~'#1'. }
- {
- The~encoding~'#1'~only~contains~a~subset~of~all~Unicode~characters.~
- LaTeX~was~asked~to~convert~a~string~to~that~encoding,~but~that~
- string~contains~a~character~that~'#1'~does~not~support.
- }
-%%
-%%
-%% End of file `l3str-convert.sty'.
diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-utf16.def b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-utf16.def
deleted file mode 100644
index 3b54e12b16d..00000000000
--- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-utf16.def
+++ /dev/null
@@ -1,206 +0,0 @@
-%%
-%% This is file `l3str-enc-utf16.def',
-%% generated with the docstrip utility.
-%%
-%% The original source files were:
-%%
-%% l3str-convert.dtx (with options: `utf16')
-%%
-%% Copyright (C) 2011-2019 The LaTeX3 Project
-%%
-%% It may be distributed and/or modified under the conditions of
-%% the LaTeX Project Public License (LPPL), either version 1.3c of
-%% this license or (at your option) any later version. The latest
-%% version of this license is in the file:
-%%
-%% http://www.latex-project.org/lppl.txt
-%%
-%% This file is part of the "l3experimental bundle" (The Work in LPPL)
-%% and all files in that bundle must be distributed together.
-%%
-%% File: l3str-convert.dtx
-\group_begin:
- \char_set_catcode_other:N \^^fe
- \char_set_catcode_other:N \^^ff
- \cs_new_protected:cpn { __str_convert_encode_utf16: }
- {
- \__str_encode_utf_xvi_aux:N \__str_output_byte_pair_be:n
- \tl_gput_left:Nx \g__str_result_tl { ^^fe ^^ff }
- }
- \cs_new_protected:cpn { __str_convert_encode_utf16be: }
- { \__str_encode_utf_xvi_aux:N \__str_output_byte_pair_be:n }
- \cs_new_protected:cpn { __str_convert_encode_utf16le: }
- { \__str_encode_utf_xvi_aux:N \__str_output_byte_pair_le:n }
- \cs_new_protected:Npn \__str_encode_utf_xvi_aux:N #1
- {
- \flag_clear:n { str_error }
- \cs_set_eq:NN \__str_tmp:w #1
- \__str_convert_gmap_internal:N \__str_encode_utf_xvi_char:n
- \__str_if_flag_error:nnx { str_error } { utf16-encode } { }
- }
- \cs_new:Npn \__str_encode_utf_xvi_char:n #1
- {
- \if_int_compare:w #1 < "D800 \exp_stop_f:
- \__str_tmp:w {#1}
- \else:
- \if_int_compare:w #1 < "10000 \exp_stop_f:
- \if_int_compare:w #1 < "E000 \exp_stop_f:
- \flag_raise:n { str_error }
- \__str_tmp:w { \c__str_replacement_char_int }
- \else:
- \__str_tmp:w {#1}
- \fi:
- \else:
- \exp_args:Nf \__str_tmp:w { \int_div_truncate:nn {#1} {"400} + "D7C0 }
- \exp_args:Nf \__str_tmp:w { \int_mod:nn {#1} {"400} + "DC00 }
- \fi:
- \fi:
- }
- \flag_clear_new:n { str_missing }
- \flag_clear_new:n { str_extra }
- \flag_clear_new:n { str_end }
- \__kernel_msg_new:nnnn { str } { utf16-encode }
- { Unicode~string~cannot~be~expressed~in~UTF-16:~surrogate. }
- {
- Surrogate~code~points~(in~the~range~[U+D800,~U+DFFF])~
- can~be~expressed~in~the~UTF-8~and~UTF-32~encodings,~
- but~not~in~the~UTF-16~encoding.
- }
- \__kernel_msg_new:nnnn { str } { utf16-decode }
- {
- Invalid~UTF-16~string:
- \exp_last_unbraced:Nf \use_none:n
- {
- \__str_if_flag_times:nT { str_missing } { ,~missing~trail~surrogate }
- \__str_if_flag_times:nT { str_extra } { ,~extra~trail~surrogate }
- \__str_if_flag_times:nT { str_end } { ,~odd~number~of~bytes }
- }
- .
- }
- {
- In~the~UTF-16~encoding,~each~Unicode~character~is~encoded~as~
- 2~or~4~bytes: \\
- \iow_indent:n
- {
- Code~point~in~[U+0000,~U+D7FF]:~two~bytes \\
- Code~point~in~[U+D800,~U+DFFF]:~illegal \\
- Code~point~in~[U+E000,~U+FFFF]:~two~bytes \\
- Code~point~in~[U+10000,~U+10FFFF]:~
- a~lead~surrogate~and~a~trail~surrogate \\
- }
- Lead~surrogates~are~pairs~of~bytes~in~the~range~[0xD800,~0xDBFF],~
- and~trail~surrogates~are~in~the~range~[0xDC00,~0xDFFF].
- \flag_if_raised:nT { str_missing }
- {
- \\\\
- A~lead~surrogate~was~not~followed~by~a~trail~surrogate.
- }
- \flag_if_raised:nT { str_extra }
- {
- \\\\
- LaTeX~came~across~a~trail~surrogate~when~it~was~not~expected.
- }
- \flag_if_raised:nT { str_end }
- {
- \\\\
- The~string~contained~an~odd~number~of~bytes.~This~is~invalid:~
- the~basic~code~unit~for~UTF-16~is~16~bits~(2~bytes).
- }
- }
- \cs_new_protected:cpn { __str_convert_decode_utf16be: }
- { \__str_decode_utf_xvi:Nw 1 \g__str_result_tl \s_stop }
- \cs_new_protected:cpn { __str_convert_decode_utf16le: }
- { \__str_decode_utf_xvi:Nw 2 \g__str_result_tl \s_stop }
- \cs_new_protected:cpn { __str_convert_decode_utf16: }
- {
- \exp_after:wN \__str_decode_utf_xvi_bom:NN
- \g__str_result_tl \s_stop \s_stop \s_stop
- }
- \cs_new_protected:Npn \__str_decode_utf_xvi_bom:NN #1#2
- {
- \str_if_eq:nnTF { #1#2 } { ^^ff ^^fe }
- { \__str_decode_utf_xvi:Nw 2 }
- {
- \str_if_eq:nnTF { #1#2 } { ^^fe ^^ff }
- { \__str_decode_utf_xvi:Nw 1 }
- { \__str_decode_utf_xvi:Nw 1 #1#2 }
- }
- }
- \cs_new_protected:Npn \__str_decode_utf_xvi:Nw #1#2 \s_stop
- {
- \flag_clear:n { str_error }
- \flag_clear:n { str_missing }
- \flag_clear:n { str_extra }
- \flag_clear:n { str_end }
- \cs_set:Npn \__str_tmp:w ##1 ##2 { ` ## #1 }
- \tl_gset:Nx \g__str_result_tl
- {
- \exp_after:wN \__str_decode_utf_xvi_pair:NN
- #2 \q_nil \q_nil
- \prg_break_point:
- }
- \__str_if_flag_error:nnx { str_error } { utf16-decode } { }
- }
- \cs_new:Npn \__str_decode_utf_xvi_pair:NN #1#2
- {
- \if_meaning:w \q_nil #2
- \__str_decode_utf_xvi_pair_end:Nw #1
- \fi:
- \if_case:w
- \int_eval:n { ( \__str_tmp:w #1#2 - "D6 ) / 4 } \scan_stop:
- \or: \exp_after:wN \__str_decode_utf_xvi_quad:NNwNN
- \or: \exp_after:wN \__str_decode_utf_xvi_extra:NNw
- \fi:
- #1#2 \s__tl
- \int_eval:n { "100 * \__str_tmp:w #1#2 + \__str_tmp:w #2#1 } \s__tl
- \__str_decode_utf_xvi_pair:NN
- }
- \cs_new:Npn \__str_decode_utf_xvi_quad:NNwNN
- #1#2 #3 \__str_decode_utf_xvi_pair:NN #4#5
- {
- \if_meaning:w \q_nil #5
- \__str_decode_utf_xvi_error:nNN { missing } #1#2
- \__str_decode_utf_xvi_pair_end:Nw #4
- \fi:
- \if_int_compare:w
- \if_int_compare:w \__str_tmp:w #4#5 < "DC \exp_stop_f:
- 0 = 1
- \else:
- \__str_tmp:w #4#5 < "E0
- \fi:
- \exp_stop_f:
- #1 #2 #4 #5 \s__tl
- \int_eval:n
- {
- ( "100 * \__str_tmp:w #1#2 + \__str_tmp:w #2#1 - "D7F7 ) * "400
- + "100 * \__str_tmp:w #4#5 + \__str_tmp:w #5#4
- }
- \s__tl
- \exp_after:wN \use_i:nnn
- \else:
- \__str_decode_utf_xvi_error:nNN { missing } #1#2
- \fi:
- \__str_decode_utf_xvi_pair:NN #4#5
- }
- \cs_new:Npn \__str_decode_utf_xvi_pair_end:Nw #1 \fi:
- {
- \fi:
- \if_meaning:w \q_nil #1
- \else:
- \__str_decode_utf_xvi_error:nNN { end } #1 \prg_do_nothing:
- \fi:
- \prg_break:
- }
- \cs_new:Npn \__str_decode_utf_xvi_extra:NNw #1#2 \s__tl #3 \s__tl
- { \__str_decode_utf_xvi_error:nNN { extra } #1#2 }
- \cs_new:Npn \__str_decode_utf_xvi_error:nNN #1#2#3
- {
- \flag_raise:n { str_error }
- \flag_raise:n { str_#1 }
- #2 #3 \s__tl
- \int_use:N \c__str_replacement_char_int \s__tl
- }
-\group_end:
-%%
-%%
-%% End of file `l3str-enc-utf16.def'.
diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-utf32.def b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-utf32.def
deleted file mode 100644
index 307e629071a..00000000000
--- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-utf32.def
+++ /dev/null
@@ -1,156 +0,0 @@
-%%
-%% This is file `l3str-enc-utf32.def',
-%% generated with the docstrip utility.
-%%
-%% The original source files were:
-%%
-%% l3str-convert.dtx (with options: `utf32')
-%%
-%% Copyright (C) 2011-2019 The LaTeX3 Project
-%%
-%% It may be distributed and/or modified under the conditions of
-%% the LaTeX Project Public License (LPPL), either version 1.3c of
-%% this license or (at your option) any later version. The latest
-%% version of this license is in the file:
-%%
-%% http://www.latex-project.org/lppl.txt
-%%
-%% This file is part of the "l3experimental bundle" (The Work in LPPL)
-%% and all files in that bundle must be distributed together.
-%%
-%% File: l3str-convert.dtx
-\group_begin:
- \char_set_catcode_other:N \^^00
- \char_set_catcode_other:N \^^fe
- \char_set_catcode_other:N \^^ff
- \cs_new_protected:cpn { __str_convert_encode_utf32: }
- {
- \__str_convert_gmap_internal:N \__str_encode_utf_xxxii_be:n
- \tl_gput_left:Nx \g__str_result_tl { ^^00 ^^00 ^^fe ^^ff }
- }
- \cs_new_protected:cpn { __str_convert_encode_utf32be: }
- { \__str_convert_gmap_internal:N \__str_encode_utf_xxxii_be:n }
- \cs_new_protected:cpn { __str_convert_encode_utf32le: }
- { \__str_convert_gmap_internal:N \__str_encode_utf_xxxii_le:n }
- \cs_new:Npn \__str_encode_utf_xxxii_be:n #1
- {
- \exp_args:Nf \__str_encode_utf_xxxii_be_aux:nn
- { \int_div_truncate:nn {#1} { "100 } } {#1}
- }
- \cs_new:Npn \__str_encode_utf_xxxii_be_aux:nn #1#2
- {
- ^^00
- \__str_output_byte_pair_be:n {#1}
- \__str_output_byte:n { #2 - #1 * "100 }
- }
- \cs_new:Npn \__str_encode_utf_xxxii_le:n #1
- {
- \exp_args:Nf \__str_encode_utf_xxxii_le_aux:nn
- { \int_div_truncate:nn {#1} { "100 } } {#1}
- }
- \cs_new:Npn \__str_encode_utf_xxxii_le_aux:nn #1#2
- {
- \__str_output_byte:n { #2 - #1 * "100 }
- \__str_output_byte_pair_le:n {#1}
- ^^00
- }
- \flag_clear_new:n { str_overflow }
- \flag_clear_new:n { str_end }
- \__kernel_msg_new:nnnn { str } { utf32-decode }
- {
- Invalid~UTF-32~string:
- \exp_last_unbraced:Nf \use_none:n
- {
- \__str_if_flag_times:nT { str_overflow } { ,~code~point~too~large }
- \__str_if_flag_times:nT { str_end } { ,~truncated~string }
- }
- .
- }
- {
- In~the~UTF-32~encoding,~every~Unicode~character~
- (in~the~range~[U+0000,~U+10FFFF])~is~encoded~as~4~bytes.
- \flag_if_raised:nT { str_overflow }
- {
- \\\\
- LaTeX~came~across~a~code~point~larger~than~1114111,~
- the~maximum~code~point~defined~by~Unicode.~
- Perhaps~the~string~was~not~encoded~in~the~UTF-32~encoding?
- }
- \flag_if_raised:nT { str_end }
- {
- \\\\
- The~length~of~the~string~is~not~a~multiple~of~4.~
- Perhaps~the~string~was~truncated?
- }
- }
- \cs_new_protected:cpn { __str_convert_decode_utf32be: }
- { \__str_decode_utf_xxxii:Nw 1 \g__str_result_tl \s_stop }
- \cs_new_protected:cpn { __str_convert_decode_utf32le: }
- { \__str_decode_utf_xxxii:Nw 2 \g__str_result_tl \s_stop }
- \cs_new_protected:cpn { __str_convert_decode_utf32: }
- {
- \exp_after:wN \__str_decode_utf_xxxii_bom:NNNN \g__str_result_tl
- \s_stop \s_stop \s_stop \s_stop \s_stop
- }
- \cs_new_protected:Npn \__str_decode_utf_xxxii_bom:NNNN #1#2#3#4
- {
- \str_if_eq:nnTF { #1#2#3#4 } { ^^ff ^^fe ^^00 ^^00 }
- { \__str_decode_utf_xxxii:Nw 2 }
- {
- \str_if_eq:nnTF { #1#2#3#4 } { ^^00 ^^00 ^^fe ^^ff }
- { \__str_decode_utf_xxxii:Nw 1 }
- { \__str_decode_utf_xxxii:Nw 1 #1#2#3#4 }
- }
- }
- \cs_new_protected:Npn \__str_decode_utf_xxxii:Nw #1#2 \s_stop
- {
- \flag_clear:n { str_overflow }
- \flag_clear:n { str_end }
- \flag_clear:n { str_error }
- \cs_set:Npn \__str_tmp:w ##1 ##2 { ` ## #1 }
- \tl_gset:Nx \g__str_result_tl
- {
- \exp_after:wN \__str_decode_utf_xxxii_loop:NNNN
- #2 \s_stop \s_stop \s_stop \s_stop
- \prg_break_point:
- }
- \__str_if_flag_error:nnx { str_error } { utf32-decode } { }
- }
- \cs_new:Npn \__str_decode_utf_xxxii_loop:NNNN #1#2#3#4
- {
- \if_meaning:w \s_stop #4
- \exp_after:wN \__str_decode_utf_xxxii_end:w
- \fi:
- #1#2#3#4 \s__tl
- \if_int_compare:w \__str_tmp:w #1#4 > 0 \exp_stop_f:
- \flag_raise:n { str_overflow }
- \flag_raise:n { str_error }
- \int_use:N \c__str_replacement_char_int
- \else:
- \if_int_compare:w \__str_tmp:w #2#3 > 16 \exp_stop_f:
- \flag_raise:n { str_overflow }
- \flag_raise:n { str_error }
- \int_use:N \c__str_replacement_char_int
- \else:
- \int_eval:n
- { \__str_tmp:w #2#3*"10000 + \__str_tmp:w #3#2*"100 + \__str_tmp:w #4#1 }
- \fi:
- \fi:
- \s__tl
- \__str_decode_utf_xxxii_loop:NNNN
- }
- \cs_new:Npn \__str_decode_utf_xxxii_end:w #1 \s_stop
- {
- \tl_if_empty:nF {#1}
- {
- \flag_raise:n { str_end }
- \flag_raise:n { str_error }
- #1 \s__tl
- \int_use:N \c__str_replacement_char_int \s__tl
- }
- \prg_break:
- }
-\group_end:
-%%
-%%
-%% End of file `l3str-enc-utf32.def'.
diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-utf8.def b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-utf8.def
deleted file mode 100644
index fe9fd31ee87..00000000000
--- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-utf8.def
+++ /dev/null
@@ -1,190 +0,0 @@
-%%
-%% This is file `l3str-enc-utf8.def',
-%% generated with the docstrip utility.
-%%
-%% The original source files were:
-%%
-%% l3str-convert.dtx (with options: `utf8')
-%%
-%% Copyright (C) 2011-2019 The LaTeX3 Project
-%%
-%% It may be distributed and/or modified under the conditions of
-%% the LaTeX Project Public License (LPPL), either version 1.3c of
-%% this license or (at your option) any later version. The latest
-%% version of this license is in the file:
-%%
-%% http://www.latex-project.org/lppl.txt
-%%
-%% This file is part of the "l3experimental bundle" (The Work in LPPL)
-%% and all files in that bundle must be distributed together.
-%%
-%% File: l3str-convert.dtx
-\cs_new_protected:cpn { __str_convert_encode_utf8: }
- { \__str_convert_gmap_internal:N \__str_encode_utf_viii_char:n }
-\cs_new:Npn \__str_encode_utf_viii_char:n #1
- {
- \__str_encode_utf_viii_loop:wwnnw #1 ; - 1 + 0 * ;
- { 128 } { 0 }
- { 32 } { 192 }
- { 16 } { 224 }
- { 8 } { 240 }
- \q_stop
- }
-\cs_new:Npn \__str_encode_utf_viii_loop:wwnnw #1; #2; #3#4 #5 \q_stop
- {
- \if_int_compare:w #1 < #3 \exp_stop_f:
- \__str_output_byte:n { #1 + #4 }
- \exp_after:wN \use_none_delimit_by_q_stop:w
- \fi:
- \exp_after:wN \__str_encode_utf_viii_loop:wwnnw
- \int_value:w \int_div_truncate:nn {#1} {64} ; #1 ;
- #5 \q_stop
- \__str_output_byte:n { #2 - 64 * ( #1 - 2 ) }
- }
-\flag_clear_new:n { str_missing }
-\flag_clear_new:n { str_extra }
-\flag_clear_new:n { str_overlong }
-\flag_clear_new:n { str_overflow }
-\__kernel_msg_new:nnnn { str } { utf8-decode }
- {
- Invalid~UTF-8~string:
- \exp_last_unbraced:Nf \use_none:n
- {
- \__str_if_flag_times:nT { str_missing } { ,~missing~continuation~byte }
- \__str_if_flag_times:nT { str_extra } { ,~extra~continuation~byte }
- \__str_if_flag_times:nT { str_overlong } { ,~overlong~form }
- \__str_if_flag_times:nT { str_overflow } { ,~code~point~too~large }
- }
- .
- }
- {
- In~the~UTF-8~encoding,~each~Unicode~character~consists~in~
- 1~to~4~bytes,~with~the~following~bit~pattern: \\
- \iow_indent:n
- {
- Code~point~\ \ \ \ <~128:~0xxxxxxx \\
- Code~point~\ \ \ <~2048:~110xxxxx~10xxxxxx \\
- Code~point~\ \ <~65536:~1110xxxx~10xxxxxx~10xxxxxx \\
- Code~point~ <~1114112:~11110xxx~10xxxxxx~10xxxxxx~10xxxxxx \\
- }
- Bytes~of~the~form~10xxxxxx~are~called~continuation~bytes.
- \flag_if_raised:nT { str_missing }
- {
- \\\\
- A~leading~byte~(in~the~range~[192,255])~was~not~followed~by~
- the~appropriate~number~of~continuation~bytes.
- }
- \flag_if_raised:nT { str_extra }
- {
- \\\\
- LaTeX~came~across~a~continuation~byte~when~it~was~not~expected.
- }
- \flag_if_raised:nT { str_overlong }
- {
- \\\\
- Every~Unicode~code~point~must~be~expressed~in~the~shortest~
- possible~form.~For~instance,~'0xC0'~'0x83'~is~not~a~valid~
- representation~for~the~code~point~3.
- }
- \flag_if_raised:nT { str_overflow }
- {
- \\\\
- Unicode~limits~code~points~to~the~range~[0,1114111].
- }
- }
-\cs_new_protected:cpn { __str_convert_decode_utf8: }
- {
- \flag_clear:n { str_error }
- \flag_clear:n { str_missing }
- \flag_clear:n { str_extra }
- \flag_clear:n { str_overlong }
- \flag_clear:n { str_overflow }
- \tl_gset:Nx \g__str_result_tl
- {
- \exp_after:wN \__str_decode_utf_viii_start:N \g__str_result_tl
- { \prg_break: \__str_decode_utf_viii_end: }
- \prg_break_point:
- }
- \__str_if_flag_error:nnx { str_error } { utf8-decode } { }
- }
-\cs_new:Npn \__str_decode_utf_viii_start:N #1
- {
- #1
- \if_int_compare:w `#1 < "C0 \exp_stop_f:
- \s__tl
- \if_int_compare:w `#1 < "80 \exp_stop_f:
- \int_value:w `#1
- \else:
- \flag_raise:n { str_extra }
- \flag_raise:n { str_error }
- \int_use:N \c__str_replacement_char_int
- \fi:
- \else:
- \exp_after:wN \__str_decode_utf_viii_continuation:wwN
- \int_value:w \int_eval:n { `#1 - "C0 } \exp_after:wN
- \fi:
- \s__tl
- \use_none_delimit_by_q_stop:w {"80} {"800} {"10000} {"110000} \q_stop
- \__str_decode_utf_viii_start:N
- }
-\cs_new:Npn \__str_decode_utf_viii_continuation:wwN
- #1 \s__tl #2 \__str_decode_utf_viii_start:N #3
- {
- \use_none:n #3
- \if_int_compare:w `#3 <
- \if_int_compare:w `#3 < "80 \exp_stop_f: - \fi:
- "C0 \exp_stop_f:
- #3
- \exp_after:wN \__str_decode_utf_viii_aux:wNnnwN
- \int_value:w \int_eval:n { #1 * "40 + `#3 - "80 } \exp_after:wN
- \else:
- \s__tl
- \flag_raise:n { str_missing }
- \flag_raise:n { str_error }
- \int_use:N \c__str_replacement_char_int
- \fi:
- \s__tl
- #2
- \__str_decode_utf_viii_start:N #3
- }
-\cs_new:Npn \__str_decode_utf_viii_aux:wNnnwN
- #1 \s__tl #2#3#4 #5 \__str_decode_utf_viii_start:N #6
- {
- \if_int_compare:w #1 < #4 \exp_stop_f:
- \s__tl
- \if_int_compare:w #1 < #3 \exp_stop_f:
- \flag_raise:n { str_overlong }
- \flag_raise:n { str_error }
- \int_use:N \c__str_replacement_char_int
- \else:
- #1
- \fi:
- \else:
- \if_meaning:w \q_stop #5
- \__str_decode_utf_viii_overflow:w #1
- \fi:
- \exp_after:wN \__str_decode_utf_viii_continuation:wwN
- \int_value:w \int_eval:n { #1 - #4 } \exp_after:wN
- \fi:
- \s__tl
- #2 {#4} #5
- \__str_decode_utf_viii_start:N
- }
-\cs_new:Npn \__str_decode_utf_viii_overflow:w #1 \fi: #2 \fi:
- {
- \fi: \fi:
- \flag_raise:n { str_overflow }
- \flag_raise:n { str_error }
- \int_use:N \c__str_replacement_char_int
- }
-\cs_new:Npn \__str_decode_utf_viii_end:
- {
- \s__tl
- \flag_raise:n { str_missing }
- \flag_raise:n { str_error }
- \int_use:N \c__str_replacement_char_int \s__tl
- \prg_break:
- }
-%%
-%%
-%% End of file `l3str-enc-utf8.def'.
diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-hex.def b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-hex.def
deleted file mode 100644
index 28ff90d79ea..00000000000
--- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-hex.def
+++ /dev/null
@@ -1,74 +0,0 @@
-%%
-%% This is file `l3str-esc-hex.def',
-%% generated with the docstrip utility.
-%%
-%% The original source files were:
-%%
-%% l3str-convert.dtx (with options: `hex')
-%%
-%% Copyright (C) 2011-2019 The LaTeX3 Project
-%%
-%% It may be distributed and/or modified under the conditions of
-%% the LaTeX Project Public License (LPPL), either version 1.3c of
-%% this license or (at your option) any later version. The latest
-%% version of this license is in the file:
-%%
-%% http://www.latex-project.org/lppl.txt
-%%
-%% This file is part of the "l3experimental bundle" (The Work in LPPL)
-%% and all files in that bundle must be distributed together.
-%%
-%% File: l3str-convert.dtx
-\cs_new_protected:Npn \__str_convert_unescape_hex:
- {
- \group_begin:
- \flag_clear:n { str_error }
- \int_set:Nn \tex_escapechar:D { 92 }
- \tl_gset:Nx \g__str_result_tl
- {
- \__str_output_byte:w "
- \exp_last_unbraced:Nf \__str_unescape_hex_auxi:N
- { \tl_to_str:N \g__str_result_tl }
- 0 { ? 0 - 1 \prg_break: }
- \prg_break_point:
- \__str_output_end:
- }
- \__str_if_flag_error:nnx { str_error } { unescape-hex } { }
- \group_end:
- }
-\cs_new:Npn \__str_unescape_hex_auxi:N #1
- {
- \use_none:n #1
- \__str_hexadecimal_use:NTF #1
- { \__str_unescape_hex_auxii:N }
- {
- \flag_raise:n { str_error }
- \__str_unescape_hex_auxi:N
- }
- }
-\cs_new:Npn \__str_unescape_hex_auxii:N #1
- {
- \use_none:n #1
- \__str_hexadecimal_use:NTF #1
- {
- \__str_output_end:
- \__str_output_byte:w " \__str_unescape_hex_auxi:N
- }
- {
- \flag_raise:n { str_error }
- \__str_unescape_hex_auxii:N
- }
- }
-\__kernel_msg_new:nnnn { str } { unescape-hex }
- { String~invalid~in~escaping~'hex':~only~hexadecimal~digits~allowed. }
- {
- Some~characters~in~the~string~you~asked~to~convert~are~not~
- hexadecimal~digits~(0-9,~A-F,~a-f)~nor~spaces.
- }
-\cs_new_protected:Npn \__str_convert_escape_hex:
- { \__str_convert_gmap:N \__str_escape_hex_char:N }
-\cs_new:Npn \__str_escape_hex_char:N #1
- { \__str_output_hexadecimal:n { `#1 } }
-%%
-%%
-%% End of file `l3str-esc-hex.def'.
diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-name.def b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-name.def
deleted file mode 100644
index 58ddb088092..00000000000
--- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-name.def
+++ /dev/null
@@ -1,95 +0,0 @@
-%%
-%% This is file `l3str-esc-name.def',
-%% generated with the docstrip utility.
-%%
-%% The original source files were:
-%%
-%% l3str-convert.dtx (with options: `name')
-%%
-%% Copyright (C) 2011-2019 The LaTeX3 Project
-%%
-%% It may be distributed and/or modified under the conditions of
-%% the LaTeX Project Public License (LPPL), either version 1.3c of
-%% this license or (at your option) any later version. The latest
-%% version of this license is in the file:
-%%
-%% http://www.latex-project.org/lppl.txt
-%%
-%% This file is part of the "l3experimental bundle" (The Work in LPPL)
-%% and all files in that bundle must be distributed together.
-%%
-%% File: l3str-convert.dtx
-\cs_set_protected:Npn \__str_tmp:w #1#2#3
- {
- \cs_new_protected:cpn { __str_convert_unescape_#2: }
- {
- \group_begin:
- \flag_clear:n { str_byte }
- \flag_clear:n { str_error }
- \int_set:Nn \tex_escapechar:D { 92 }
- \tl_gset:Nx \g__str_result_tl
- {
- \exp_after:wN #3 \g__str_result_tl
- #1 ? { ? \prg_break: }
- \prg_break_point:
- }
- \__str_if_flag_error:nnx { str_byte } { non-byte } { #2 }
- \__str_if_flag_error:nnx { str_error } { unescape-#2 } { }
- \group_end:
- }
- \cs_new:Npn #3 ##1#1##2##3
- {
- \__str_filter_bytes:n {##1}
- \use_none:n ##3
- \__str_output_byte:w "
- \__str_hexadecimal_use:NTF ##2
- {
- \__str_hexadecimal_use:NTF ##3
- { }
- {
- \flag_raise:n { str_error }
- * 0 + `#1 \use_i:nn
- }
- }
- {
- \flag_raise:n { str_error }
- 0 + `#1 \use_i:nn
- }
- \__str_output_end:
- \use_i:nnn #3 ##2##3
- }
- \__kernel_msg_new:nnnn { str } { unescape-#2 }
- { String~invalid~in~escaping~'#2'. }
- {
- LaTeX~came~across~the~escape~character~'#1'~not~followed~by~
- two~hexadecimal~digits.~This~is~invalid~in~the~escaping~'#2'.
- }
- }
-\exp_after:wN \__str_tmp:w \c_hash_str { name }
- \__str_unescape_name_loop:wNN
-\str_const:Nn \c__str_escape_name_not_str { ! " $ & ' } %$
-\str_const:Nn \c__str_escape_name_str { {}/<>[] }
-\cs_new_protected:Npn \__str_convert_escape_name:
- { \__str_convert_gmap:N \__str_escape_name_char:N }
-\cs_new:Npn \__str_escape_name_char:N #1
- {
- \__str_if_escape_name:NTF #1 {#1}
- { \c_hash_str \__str_output_hexadecimal:n {`#1} }
- }
-\prg_new_conditional:Npnn \__str_if_escape_name:N #1 { TF }
- {
- \if_int_compare:w `#1 < "2A \exp_stop_f:
- \__str_if_contains_char:NNTF \c__str_escape_name_not_str #1
- \prg_return_true: \prg_return_false:
- \else:
- \if_int_compare:w `#1 > "7E \exp_stop_f:
- \prg_return_false:
- \else:
- \__str_if_contains_char:NNTF \c__str_escape_name_str #1
- \prg_return_false: \prg_return_true:
- \fi:
- \fi:
- }
-%%
-%%
-%% End of file `l3str-esc-name.def'.
diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-string.def b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-string.def
deleted file mode 100644
index 8f294e4220a..00000000000
--- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-string.def
+++ /dev/null
@@ -1,144 +0,0 @@
-%%
-%% This is file `l3str-esc-string.def',
-%% generated with the docstrip utility.
-%%
-%% The original source files were:
-%%
-%% l3str-convert.dtx (with options: `string')
-%%
-%% Copyright (C) 2011-2019 The LaTeX3 Project
-%%
-%% It may be distributed and/or modified under the conditions of
-%% the LaTeX Project Public License (LPPL), either version 1.3c of
-%% this license or (at your option) any later version. The latest
-%% version of this license is in the file:
-%%
-%% http://www.latex-project.org/lppl.txt
-%%
-%% This file is part of the "l3experimental bundle" (The Work in LPPL)
-%% and all files in that bundle must be distributed together.
-%%
-%% File: l3str-convert.dtx
-\group_begin:
- \char_set_catcode_other:N \^^J
- \char_set_catcode_other:N \^^M
- \cs_set_protected:Npn \__str_tmp:w #1
- {
- \cs_new_protected:Npn \__str_convert_unescape_string:
- {
- \group_begin:
- \flag_clear:n { str_byte }
- \flag_clear:n { str_error }
- \int_set:Nn \tex_escapechar:D { 92 }
- \tl_gset:Nx \g__str_result_tl
- {
- \exp_after:wN \__str_unescape_string_newlines:wN
- \g__str_result_tl \prg_break: ^^M ?
- \prg_break_point:
- }
- \tl_gset:Nx \g__str_result_tl
- {
- \exp_after:wN \__str_unescape_string_loop:wNNN
- \g__str_result_tl #1 ?? { ? \prg_break: }
- \prg_break_point:
- }
- \__str_if_flag_error:nnx { str_byte } { non-byte } { string }
- \__str_if_flag_error:nnx { str_error } { unescape-string } { }
- \group_end:
- }
- }
- \exp_args:No \__str_tmp:w { \c_backslash_str }
- \exp_last_unbraced:NNNNo
- \cs_new:Npn \__str_unescape_string_loop:wNNN #1 \c_backslash_str #2#3#4
- {
- \__str_filter_bytes:n {#1}
- \use_none:n #4
- \__str_output_byte:w '
- \__str_octal_use:NTF #2
- {
- \__str_octal_use:NTF #3
- {
- \__str_octal_use:NTF #4
- {
- \if_int_compare:w #2 > 3 \exp_stop_f:
- - 256
- \fi:
- \__str_unescape_string_repeat:NNNNNN
- }
- { \__str_unescape_string_repeat:NNNNNN ? }
- }
- { \__str_unescape_string_repeat:NNNNNN ?? }
- }
- {
- \str_case_e:nnF {#2}
- {
- { \c_backslash_str } { 134 }
- { ( } { 50 }
- { ) } { 51 }
- { r } { 15 }
- { f } { 14 }
- { n } { 12 }
- { t } { 11 }
- { b } { 10 }
- { ^^J } { 0 - 1 }
- }
- {
- \flag_raise:n { str_error }
- 0 - 1 \use_i:nn
- }
- }
- \__str_output_end:
- \use_i:nn \__str_unescape_string_loop:wNNN #2#3#4
- }
- \cs_new:Npn \__str_unescape_string_repeat:NNNNNN #1#2#3#4#5#6
- { \__str_output_end: \__str_unescape_string_loop:wNNN }
- \cs_new:Npn \__str_unescape_string_newlines:wN #1 ^^M #2
- {
- #1
- \if_charcode:w ^^J #2 \else: ^^J \fi:
- \__str_unescape_string_newlines:wN #2
- }
- \__kernel_msg_new:nnnn { str } { unescape-string }
- { String~invalid~in~escaping~'string'. }
- {
- LaTeX~came~across~an~escape~character~'\c_backslash_str'~
- not~followed~by~any~of:~'n',~'r',~'t',~'b',~'f',~'(',~')',~
- '\c_backslash_str',~one~to~three~octal~digits,~or~the~end~
- of~a~line.
- }
-\group_end:
-\str_const:Nx \c__str_escape_string_str
- { \c_backslash_str ( ) }
-\cs_new_protected:Npn \__str_convert_escape_string:
- { \__str_convert_gmap:N \__str_escape_string_char:N }
-\cs_new:Npn \__str_escape_string_char:N #1
- {
- \__str_if_escape_string:NTF #1
- {
- \__str_if_contains_char:NNT
- \c__str_escape_string_str #1
- { \c_backslash_str }
- #1
- }
- {
- \c_backslash_str
- \int_div_truncate:nn {`#1} {64}
- \int_mod:nn { \int_div_truncate:nn {`#1} { 8 } } { 8 }
- \int_mod:nn {`#1} { 8 }
- }
- }
-\prg_new_conditional:Npnn \__str_if_escape_string:N #1 { TF }
- {
- \if_int_compare:w `#1 < "21 \exp_stop_f:
- \prg_return_false:
- \else:
- \if_int_compare:w `#1 > "7E \exp_stop_f:
- \prg_return_false:
- \else:
- \prg_return_true:
- \fi:
- \fi:
- }
-%%
-%%
-%% End of file `l3str-esc-string.def'.
diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-url.def b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-url.def
deleted file mode 100644
index 21fa69980a9..00000000000
--- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-url.def
+++ /dev/null
@@ -1,93 +0,0 @@
-%%
-%% This is file `l3str-esc-url.def',
-%% generated with the docstrip utility.
-%%
-%% The original source files were:
-%%
-%% l3str-convert.dtx (with options: `url')
-%%
-%% Copyright (C) 2011-2019 The LaTeX3 Project
-%%
-%% It may be distributed and/or modified under the conditions of
-%% the LaTeX Project Public License (LPPL), either version 1.3c of
-%% this license or (at your option) any later version. The latest
-%% version of this license is in the file:
-%%
-%% http://www.latex-project.org/lppl.txt
-%%
-%% This file is part of the "l3experimental bundle" (The Work in LPPL)
-%% and all files in that bundle must be distributed together.
-%%
-%% File: l3str-convert.dtx
-\cs_set_protected:Npn \__str_tmp:w #1#2#3
- {
- \cs_new_protected:cpn { __str_convert_unescape_#2: }
- {
- \group_begin:
- \flag_clear:n { str_byte }
- \flag_clear:n { str_error }
- \int_set:Nn \tex_escapechar:D { 92 }
- \tl_gset:Nx \g__str_result_tl
- {
- \exp_after:wN #3 \g__str_result_tl
- #1 ? { ? \prg_break: }
- \prg_break_point:
- }
- \__str_if_flag_error:nnx { str_byte } { non-byte } { #2 }
- \__str_if_flag_error:nnx { str_error } { unescape-#2 } { }
- \group_end:
- }
- \cs_new:Npn #3 ##1#1##2##3
- {
- \__str_filter_bytes:n {##1}
- \use_none:n ##3
- \__str_output_byte:w "
- \__str_hexadecimal_use:NTF ##2
- {
- \__str_hexadecimal_use:NTF ##3
- { }
- {
- \flag_raise:n { str_error }
- * 0 + `#1 \use_i:nn
- }
- }
- {
- \flag_raise:n { str_error }
- 0 + `#1 \use_i:nn
- }
- \__str_output_end:
- \use_i:nnn #3 ##2##3
- }
- \__kernel_msg_new:nnnn { str } { unescape-#2 }
- { String~invalid~in~escaping~'#2'. }
- {
- LaTeX~came~across~the~escape~character~'#1'~not~followed~by~
- two~hexadecimal~digits.~This~is~invalid~in~the~escaping~'#2'.
- }
- }
-\exp_after:wN \__str_tmp:w \c_percent_str { url }
- \__str_unescape_url_loop:wNN
-\cs_new_protected:Npn \__str_convert_escape_url:
- { \__str_convert_gmap:N \__str_escape_url_char:N }
-\cs_new:Npn \__str_escape_url_char:N #1
- {
- \__str_if_escape_url:NTF #1 {#1}
- { \c_percent_str \__str_output_hexadecimal:n { `#1 } }
- }
-\prg_new_conditional:Npnn \__str_if_escape_url:N #1 { TF }
- {
- \if_int_compare:w `#1 < "41 \exp_stop_f:
- \__str_if_contains_char:nNTF { "-.<> } #1
- \prg_return_true: \prg_return_false:
- \else:
- \if_int_compare:w `#1 > "7E \exp_stop_f:
- \prg_return_false:
- \else:
- \__str_if_contains_char:nNTF { [ ] } #1
- \prg_return_false: \prg_return_true:
- \fi:
- \fi:
- }
-%%
-%%
-%% End of file `l3str-esc-url.def'.
diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty
index fa84e0e970d..554ebefd793 100644
--- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty
+++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty
@@ -20,7 +20,7 @@
%%
%% File: l3str-format.dtx
\RequirePackage{expl3}
-\ProvidesExplPackage{l3str-format}{2019-05-28}{}
+\ProvidesExplPackage{l3str-format}{2019-07-01}{}
{L3 Experimental string formatting}
\cs_generate_variant:Nn \use:nn { nf }
\cs_generate_variant:Nn \use:nnn { fnf }
diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3sys-shell/l3sys-shell.sty b/Master/texmf-dist/tex/latex/l3experimental/l3sys-shell/l3sys-shell.sty
index 20fd2db2f33..8faf0a47e3e 100644
--- a/Master/texmf-dist/tex/latex/l3experimental/l3sys-shell/l3sys-shell.sty
+++ b/Master/texmf-dist/tex/latex/l3experimental/l3sys-shell/l3sys-shell.sty
@@ -20,7 +20,7 @@
%%
%% File: l3sys-shell.dtx
\RequirePackage{expl3}
-\ProvidesExplPackage{l3sys-shell}{2019-05-28}{}
+\ProvidesExplPackage{l3sys-shell}{2019-07-01}{}
{L3 Experimental system shell functions}
\cs_new:Npn \__sys_path_to_win:n #1
{
diff --git a/Master/texmf-dist/tex/latex/l3experimental/xcoffins/xcoffins.sty b/Master/texmf-dist/tex/latex/l3experimental/xcoffins/xcoffins.sty
index 9c53fe7d4a6..7d5cc5f41ad 100644
--- a/Master/texmf-dist/tex/latex/l3experimental/xcoffins/xcoffins.sty
+++ b/Master/texmf-dist/tex/latex/l3experimental/xcoffins/xcoffins.sty
@@ -20,7 +20,7 @@
%%
%% File: xcoffins.dtx
\RequirePackage{xparse}
-\ProvidesExplPackage{xcoffins}{2019-05-28}{}
+\ProvidesExplPackage{xcoffins}{2019-07-01}{}
{L3 Experimental design level coffins}
\keys_define:nn { coffin }
{
diff --git a/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty b/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty
index 263c06691eb..a1d11afafd0 100644
--- a/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty
+++ b/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty
@@ -32,7 +32,7 @@
}%
\endinput
}
-\ProvidesExplPackage{l3galley}{2019-05-28}{}
+\ProvidesExplPackage{l3galley}{2019-07-01}{}
{L3 Experimental galley code}
\int_new:N \l__galley_tmp_int
\seq_new:N \g__galley_tmpa_seq
diff --git a/Master/texmf-dist/tex/latex/l3experimental/xgalley/xgalley.sty b/Master/texmf-dist/tex/latex/l3experimental/xgalley/xgalley.sty
index d492282db69..e0b6277744e 100644
--- a/Master/texmf-dist/tex/latex/l3experimental/xgalley/xgalley.sty
+++ b/Master/texmf-dist/tex/latex/l3experimental/xgalley/xgalley.sty
@@ -20,7 +20,7 @@
%%
%% File: xgalley.dtx
\RequirePackage{xparse}
-\ProvidesExplPackage{xgalley}{2019-05-28}{}
+\ProvidesExplPackage{xgalley}{2019-07-01}{}
{L3 Experimental galley}
\RequirePackage{xparse,xtemplate,l3galley}
\clist_new:N \l__galley_tmpa_clist
diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex b/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex
index dbdc37c17f5..d4f199159cc 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex
+++ b/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex
@@ -40,6 +40,7 @@
%% l3fp-random.dtx (with options: `package')
%% l3fparray.dtx (with options: `package')
%% l3sort.dtx (with options: `package')
+%% l3str-convert.dtx (with options: `package')
%% l3tl-analysis.dtx (with options: `package')
%% l3regex.dtx (with options: `package')
%% l3box.dtx (with options: `package')
@@ -64,7 +65,7 @@
%% and all files in that bundle must be distributed together.
%%
%% File: expl3.dtx
-\def\ExplFileDate{2019-05-28}%
+\def\ExplFileDate{2019-07-01}%
\begingroup
\def\next{\endgroup}%
\expandafter\ifx\csname PackageError\endcsname\relax
@@ -2189,6 +2190,7 @@
\cs_set:Npn \use_ii:nnnn #1#2#3#4 {#2}
\cs_set:Npn \use_iii:nnnn #1#2#3#4 {#3}
\cs_set:Npn \use_iv:nnnn #1#2#3#4 {#4}
+\cs_set:Npn \use_ii_i:nn #1#2 { #2 #1 }
\cs_set:Npn \use_none_delimit_by_q_nil:w #1 \q_nil { }
\cs_set:Npn \use_none_delimit_by_q_stop:w #1 \q_stop { }
\cs_set:Npn \use_none_delimit_by_q_recursion_stop:w #1 \q_recursion_stop { }
@@ -9348,7 +9350,7 @@
}
}
%% File: l3msg.dtx
-\tl_new:N \l__msg_tmp_tl
+\tl_new:N \l__msg_internal_tl
\str_new:N \l__msg_name_str
\str_new:N \l__msg_text_str
\tl_const:Nn \c__msg_text_prefix_tl { msg~text~>~ }
@@ -9435,22 +9437,35 @@
\c_space_tl
\msg_line_number:
}
-\cs_new_protected:Npn \__msg_interrupt:Nnnn #1#2#3#4
+\cs_new_protected:Npn \__msg_interrupt:NnnnN #1#2#3#4#5
{
\str_set:Nx \l__msg_text_str { #1 {#2} }
\str_set:Nx \l__msg_name_str { \msg_module_name:n {#2} }
- \tl_if_empty:nTF {#4}
+ \cs_if_eq:cNTF
+ { \c__msg_more_text_prefix_tl #2 / #3 }
+ \__msg_no_more_text:nnnn
{
- \__msg_interrupt_wrap:nnn {#3}
+ \__msg_interrupt_wrap:nnn
+ { \use:c { \c__msg_text_prefix_tl #2 / #3 } #4 }
{ \c__msg_continue_text_tl }
- { \c__msg_no_info_text_tl }
+ {
+ \c__msg_no_info_text_tl
+ \tl_if_empty:NF #5
+ { \\ \\ #5 }
+ }
}
{
- \__msg_interrupt_wrap:nnn {#3}
+ \__msg_interrupt_wrap:nnn
+ { \use:c { \c__msg_text_prefix_tl #2 / #3 } #4 }
{ \c__msg_help_text_tl }
- {#4}
+ {
+ \use:c { \c__msg_more_text_prefix_tl #2 / #3 } #4
+ \tl_if_empty:NF #5
+ { \\ \\ #5 }
+ }
}
}
+\cs_new:Npn \__msg_no_more_text:nnnn #1#2#3#4 { }
\cs_new_protected:Npn \__msg_interrupt_wrap:nnn #1#2#3
{
\iow_wrap:nnnN { \\ #3 } { } { } \__msg_interrupt_more_text:n
@@ -9468,13 +9483,13 @@
{ ~ }
}
{ } \__msg_interrupt_text:n
- \iow_wrap:nnnN { \l__msg_tmp_tl \\ \\ #2 } { } { }
+ \iow_wrap:nnnN { \l__msg_internal_tl \\ \\ #2 } { } { }
\__msg_interrupt:n
}
\cs_new_protected:Npn \__msg_interrupt_text:n #1
{
\group_end:
- \tl_set:Nn \l__msg_tmp_tl {#1}
+ \tl_set:Nn \l__msg_internal_tl {#1}
}
\cs_new_protected:Npn \__msg_interrupt_more_text:n #1
{ \exp_args:Nx \tex_errhelp:D { #1 \iow_newline: } }
@@ -9600,41 +9615,32 @@
}
\__msg_class_new:nn { fatal }
{
- \__msg_interrupt:Nnnn
- \msg_fatal_text:n
- {#1}
- { \use:c { \c__msg_text_prefix_tl #1 / #2 } {#3} {#4} {#5} {#6} }
- { \c__msg_fatal_text_tl }
- \tex_end:D
+ \__msg_interrupt:NnnnN
+ \msg_fatal_text:n {#1} {#2}
+ { {#3} {#4} {#5} {#6} }
+ \c__msg_fatal_text_tl
+ \__msg_fatal_exit:
+ }
+ \cs_new_protected:Npn \__msg_fatal_exit:
+ {
+ \tex_batchmode:D
+ \tex_read:D -1 to \l__msg_internal_tl
}
\__msg_class_new:nn { critical }
{
- \__msg_interrupt:Nnnn
- \msg_critical_text:n
- {#1}
- { \use:c { \c__msg_text_prefix_tl #1 / #2 } {#3} {#4} {#5} {#6} }
- { \c__msg_critical_text_tl }
+ \__msg_interrupt:NnnnN
+ \msg_critical_text:n {#1} {#2}
+ { {#3} {#4} {#5} {#6} }
+ \c__msg_critical_text_tl
\tex_endinput:D
}
\__msg_class_new:nn { error }
{
- \__msg_error:cnnnnn
- { \c__msg_more_text_prefix_tl #1 / #2 }
- {#3} {#4} {#5} {#6}
- {
- \__msg_interrupt:Nnnn
- \msg_error_text:n
- {#1}
- { \use:c { \c__msg_text_prefix_tl #1 / #2 } {#3} {#4} {#5} {#6} }
- }
- }
- \cs_new_protected:Npn \__msg_error:cnnnnn #1#2#3#4#5#6
- {
- \cs_if_eq:cNTF {#1} \__msg_no_more_text:nnnn
- { #6 { } }
- { #6 { \use:c {#1} {#2} {#3} {#4} {#5} } }
+ \__msg_interrupt:NnnnN
+ \msg_error_text:n {#1} {#2}
+ { {#3} {#4} {#5} {#6} }
+ \c_empty_tl
}
- \cs_new:Npn \__msg_no_more_text:nnnn #1#2#3#4 { }
\__msg_class_new:nn { warning }
{
\str_set:Nx \l__msg_text_str { \msg_warning_text:n {#1} }
@@ -9710,13 +9716,13 @@
{
\tl_if_empty:nF {#1}
{ \exp_args:No \iow_term:n { \use_none:n #1 } }
- \tl_set:Nn \l__msg_tmp_tl {#2}
+ \tl_set:Nn \l__msg_internal_tl {#2}
\__kernel_iow_with:Nnn \tex_newlinechar:D { 10 }
{
\__kernel_iow_with:Nnn \tex_errorcontextlines:D { -1 }
{
\tex_showtokens:D \exp_after:wN \exp_after:wN \exp_after:wN
- { \exp_after:wN \l__msg_tmp_tl }
+ { \exp_after:wN \l__msg_internal_tl }
}
}
}
@@ -12154,7 +12160,8 @@
{
\__keys_property_find:n {#1}
\cs_if_exist:cTF { \c__keys_props_root_tl \l__keys_property_tl }
- { \__keys_define_code:n {#2} }
+ { \__keys_define_code:n {#2}
+ }
{
\tl_if_empty:NF \l__keys_property_tl
{
@@ -12183,7 +12190,7 @@
{
\tl_if_empty:NF \l__keys_module_tl
{ \l__keys_module_tl / }
- #1
+ \tl_trim_spaces:n {#1}
}
\tl_set:Nn \l__keys_property_tl { . #2 }
}
@@ -12992,7 +12999,28 @@
}
}
\cs_new:Npn \__keys_trim_spaces:n #1
- { \tl_trim_spaces:o { \tl_to_str:n {#1} } }
+ {
+ \exp_after:wN \__keys_trim_spaces_auxi:w \tl_to_str:n {#1}
+ / \q_nil \q_stop
+
+ }
+\cs_new:Npn \__keys_trim_spaces_auxi:w #1 / #2 \q_stop
+ {
+ \quark_if_nil:nTF {#2}
+ { \tl_trim_spaces:n {#1} }
+ { \__keys_trim_spaces_auxii:w #1 / #2 }
+ }
+\cs_new:Npn \__keys_trim_spaces_auxii:w #1 / #2 / \q_nil
+ {
+ \tl_trim_spaces:n {#1}
+ \__keys_trim_spaces_auxiii:w #2 / \q_recursion_tail / \q_recursion_stop
+ }
+\cs_set:Npn \__keys_trim_spaces_auxiii:w #1 /
+ {
+ \quark_if_recursion_tail_stop:n {#1}
+ \tl_trim_spaces:n { / #1 }
+ \__keys_trim_spaces_auxiii:w
+ }
\prg_new_conditional:Npnn \keys_if_exist:nn #1#2 { p , T , F , TF }
{
\cs_if_exist:cTF
@@ -20040,6 +20068,1296 @@
\iow_char:N\\sort_return_swapped: ~multiple~times.~
Exactly~one~of~these~should~be~called.
}
+%% File: l3str-convert.dtx
+\cs_new_protected:Npn \__str_tmp:w { }
+\tl_new:N \l__str_internal_tl
+\int_new:N \l__str_internal_int
+\tl_new:N \g__str_result_tl
+\int_const:Nn \c__str_replacement_char_int { "FFFD }
+\int_const:Nn \c__str_max_byte_int { 255 }
+\prop_new:N \g__str_alias_prop
+\prop_gput:Nnn \g__str_alias_prop { latin1 } { iso88591 }
+\prop_gput:Nnn \g__str_alias_prop { latin2 } { iso88592 }
+\prop_gput:Nnn \g__str_alias_prop { latin3 } { iso88593 }
+\prop_gput:Nnn \g__str_alias_prop { latin4 } { iso88594 }
+\prop_gput:Nnn \g__str_alias_prop { latin5 } { iso88599 }
+\prop_gput:Nnn \g__str_alias_prop { latin6 } { iso885910 }
+\prop_gput:Nnn \g__str_alias_prop { latin7 } { iso885913 }
+\prop_gput:Nnn \g__str_alias_prop { latin8 } { iso885914 }
+\prop_gput:Nnn \g__str_alias_prop { latin9 } { iso885915 }
+\prop_gput:Nnn \g__str_alias_prop { latin10 } { iso885916 }
+\prop_gput:Nnn \g__str_alias_prop { utf16le } { utf16 }
+\prop_gput:Nnn \g__str_alias_prop { utf16be } { utf16 }
+\prop_gput:Nnn \g__str_alias_prop { utf32le } { utf32 }
+\prop_gput:Nnn \g__str_alias_prop { utf32be } { utf32 }
+\prop_gput:Nnn \g__str_alias_prop { hexadecimal } { hex }
+\bool_new:N \g__str_error_bool
+\flag_new:n { str_byte }
+\flag_new:n { str_error }
+\prg_new_conditional:Npnn \__str_if_contains_char:NN #1#2 { T , TF }
+ {
+ \exp_after:wN \__str_if_contains_char_aux:NN \exp_after:wN #2
+ #1 { \prg_break:n { ? \fi: } }
+ \prg_break_point:
+ \prg_return_false:
+ }
+\prg_new_conditional:Npnn \__str_if_contains_char:nN #1#2 { TF }
+ {
+ \__str_if_contains_char_aux:NN #2 #1 { \prg_break:n { ? \fi: } }
+ \prg_break_point:
+ \prg_return_false:
+ }
+\cs_new:Npn \__str_if_contains_char_aux:NN #1#2
+ {
+ \if_charcode:w #1 #2
+ \exp_after:wN \__str_if_contains_char_true:
+ \fi:
+ \__str_if_contains_char_aux:NN #1
+ }
+\cs_new:Npn \__str_if_contains_char_true:
+ { \prg_break:n { \prg_return_true: \use_none:n } }
+\prg_new_conditional:Npnn \__str_octal_use:N #1 { TF }
+ {
+ \if_int_compare:w 1 < '1 \token_to_str:N #1 \exp_stop_f:
+ #1 \prg_return_true:
+ \else:
+ \prg_return_false:
+ \fi:
+ }
+\prg_new_conditional:Npnn \__str_hexadecimal_use:N #1 { TF }
+ {
+ \if_int_compare:w 1 < "1 \token_to_str:N #1 \exp_stop_f:
+ #1 \prg_return_true:
+ \else:
+ \if_case:w \int_eval:n { \exp_after:wN ` \token_to_str:N #1 - `a }
+ A
+ \or: B
+ \or: C
+ \or: D
+ \or: E
+ \or: F
+ \else:
+ \prg_return_false:
+ \exp_after:wN \use_none:n
+ \fi:
+ \prg_return_true:
+ \fi:
+ }
+\group_begin:
+ \tl_set:Nx \l__str_internal_tl { \tl_to_str:n { 0123456789ABCDEF } }
+ \tl_map_inline:Nn \l__str_internal_tl
+ {
+ \tl_map_inline:Nn \l__str_internal_tl
+ {
+ \tl_const:cx { c__str_byte_ \int_eval:n {"#1##1} _tl }
+ { \char_generate:nn { "#1##1 } { 12 } #1 ##1 }
+ }
+ }
+\group_end:
+\tl_const:cn { c__str_byte_-1_tl } { { } \use_none:n { } }
+\cs_new:Npn \__str_output_byte:n #1
+ { \__str_output_byte:w #1 \__str_output_end: }
+\cs_new:Npn \__str_output_byte:w
+ {
+ \exp_after:wN \exp_after:wN
+ \exp_after:wN \use_i:nnn
+ \cs:w c__str_byte_ \int_eval:w
+ }
+\cs_new:Npn \__str_output_hexadecimal:n #1
+ {
+ \exp_after:wN \exp_after:wN
+ \exp_after:wN \use_none:n
+ \cs:w c__str_byte_ \int_eval:n {#1} _tl \cs_end:
+ }
+\cs_new:Npn \__str_output_end:
+ { \scan_stop: _tl \cs_end: }
+\cs_new:Npn \__str_output_byte_pair_be:n #1
+ {
+ \exp_args:Nf \__str_output_byte_pair:nnN
+ { \int_div_truncate:nn { #1 } { "100 } } {#1} \use:nn
+ }
+\cs_new:Npn \__str_output_byte_pair_le:n #1
+ {
+ \exp_args:Nf \__str_output_byte_pair:nnN
+ { \int_div_truncate:nn { #1 } { "100 } } {#1} \use_ii_i:nn
+ }
+\cs_new:Npn \__str_output_byte_pair:nnN #1#2#3
+ {
+ #3
+ { \__str_output_byte:n { #1 } }
+ { \__str_output_byte:n { #2 - #1 * "100 } }
+ }
+\cs_new_protected:Npn \__str_convert_gmap:N #1
+ {
+ \tl_gset:Nx \g__str_result_tl
+ {
+ \exp_after:wN \__str_convert_gmap_loop:NN
+ \exp_after:wN #1
+ \g__str_result_tl { ? \prg_break: }
+ \prg_break_point:
+ }
+ }
+\cs_new:Npn \__str_convert_gmap_loop:NN #1#2
+ {
+ \use_none:n #2
+ #1#2
+ \__str_convert_gmap_loop:NN #1
+ }
+\cs_new_protected:Npn \__str_convert_gmap_internal:N #1
+ {
+ \tl_gset:Nx \g__str_result_tl
+ {
+ \exp_after:wN \__str_convert_gmap_internal_loop:Nww
+ \exp_after:wN #1
+ \g__str_result_tl \s__tl \q_stop \prg_break: \s__tl
+ \prg_break_point:
+ }
+ }
+\cs_new:Npn \__str_convert_gmap_internal_loop:Nww #1 #2 \s__tl #3 \s__tl
+ {
+ \use_none_delimit_by_q_stop:w #3 \q_stop
+ #1 {#3}
+ \__str_convert_gmap_internal_loop:Nww #1
+ }
+\cs_new_protected:Npn \__str_if_flag_error:nnx #1
+ {
+ \flag_if_raised:nTF {#1}
+ { \__kernel_msg_error:nnx { str } }
+ { \use_none:nn }
+ }
+\cs_new_protected:Npn \__str_if_flag_no_error:nnx #1#2#3
+ { \flag_if_raised:nT {#1} { \bool_gset_true:N \g__str_error_bool } }
+\cs_new:Npn \__str_if_flag_times:nT #1#2
+ { \flag_if_raised:nT {#1} { #2~(x \flag_height:n {#1} ) } }
+\cs_new_protected:Npn \str_set_convert:Nnnn
+ { \__str_convert:nNNnnn { } \tl_set_eq:NN }
+\cs_new_protected:Npn \str_gset_convert:Nnnn
+ { \__str_convert:nNNnnn { } \tl_gset_eq:NN }
+\prg_new_protected_conditional:Npnn
+ \str_set_convert:Nnnn #1#2#3#4 { T , F , TF }
+ {
+ \bool_gset_false:N \g__str_error_bool
+ \__str_convert:nNNnnn
+ { \cs_set_eq:NN \__str_if_flag_error:nnx \__str_if_flag_no_error:nnx }
+ \tl_set_eq:NN #1 {#2} {#3} {#4}
+ \bool_if:NTF \g__str_error_bool \prg_return_false: \prg_return_true:
+ }
+\prg_new_protected_conditional:Npnn
+ \str_gset_convert:Nnnn #1#2#3#4 { T , F , TF }
+ {
+ \bool_gset_false:N \g__str_error_bool
+ \__str_convert:nNNnnn
+ { \cs_set_eq:NN \__str_if_flag_error:nnx \__str_if_flag_no_error:nnx }
+ \tl_gset_eq:NN #1 {#2} {#3} {#4}
+ \bool_if:NTF \g__str_error_bool \prg_return_false: \prg_return_true:
+ }
+\cs_new_protected:Npn \__str_convert:nNNnnn #1#2#3#4#5#6
+ {
+ \group_begin:
+ #1
+ \tl_gset:Nx \g__str_result_tl { \__kernel_str_to_other_fast:n {#4} }
+ \exp_after:wN \__str_convert:wwwnn
+ \tl_to_str:n {#5} /// \q_stop
+ { decode } { unescape }
+ \prg_do_nothing:
+ \__str_convert_decode_:
+ \exp_after:wN \__str_convert:wwwnn
+ \tl_to_str:n {#6} /// \q_stop
+ { encode } { escape }
+ \use_ii_i:nn
+ \__str_convert_encode_:
+ \group_end:
+ #2 #3 \g__str_result_tl
+ }
+\cs_new_protected:Npn \__str_convert:wwwnn
+ #1 / #2 // #3 \q_stop #4#5
+ {
+ \__str_convert:nnn {enc} {#4} {#1}
+ \__str_convert:nnn {esc} {#5} {#2}
+ \exp_args:Ncc \__str_convert:NNnNN
+ { __str_convert_#4_#1: } { __str_convert_#5_#2: } {#2}
+ }
+\cs_new_protected:Npn \__str_convert:NNnNN #1#2#3#4#5
+ {
+ \if_meaning:w #1 #5
+ \tl_if_empty:nF {#3}
+ { \__kernel_msg_error:nnx { str } { native-escaping } {#3} }
+ #1
+ \else:
+ #4 #2 #1
+ \fi:
+ }
+\cs_new_protected:Npn \__str_convert:nnn #1#2#3
+ {
+ \cs_if_exist:cF { __str_convert_#2_#3: }
+ {
+ \exp_args:Nx \__str_convert:nnnn
+ { \__str_convert_lowercase_alphanum:n {#3} }
+ {#1} {#2} {#3}
+ }
+ }
+\cs_new_protected:Npn \__str_convert:nnnn #1#2#3#4
+ {
+ \cs_if_exist:cF { __str_convert_#3_#1: }
+ {
+ \prop_get:NnNF \g__str_alias_prop {#1} \l__str_internal_tl
+ { \tl_set:Nn \l__str_internal_tl {#1} }
+ \cs_if_exist:cF { __str_convert_#3_ \l__str_internal_tl : }
+ {
+ \file_if_exist:nTF { l3str-#2- \l__str_internal_tl .def }
+ {
+ \group_begin:
+ \__str_load_catcodes:
+ \file_input:n { l3str-#2- \l__str_internal_tl .def }
+ \group_end:
+ }
+ {
+ \tl_clear:N \l__str_internal_tl
+ \__kernel_msg_error:nnxx { str } { unknown-#2 } {#4} {#1}
+ }
+ }
+ \cs_if_exist:cF { __str_convert_#3_#1: }
+ {
+ \cs_gset_eq:cc { __str_convert_#3_#1: }
+ { __str_convert_#3_ \l__str_internal_tl : }
+ }
+ }
+ \cs_gset_eq:cc { __str_convert_#3_#4: } { __str_convert_#3_#1: }
+ }
+\cs_new:Npn \__str_convert_lowercase_alphanum:n #1
+ {
+ \exp_after:wN \__str_convert_lowercase_alphanum_loop:N
+ \tl_to_str:n {#1} { ? \prg_break: }
+ \prg_break_point:
+ }
+\cs_new:Npn \__str_convert_lowercase_alphanum_loop:N #1
+ {
+ \use_none:n #1
+ \if_int_compare:w `#1 > `Z \exp_stop_f:
+ \if_int_compare:w `#1 > `z \exp_stop_f: \else:
+ \if_int_compare:w `#1 < `a \exp_stop_f: \else:
+ #1
+ \fi:
+ \fi:
+ \else:
+ \if_int_compare:w `#1 < `A \exp_stop_f:
+ \if_int_compare:w 1 < 1#1 \exp_stop_f:
+ #1
+ \fi:
+ \else:
+ \__str_output_byte:n { `#1 + `a - `A }
+ \fi:
+ \fi:
+ \__str_convert_lowercase_alphanum_loop:N
+ }
+\cs_new_protected:Npn \__str_load_catcodes:
+ {
+ \char_set_catcode_escape:N \\
+ \char_set_catcode_group_begin:N \{
+ \char_set_catcode_group_end:N \}
+ \char_set_catcode_math_toggle:N \$
+ \char_set_catcode_alignment:N \&
+ \char_set_catcode_parameter:N \#
+ \char_set_catcode_math_superscript:N \^
+ \char_set_catcode_ignore:N \ %
+ \char_set_catcode_space:N \~
+ \tl_map_function:nN { abcdefghijklmnopqrstuvwxyz_:ABCDEFILNPSTUX }
+ \char_set_catcode_letter:N
+ \tl_map_function:nN { 0123456789"'?*+-.(),`!/<>[];= }
+ \char_set_catcode_other:N
+ \char_set_catcode_comment:N \%
+ \int_set:Nn \tex_endlinechar:D {32}
+ }
+\bool_lazy_any:nTF
+ {
+ \sys_if_engine_luatex_p:
+ \sys_if_engine_xetex_p:
+ }
+ {
+ \cs_new:Npn \__str_filter_bytes:n #1
+ {
+ \__str_filter_bytes_aux:N #1
+ { ? \prg_break: }
+ \prg_break_point:
+ }
+ \cs_new:Npn \__str_filter_bytes_aux:N #1
+ {
+ \use_none:n #1
+ \if_int_compare:w `#1 < 256 \exp_stop_f:
+ #1
+ \else:
+ \flag_raise:n { str_byte }
+ \fi:
+ \__str_filter_bytes_aux:N
+ }
+ }
+ { \cs_new_eq:NN \__str_filter_bytes:n \use:n }
+\bool_lazy_any:nTF
+ {
+ \sys_if_engine_luatex_p:
+ \sys_if_engine_xetex_p:
+ }
+ {
+ \cs_new_protected:Npn \__str_convert_unescape_:
+ {
+ \flag_clear:n { str_byte }
+ \tl_gset:Nx \g__str_result_tl
+ { \exp_args:No \__str_filter_bytes:n \g__str_result_tl }
+ \__str_if_flag_error:nnx { str_byte } { non-byte } { bytes }
+ }
+ }
+ { \cs_new_protected:Npn \__str_convert_unescape_: { } }
+\cs_new_eq:NN \__str_convert_unescape_bytes: \__str_convert_unescape_:
+\cs_new_protected:Npn \__str_convert_escape_: { }
+\cs_new_eq:NN \__str_convert_escape_bytes: \__str_convert_escape_:
+\cs_new_protected:Npn \__str_convert_decode_:
+ { \__str_convert_gmap:N \__str_decode_native_char:N }
+\cs_new:Npn \__str_decode_native_char:N #1
+ { #1 \s__tl \int_value:w `#1 \s__tl }
+\bool_lazy_any:nTF
+ {
+ \sys_if_engine_luatex_p:
+ \sys_if_engine_xetex_p:
+ }
+ {
+ \cs_new_protected:Npn \__str_convert_encode_:
+ { \__str_convert_gmap_internal:N \__str_encode_native_char:n }
+ \cs_new:Npn \__str_encode_native_char:n #1
+ { \char_generate:nn {#1} {12} }
+ }
+ {
+ \cs_new_protected:Npn \__str_convert_encode_:
+ {
+ \flag_clear:n { str_error }
+ \__str_convert_gmap_internal:N \__str_encode_native_char:n
+ \__str_if_flag_error:nnx { str_error }
+ { native-overflow } { }
+ }
+ \cs_new:Npn \__str_encode_native_char:n #1
+ {
+ \if_int_compare:w #1 > \c__str_max_byte_int
+ \flag_raise:n { str_error }
+ ?
+ \else:
+ \char_generate:nn {#1} {12}
+ \fi:
+ }
+ \__kernel_msg_new:nnnn { str } { native-overflow }
+ { Character~code~too~large~for~this~engine. }
+ {
+ This~engine~only~support~8-bit~characters:~
+ valid~character~codes~are~in~the~range~[0,255].~
+ To~manipulate~arbitrary~Unicode,~use~LuaTeX~or~XeTeX.
+ }
+ }
+\cs_new_protected:Npn \__str_convert_decode_clist:
+ {
+ \clist_gset:No \g__str_result_tl \g__str_result_tl
+ \tl_gset:Nx \g__str_result_tl
+ {
+ \exp_args:No \clist_map_function:nN
+ \g__str_result_tl \__str_decode_clist_char:n
+ }
+ }
+\cs_new:Npn \__str_decode_clist_char:n #1
+ { #1 \s__tl \int_eval:n {#1} \s__tl }
+\cs_new_protected:Npn \__str_convert_encode_clist:
+ {
+ \__str_convert_gmap_internal:N \__str_encode_clist_char:n
+ \tl_gset:Nx \g__str_result_tl { \tl_tail:N \g__str_result_tl }
+ }
+\cs_new:Npn \__str_encode_clist_char:n #1 { , #1 }
+\cs_new_protected:Npn \str_declare_eight_bit_encoding:nnn #1#2#3
+ {
+ \tl_set:Nn \l__str_internal_tl {#1}
+ \cs_new_protected:cpn { __str_convert_decode_#1: }
+ { \__str_convert_decode_eight_bit:n {#1} }
+ \cs_new_protected:cpn { __str_convert_encode_#1: }
+ { \__str_convert_encode_eight_bit:n {#1} }
+ \tl_const:cn { c__str_encoding_#1_tl } {#2}
+ \tl_const:cn { c__str_encoding_#1_missing_tl } {#3}
+ }
+\cs_new_protected:Npn \__str_convert_decode_eight_bit:n #1
+ {
+ \group_begin:
+ \int_zero:N \l__str_internal_int
+ \exp_last_unbraced:Nx \__str_decode_eight_bit_load:nn
+ { \tl_use:c { c__str_encoding_#1_tl } }
+ { \q_stop \prg_break: } { }
+ \prg_break_point:
+ \exp_last_unbraced:Nx \__str_decode_eight_bit_load_missing:n
+ { \tl_use:c { c__str_encoding_#1_missing_tl } }
+ { \q_stop \prg_break: }
+ \prg_break_point:
+ \flag_clear:n { str_error }
+ \__str_convert_gmap:N \__str_decode_eight_bit_char:N
+ \__str_if_flag_error:nnx { str_error } { decode-8-bit } {#1}
+ \group_end:
+ }
+\cs_new_protected:Npn \__str_decode_eight_bit_load:nn #1#2
+ {
+ \use_none_delimit_by_q_stop:w #1 \q_stop
+ \tex_dimen:D "#1 = \l__str_internal_int sp \scan_stop:
+ \tex_skip:D \l__str_internal_int = "#1 sp \scan_stop:
+ \tex_toks:D \l__str_internal_int \exp_after:wN { \int_value:w "#2 }
+ \int_incr:N \l__str_internal_int
+ \__str_decode_eight_bit_load:nn
+ }
+\cs_new_protected:Npn \__str_decode_eight_bit_load_missing:n #1
+ {
+ \use_none_delimit_by_q_stop:w #1 \q_stop
+ \tex_dimen:D "#1 = \l__str_internal_int sp \scan_stop:
+ \tex_skip:D \l__str_internal_int = "#1 sp \scan_stop:
+ \tex_toks:D \l__str_internal_int \exp_after:wN
+ { \int_use:N \c__str_replacement_char_int }
+ \int_incr:N \l__str_internal_int
+ \__str_decode_eight_bit_load_missing:n
+ }
+\cs_new:Npn \__str_decode_eight_bit_char:N #1
+ {
+ #1 \s__tl
+ \if_int_compare:w \tex_dimen:D `#1 < \l__str_internal_int
+ \if_int_compare:w \tex_skip:D \tex_dimen:D `#1 = `#1 \exp_stop_f:
+ \tex_the:D \tex_toks:D \tex_dimen:D
+ \fi:
+ \fi:
+ \int_value:w `#1 \s__tl
+ }
+\cs_new_protected:Npn \__str_convert_encode_eight_bit:n #1
+ {
+ \group_begin:
+ \int_zero:N \l__str_internal_int
+ \exp_last_unbraced:Nx \__str_encode_eight_bit_load:nn
+ { \tl_use:c { c__str_encoding_#1_tl } }
+ { \q_stop \prg_break: } { }
+ \prg_break_point:
+ \flag_clear:n { str_error }
+ \__str_convert_gmap_internal:N \__str_encode_eight_bit_char:n
+ \__str_if_flag_error:nnx { str_error } { encode-8-bit } {#1}
+ \group_end:
+ }
+\cs_new_protected:Npn \__str_encode_eight_bit_load:nn #1#2
+ {
+ \use_none_delimit_by_q_stop:w #1 \q_stop
+ \tex_dimen:D "#2 = \l__str_internal_int sp \scan_stop:
+ \tex_skip:D \l__str_internal_int = "#2 sp \scan_stop:
+ \exp_args:NNf \tex_toks:D \l__str_internal_int
+ { \__str_output_byte:n { "#1 } }
+ \int_incr:N \l__str_internal_int
+ \__str_encode_eight_bit_load:nn
+ }
+\cs_new:Npn \__str_encode_eight_bit_char:n #1
+ {
+ \if_int_compare:w #1 > \c_max_register_int
+ \flag_raise:n { str_error }
+ \else:
+ \if_int_compare:w \tex_dimen:D #1 < \l__str_internal_int
+ \if_int_compare:w \tex_skip:D \tex_dimen:D #1 = #1 \exp_stop_f:
+ \tex_the:D \tex_toks:D \tex_dimen:D #1 \exp_stop_f:
+ \exp_after:wN \exp_after:wN \exp_after:wN \use_none:nn
+ \fi:
+ \fi:
+ \__str_encode_eight_bit_char_aux:n {#1}
+ \fi:
+ }
+\cs_new:Npn \__str_encode_eight_bit_char_aux:n #1
+ {
+ \if_int_compare:w #1 > \c__str_max_byte_int
+ \flag_raise:n { str_error }
+ \else:
+ \__str_output_byte:n {#1}
+ \fi:
+ }
+\__kernel_msg_new:nnn { str } { unknown-esc }
+ { Escaping~scheme~'#1'~(filtered:~'#2')~unknown. }
+\__kernel_msg_new:nnn { str } { unknown-enc }
+ { Encoding~scheme~'#1'~(filtered:~'#2')~unknown. }
+\__kernel_msg_new:nnnn { str } { native-escaping }
+ { The~'native'~encoding~scheme~does~not~support~any~escaping. }
+ {
+ Since~native~strings~do~not~consist~in~bytes,~
+ none~of~the~escaping~methods~make~sense.~
+ The~specified~escaping,~'#1',~will be ignored.
+ }
+\__kernel_msg_new:nnn { str } { file-not-found }
+ { File~'l3str-#1.def'~not~found. }
+\bool_lazy_any:nT
+ {
+ \sys_if_engine_luatex_p:
+ \sys_if_engine_xetex_p:
+ }
+ {
+ \__kernel_msg_new:nnnn { str } { non-byte }
+ { String~invalid~in~escaping~'#1':~it~may~only~contain~bytes. }
+ {
+ Some~characters~in~the~string~you~asked~to~convert~are~not~
+ 8-bit~characters.~Perhaps~the~string~is~a~'native'~Unicode~string?~
+ If~it~is,~try~using\\
+ \\
+ \iow_indent:n
+ {
+ \iow_char:N\\str_set_convert:Nnnn \\
+ \ \ <str~var>~\{~<string>~\}~\{~native~\}~\{~<target~encoding>~\}
+ }
+ }
+ }
+\__kernel_msg_new:nnnn { str } { decode-8-bit }
+ { Invalid~string~in~encoding~'#1'. }
+ {
+ LaTeX~came~across~a~byte~which~is~not~defined~to~represent~
+ any~character~in~the~encoding~'#1'.
+ }
+\__kernel_msg_new:nnnn { str } { encode-8-bit }
+ { Unicode~string~cannot~be~converted~to~encoding~'#1'. }
+ {
+ The~encoding~'#1'~only~contains~a~subset~of~all~Unicode~characters.~
+ LaTeX~was~asked~to~convert~a~string~to~that~encoding,~but~that~
+ string~contains~a~character~that~'#1'~does~not~support.
+ }
+\cs_new_protected:Npn \__str_convert_unescape_hex:
+ {
+ \group_begin:
+ \flag_clear:n { str_error }
+ \int_set:Nn \tex_escapechar:D { 92 }
+ \tl_gset:Nx \g__str_result_tl
+ {
+ \__str_output_byte:w "
+ \exp_last_unbraced:Nf \__str_unescape_hex_auxi:N
+ { \tl_to_str:N \g__str_result_tl }
+ 0 { ? 0 - 1 \prg_break: }
+ \prg_break_point:
+ \__str_output_end:
+ }
+ \__str_if_flag_error:nnx { str_error } { unescape-hex } { }
+ \group_end:
+ }
+\cs_new:Npn \__str_unescape_hex_auxi:N #1
+ {
+ \use_none:n #1
+ \__str_hexadecimal_use:NTF #1
+ { \__str_unescape_hex_auxii:N }
+ {
+ \flag_raise:n { str_error }
+ \__str_unescape_hex_auxi:N
+ }
+ }
+\cs_new:Npn \__str_unescape_hex_auxii:N #1
+ {
+ \use_none:n #1
+ \__str_hexadecimal_use:NTF #1
+ {
+ \__str_output_end:
+ \__str_output_byte:w " \__str_unescape_hex_auxi:N
+ }
+ {
+ \flag_raise:n { str_error }
+ \__str_unescape_hex_auxii:N
+ }
+ }
+\__kernel_msg_new:nnnn { str } { unescape-hex }
+ { String~invalid~in~escaping~'hex':~only~hexadecimal~digits~allowed. }
+ {
+ Some~characters~in~the~string~you~asked~to~convert~are~not~
+ hexadecimal~digits~(0-9,~A-F,~a-f)~nor~spaces.
+ }
+\cs_set_protected:Npn \__str_tmp:w #1#2#3
+ {
+ \cs_new_protected:cpn { __str_convert_unescape_#2: }
+ {
+ \group_begin:
+ \flag_clear:n { str_byte }
+ \flag_clear:n { str_error }
+ \int_set:Nn \tex_escapechar:D { 92 }
+ \tl_gset:Nx \g__str_result_tl
+ {
+ \exp_after:wN #3 \g__str_result_tl
+ #1 ? { ? \prg_break: }
+ \prg_break_point:
+ }
+ \__str_if_flag_error:nnx { str_byte } { non-byte } { #2 }
+ \__str_if_flag_error:nnx { str_error } { unescape-#2 } { }
+ \group_end:
+ }
+ \cs_new:Npn #3 ##1#1##2##3
+ {
+ \__str_filter_bytes:n {##1}
+ \use_none:n ##3
+ \__str_output_byte:w "
+ \__str_hexadecimal_use:NTF ##2
+ {
+ \__str_hexadecimal_use:NTF ##3
+ { }
+ {
+ \flag_raise:n { str_error }
+ * 0 + `#1 \use_i:nn
+ }
+ }
+ {
+ \flag_raise:n { str_error }
+ 0 + `#1 \use_i:nn
+ }
+ \__str_output_end:
+ \use_i:nnn #3 ##2##3
+ }
+ \__kernel_msg_new:nnnn { str } { unescape-#2 }
+ { String~invalid~in~escaping~'#2'. }
+ {
+ LaTeX~came~across~the~escape~character~'#1'~not~followed~by~
+ two~hexadecimal~digits.~This~is~invalid~in~the~escaping~'#2'.
+ }
+ }
+\exp_after:wN \__str_tmp:w \c_hash_str { name }
+ \__str_unescape_name_loop:wNN
+\exp_after:wN \__str_tmp:w \c_percent_str { url }
+ \__str_unescape_url_loop:wNN
+\group_begin:
+ \char_set_catcode_other:N \^^J
+ \char_set_catcode_other:N \^^M
+ \cs_set_protected:Npn \__str_tmp:w #1
+ {
+ \cs_new_protected:Npn \__str_convert_unescape_string:
+ {
+ \group_begin:
+ \flag_clear:n { str_byte }
+ \flag_clear:n { str_error }
+ \int_set:Nn \tex_escapechar:D { 92 }
+ \tl_gset:Nx \g__str_result_tl
+ {
+ \exp_after:wN \__str_unescape_string_newlines:wN
+ \g__str_result_tl \prg_break: ^^M ?
+ \prg_break_point:
+ }
+ \tl_gset:Nx \g__str_result_tl
+ {
+ \exp_after:wN \__str_unescape_string_loop:wNNN
+ \g__str_result_tl #1 ?? { ? \prg_break: }
+ \prg_break_point:
+ }
+ \__str_if_flag_error:nnx { str_byte } { non-byte } { string }
+ \__str_if_flag_error:nnx { str_error } { unescape-string } { }
+ \group_end:
+ }
+ }
+ \exp_args:No \__str_tmp:w { \c_backslash_str }
+ \exp_last_unbraced:NNNNo
+ \cs_new:Npn \__str_unescape_string_loop:wNNN #1 \c_backslash_str #2#3#4
+ {
+ \__str_filter_bytes:n {#1}
+ \use_none:n #4
+ \__str_output_byte:w '
+ \__str_octal_use:NTF #2
+ {
+ \__str_octal_use:NTF #3
+ {
+ \__str_octal_use:NTF #4
+ {
+ \if_int_compare:w #2 > 3 \exp_stop_f:
+ - 256
+ \fi:
+ \__str_unescape_string_repeat:NNNNNN
+ }
+ { \__str_unescape_string_repeat:NNNNNN ? }
+ }
+ { \__str_unescape_string_repeat:NNNNNN ?? }
+ }
+ {
+ \str_case_e:nnF {#2}
+ {
+ { \c_backslash_str } { 134 }
+ { ( } { 50 }
+ { ) } { 51 }
+ { r } { 15 }
+ { f } { 14 }
+ { n } { 12 }
+ { t } { 11 }
+ { b } { 10 }
+ { ^^J } { 0 - 1 }
+ }
+ {
+ \flag_raise:n { str_error }
+ 0 - 1 \use_i:nn
+ }
+ }
+ \__str_output_end:
+ \use_i:nn \__str_unescape_string_loop:wNNN #2#3#4
+ }
+ \cs_new:Npn \__str_unescape_string_repeat:NNNNNN #1#2#3#4#5#6
+ { \__str_output_end: \__str_unescape_string_loop:wNNN }
+ \cs_new:Npn \__str_unescape_string_newlines:wN #1 ^^M #2
+ {
+ #1
+ \if_charcode:w ^^J #2 \else: ^^J \fi:
+ \__str_unescape_string_newlines:wN #2
+ }
+ \__kernel_msg_new:nnnn { str } { unescape-string }
+ { String~invalid~in~escaping~'string'. }
+ {
+ LaTeX~came~across~an~escape~character~'\c_backslash_str'~
+ not~followed~by~any~of:~'n',~'r',~'t',~'b',~'f',~'(',~')',~
+ '\c_backslash_str',~one~to~three~octal~digits,~or~the~end~
+ of~a~line.
+ }
+\group_end:
+\cs_new_protected:Npn \__str_convert_escape_hex:
+ { \__str_convert_gmap:N \__str_escape_hex_char:N }
+\cs_new:Npn \__str_escape_hex_char:N #1
+ { \__str_output_hexadecimal:n { `#1 } }
+\str_const:Nn \c__str_escape_name_not_str { ! " $ & ' } %$
+\str_const:Nn \c__str_escape_name_str { {}/<>[] }
+\cs_new_protected:Npn \__str_convert_escape_name:
+ { \__str_convert_gmap:N \__str_escape_name_char:N }
+\cs_new:Npn \__str_escape_name_char:N #1
+ {
+ \__str_if_escape_name:NTF #1 {#1}
+ { \c_hash_str \__str_output_hexadecimal:n {`#1} }
+ }
+\prg_new_conditional:Npnn \__str_if_escape_name:N #1 { TF }
+ {
+ \if_int_compare:w `#1 < "2A \exp_stop_f:
+ \__str_if_contains_char:NNTF \c__str_escape_name_not_str #1
+ \prg_return_true: \prg_return_false:
+ \else:
+ \if_int_compare:w `#1 > "7E \exp_stop_f:
+ \prg_return_false:
+ \else:
+ \__str_if_contains_char:NNTF \c__str_escape_name_str #1
+ \prg_return_false: \prg_return_true:
+ \fi:
+ \fi:
+ }
+\str_const:Nx \c__str_escape_string_str
+ { \c_backslash_str ( ) }
+\cs_new_protected:Npn \__str_convert_escape_string:
+ { \__str_convert_gmap:N \__str_escape_string_char:N }
+\cs_new:Npn \__str_escape_string_char:N #1
+ {
+ \__str_if_escape_string:NTF #1
+ {
+ \__str_if_contains_char:NNT
+ \c__str_escape_string_str #1
+ { \c_backslash_str }
+ #1
+ }
+ {
+ \c_backslash_str
+ \int_div_truncate:nn {`#1} {64}
+ \int_mod:nn { \int_div_truncate:nn {`#1} { 8 } } { 8 }
+ \int_mod:nn {`#1} { 8 }
+ }
+ }
+\prg_new_conditional:Npnn \__str_if_escape_string:N #1 { TF }
+ {
+ \if_int_compare:w `#1 < "21 \exp_stop_f:
+ \prg_return_false:
+ \else:
+ \if_int_compare:w `#1 > "7E \exp_stop_f:
+ \prg_return_false:
+ \else:
+ \prg_return_true:
+ \fi:
+ \fi:
+ }
+\cs_new_protected:Npn \__str_convert_escape_url:
+ { \__str_convert_gmap:N \__str_escape_url_char:N }
+\cs_new:Npn \__str_escape_url_char:N #1
+ {
+ \__str_if_escape_url:NTF #1 {#1}
+ { \c_percent_str \__str_output_hexadecimal:n { `#1 } }
+ }
+\prg_new_conditional:Npnn \__str_if_escape_url:N #1 { TF }
+ {
+ \if_int_compare:w `#1 < "41 \exp_stop_f:
+ \__str_if_contains_char:nNTF { "-.<> } #1
+ \prg_return_true: \prg_return_false:
+ \else:
+ \if_int_compare:w `#1 > "7E \exp_stop_f:
+ \prg_return_false:
+ \else:
+ \__str_if_contains_char:nNTF { [ ] } #1
+ \prg_return_false: \prg_return_true:
+ \fi:
+ \fi:
+ }
+\cs_new_protected:cpn { __str_convert_encode_utf8: }
+ { \__str_convert_gmap_internal:N \__str_encode_utf_viii_char:n }
+\cs_new:Npn \__str_encode_utf_viii_char:n #1
+ {
+ \__str_encode_utf_viii_loop:wwnnw #1 ; - 1 + 0 * ;
+ { 128 } { 0 }
+ { 32 } { 192 }
+ { 16 } { 224 }
+ { 8 } { 240 }
+ \q_stop
+ }
+\cs_new:Npn \__str_encode_utf_viii_loop:wwnnw #1; #2; #3#4 #5 \q_stop
+ {
+ \if_int_compare:w #1 < #3 \exp_stop_f:
+ \__str_output_byte:n { #1 + #4 }
+ \exp_after:wN \use_none_delimit_by_q_stop:w
+ \fi:
+ \exp_after:wN \__str_encode_utf_viii_loop:wwnnw
+ \int_value:w \int_div_truncate:nn {#1} {64} ; #1 ;
+ #5 \q_stop
+ \__str_output_byte:n { #2 - 64 * ( #1 - 2 ) }
+ }
+\flag_clear_new:n { str_missing }
+\flag_clear_new:n { str_extra }
+\flag_clear_new:n { str_overlong }
+\flag_clear_new:n { str_overflow }
+\__kernel_msg_new:nnnn { str } { utf8-decode }
+ {
+ Invalid~UTF-8~string:
+ \exp_last_unbraced:Nf \use_none:n
+ {
+ \__str_if_flag_times:nT { str_missing } { ,~missing~continuation~byte }
+ \__str_if_flag_times:nT { str_extra } { ,~extra~continuation~byte }
+ \__str_if_flag_times:nT { str_overlong } { ,~overlong~form }
+ \__str_if_flag_times:nT { str_overflow } { ,~code~point~too~large }
+ }
+ .
+ }
+ {
+ In~the~UTF-8~encoding,~each~Unicode~character~consists~in~
+ 1~to~4~bytes,~with~the~following~bit~pattern: \\
+ \iow_indent:n
+ {
+ Code~point~\ \ \ \ <~128:~0xxxxxxx \\
+ Code~point~\ \ \ <~2048:~110xxxxx~10xxxxxx \\
+ Code~point~\ \ <~65536:~1110xxxx~10xxxxxx~10xxxxxx \\
+ Code~point~ <~1114112:~11110xxx~10xxxxxx~10xxxxxx~10xxxxxx \\
+ }
+ Bytes~of~the~form~10xxxxxx~are~called~continuation~bytes.
+ \flag_if_raised:nT { str_missing }
+ {
+ \\\\
+ A~leading~byte~(in~the~range~[192,255])~was~not~followed~by~
+ the~appropriate~number~of~continuation~bytes.
+ }
+ \flag_if_raised:nT { str_extra }
+ {
+ \\\\
+ LaTeX~came~across~a~continuation~byte~when~it~was~not~expected.
+ }
+ \flag_if_raised:nT { str_overlong }
+ {
+ \\\\
+ Every~Unicode~code~point~must~be~expressed~in~the~shortest~
+ possible~form.~For~instance,~'0xC0'~'0x83'~is~not~a~valid~
+ representation~for~the~code~point~3.
+ }
+ \flag_if_raised:nT { str_overflow }
+ {
+ \\\\
+ Unicode~limits~code~points~to~the~range~[0,1114111].
+ }
+ }
+\cs_new_protected:cpn { __str_convert_decode_utf8: }
+ {
+ \flag_clear:n { str_error }
+ \flag_clear:n { str_missing }
+ \flag_clear:n { str_extra }
+ \flag_clear:n { str_overlong }
+ \flag_clear:n { str_overflow }
+ \tl_gset:Nx \g__str_result_tl
+ {
+ \exp_after:wN \__str_decode_utf_viii_start:N \g__str_result_tl
+ { \prg_break: \__str_decode_utf_viii_end: }
+ \prg_break_point:
+ }
+ \__str_if_flag_error:nnx { str_error } { utf8-decode } { }
+ }
+\cs_new:Npn \__str_decode_utf_viii_start:N #1
+ {
+ #1
+ \if_int_compare:w `#1 < "C0 \exp_stop_f:
+ \s__tl
+ \if_int_compare:w `#1 < "80 \exp_stop_f:
+ \int_value:w `#1
+ \else:
+ \flag_raise:n { str_extra }
+ \flag_raise:n { str_error }
+ \int_use:N \c__str_replacement_char_int
+ \fi:
+ \else:
+ \exp_after:wN \__str_decode_utf_viii_continuation:wwN
+ \int_value:w \int_eval:n { `#1 - "C0 } \exp_after:wN
+ \fi:
+ \s__tl
+ \use_none_delimit_by_q_stop:w {"80} {"800} {"10000} {"110000} \q_stop
+ \__str_decode_utf_viii_start:N
+ }
+\cs_new:Npn \__str_decode_utf_viii_continuation:wwN
+ #1 \s__tl #2 \__str_decode_utf_viii_start:N #3
+ {
+ \use_none:n #3
+ \if_int_compare:w `#3 <
+ \if_int_compare:w `#3 < "80 \exp_stop_f: - \fi:
+ "C0 \exp_stop_f:
+ #3
+ \exp_after:wN \__str_decode_utf_viii_aux:wNnnwN
+ \int_value:w \int_eval:n { #1 * "40 + `#3 - "80 } \exp_after:wN
+ \else:
+ \s__tl
+ \flag_raise:n { str_missing }
+ \flag_raise:n { str_error }
+ \int_use:N \c__str_replacement_char_int
+ \fi:
+ \s__tl
+ #2
+ \__str_decode_utf_viii_start:N #3
+ }
+\cs_new:Npn \__str_decode_utf_viii_aux:wNnnwN
+ #1 \s__tl #2#3#4 #5 \__str_decode_utf_viii_start:N #6
+ {
+ \if_int_compare:w #1 < #4 \exp_stop_f:
+ \s__tl
+ \if_int_compare:w #1 < #3 \exp_stop_f:
+ \flag_raise:n { str_overlong }
+ \flag_raise:n { str_error }
+ \int_use:N \c__str_replacement_char_int
+ \else:
+ #1
+ \fi:
+ \else:
+ \if_meaning:w \q_stop #5
+ \__str_decode_utf_viii_overflow:w #1
+ \fi:
+ \exp_after:wN \__str_decode_utf_viii_continuation:wwN
+ \int_value:w \int_eval:n { #1 - #4 } \exp_after:wN
+ \fi:
+ \s__tl
+ #2 {#4} #5
+ \__str_decode_utf_viii_start:N
+ }
+\cs_new:Npn \__str_decode_utf_viii_overflow:w #1 \fi: #2 \fi:
+ {
+ \fi: \fi:
+ \flag_raise:n { str_overflow }
+ \flag_raise:n { str_error }
+ \int_use:N \c__str_replacement_char_int
+ }
+\cs_new:Npn \__str_decode_utf_viii_end:
+ {
+ \s__tl
+ \flag_raise:n { str_missing }
+ \flag_raise:n { str_error }
+ \int_use:N \c__str_replacement_char_int \s__tl
+ \prg_break:
+ }
+\group_begin:
+ \char_set_catcode_other:N \^^fe
+ \char_set_catcode_other:N \^^ff
+ \cs_new_protected:cpn { __str_convert_encode_utf16: }
+ {
+ \__str_encode_utf_xvi_aux:N \__str_output_byte_pair_be:n
+ \tl_gput_left:Nx \g__str_result_tl { ^^fe ^^ff }
+ }
+ \cs_new_protected:cpn { __str_convert_encode_utf16be: }
+ { \__str_encode_utf_xvi_aux:N \__str_output_byte_pair_be:n }
+ \cs_new_protected:cpn { __str_convert_encode_utf16le: }
+ { \__str_encode_utf_xvi_aux:N \__str_output_byte_pair_le:n }
+ \cs_new_protected:Npn \__str_encode_utf_xvi_aux:N #1
+ {
+ \flag_clear:n { str_error }
+ \cs_set_eq:NN \__str_tmp:w #1
+ \__str_convert_gmap_internal:N \__str_encode_utf_xvi_char:n
+ \__str_if_flag_error:nnx { str_error } { utf16-encode } { }
+ }
+ \cs_new:Npn \__str_encode_utf_xvi_char:n #1
+ {
+ \if_int_compare:w #1 < "D800 \exp_stop_f:
+ \__str_tmp:w {#1}
+ \else:
+ \if_int_compare:w #1 < "10000 \exp_stop_f:
+ \if_int_compare:w #1 < "E000 \exp_stop_f:
+ \flag_raise:n { str_error }
+ \__str_tmp:w { \c__str_replacement_char_int }
+ \else:
+ \__str_tmp:w {#1}
+ \fi:
+ \else:
+ \exp_args:Nf \__str_tmp:w { \int_div_truncate:nn {#1} {"400} + "D7C0 }
+ \exp_args:Nf \__str_tmp:w { \int_mod:nn {#1} {"400} + "DC00 }
+ \fi:
+ \fi:
+ }
+ \flag_clear_new:n { str_missing }
+ \flag_clear_new:n { str_extra }
+ \flag_clear_new:n { str_end }
+ \__kernel_msg_new:nnnn { str } { utf16-encode }
+ { Unicode~string~cannot~be~expressed~in~UTF-16:~surrogate. }
+ {
+ Surrogate~code~points~(in~the~range~[U+D800,~U+DFFF])~
+ can~be~expressed~in~the~UTF-8~and~UTF-32~encodings,~
+ but~not~in~the~UTF-16~encoding.
+ }
+ \__kernel_msg_new:nnnn { str } { utf16-decode }
+ {
+ Invalid~UTF-16~string:
+ \exp_last_unbraced:Nf \use_none:n
+ {
+ \__str_if_flag_times:nT { str_missing } { ,~missing~trail~surrogate }
+ \__str_if_flag_times:nT { str_extra } { ,~extra~trail~surrogate }
+ \__str_if_flag_times:nT { str_end } { ,~odd~number~of~bytes }
+ }
+ .
+ }
+ {
+ In~the~UTF-16~encoding,~each~Unicode~character~is~encoded~as~
+ 2~or~4~bytes: \\
+ \iow_indent:n
+ {
+ Code~point~in~[U+0000,~U+D7FF]:~two~bytes \\
+ Code~point~in~[U+D800,~U+DFFF]:~illegal \\
+ Code~point~in~[U+E000,~U+FFFF]:~two~bytes \\
+ Code~point~in~[U+10000,~U+10FFFF]:~
+ a~lead~surrogate~and~a~trail~surrogate \\
+ }
+ Lead~surrogates~are~pairs~of~bytes~in~the~range~[0xD800,~0xDBFF],~
+ and~trail~surrogates~are~in~the~range~[0xDC00,~0xDFFF].
+ \flag_if_raised:nT { str_missing }
+ {
+ \\\\
+ A~lead~surrogate~was~not~followed~by~a~trail~surrogate.
+ }
+ \flag_if_raised:nT { str_extra }
+ {
+ \\\\
+ LaTeX~came~across~a~trail~surrogate~when~it~was~not~expected.
+ }
+ \flag_if_raised:nT { str_end }
+ {
+ \\\\
+ The~string~contained~an~odd~number~of~bytes.~This~is~invalid:~
+ the~basic~code~unit~for~UTF-16~is~16~bits~(2~bytes).
+ }
+ }
+ \cs_new_protected:cpn { __str_convert_decode_utf16be: }
+ { \__str_decode_utf_xvi:Nw 1 \g__str_result_tl \s_stop }
+ \cs_new_protected:cpn { __str_convert_decode_utf16le: }
+ { \__str_decode_utf_xvi:Nw 2 \g__str_result_tl \s_stop }
+ \cs_new_protected:cpn { __str_convert_decode_utf16: }
+ {
+ \exp_after:wN \__str_decode_utf_xvi_bom:NN
+ \g__str_result_tl \s_stop \s_stop \s_stop
+ }
+ \cs_new_protected:Npn \__str_decode_utf_xvi_bom:NN #1#2
+ {
+ \str_if_eq:nnTF { #1#2 } { ^^ff ^^fe }
+ { \__str_decode_utf_xvi:Nw 2 }
+ {
+ \str_if_eq:nnTF { #1#2 } { ^^fe ^^ff }
+ { \__str_decode_utf_xvi:Nw 1 }
+ { \__str_decode_utf_xvi:Nw 1 #1#2 }
+ }
+ }
+ \cs_new_protected:Npn \__str_decode_utf_xvi:Nw #1#2 \s_stop
+ {
+ \flag_clear:n { str_error }
+ \flag_clear:n { str_missing }
+ \flag_clear:n { str_extra }
+ \flag_clear:n { str_end }
+ \cs_set:Npn \__str_tmp:w ##1 ##2 { ` ## #1 }
+ \tl_gset:Nx \g__str_result_tl
+ {
+ \exp_after:wN \__str_decode_utf_xvi_pair:NN
+ #2 \q_nil \q_nil
+ \prg_break_point:
+ }
+ \__str_if_flag_error:nnx { str_error } { utf16-decode } { }
+ }
+ \cs_new:Npn \__str_decode_utf_xvi_pair:NN #1#2
+ {
+ \if_meaning:w \q_nil #2
+ \__str_decode_utf_xvi_pair_end:Nw #1
+ \fi:
+ \if_case:w
+ \int_eval:n { ( \__str_tmp:w #1#2 - "D6 ) / 4 } \scan_stop:
+ \or: \exp_after:wN \__str_decode_utf_xvi_quad:NNwNN
+ \or: \exp_after:wN \__str_decode_utf_xvi_extra:NNw
+ \fi:
+ #1#2 \s__tl
+ \int_eval:n { "100 * \__str_tmp:w #1#2 + \__str_tmp:w #2#1 } \s__tl
+ \__str_decode_utf_xvi_pair:NN
+ }
+ \cs_new:Npn \__str_decode_utf_xvi_quad:NNwNN
+ #1#2 #3 \__str_decode_utf_xvi_pair:NN #4#5
+ {
+ \if_meaning:w \q_nil #5
+ \__str_decode_utf_xvi_error:nNN { missing } #1#2
+ \__str_decode_utf_xvi_pair_end:Nw #4
+ \fi:
+ \if_int_compare:w
+ \if_int_compare:w \__str_tmp:w #4#5 < "DC \exp_stop_f:
+ 0 = 1
+ \else:
+ \__str_tmp:w #4#5 < "E0
+ \fi:
+ \exp_stop_f:
+ #1 #2 #4 #5 \s__tl
+ \int_eval:n
+ {
+ ( "100 * \__str_tmp:w #1#2 + \__str_tmp:w #2#1 - "D7F7 ) * "400
+ + "100 * \__str_tmp:w #4#5 + \__str_tmp:w #5#4
+ }
+ \s__tl
+ \exp_after:wN \use_i:nnn
+ \else:
+ \__str_decode_utf_xvi_error:nNN { missing } #1#2
+ \fi:
+ \__str_decode_utf_xvi_pair:NN #4#5
+ }
+ \cs_new:Npn \__str_decode_utf_xvi_pair_end:Nw #1 \fi:
+ {
+ \fi:
+ \if_meaning:w \q_nil #1
+ \else:
+ \__str_decode_utf_xvi_error:nNN { end } #1 \prg_do_nothing:
+ \fi:
+ \prg_break:
+ }
+ \cs_new:Npn \__str_decode_utf_xvi_extra:NNw #1#2 \s__tl #3 \s__tl
+ { \__str_decode_utf_xvi_error:nNN { extra } #1#2 }
+ \cs_new:Npn \__str_decode_utf_xvi_error:nNN #1#2#3
+ {
+ \flag_raise:n { str_error }
+ \flag_raise:n { str_#1 }
+ #2 #3 \s__tl
+ \int_use:N \c__str_replacement_char_int \s__tl
+ }
+\group_end:
+\group_begin:
+ \char_set_catcode_other:N \^^00
+ \char_set_catcode_other:N \^^fe
+ \char_set_catcode_other:N \^^ff
+ \cs_new_protected:cpn { __str_convert_encode_utf32: }
+ {
+ \__str_convert_gmap_internal:N \__str_encode_utf_xxxii_be:n
+ \tl_gput_left:Nx \g__str_result_tl { ^^00 ^^00 ^^fe ^^ff }
+ }
+ \cs_new_protected:cpn { __str_convert_encode_utf32be: }
+ { \__str_convert_gmap_internal:N \__str_encode_utf_xxxii_be:n }
+ \cs_new_protected:cpn { __str_convert_encode_utf32le: }
+ { \__str_convert_gmap_internal:N \__str_encode_utf_xxxii_le:n }
+ \cs_new:Npn \__str_encode_utf_xxxii_be:n #1
+ {
+ \exp_args:Nf \__str_encode_utf_xxxii_be_aux:nn
+ { \int_div_truncate:nn {#1} { "100 } } {#1}
+ }
+ \cs_new:Npn \__str_encode_utf_xxxii_be_aux:nn #1#2
+ {
+ ^^00
+ \__str_output_byte_pair_be:n {#1}
+ \__str_output_byte:n { #2 - #1 * "100 }
+ }
+ \cs_new:Npn \__str_encode_utf_xxxii_le:n #1
+ {
+ \exp_args:Nf \__str_encode_utf_xxxii_le_aux:nn
+ { \int_div_truncate:nn {#1} { "100 } } {#1}
+ }
+ \cs_new:Npn \__str_encode_utf_xxxii_le_aux:nn #1#2
+ {
+ \__str_output_byte:n { #2 - #1 * "100 }
+ \__str_output_byte_pair_le:n {#1}
+ ^^00
+ }
+ \flag_clear_new:n { str_overflow }
+ \flag_clear_new:n { str_end }
+ \__kernel_msg_new:nnnn { str } { utf32-decode }
+ {
+ Invalid~UTF-32~string:
+ \exp_last_unbraced:Nf \use_none:n
+ {
+ \__str_if_flag_times:nT { str_overflow } { ,~code~point~too~large }
+ \__str_if_flag_times:nT { str_end } { ,~truncated~string }
+ }
+ .
+ }
+ {
+ In~the~UTF-32~encoding,~every~Unicode~character~
+ (in~the~range~[U+0000,~U+10FFFF])~is~encoded~as~4~bytes.
+ \flag_if_raised:nT { str_overflow }
+ {
+ \\\\
+ LaTeX~came~across~a~code~point~larger~than~1114111,~
+ the~maximum~code~point~defined~by~Unicode.~
+ Perhaps~the~string~was~not~encoded~in~the~UTF-32~encoding?
+ }
+ \flag_if_raised:nT { str_end }
+ {
+ \\\\
+ The~length~of~the~string~is~not~a~multiple~of~4.~
+ Perhaps~the~string~was~truncated?
+ }
+ }
+ \cs_new_protected:cpn { __str_convert_decode_utf32be: }
+ { \__str_decode_utf_xxxii:Nw 1 \g__str_result_tl \s_stop }
+ \cs_new_protected:cpn { __str_convert_decode_utf32le: }
+ { \__str_decode_utf_xxxii:Nw 2 \g__str_result_tl \s_stop }
+ \cs_new_protected:cpn { __str_convert_decode_utf32: }
+ {
+ \exp_after:wN \__str_decode_utf_xxxii_bom:NNNN \g__str_result_tl
+ \s_stop \s_stop \s_stop \s_stop \s_stop
+ }
+ \cs_new_protected:Npn \__str_decode_utf_xxxii_bom:NNNN #1#2#3#4
+ {
+ \str_if_eq:nnTF { #1#2#3#4 } { ^^ff ^^fe ^^00 ^^00 }
+ { \__str_decode_utf_xxxii:Nw 2 }
+ {
+ \str_if_eq:nnTF { #1#2#3#4 } { ^^00 ^^00 ^^fe ^^ff }
+ { \__str_decode_utf_xxxii:Nw 1 }
+ { \__str_decode_utf_xxxii:Nw 1 #1#2#3#4 }
+ }
+ }
+ \cs_new_protected:Npn \__str_decode_utf_xxxii:Nw #1#2 \s_stop
+ {
+ \flag_clear:n { str_overflow }
+ \flag_clear:n { str_end }
+ \flag_clear:n { str_error }
+ \cs_set:Npn \__str_tmp:w ##1 ##2 { ` ## #1 }
+ \tl_gset:Nx \g__str_result_tl
+ {
+ \exp_after:wN \__str_decode_utf_xxxii_loop:NNNN
+ #2 \s_stop \s_stop \s_stop \s_stop
+ \prg_break_point:
+ }
+ \__str_if_flag_error:nnx { str_error } { utf32-decode } { }
+ }
+ \cs_new:Npn \__str_decode_utf_xxxii_loop:NNNN #1#2#3#4
+ {
+ \if_meaning:w \s_stop #4
+ \exp_after:wN \__str_decode_utf_xxxii_end:w
+ \fi:
+ #1#2#3#4 \s__tl
+ \if_int_compare:w \__str_tmp:w #1#4 > 0 \exp_stop_f:
+ \flag_raise:n { str_overflow }
+ \flag_raise:n { str_error }
+ \int_use:N \c__str_replacement_char_int
+ \else:
+ \if_int_compare:w \__str_tmp:w #2#3 > 16 \exp_stop_f:
+ \flag_raise:n { str_overflow }
+ \flag_raise:n { str_error }
+ \int_use:N \c__str_replacement_char_int
+ \else:
+ \int_eval:n
+ { \__str_tmp:w #2#3*"10000 + \__str_tmp:w #3#2*"100 + \__str_tmp:w #4#1 }
+ \fi:
+ \fi:
+ \s__tl
+ \__str_decode_utf_xxxii_loop:NNNN
+ }
+ \cs_new:Npn \__str_decode_utf_xxxii_end:w #1 \s_stop
+ {
+ \tl_if_empty:nF {#1}
+ {
+ \flag_raise:n { str_end }
+ \flag_raise:n { str_error }
+ #1 \s__tl
+ \int_use:N \c__str_replacement_char_int \s__tl
+ }
+ \prg_break:
+ }
+\group_end:
%% File: l3tl-analysis.dtx
\scan_new:N \s__tl
\cs_new_eq:NN \l__tl_analysis_token ?
@@ -24147,7 +25465,7 @@
\tex_kern:D -\l__box_left_new_dim
\hbox:n
{
- \driver_box_use_rotate:Nn
+ \__box_backend_rotate:Nn
\l__box_internal_box
\l__box_angle_fp
}
@@ -24416,7 +25734,7 @@
{
\hbox_set:Nn \l__box_internal_box
{
- \driver_box_use_scale:Nnn
+ \__box_backend_scale:Nnn
#1
\l__box_scale_x_fp
\l__box_scale_y_fp
@@ -24454,7 +25772,7 @@
\cs_new_eq:NN \color_group_end: \group_end:
\cs_new_protected:Npn \color_ensure_current:
{
- \driver_color_pickup:N \l__color_current_tl
+ \__color_backend_pickup:N \l__color_current_tl
\__color_select:V \l__color_current_tl
}
\cs_new_protected:Npn \__color_select:n #1
@@ -24463,13 +25781,13 @@
\cs_new_protected:Npn \__color_select:w #1 ~ #2 \q_stop
{ \use:c { __color_select_ #1 :w } #2 \q_stop }
\cs_new_protected:Npn \__color_select_cmyk:w #1 ~ #2 ~ #3 ~ #4 \q_stop
- { \driver_color_cmyk:nnnn {#1} {#2} {#3} {#4} }
+ { \__color_backend_cmyk:nnnn {#1} {#2} {#3} {#4} }
\cs_new_protected:Npn \__color_select_gray:w #1 \q_stop
- { \driver_color_gray:n {#1} }
+ { \__color_backend_gray:n {#1} }
\cs_new_protected:Npn \__color_select_rgb:w #1 ~ #2 ~ #3 \q_stop
- { \driver_color_rgb:nnn {#1} {#2} {#3} }
+ { \__color_backend_rgb:nnn {#1} {#2} {#3} }
\cs_new_protected:Npn \__color_select_spot:w #1 ~ #2 \q_stop
- { \driver_color_spot:nn {#1} {#2} }
+ { \__color_backend_spot:nn {#1} {#2} }
\tl_new:N \l__color_current_tl
\tl_set:Nn \l__color_current_tl { gray~0 }
%% File: l3coffins.dtx
@@ -25332,7 +26650,7 @@
\cs_generate_variant:Nn \coffin_attach:NnnNnnnn { c , Nnnc , cnnc }
\cs_new_protected:Npn \coffin_gattach:NnnNnnnn #1#2#3#4#5#6#7#8
{
- \__coffin_gattach:NnnNnnnnN #1 {#2} {#3} #4 {#5} {#6} {#7} {#8}
+ \__coffin_attach:NnnNnnnnN #1 {#2} {#3} #4 {#5} {#6} {#7} {#8}
\coffin_gset_eq:NN
}
\cs_generate_variant:Nn \coffin_gattach:NnnNnnnn { c , Nnnc , cnnc }
@@ -25897,10 +27215,10 @@
\fi:
}
\cs_new_protected:Npn \box_clip:N #1
- { \hbox_set:Nn #1 { \driver_box_use_clip:N #1 } }
+ { \hbox_set:Nn #1 { \__box_backend_clip:N #1 } }
\cs_generate_variant:Nn \box_clip:N { c }
\cs_new_protected:Npn \box_gclip:N #1
- { \hbox_gset:Nn #1 { \driver_box_use_clip:N #1 } }
+ { \hbox_gset:Nn #1 { \__box_backend_clip:N #1 } }
\cs_generate_variant:Nn \box_gclip:N { c }
\cs_new_protected:Npn \box_set_trim:Nnnnn #1#2#3#4#5
{ \__box_set_trim:NnnnnN #1 {#2} {#3} {#4} {#5} \box_set_eq:NN }
diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex b/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex
index 8014aa50960..ee6b0cfdad3 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex
+++ b/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex
@@ -19,7 +19,7 @@
%% and all files in that bundle must be distributed together.
%%
%% File: expl3.dtx
-\def\ExplFileDate{2019-05-28}%
+\def\ExplFileDate{2019-07-01}%
\let\ExplLoaderFileDate\ExplFileDate
\begingroup
\def\tempa{LaTeX2e}%
@@ -86,7 +86,7 @@
\iow_log:x { File:~#1~#2~v#3~#4 }
}
\tex_input:D
- l3
+ l3backend
\sys_if_engine_xetex:TF
{ xdvipdfmx }
{
diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3.sty b/Master/texmf-dist/tex/latex/l3kernel/expl3.sty
index 41b84801c47..f08739aaacd 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/expl3.sty
+++ b/Master/texmf-dist/tex/latex/l3kernel/expl3.sty
@@ -19,7 +19,7 @@
%% and all files in that bundle must be distributed together.
%%
%% File: expl3.dtx
-\def\ExplFileDate{2019-05-28}%
+\def\ExplFileDate{2019-07-01}%
\let\ExplLoaderFileDate\ExplFileDate
\ProvidesPackage{expl3}
[%
@@ -277,7 +277,8 @@
\ProvidesFile {#1} [ #2~v#3~#4 ]
}
\tl_const:Nn \c__expl_def_ext_tl { def }
- \@onefilewithoptions { l3 \l__expl_driver_tl } [ ] [ ] \c__expl_def_ext_tl
+ \@onefilewithoptions { l3backend- \l__expl_driver_tl } [ ] [ ]
+ \c__expl_def_ext_tl
}
\tl_put_left:Nn \@pushfilename
{
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls b/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls
index ed111045fbf..e1f1aad315d 100644
--- a/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3doc.cls
@@ -1921,8 +1921,9 @@
\char_set_catcode_active:N \>
\cs_new_protected:Npn \__codedoc_xmacro_code:n #1
{
+ \tl_clear:N \l__codedoc_tmpa_tl
\tl_if_in:nnTF {#1} { < @ @ = }
- { \__codedoc_xmacro_code:w #1 \q_stop }
+ { \__codedoc_xmacro_code:w #1 < @ @ = \q_recursion_tail > \q_recursion_stop }
{
\tl_set:Nn \l__codedoc_tmpa_tl {#1}
\__codedoc_detect_internals:N \l__codedoc_tmpa_tl
@@ -1930,21 +1931,21 @@
\tl_use:N \l__codedoc_tmpa_tl
}
}
- \cs_new_protected:Npn \__codedoc_xmacro_code:w #1 < @ @ = #2 > #3 \q_stop
+ \cs_new_protected:Npn \__codedoc_xmacro_code:w #1 < @ @ = #2 >
{
- \tl_set:Nn \l__codedoc_tmpa_tl {#1}
- \__codedoc_detect_internals:N \l__codedoc_tmpa_tl
- \__codedoc_replace_at_at:N \l__codedoc_tmpa_tl
-
- \tl_gset:Nn \g__codedoc_module_name_tl {#2}
- \tl_put_right:Nn \l__codedoc_tmpa_tl { < \text { \verbatim@font @ @ = #2 } > }
-
- \tl_set:Nn \l__codedoc_tmpb_tl {#3}
+ % Add code before <__codedoc=...>
+ \tl_set:Nn \l__codedoc_tmpb_tl {#1}
\__codedoc_detect_internals:N \l__codedoc_tmpb_tl
\__codedoc_replace_at_at:N \l__codedoc_tmpb_tl
- \tl_put_right:No \l__codedoc_tmpa_tl { \l__codedoc_tmpb_tl }
-
- \tl_use:N \l__codedoc_tmpa_tl
+ \tl_put_right:NV \l__codedoc_tmpa_tl \l__codedoc_tmpb_tl
+ % Check for \q_recursion_tail
+ \quark_if_recursion_tail_stop_do:nn {#2}
+ { \tl_use:N \l__codedoc_tmpa_tl }
+ % Change module name and add <__codedoc=#2> to typeset output
+ \tl_gset:Nn \g__codedoc_module_name_tl {#2}
+ \tl_put_right:Nn \l__codedoc_tmpa_tl { < \text { \verbatim@font @ @ = #2 } > }
+ % Loop
+ \__codedoc_xmacro_code:w
}
\group_end:
\iow_new:N \g__codedoc_func_iow
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def b/Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def
deleted file mode 100644
index 20789461412..00000000000
--- a/Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def
+++ /dev/null
@@ -1,635 +0,0 @@
-%%
-%% This is file `l3dvipdfmx.def',
-%% generated with the docstrip utility.
-%%
-%% The original source files were:
-%%
-%% l3drivers.dtx (with options: `package,dvipdfmx')
-%% l3drivers-basics.dtx (with options: `package,dvipdfmx')
-%% l3drivers-color.dtx (with options: `package,dvipdfmx')
-%% l3drivers-box.dtx (with options: `package,dvipdfmx')
-%% l3drivers-draw.dtx (with options: `package,dvipdfmx')
-%% l3drivers-graphics.dtx (with options: `package,dvipdfmx')
-%% l3drivers-pdf.dtx (with options: `package,dvipdfmx')
-%%
-%% Copyright (C) 1990-2019 The LaTeX3 Project
-%%
-%% It may be distributed and/or modified under the conditions of
-%% the LaTeX Project Public License (LPPL), either version 1.3c of
-%% this license or (at your option) any later version. The latest
-%% version of this license is in the file:
-%%
-%% https://www.latex-project.org/lppl.txt
-%%
-%% This file is part of the "l3kernel bundle" (The Work in LPPL)
-%% and all files in that bundle must be distributed together.
-%%
-%% File: l3drivers.dtx
-%% File: l3drivers-basics.dtx
-\ProvidesExplFile
- {l3dvipdfmx.def}{2019-04-06}{}
- {L3 Experimental driver: dvipdfmx}
-\cs_new_eq:NN \__driver_literal:e \tex_special:D
-\cs_new_protected:Npn \__driver_literal:n #1
- { \__driver_literal:e { \exp_not:n {#1} } }
-\cs_generate_variant:Nn \__driver_literal:n { x }
-\box_new:N \l__driver_internal_box
-\cs_new_protected:Npn \__driver_literal_pdf:n #1
- { \__driver_literal:n { pdf:literal~ #1 } }
-\cs_generate_variant:Nn \__driver_literal_pdf:n { x }
-\cs_new_protected:Npn \__driver_scope_begin:
- { \__driver_literal:n { x:gsave } }
-\cs_new_protected:Npn \__driver_scope_end:
- { \__driver_literal:n { x:grestore } }
-%% File: l3drivers-color.dtx
-\cs_new_protected:Npn \driver_color_pickup:N #1 { }
-\AtBeginDocument
- {
- \@ifpackageloaded { color }
- {
- \cs_set_protected:Npn \driver_color_pickup:N #1
- {
- \exp_args:NV \tl_if_head_is_space:nTF \current@color
- {
- \tl_set:Nx #1
- {
- spot ~
- \exp_after:wN \use:n \current@color \c_space_tl 1
- }
- }
- {
- \exp_last_unbraced:Nx \__driver_color_pickup:w
- { \current@color } \q_stop #1
- }
- }
- \cs_new_protected:Npn \__driver_color_pickup:w #1 ~ #2 \q_stop #3
- { \tl_set:Nn #3 { #1 ~ #2 } }
- }
- { }
- }
-\cs_new_protected:Npn \driver_color_cmyk:nnnn #1#2#3#4
- {
- \__driver_color_select:x
- {
- cmyk~
- \fp_eval:n {#1} ~ \fp_eval:n {#2} ~
- \fp_eval:n {#3} ~ \fp_eval:n {#4}
- }
- }
-\cs_new_protected:Npn \driver_color_gray:n #1
- { \__driver_color_select:x { gray~ \fp_eval:n {#1} } }
-\cs_new_protected:Npn \driver_color_rgb:nnn #1#2#3
- {
- \__driver_color_select:x
- { rgb~ \fp_eval:n {#1} ~ \fp_eval:n {#2} ~ \fp_eval:n {#3} }
- }
-\cs_new_protected:Npn \driver_color_spot:nn #1#2
- { \__driver_color_select:n { #1 } }
-\cs_new_protected:Npn \__driver_color_select:n #1
- {
- \__driver_literal:n { color~push~ #1 }
- \group_insert_after:N \__driver_color_reset:
- }
-\cs_generate_variant:Nn \__driver_color_select:n { x }
-\cs_new_protected:Npn \__driver_color_reset:
- { \__driver_literal:n { color~pop } }
-%% File: l3drivers-box.dtx
-\cs_new_protected:Npn \driver_box_use_clip:N #1
- {
- \__driver_scope_begin:
- \__driver_literal_pdf:x
- {
- 0~
- \dim_to_decimal_in_bp:n { -\box_dp:N #1 } ~
- \dim_to_decimal_in_bp:n { \box_wd:N #1 } ~
- \dim_to_decimal_in_bp:n { \box_ht:N #1 + \box_dp:N #1 } ~
- re~W~n
- }
- \hbox_overlap_right:n { \box_use:N #1 }
- \__driver_scope_end:
- \skip_horizontal:n { \box_wd:N #1 }
- }
-\cs_new_protected:Npn \driver_box_use_rotate:Nn #1#2
- { \exp_args:NNf \__driver_box_use_rotate:Nn #1 { \fp_eval:n {#2} } }
-\cs_new_protected:Npn \__driver_box_use_rotate:Nn #1#2
- {
- \__driver_scope_begin:
- \__driver_literal:x
- {
- x:rotate~
- \fp_compare:nNnTF {#2} = \c_zero_fp
- { 0 }
- { \fp_eval:n { round ( #2 , 5 ) } }
- }
- \box_use:N #1
- \__driver_scope_end:
- }
-\cs_new_protected:Npn \driver_box_use_scale:Nnn #1#2#3
- {
- \__driver_scope_begin:
- \__driver_literal:x
- {
- x:scale~
- \fp_eval:n { round ( #2 , 5 ) } ~
- \fp_eval:n { round ( #3 , 5 ) }
- }
- \hbox_overlap_right:n { \box_use:N #1 }
- \__driver_scope_end:
- }
-%% File: l3drivers-draw.dtx
-\cs_new_eq:NN \__driver_draw_literal:n \__driver_literal_pdf:n
-\cs_generate_variant:Nn \__driver_draw_literal:n { x }
-\cs_new_protected:Npn \driver_draw_begin:
- { \driver_draw_scope_begin: }
-\cs_new_protected:Npn \driver_draw_end:
- { \driver_draw_scope_end: }
-\cs_new_eq:NN \driver_draw_scope_begin: \__driver_scope_begin:
-\cs_new_eq:NN \driver_draw_scope_end: \__driver_scope_end:
-\cs_new_protected:Npn \driver_draw_moveto:nn #1#2
- {
- \__driver_draw_literal:x
- { \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~ m }
- }
-\cs_new_protected:Npn \driver_draw_lineto:nn #1#2
- {
- \__driver_draw_literal:x
- { \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~ l }
- }
-\cs_new_protected:Npn \driver_draw_curveto:nnnnnn #1#2#3#4#5#6
- {
- \__driver_draw_literal:x
- {
- \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~
- \dim_to_decimal_in_bp:n {#3} ~ \dim_to_decimal_in_bp:n {#4} ~
- \dim_to_decimal_in_bp:n {#5} ~ \dim_to_decimal_in_bp:n {#6} ~
- c
- }
- }
-\cs_new_protected:Npn \driver_draw_rectangle:nnnn #1#2#3#4
- {
- \__driver_draw_literal:x
- {
- \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~
- \dim_to_decimal_in_bp:n {#3} ~ \dim_to_decimal_in_bp:n {#4} ~
- re
- }
- }
-\cs_new_protected:Npn \driver_draw_evenodd_rule:
- { \bool_gset_true:N \g__driver_draw_eor_bool }
-\cs_new_protected:Npn \driver_draw_nonzero_rule:
- { \bool_gset_false:N \g__driver_draw_eor_bool }
-\bool_new:N \g__driver_draw_eor_bool
-\cs_new_protected:Npn \driver_draw_closepath:
- { \__driver_draw_literal:n { h } }
-\cs_new_protected:Npn \driver_draw_stroke:
- { \__driver_draw_literal:n { S } }
-\cs_new_protected:Npn \driver_draw_closestroke:
- { \__driver_draw_literal:n { s } }
-\cs_new_protected:Npn \driver_draw_fill:
- {
- \__driver_draw_literal:x
- { f \bool_if:NT \g__driver_draw_eor_bool * }
- }
-\cs_new_protected:Npn \driver_draw_fillstroke:
- {
- \__driver_draw_literal:x
- { B \bool_if:NT \g__driver_draw_eor_bool * }
- }
-\cs_new_protected:Npn \driver_draw_clip:
- {
- \__driver_draw_literal:x
- { W \bool_if:NT \g__driver_draw_eor_bool * }
- }
-\cs_new_protected:Npn \driver_draw_discardpath:
- { \__driver_draw_literal:n { n } }
-\cs_new_protected:Npn \driver_draw_dash_pattern:nn #1#2
- {
- \__driver_draw_literal:x
- {
- [
- \exp_args:Nf \use:n
- { \clist_map_function:nN {#1} \__driver_draw_dash:n }
- ] ~
- \dim_to_decimal_in_bp:n {#2} ~ d
- }
- }
-\cs_new:Npn \__driver_draw_dash:n #1
- { ~ \dim_to_decimal_in_bp:n {#1} }
-\cs_new_protected:Npn \driver_draw_linewidth:n #1
- {
- \__driver_draw_literal:x
- { \dim_to_decimal_in_bp:n {#1} ~ w }
- }
-\cs_new_protected:Npn \driver_draw_miterlimit:n #1
- { \__driver_draw_literal:x { \fp_eval:n {#1} ~ M } }
-\cs_new_protected:Npn \driver_draw_cap_butt:
- { \__driver_draw_literal:n { 0 ~ J } }
-\cs_new_protected:Npn \driver_draw_cap_round:
- { \__driver_draw_literal:n { 1 ~ J } }
-\cs_new_protected:Npn \driver_draw_cap_rectangle:
- { \__driver_draw_literal:n { 2 ~ J } }
-\cs_new_protected:Npn \driver_draw_join_miter:
- { \__driver_draw_literal:n { 0 ~ j } }
-\cs_new_protected:Npn \driver_draw_join_round:
- { \__driver_draw_literal:n { 1 ~ j } }
-\cs_new_protected:Npn \driver_draw_join_bevel:
- { \__driver_draw_literal:n { 2 ~ j } }
-\cs_new_protected:Npn \driver_draw_color_fill_cmyk:nnnn #1#2#3#4
- {
- \__driver_color_fill_select:x
- {
- \fp_eval:n {#1} ~ \fp_eval:n {#2} ~
- \fp_eval:n {#3} ~ \fp_eval:n {#4} ~
- k
- }
- }
-\cs_new_protected:Npn \driver_draw_color_stroke_cmyk:nnnn #1#2#3#4
- {
- \__driver_color_select:x
- {
- \fp_eval:n {#1} ~ \fp_eval:n {#2} ~
- \fp_eval:n {#3} ~ \fp_eval:n {#4} ~
- k
- }
- }
-\cs_new_protected:Npn \driver_draw_color_fill_gray:n #1
- { \__driver_color_fill_select:x { \fp_eval:n {#1} ~ g } }
-\cs_new_protected:Npn \driver_draw_color_stroke_gray:n #1
- { \__driver_color_select:x { \fp_eval:n {#1} ~ G } }
-\cs_new_protected:Npn \driver_draw_color_fill_rgb:nnn #1#2#3
- {
- \__driver_color_fill_select:x
- { \fp_eval:n {#1} ~ \fp_eval:n {#2} ~ \fp_eval:n {#3} ~ rg }
- }
-\cs_new_protected:Npn \driver_draw_color_stroke_rgb:nnn #1#2#3
- {
- \__driver_color_select:x
- { \fp_eval:n {#1} ~ \fp_eval:n {#2} ~ \fp_eval:n {#3} ~ RG }
- }
-\cs_new_eq:NN \__driver_color_fill_select:n \__driver_draw_literal:n
-\cs_generate_variant:Nn \__driver_color_fill_select:n { x }
-\cs_new_protected:Npn \driver_draw_cm:nnnn #1#2#3#4
- {
- \__driver_draw_cm_decompose:nnnnN {#1} {#2} {#3} {#4}
- \__driver_draw_cm:nnnn
- }
-\cs_new_protected:Npn \__driver_draw_cm:nnnn #1#2#3#4
- {
- \__driver_literal:x
- {
- x:rotate~
- \fp_compare:nNnTF {#1} = \c_zero_fp
- { 0 }
- { \fp_eval:n { round ( -#1 , 5 ) } }
- }
- \__driver_literal:x
- {
- x:scale~
- \fp_eval:n { round ( #2 , 5 ) } ~
- \fp_eval:n { round ( #3 , 5 ) }
- }
- \__driver_literal:x
- {
- x:rotate~
- \fp_compare:nNnTF {#4} = \c_zero_fp
- { 0 }
- { \fp_eval:n { round ( -#4 , 5 ) } }
- }
- }
-\cs_new_protected:Npn \__driver_draw_cm_decompose:nnnnN #1#2#3#4#5
- {
- \use:x
- {
- \__driver_draw_cm_decompose_auxi:nnnnN
- { \fp_eval:n { (#1 + #4) / 2 } }
- { \fp_eval:n { (#1 - #4) / 2 } }
- { \fp_eval:n { (#3 + #2) / 2 } }
- { \fp_eval:n { (#3 - #2) / 2 } }
- }
- #5
- }
-\cs_new_protected:Npn \__driver_draw_cm_decompose_auxi:nnnnN #1#2#3#4#5
- {
- \use:x
- {
- \__driver_draw_cm_decompose_auxii:nnnnN
- { \fp_eval:n { 2 * sqrt ( #1 * #1 + #4 * #4 ) } }
- { \fp_eval:n { 2 * sqrt ( #2 * #2 + #3 * #3 ) } }
- { \fp_eval:n { atand ( #3 , #2 ) } }
- { \fp_eval:n { atand ( #4 , #1 ) } }
- }
- #5
- }
-\cs_new_protected:Npn \__driver_draw_cm_decompose_auxii:nnnnN #1#2#3#4#5
- {
- \use:x
- {
- \__driver_draw_cm_decompose_auxiii:nnnnN
- { \fp_eval:n { ( #4 - #3 ) / 2 } }
- { \fp_eval:n { ( #1 + #2 ) / 2 } }
- { \fp_eval:n { ( #1 - #2 ) / 2 } }
- { \fp_eval:n { ( #4 + #3 ) / 2 } }
- }
- #5
- }
-\cs_new_protected:Npn \__driver_draw_cm_decompose_auxiii:nnnnN #1#2#3#4#5
- {
- \fp_compare:nNnTF { abs( #2 ) } > { abs ( #3 ) }
- { #5 {#1} {#2} {#3} {#4} }
- { #5 {#1} {#3} {#2} {#4} }
- }
-\cs_new_protected:Npn \driver_draw_box_use:Nnnnn #1#2#3#4#5
- {
- \__driver_scope_begin:
- \__driver_literal:x
- {
- pdf:btrans~matrix~
- \fp_eval:n {#2} ~ \fp_eval:n {#3} ~
- \fp_eval:n {#4} ~ \fp_eval:n {#5} ~
- 0 ~ 0
- }
- \hbox_overlap_right:n { \box_use:N #1 }
- \__driver_literal:n { pdf:etrans }
- \__driver_scope_end:
- }
-%% File: l3drivers-graphics.dtx
-\AtBeginDocument
- { \cs_new_eq:NN \driver_graphics_getbb_eps:n \graphics_read_bb:n }
-\cs_new_protected:Npn \driver_graphics_getbb_jpg: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 \driver_graphics_getbb_png:n \driver_graphics_getbb_jpg:n
-\cs_new_protected:Npn \driver_graphics_getbb_pdf:n #1
- {
- \tl_clear:N \l_graphics_decodearray_tl
- \bool_set_false:N \l_graphics_interpolate_bool
- \graphics_extract_bb:n {#1}
- }
-\int_new:N \g__driver_graphics_int
-\cs_new_protected:Npn \driver_graphics_include_eps:n #1
- {
- \__driver_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
- }
- }
-\cs_new_protected:Npn \driver_graphics_include_jpg:n #1
- { \__driver_graphics_include_auxi:nn {#1} { image } }
-\cs_new_eq:NN \driver_graphics_include_png:n \driver_graphics_include_jpg:n
-\cs_new_protected:Npn \driver_graphics_include_pdf:n #1
- { \__driver_graphics_include_auxi:nn {#1} { epdf } }
-\cs_new_protected:Npn \__driver_graphics_include_auxi:nn #1#2
- {
- \__driver_graphics_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
- { :I }
- }
- {#1} {#2}
- }
-\cs_new_protected:Npn \__driver_graphics_include_auxii:nnn #1#2#3
- {
- \int_if_exist:cTF { c__driver_graphics_ #2#1 _int }
- {
- \__driver_literal:x
- { pdf:usexobj~@graphic \int_use:c { c__driver_graphics_ #2#1 _int } }
- }
- { \__driver_graphics_include_auxiii:nnn {#2} {#1} {#3} }
- }
-\cs_generate_variant:Nn \__driver_graphics_include_auxii:nnn { x }
-\cs_new_protected:Npn \__driver_graphics_include_auxiii:nnn #1#2#3
- {
- \int_gincr:N \g__driver_graphics_int
- \int_const:cn { c__driver_graphics_ #1#2 _int } { \g__driver_graphics_int }
- \__driver_literal:x
- {
- pdf:#3~
- @graphic \int_use:c { c__driver_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
- 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
- }
- (#1)
- \bool_lazy_or:nnT
- { \l_graphics_interpolate_bool }
- { ! \tl_if_empty_p:N \l_graphics_decodearray_tl }
- {
- <<
- \tl_if_empty:NF \l_graphics_decodearray_tl
- { /Decode~[ \l_graphics_decodearray_tl ] }
- \bool_if:NT \l_graphics_interpolate_bool
- { /Interpolate~true> }
- >>
- }
- }
- }
-%% File: l3drivers-pdf.dtx
-\cs_new_protected:Npx \__driver_pdf:n #1
- { \__driver_literal:n { pdf: #1 } }
-\cs_generate_variant:Nn \__driver_pdf:n { x }
-\cs_new_protected:Npn \driver_pdf_catalog_gput:nn #1#2
- { \__driver_pdf:n { put ~ @catalog << /#1 ~ #2 >> } }
-\cs_new_protected:Npn \driver_pdf_info_gput:nn #1#2
- { \__driver_pdf:n { docinfo << /#1 ~ #2 >> } }
-\int_new:N \g__driver_pdf_object_int
-\prop_new:N \g__driver_pdf_object_prop
-\cs_new_protected:Npn \driver_pdf_object_new:nn #1#2
- {
- \int_gincr:N \g__driver_pdf_object_int
- \int_const:cn
- { g__driver_pdf_object_ \tl_to_str:n {#1} _int }
- { \g__driver_pdf_object_int }
- \prop_gput:Nnn \g__driver_pdf_object_prop {#1} {#2}
- }
-\cs_new:Npn \driver_pdf_object_ref:n #1
- { @driver.obj \int_use:c { g__driver_pdf_object_ \tl_to_str:n {#1} _int } }
-\cs_new_protected:Npn \driver_pdf_object_write:nn #1#2
- {
- \exp_args:Nx \__driver_pdf_object_write:nnn
- { \prop_item:Nn \g__driver_pdf_object_prop {#1} } {#1} {#2}
- }
-\cs_new_protected:Npn \__driver_pdf_object_write:nnn #1#2#3
- { \use:c { __driver_pdf_object_write_ #1 :nn } {#2} {#3} }
-\cs_new_protected:Npn \__driver_pdf_object_write_array:nn #1#2
- {
- \__driver_pdf:x
- {
- obj ~ \driver_pdf_object_ref:n {#1} ~
- [ ~ \exp_not:n {#2} ~ ]
- }
- }
-\cs_new_protected:Npn \__driver_pdf_object_write_dict:nn #1#2
- {
- \__driver_pdf:x
- {
- obj ~ \driver_pdf_object_ref:n {#1} ~
- << ~ \exp_not:n {#2} ~ >>
- }
- }
-\cs_new_protected:Npn \__driver_pdf_object_write_fstream:nn #1#2
- { \__driver_pdf_object_write_stream:nnnn { f } {#1} #2 }
-\cs_new_protected:Npn \__driver_pdf_object_write_stream:nn #1#2
- { \__driver_pdf_object_write_stream:nnnn { } {#1} #2 }
-\cs_new_protected:Npn \__driver_pdf_object_write_stream:nnnn #1#2#3#4
- {
- \__driver_pdf:x
- {
- #1 stream ~ \driver_pdf_object_ref:n {#2} ~
- ( \exp_not:n {#4} ) ~ << \exp_not:n {#3} >>
-
- }
- }
-\bool_new:N \g__driver_landscape_bool
-\AtBeginDocument
- {
- \cs_if_exist:NT \landscape
- {
- \tl_put_right:Nn \landscape
- { \bool_gset_true:N \g__driver_landscape_bool }
- \tl_put_left:Nn \endlandscape
- { \bool_gset_false:N \g__driver_landscape_bool }
- }
- }
-\int_new:N \g__driver_pdf_annotation_int
-\cs_new_protected:Npn \driver_pdf_annotation:nnnn #1#2#3#4
- {
- \bool_if:NTF \g__driver_landscape_bool
- {
- \box_move_up:nn {#2}
- {
- \vbox:n
- {
- \__driver_pdf_annotation:nnnn
- { #2 + #3 } {#1} { 0pt } {#4}
- }
- }
- }
- { \__driver_pdf_annotation:nnnn {#1} {#2} {#3} {#4} }
- }
-\cs_new_protected:Npn \__driver_pdf_annotation:nnnn #1#2#3#4
- {
- \int_gincr:N \g__driver_pdf_object_int
- \int_gset_eq:NN \g__driver_pdf_annotation_int \g__driver_pdf_object_int
- \__driver_pdf:x
- {
- ann ~ @driver.obj \int_use:N \g__driver_pdf_object_int \c_space_tl
- width ~ \dim_eval:n {#1} ~
- height ~ \dim_eval:n {#2} ~
- depth ~ \dim_eval:n {#3} ~
- << #4 >>
- }
- }
-\cs_new_protected:Npn \driver_pdf_link_begin_goto:nnw #1#2
- { \__driver_pdf_link_begin:n { #1 /Subtype /Link /A << /S /GoTo /D ( #2 ) >> } }
-\cs_new_protected:Npn \driver_pdf_link_begin_user:nnw #1#2
- { \__driver_pdf_link_begin:n {#1#2} }
-\cs_new_protected:Npn \__driver_pdf_link_begin:n #1
- {
- \__driver_pdf:n
- {
- bann
- <<
- /Type /Annot
- #1
- >>
- }
- }
-\cs_new_protected:Npn \driver_pdf_link_end:
- { \__driver_pdf:n { eann } }
-\cs_new:Npn \driver_pdf_link_last: { }
-\cs_new_protected:Npn \driver_pdf_link_margin:n #1
- { \__driver_literal:x { dvipdfmx:config~g~ \dim_eval:n {#1} } }
-\cs_new_protected:Npn \driver_pdf_destination:nn #1#2
- {
- \__driver_pdf:x
- {
- dest ~ ( \exp_not:n {#1} )
- [
- @thispage
- \str_case:nnF {#2}
- {
- { xyz } { /XYZ ~ @xpos ~ @ypos ~ null }
- { fit } { /Fit }
- { fitb } { /FitB }
- { fitbh } { /FitBH }
- { fitbv } { /FitBV ~ @xpos }
- { fith } { /FitH ~ @ypos }
- { fitv } { /FitV ~ @xpos }
- }
- { /XYZ ~ @xpos ~ @ypos ~ \fp_eval:n { (#2) / 100 } }
- ]
- }
- }
-\cs_new_protected:Npn \driver_pdf_destination_rectangle:nn #1#2
- {
- \group_begin:
- \hbox_set:Nn \l__driver_internal_box {#2}
- \box_move_down:nn { \box_dp:N \l__driver_internal_box }
- {
- \hbox:n
- {
- \__driver_pdf:n { obj ~ @driver_#1_llx ~ @xpos }
- \__driver_pdf:n { obj ~ @driver_#1_lly ~ @ypos }
- }
- }
- \box_use:N \l__driver_internal_box
- \box_move_up:nn { \box_ht:N \l__driver_internal_box }
- {
- \hbox:n
- {
- \__driver_pdf:n
- {
- dest ~ (#1)
- [
- @thispage
- /FitR ~
- @driver_#1_llx ~ @driver_#1_lly ~
- @xpos ~ @ypos
- ]
- }
- }
- }
- \group_end:
- }
-\cs_new_protected:Npn \driver_pdf_compresslevel:n #1
- { \__driver_literal:x { dvipdfmx:config~z~ \int_eval:n {#1} } }
-\cs_new_protected:Npn \driver_pdf_compress_objects:n #1
- {
- \str_if_eq:nnF {#1} { true }
- { \__driver_literal:n { dvipdfmx:config~C~0x40 } }
- }
-\cs_new_protected:Npn \driver_pdf_version_major:n #1
- {
- \cs_gset:Npx \driver_pdf_version_major: { \int_eval:n {#1} }
- \__driver_literal:x { pdf:majorversion \driver_pdf_version_major: }
- }
-\cs_new_protected:Npn \driver_pdf_version_minor:n #1
- {
- \cs_gset:Npx \driver_pdf_version_minor: { \int_eval:n {#1} }
- \__driver_literal:x { pdf:minorversion \driver_pdf_version_minor: }
- }
-\cs_new:Npn \driver_pdf_version_major: { 1 }
-\cs_new:Npn \driver_pdf_version_minor: { 5 }
-%%
-%%
-%% End of file `l3dvipdfmx.def'.
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3dvips.def b/Master/texmf-dist/tex/latex/l3kernel/l3dvips.def
deleted file mode 100644
index f51166f9231..00000000000
--- a/Master/texmf-dist/tex/latex/l3kernel/l3dvips.def
+++ /dev/null
@@ -1,1176 +0,0 @@
-%%
-%% This is file `l3dvips.def',
-%% generated with the docstrip utility.
-%%
-%% The original source files were:
-%%
-%% l3drivers.dtx (with options: `package,dvips')
-%% l3drivers-basics.dtx (with options: `package,dvips')
-%% l3drivers-color.dtx (with options: `package,dvips')
-%% l3drivers-box.dtx (with options: `package,dvips')
-%% l3drivers-draw.dtx (with options: `package,dvips')
-%% l3drivers-graphics.dtx (with options: `package,dvips')
-%% l3drivers-pdf.dtx (with options: `package,dvips')
-%%
-%% Copyright (C) 1990-2019 The LaTeX3 Project
-%%
-%% It may be distributed and/or modified under the conditions of
-%% the LaTeX Project Public License (LPPL), either version 1.3c of
-%% this license or (at your option) any later version. The latest
-%% version of this license is in the file:
-%%
-%% https://www.latex-project.org/lppl.txt
-%%
-%% This file is part of the "l3kernel bundle" (The Work in LPPL)
-%% and all files in that bundle must be distributed together.
-%%
-%% File: l3drivers.dtx
-%% File: l3drivers-basics.dtx
-\ProvidesExplFile
- {l3dvips.def}{2019-04-06}{}
- {L3 Experimental driver: dvips}
-\cs_new_eq:NN \__driver_literal:e \tex_special:D
-\cs_new_protected:Npn \__driver_literal:n #1
- { \__driver_literal:e { \exp_not:n {#1} } }
-\cs_generate_variant:Nn \__driver_literal:n { x }
-\box_new:N \l__driver_internal_box
-\cs_new_protected:Npn \__driver_literal_postscript:n #1
- { \__driver_literal:n { ps:: #1 } }
-\cs_generate_variant:Nn \__driver_literal_postscript:n { x }
-\cs_new_protected:Npn \__driver_postscript:n #1
- { \__driver_literal:n { ps: SDict ~ begin ~ #1 ~ end } }
-\cs_generate_variant:Nn \__driver_postscript:n { x }
-\cs_new_protected:Npx \__driver_postscript_header:n #1
- {
- \cs_if_exist:NTF \AtBeginDvi
- { \exp_not:N \AtBeginDvi }
- { \use:n }
- { \__driver_literal:n { ! #1 } }
- }
-\cs_new_protected:Npn \__driver_align_currentpoint_begin:
- {
- \__driver_literal:n { ps::[begin] }
- \__driver_literal_postscript:n { currentpoint }
- \__driver_literal_postscript:n { currentpoint~translate }
- }
-\cs_new_protected:Npn \__driver_align_currentpoint_end:
- {
- \__driver_literal_postscript:n { neg~exch~neg~exch~translate }
- \__driver_literal:n { ps::[end] }
- }
-\cs_new_protected:Npn \__driver_scope_begin:
- { \__driver_literal:n { ps:gsave } }
-\cs_new_protected:Npn \__driver_scope_end:
- { \__driver_literal:n { ps:grestore } }
-%% File: l3drivers-color.dtx
-\cs_new_protected:Npn \driver_color_pickup:N #1 { }
-\AtBeginDocument
- {
- \@ifpackageloaded { color }
- {
- \cs_set_protected:Npn \driver_color_pickup:N #1
- {
- \exp_args:NV \tl_if_head_is_space:nTF \current@color
- {
- \tl_set:Nx #1
- {
- spot ~
- \exp_after:wN \use:n \current@color \c_space_tl 1
- }
- }
- {
- \exp_last_unbraced:Nx \__driver_color_pickup:w
- { \current@color } \q_stop #1
- }
- }
- \cs_new_protected:Npn \__driver_color_pickup:w #1 ~ #2 \q_stop #3
- { \tl_set:Nn #3 { #1 ~ #2 } }
- }
- { }
- }
-\cs_new_protected:Npn \driver_color_cmyk:nnnn #1#2#3#4
- {
- \__driver_color_select:x
- {
- cmyk~
- \fp_eval:n {#1} ~ \fp_eval:n {#2} ~
- \fp_eval:n {#3} ~ \fp_eval:n {#4}
- }
- }
-\cs_new_protected:Npn \driver_color_gray:n #1
- { \__driver_color_select:x { gray~ \fp_eval:n {#1} } }
-\cs_new_protected:Npn \driver_color_rgb:nnn #1#2#3
- {
- \__driver_color_select:x
- { rgb~ \fp_eval:n {#1} ~ \fp_eval:n {#2} ~ \fp_eval:n {#3} }
- }
-\cs_new_protected:Npn \driver_color_spot:nn #1#2
- { \__driver_color_select:n { #1 } }
-\cs_new_protected:Npn \__driver_color_select:n #1
- {
- \__driver_literal:n { color~push~ #1 }
- \__driver_postscript:n { /driver.fc~{ }~def }
- \group_insert_after:N \__driver_color_reset:
- }
-\cs_generate_variant:Nn \__driver_color_select:n { x }
-\cs_new_protected:Npn \__driver_color_reset:
- { \__driver_literal:n { color~pop } }
-%% File: l3drivers-box.dtx
-\cs_new_protected:Npn \driver_box_use_clip:N #1
- {
- \__driver_scope_begin:
- \__driver_align_currentpoint_begin:
- \__driver_literal_postscript:n { matrix~currentmatrix }
- \__driver_literal_postscript:n
- { Resolution~72~div~VResolution~72~div~scale }
- \__driver_literal_postscript:n { DVImag~dup~scale }
- \__driver_literal_postscript:x
- {
- 0 ~
- \dim_to_decimal_in_bp:n { \box_dp:N #1 } ~
- \dim_to_decimal_in_bp:n { \box_wd:N #1 } ~
- \dim_to_decimal_in_bp:n { -\box_ht:N #1 - \box_dp:N #1 } ~
- rectclip
- }
- \__driver_literal_postscript:n { setmatrix }
- \__driver_align_currentpoint_end:
- \hbox_overlap_right:n { \box_use:N #1 }
- \__driver_scope_end:
- \skip_horizontal:n { \box_wd:N #1 }
- }
-\cs_new_protected:Npn \driver_box_use_rotate:Nn #1#2
- { \exp_args:NNf \__driver_box_use_rotate:Nn #1 { \fp_eval:n {#2} } }
-\cs_new_protected:Npn \__driver_box_use_rotate:Nn #1#2
- {
- \__driver_scope_begin:
- \__driver_align_currentpoint_begin:
- \__driver_literal_postscript:x
- {
- \fp_compare:nNnTF {#2} = \c_zero_fp
- { 0 }
- { \fp_eval:n { round ( -(#2) , 5 ) } } ~
- rotate
- }
- \__driver_align_currentpoint_end:
- \box_use:N #1
- \__driver_scope_end:
- }
-\cs_new_protected:Npn \driver_box_use_scale:Nnn #1#2#3
- {
- \__driver_scope_begin:
- \__driver_align_currentpoint_begin:
- \__driver_literal_postscript:x
- {
- \fp_eval:n { round ( #2 , 5 ) } ~
- \fp_eval:n { round ( #3 , 5 ) } ~
- scale
- }
- \__driver_align_currentpoint_end:
- \hbox_overlap_right:n { \box_use:N #1 }
- \__driver_scope_end:
- }
-%% File: l3drivers-draw.dtx
-\cs_new_eq:NN \__driver_draw_literal:n \__driver_literal_postscript:n
-\cs_generate_variant:Nn \__driver_draw_literal:n { x }
-\cs_new_protected:Npn \driver_draw_begin:
- {
- \__driver_literal:n { ps::[begin] }
- \__driver_draw_literal:n { @beginspecial }
- \__driver_darw_literal:n { SDict ~ begin ~ /driver.fc ~ { } ~ def ~ end }
- }
-\cs_new_protected:Npn \driver_draw_end:
- {
- \__driver_draw_literal:n { @endspecial }
- \__driver_literal:n { ps::[end] }
- }
-\cs_new_protected:Npn \driver_draw_scope_begin:
- { \__driver_draw_literal:n { save } }
-\cs_new_protected:Npn \driver_draw_scope_end:
- { \__driver_draw_literal:n { restore } }
-\cs_new_protected:Npn \driver_draw_moveto:nn #1#2
- {
- \__driver_draw_literal:x
- {
- \dim_to_decimal_in_bp:n {#1} ~
- \dim_to_decimal_in_bp:n {#2} ~ moveto
- }
- }
-\cs_new_protected:Npn \driver_draw_lineto:nn #1#2
- {
- \__driver_draw_literal:x
- {
- \dim_to_decimal_in_bp:n {#1} ~
- \dim_to_decimal_in_bp:n {#2} ~ lineto
- }
- }
-\cs_new_protected:Npn \driver_draw_rectangle:nnnn #1#2#3#4
- {
- \__driver_draw_literal:x
- {
- \dim_to_decimal_in_bp:n {#4} ~ \dim_to_decimal_in_bp:n {#3} ~
- \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~
- moveto~dup~0~rlineto~exch~0~exch~rlineto~neg~0~rlineto~closepath
- }
- }
-\cs_new_protected:Npn \driver_draw_curveto:nnnnnn #1#2#3#4#5#6
- {
- \__driver_draw_literal:x
- {
- \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~
- \dim_to_decimal_in_bp:n {#3} ~ \dim_to_decimal_in_bp:n {#4} ~
- \dim_to_decimal_in_bp:n {#5} ~ \dim_to_decimal_in_bp:n {#6} ~
- curveto
- }
- }
-\cs_new_protected:Npn \driver_draw_evenodd_rule:
- { \bool_gset_true:N \g__driver_draw_eor_bool }
-\cs_new_protected:Npn \driver_draw_nonzero_rule:
- { \bool_gset_false:N \g__driver_draw_eor_bool }
-\bool_new:N \g__driver_draw_eor_bool
-\cs_new_protected:Npn \driver_draw_closepath:
- { \__driver_draw_literal:n { closepath } }
-\cs_new_protected:Npn \driver_draw_stroke:
- {
- \__driver_draw_literal:n { stroke }
- \bool_if:NT \g__driver_draw_clip_bool
- {
- \__driver_draw_literal:x
- {
- \bool_if:NT \g__driver_draw_eor_bool { eo }
- clip
- }
- }
- \__driver_draw_literal:n { newpath }
- \bool_gset_false:N \g__driver_draw_clip_bool
- }
-\cs_new_protected:Npn \driver_draw_closestroke:
- {
- \driver_draw_closepath:
- \driver_draw_stroke:
- }
-\cs_new_protected:Npn \driver_draw_fill:
- {
- \__driver_draw_literal:n { gsave }
- \__driver_draw_literal:n { driver.fc }
- \__driver_draw_literal:x
- {
- \bool_if:NT \g__driver_draw_eor_bool { eo }
- fill
- }
- \__driver_draw_literal:n { grestore }
- \bool_if:NT \g__driver_draw_clip_bool
- {
- \__driver_draw_literal:x
- {
- \bool_if:NT \g__driver_draw_eor_bool { eo }
- clip
- }
- }
- \__driver_draw_literal:n { newpath }
- \bool_gset_false:N \g__driver_draw_clip_bool
- }
-\cs_new_protected:Npn \driver_draw_fillstroke:
- {
- \__driver_draw_literal:n { gsave }
- \__driver_draw_literal:n { driver.fc }
- \__driver_draw_literal:x
- {
- \bool_if:NT \g__driver_draw_eor_bool { eo }
- fill
- }
- \__driver_draw_literal:n { grestore }
- \__driver_draw_literal:n { stroke }
- \bool_if:NT \g__driver_draw_clip_bool
- {
- \__driver_draw_literal:x
- {
- \bool_if:NT \g__driver_draw_eor_bool { eo }
- clip
- }
- }
- \__driver_draw_literal:n { newpath }
- \bool_gset_false:N \g__driver_draw_clip_bool
- }
-\cs_new_protected:Npn \driver_draw_clip:
- { \bool_gset_true:N \g__driver_draw_clip_bool }
-\bool_new:N \g__driver_draw_clip_bool
-\cs_new_protected:Npn \driver_draw_discardpath:
- {
- \bool_if:NT \g__driver_draw_clip_bool
- {
- \__driver_draw_literal:x
- {
- \bool_if:NT \g__driver_draw_eor_bool { eo }
- clip
- }
- }
- \__driver_draw_literal:n { newpath }
- \bool_gset_false:N \g__driver_draw_clip_bool
- }
-\cs_new_protected:Npn \driver_draw_dash_pattern:nn #1#2
- {
- \__driver_draw_literal:x
- {
- [
- \exp_args:Nf \use:n
- { \clist_map_function:nN {#1} \__driver_draw_dash:n }
- ] ~
- \dim_to_decimal_in_bp:n {#2} ~ setdash
- }
- }
-\cs_new:Npn \__driver_draw_dash:n #1
- { ~ \dim_to_decimal_in_bp:n {#1} }
-\cs_new_protected:Npn \driver_draw_linewidth:n #1
- {
- \__driver_draw_literal:x
- { \dim_to_decimal_in_bp:n {#1} ~ setlinewidth }
- }
-\cs_new_protected:Npn \driver_draw_miterlimit:n #1
- { \__driver_draw_literal:x { \fp_eval:n {#1} ~ setmiterlimit } }
-\cs_new_protected:Npn \driver_draw_cap_butt:
- { \__driver_draw_literal:n { 0 ~ setlinecap } }
-\cs_new_protected:Npn \driver_draw_cap_round:
- { \__driver_draw_literal:n { 1 ~ setlinecap } }
-\cs_new_protected:Npn \driver_draw_cap_rectangle:
- { \__driver_draw_literal:n { 2 ~ setlinecap } }
-\cs_new_protected:Npn \driver_draw_join_miter:
- { \__driver_draw_literal:n { 0 ~ setlinejoin } }
-\cs_new_protected:Npn \driver_draw_join_round:
- { \__driver_draw_literal:n { 1 ~ setlinejoin } }
-\cs_new_protected:Npn \driver_draw_join_bevel:
- { \__driver_draw_literal:n { 2 ~ setlinejoin } }
-\cs_new_protected:Npn \driver_draw_color_fill_cmyk:nnnn #1#2#3#4
- {
- \__driver_draw_color_fill:x
- {
- \fp_eval:n {#1} ~ \fp_eval:n {#2} ~
- \fp_eval:n {#3} ~ \fp_eval:n {#4} ~
- setcmykcolor
- }
- }
-\cs_new_protected:Npn \driver_draw_color_stroke_cmyk:nnnn #1#2#3#4
- {
- \__driver_draw_color_stroke:x
- {
- cmyk ~
- \fp_eval:n {#1} ~ \fp_eval:n {#2} ~
- \fp_eval:n {#3} ~ \fp_eval:n {#4}
- }
- }
-\cs_new_protected:Npn \driver_draw_color_fill_gray:n #1
- { \__driver_draw_color_fill:x { \fp_eval:n {#1} ~ setgray } }
-\cs_new_protected:Npn \driver_draw_color_stroke_gray:n #1
- { \__driver_draw_color_stroke:x { gray ~ \fp_eval:n {#1} } }
-\cs_new_protected:Npn \driver_draw_color_fill_rgb:nnn #1#2#3
- {
- \__driver_draw_color_fill:x
- { \fp_eval:n {#1} ~ \fp_eval:n {#2} ~ \fp_eval:n {#3} ~ setrgbcolor }
- }
-\cs_new_protected:Npn \driver_draw_color_stroke_rgb:nnn #1#2#3
- {
- \__driver_draw_color_stroke:x
- { rgb ~ \fp_eval:n {#1} ~ \fp_eval:n {#2} ~ \fp_eval:n {#3} }
- }
-\cs_new_protected:Npn \__driver_draw_color_fill:n #1
- { \__driver_postscript:n { SDict ~ begin ~ /driver.fc ~ { #1 } ~ def ~ end } }
-\cs_generate_variant:Nn \__driver_draw_color_fill:n { x }
-\cs_new_protected:Npn \__driver_draw_color_stroke:n #1
- {
- \__driver_literal:n { color~push~#1 }
- \group_insert_after:N \__driver_color_reset:
- }
-\cs_generate_variant:Nn \__driver_draw_color_stroke:n { x }
-\cs_new_protected:Npn \driver_draw_cm:nnnn #1#2#3#4
- {
- \__driver_draw_literal:n
- {
- [
- \fp_eval:n {#1} ~ \fp_eval:n {#2} ~
- \fp_eval:n {#3} ~ \fp_eval:n {#4} ~
- 0 ~ 0
- ] ~
- concat
- }
- }
-\cs_new_protected:Npn \driver_draw_box_use:Nnnnn #1#2#3#4#5
- {
- \__driver_draw_literal:n { @endspecial }
- \__driver_draw_literal:n { [end] }
- \__driver_draw_literal:n { [begin] }
- \__driver_draw_literal:n { save }
- \__driver_draw_literal:n { currentpoint }
- \__driver_draw_literal:n { currentpoint~translate }
- \driver_draw_cm:nnnn { 1 } { 0 } { 0 } { -1 }
- \driver_draw_cm:nnnn {#2} {#3} {#4} {#5}
- \driver_draw_cm:nnnn { 1 } { 0 } { 0 } { -1 }
- \__driver_draw_literal:n { neg~exch~neg~exch~translate }
- \__driver_draw_literal:n { [end] }
- \hbox_overlap_right:n { \box_use:N #1 }
- \__driver_draw_literal:n { [begin] }
- \__driver_draw_literal:n { restore }
- \__driver_draw_literal:n { [end] }
- \__driver_draw_literal:n { [begin] }
- \__driver_draw_literal:n { @beginspecial }
- }
-%% File: l3drivers-graphics.dtx
-\AtBeginDocument
- { \cs_new_eq:NN \driver_graphics_getbb_eps:n \graphics_read_bb:n }
-\cs_new_protected:Npn \driver_graphics_include_eps:n #1
- {
- \__driver_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
- }
- }
-%% File: l3drivers-pdf.dtx
-\cs_new_protected:Npn \__driver_pdfmark:n #1
- { \__driver_postscript:n { mark #1 ~ pdfmark } }
-\cs_generate_variant:Nn \__driver_pdfmark:n { x }
-\cs_new_protected:Npn \driver_pdf_catalog_gput:nn #1#2
- { \__driver_pdfmark:n { { Catalog } << /#1 ~ #2 >> /PUT } }
-\cs_new_protected:Npn \driver_pdf_info_gput:nn #1#2
- { \__driver_pdfmark:n { /#1 ~ #2 /DOCINFO } }
-\int_new:N \g__driver_pdf_object_int
-\prop_new:N \g__driver_pdf_object_prop
-\cs_new_protected:Npn \driver_pdf_object_new:nn #1#2
- {
- \int_gincr:N \g__driver_pdf_object_int
- \int_const:cn
- { c__driver_pdf_object_ \tl_to_str:n {#1} _int }
- { \g__driver_pdf_object_int }
- \prop_gput:Nnn \g__driver_pdf_object_prop {#1} {#2}
- }
-\cs_new:Npn \driver_pdf_object_ref:n #1
- { { driver.obj \int_use:c { c__driver_pdf_object_ \tl_to_str:n {#1} _int } } }
-\cs_new_protected:Npn \driver_pdf_object_write:nn #1#2
- {
- \__driver_pdfmark:x
- {
- /_objdef ~ \driver_pdf_object_ref:n {#1}
- /type
- \str_case_e:nn
- { \prop_item:Nn \g__driver_pdf_object_prop {#1} }
- {
- { array } { /array }
- { dict } { /dict }
- { fstream } { /stream }
- { stream } { /stream }
- }
- /OBJ
- }
- \use:c
- { __driver_pdf_object_write_ \prop_item:Nn \g__driver_pdf_object_prop {#1} :nn }
- {#1} {#2}
- }
-\cs_new_protected:Npn \__driver_pdf_object_write_array:nn #1#2
- {
- \__driver_pdfmark:x
- {
- \driver_pdf_object_ref:n {#1}
- [ ~ \exp_not:n {#2} ~ ] ~ /PUTINTERVAL
- }
- }
-\cs_new_protected:Npn \__driver_pdf_object_write_dict:nn #1#2
- {
- \__driver_pdfmark:x
- {
- \driver_pdf_object_ref:n {#1}
- << \exp_not:n {#2} >> /PUT
- }
- }
-\cs_new_protected:Npn \__driver_pdf_object_write_stream:nn #1#2
- {
- \exp_args:Nx
- \__driver_pdf_object_write_stream:nnn
- { \driver_pdf_object_ref:n {#1} }
- #2
- }
-\cs_new_protected:Npn \__driver_pdf_object_write_stream:nnn #1#2#3
- {
- \__driver_postscript:n
- {
- [nobreak]
- mark ~ #1 ~ ( #3 ) /PUT ~ pdfmark ~
- mark ~ #1 ~ << #2 >> /PUT ~ pdfmark
- }
- }
-\__driver_postscript_header:n
- {
- true ~ setglobal ~
- /driver.globaldict ~ 4 ~ dict ~ def ~
- false ~ setglobal
- }
-\__driver_postscript_header:n
- {
- /driver.cvs { 65534 ~ string ~ cvs } def
- /driver.dvi.pt { 72.27 ~ mul ~ Resolution ~ div } def
- /driver.pt.dvi { 72.27 ~ div ~ Resolution ~ mul } def
- /driver.rect.ht { dup ~ 1 ~ get ~ neg ~ exch ~ 3 ~ get ~ add } def
- }
-\__driver_postscript_header:n
- {
- /driver.linkmargin { 1 ~ driver.pt.dvi } def
- /driver.linkdp.pad { 0 } def
- /driver.linkht.pad { 0 } def
- }
-\__driver_postscript_header:n
- {
- /driver.rect
- { /Rect [ driver.llx ~ driver.lly ~ driver.urx ~ driver.ury ] } def
- /driver.save.ll
- {
- currentpoint
- /driver.lly ~ exch ~ def
- /driver.llx ~ exch ~ def
- }
- def
- /driver.save.ur
- {
- currentpoint
- /driver.ury ~ exch ~ def
- /driver.urx ~ exch ~ def
- }
- def
- /driver.save.linkll
- {
- currentpoint ~
- driver.linkmargin ~ add ~
- driver.linkdp.pad ~ add
- /driver.lly ~ exch ~ def ~
- driver.linkmargin ~ sub
- /driver.llx ~ exch ~ def
- }
- def
- /driver.save.linkur
- {
- currentpoint ~
- driver.linkmargin ~ sub ~
- driver.linkht.pad ~ sub
- /driver.ury ~ exch ~ def ~
- driver.linkmargin ~ add
- /driver.urx ~ exch ~ def
- }
- def
- }
-\__driver_postscript_header:n
- {
- /driver.dest.anchor
- {
- currentpoint ~ exch ~
- driver.dvi.pt ~ 72 ~ add ~
- /driver.dest.x ~ exch ~ def ~
- driver.dvi.pt ~
- vsize ~ 72 ~ sub ~ exch ~ sub ~
- /driver.dest.y ~ exch ~ def
- }
- def
- /driver.dest.point
- { driver.dest.x ~ driver.dest.y } def
- /driver.dest2device
- {
- /driver.dest.y ~ exch ~ def
- /driver.dest.x ~ exch ~ def ~
- matrix ~ currentmatrix ~
- matrix ~ defaultmatrix ~
- matrix ~ invertmatrix ~
- matrix ~ concatmatrix ~
- cvx ~ exec
- /driver.dev.y ~ exch ~ def
- /driver.dev.x ~ exch ~ def
- /driver.tmpd ~ exch ~ def
- /driver.tmpc ~ exch ~ def
- /driver.tmpb ~ exch ~ def
- /driver.tmpa ~ exch ~ def ~
- driver.dest.x ~ driver.tmpa ~ mul ~
- driver.dest.y ~ driver.tmpc ~ mul ~ add ~
- driver.dev.x ~ add ~
- driver.dest.x ~ driver.tmpb ~ mul ~
- driver.dest.y ~ driver.tmpd ~ mul ~ add ~
- driver.dev.y ~ add
- }
- def
- }
-\__driver_postscript_header:n
- {
- /driver.bordertracking ~ false ~ def
- /driver.bordertracking.begin
- {
- SDict ~ /driver.bordertracking ~ true ~ put ~
- SDict ~ /driver.leftboundary ~ undef ~
- SDict ~ /driver.rightboundary ~ undef ~
- /a ~ where
- {
- /a
- {
- currentpoint ~ pop ~
- SDict /driver.rightboundary ~ known ~ dup
- {
- SDict /driver.rightboundary ~ get ~ 2 ~ index ~ lt
- { not }
- if
- }
- if
- { pop }
- { SDict ~ exch /driver.rightboundary ~ exch ~ put }
- ifelse ~
- moveto ~
- currentpoint ~ pop ~
- SDict /driver.leftboundary ~ known ~ dup
- {
- SDict /driver.leftboundary ~ get ~ 2 ~ index ~ gt
- { not }
- if
- }
- if
- { pop }
- { SDict ~ exch /driver.leftboundary ~ exch ~ put }
- ifelse
- }
- put
- }
- if
- }
- def
- /driver.bordertracking.end
- {
- /a ~ where { /a { moveto } put } if
- /x ~ where { /x { 0 ~ exch ~ rmoveto } put } if ~
- SDict /driver.leftboundary ~ known
- { driver.outerbox ~ 0 ~ driver.leftboundary ~ put }
- if ~
- SDict /driver.rightboundary ~ known
- { driver.outerbox ~ 2 ~ driver.rightboundary ~ put }
- if ~
- SDict /driver.bordertracking ~ false ~ put
- }
- def
- /driver.bordertracking.endpage
- {
- driver.bordertracking
- {
- driver.bordertracking.end ~
- true ~ setglobal ~
- driver.globaldict
- /driver.brokenlink.rect [ driver.outerbox ~ aload ~ pop ] put ~
- driver.globaldict
- /driver.brokenlink.skip ~ driver.baselineskip ~ put ~
- driver.globaldict
- /driver.brokenlink.dict ~
- driver.link.dict ~ driver.cvs ~ put ~
- false ~ setglobal ~
- mark ~ driver.link.dict ~ cvx ~ exec ~ /Rect
- [
- driver.llx ~
- driver.lly ~
- driver.outerbox ~ 2 ~ get ~ driver.linkmargin ~ add ~
- currentpoint ~ exch ~ pop ~
- driver.outerbox ~ driver.rect.ht ~ sub ~ driver.linkmargin ~ sub
- ]
- /ANN ~ driver.pdfmark
- }
- if
- }
- def
- /driver.bordertracking.continue
- {
- /driver.link.dict ~ driver.globaldict
- /driver.brokenlink.dict ~ get ~ def
- /driver.outerbox ~ driver.globaldict
- /driver.brokenlink.rect ~ get ~ def
- /driver.baselineskip ~ driver.globaldict
- /driver.brokenlink.skip ~ get ~ def ~
- driver.globaldict ~ dup ~ dup
- /driver.brokenlink.dict ~ undef
- /driver.brokenlink.skip ~ undef
- /driver.brokenlink.rect ~ undef ~
- currentpoint
- /driver.originy ~ exch ~ def
- /driver.originx ~ exch ~ def
- /a ~ where
- {
- /a
- {
- moveto ~
- SDict ~
- begin ~
- currentpoint ~ driver.originy ~ ne ~ exch ~
- driver.originx ~ ne ~ or
- {
- driver.save.linkll
- /driver.lly ~
- driver.lly ~ driver.outerbox ~ 1 ~ get ~ sub ~ def ~
- driver.bordertracking.begin
- }
- if ~
- end
- }
- put
- }
- if
- /x ~ where
- {
- /x
- {
- 0 ~ exch ~ rmoveto ~
- SDict~
- begin ~
- currentpoint ~
- driver.originy ~ ne ~ exch ~ driver.originx ~ ne ~ or
- {
- driver.save.linkll
- /driver.lly ~
- driver.lly ~ driver.outerbox ~ 1 ~ get ~ sub ~ def ~
- driver.bordertracking.begin
- }
- if ~
- end
- }
- put
- }
- if
- }
- def
- }
-\__driver_postscript_header:n
- {
- /driver.breaklink
- {
- pop ~
- counttomark ~ 2 ~ mod ~ 0 ~ eq
- {
- counttomark /driver.count ~ exch ~ def
- {
- driver.count ~ 0 ~ eq { exit } if ~
- counttomark ~ 2 ~ roll ~
- 1 ~ index ~ /Rect ~ eq
- {
- dup ~ 4 ~ array ~ copy ~
- dup ~ dup ~
- 1 ~ get ~
- driver.outerbox ~ driver.rect.ht ~
- driver.linkmargin ~ 2 ~ mul ~ add ~ sub ~
- 3 ~ exch ~ put ~
- dup ~
- driver.outerbox ~ 2 ~ get ~
- driver.linkmargin ~ add ~
- 2 ~ exch ~ put ~
- dup ~ dup ~
- 3 ~ get ~
- driver.outerbox ~ driver.rect.ht ~
- driver.linkmargin ~ 2 ~ mul ~ add ~ add ~
- 1 ~ exch ~ put
- /driver.currentrect ~ exch ~ def ~
- driver.breaklink.write
- {
- driver.currentrect ~
- dup ~
- driver.outerbox ~ 0 ~ get ~
- driver.linkmargin ~ sub ~
- 0 ~ exch ~ put ~
- dup ~
- driver.outerbox ~ 2 ~ get ~
- driver.linkmargin ~ add ~
- 2 ~ exch ~ put ~
- dup ~ dup ~
- 1 ~ get ~
- driver.baselineskip ~ add ~
- 1 ~ exch ~ put ~
- dup ~ dup ~
- 3 ~ get ~
- driver.baselineskip ~ add ~
- 3 ~ exch ~ put ~
- /driver.currentrect ~ exch ~ def ~
- driver.breaklink.write
- }
- 1 ~ index ~ 3 ~ get ~
- driver.linkmargin ~ 2 ~ mul ~ add ~
- driver.outerbox ~ driver.rect.ht ~ add ~
- 2 ~ index ~ 1 ~ get ~ sub ~
- driver.baselineskip ~ div ~ round ~ cvi ~ 1 ~ sub ~
- exch ~
- repeat ~
- driver.currentrect ~
- dup ~
- driver.outerbox ~ 0 ~ get ~
- driver.linkmargin ~ sub ~
- 0 ~ exch ~ put ~
- dup ~ dup ~
- 1 ~ get ~
- driver.baselineskip ~ add ~
- 1 ~ exch ~ put ~
- dup ~ dup ~
- 3 ~ get ~
- driver.baselineskip ~ add ~
- 3 ~ exch ~ put ~
- dup ~ 2 ~ index ~ 2 ~ get ~ 2 ~ exch ~ put
- /driver.currentrect ~ exch ~ def ~
- driver.breaklink.write ~
- SDict /driver.pdfmark.good ~ false ~ put ~
- exit
- }
- { driver.count ~ 2 ~ sub /driver.count ~ exch ~ def }
- ifelse
- }
- loop
- }
- if
- /ANN
- }
- def
- /driver.breaklink.write
- {
- counttomark ~ 1 ~ sub ~
- index /_objdef ~ eq
- {
- counttomark ~ -2 ~ roll ~
- dup ~ wcheck ~
- {
- readonly ~
- counttomark ~ 2 ~ roll
- }
- { pop ~ pop }
- ifelse
- }
- if ~
- counttomark ~ 1 ~ add ~ copy ~
- pop ~ driver.currentrect
- /ANN ~ pdfmark
- }
- def
- }
-\__driver_postscript_header:n
- {
- /driver.pdfmark
- {
- SDict /driver.pdfmark.good ~ true ~ put ~
- dup /ANN ~ eq
- {
- driver.pdfmark.store ~
- driver.pdfmark.dict ~
- begin ~
- Subtype /Link ~ eq ~
- currentdict /Rect ~ known ~ and ~
- SDict /driver.outerbox ~ known ~ and ~
- SDict /driver.baselineskip ~ known ~ and ~
- {
- Rect ~ 3 ~ get ~
- driver.linkmargin ~ 2 ~ mul ~ add ~
- driver.outerbox ~ driver.rect.ht ~ add ~
- Rect ~ 1 ~ get ~ sub ~
- driver.baselineskip ~ div ~ round ~ cvi ~ 0 ~ gt
- { driver.breaklink }
- if
- }
- if ~
- end ~
- SDict /driver.outerbox ~ undef ~
- SDict /driver.baselineskip ~ undef ~
- currentdict /driver.pdfmark.dict ~ undef ~
- }
- if ~
- driver.pdfmark.good
- { pdfmark }
- { cleartomark }
- ifelse
- }
- def
- /driver.pdfmark.store
- {
- /driver.pdfmark.dict ~ 65534 ~ dict ~ def ~
- counttomark ~ 1 ~ add ~ copy ~
- pop
- {
- dup ~ mark ~ eq
- {
- pop ~
- exit
- }
- {
- driver.pdfmark.dict ~
- begin ~ def ~ end
- }
- ifelse
- }
- loop
- }
- def
- }
-\box_new:N \l__driver_pdf_content_box
-\box_new:N \l__driver_pdf_model_box
-\int_new:N \g__driver_pdf_annotation_int
-\cs_new_protected:Npn \driver_pdf_annotation:nnnn #1#2#3#4
- {
- \__driver_pdf_annotation:nnnn {#1} {#2} {#3} {#4}
- \int_gincr:N \g__driver_pdf_object_int
- \int_gset_eq:NN \g__driver_pdf_annotation_int \g__driver_pdf_object_int
- \__driver_pdfmark:x
- {
-
- /_objdef { driver.obj \int_use:N \g__driver_pdf_object_int }
- driver.rect ~
- #4 ~
- /ANN
- }
- }
-\cs_new_protected:Npn \__driver_pdf_annotation:nnnn #1#2#3#4
- {
- \box_move_down:nn {#3}
- { \hbox:n { \__driver_postscript:n { driver.save.ll } } }
- \hbox:n {#4}
- \box_move_up:nn {#2}
- {
- \hbox:n
- {
- \tex_kern:D \dim_eval:n {#1} \scan_stop:
- \__driver_postscript:n { driver.save.ur }
- }
- }
- \int_gincr:N \g__driver_pdf_object_int
- \int_gset_eq:NN \g__driver_pdf_annotation_int \g__driver_pdf_object_int
- \__driver_pdfmark:x
- {
- /_objdef { driver.obj \int_use:N \g__driver_pdf_object_int }
- driver.rect
- /ANN
- }
- }
-\cs_new:Npn \driver_pdf_annotation_last:
- { { driver.obj \int_use:N \g__driver_pdf_annotation_int } }
-\int_new:N \g__driver_pdf_link_int
-\tl_new:N \g__driver_pdf_link_dict_tl
-\int_new:N \g__driver_pdf_link_sf_int
-\bool_new:N \g__driver_pdf_link_math_bool
-\bool_new:N \g__driver_pdf_link_bool
-\tl_new:N \l__driver_breaklink_pdfmark_tl
-\tl_set:Nn \l__driver_breaklink_pdfmark_tl { pdfmark }
-\cs_new_protected:Npn \__driver_breaklink_postscript:n #1 { }
-\cs_new_eq:NN \__driver_breaklink_usebox:N \box_use:N
-\cs_new_protected:Npn \driver_pdf_link_begin_goto:nnw #1#2
- { \__driver_pdf_link_begin:nw { #1 /Subtype /Link /A << /S /GoTo /D ( #2 ) >> } }
-\cs_new_protected:Npn \driver_pdf_link_begin_user:nnw #1#2
- { \__driver_pdf_link_begin:nw {#1#2} }
-\cs_new_protected:Npn \__driver_pdf_link_begin:nw #1
- {
- \bool_if:NF \g__driver_pdf_link_bool
- { \__driver_pdf_link_begin_aux:nw {#1} }
- }
-\cs_new_protected:Npn \__driver_pdf_link_begin_aux:nw #1
- {
- \bool_gset_true:N \g__driver_pdf_link_bool
- \__driver_postscript:n
- { /driver.link.dict ( #1 ) def }
- \tl_gset:Nn \g__driver_pdf_link_dict_tl {#1}
- \__driver_pdf_link_sf_save:
- \mode_if_math:TF
- { \bool_gset_true:N \g__driver_pdf_link_math_bool }
- { \bool_gset_false:N \g__driver_pdf_link_math_bool }
- \hbox_set:Nw \l__driver_pdf_content_box
- \__driver_pdf_link_sf_restore:
- \bool_if:NT \g__driver_pdf_link_math_bool
- { \c_math_toggle_token }
- }
-\cs_new_protected:Npn \driver_pdf_link_end:
- {
- \bool_if:NT \g__driver_pdf_link_bool
- { \__driver_pdf_link_end: }
- }
-\cs_new_protected:Npn \__driver_pdf_link_end:
- {
- \bool_if:NT \g__driver_pdf_link_math_bool
- { \c_math_toggle_token }
- \__driver_pdf_link_sf_save:
- \hbox_set_end:
- \__driver_pdf_link_minima:
- \hbox_set:Nn \l__driver_pdf_model_box { Gg }
- \exp_args:Nx \__driver_driver_link_outerbox:n
- {
- \int_if_odd:nTF { \value { page } }
- { \oddsidemargin }
- { \evensidemargin }
- }
- \box_move_down:nn { \box_dp:N \l__driver_pdf_content_box }
- { \hbox:n { \__driver_postscript:n { driver.save.linkll } } }
- \__driver_breaklink_postscript:n { driver.bordertracking.begin }
- \__driver_breaklink_usebox:N \l__driver_pdf_content_box
- \__driver_breaklink_postscript:n { driver.bordertracking.end }
- \box_move_up:nn { \box_ht:N \l__driver_pdf_content_box }
- {
- \hbox:n
- { \__driver_postscript:n { driver.save.linkur } }
- }
- \int_gincr:N \g__driver_pdf_object_int
- \int_gset_eq:NN \g__driver_pdf_link_int \g__driver_pdf_object_int
- \__driver_postscript:x
- {
- mark
- /_objdef { driver.obj \int_use:N \g__driver_pdf_link_int }
- \g__driver_pdf_link_dict_tl \c_space_tl
- driver.rect
- /ANN ~ \l__driver_breaklink_pdfmark_tl
- }
- \__driver_pdf_link_sf_restore:
- \bool_gset_false:N \g__driver_pdf_link_bool
- }
-\cs_new_protected:Npn \__driver_pdf_link_minima:
- {
- \hbox_set:Nn \l__driver_pdf_model_box { Gg }
- \__driver_postscript:x
- {
- /driver.linkdp.pad ~
- \dim_to_decimal:n
- {
- \dim_max:nn
- {
- \box_dp:N \l__driver_pdf_model_box
- - \box_dp:N \l__driver_pdf_content_box
- }
- { 0pt }
- } ~
- driver.pt.dvi ~ def
- /driver.linkht.pad ~
- \dim_to_decimal:n
- {
- \dim_max:nn
- {
- \box_ht:N \l__driver_pdf_model_box
- - \box_ht:N \l__driver_pdf_content_box
- }
- { 0pt }
- } ~
- driver.pt.dvi ~ def
- }
- }
-\cs_new_protected:Npn \__driver_driver_link_outerbox:n #1
- {
- \__driver_postscript:x
- {
- /driver.outerbox
- [
- \dim_to_decimal:n {#1} ~
- \dim_to_decimal:n { -\box_dp:N \l__driver_pdf_model_box } ~
- \dim_to_decimal:n { #1 + \textwidth } ~
- \dim_to_decimal:n { \box_ht:N \l__driver_pdf_model_box }
- ]
- [ exch { driver.pt.dvi } forall ] def
- /driver.baselineskip ~
- \dim_to_decimal:n { \tex_baselineskip:D } ~ dup ~ 0 ~ gt
- { driver.pt.dvi ~ def }
- { pop ~ pop }
- ifelse
- }
- }
-\cs_new_protected:Npn \__driver_pdf_link_sf_save:
- {
- \int_gset:Nn \g__driver_pdf_link_sf_int
- {
- \mode_if_horizontal:TF
- { \tex_spacefactor:D }
- { 0 }
- }
- }
-\cs_new_protected:Npn \__driver_pdf_link_sf_restore:
- {
- \mode_if_horizontal:T
- {
- \int_compare:nNnT \g__driver_pdf_link_sf_int > { 0 }
- { \int_set_eq:NN \tex_spacefactor:D \g__driver_pdf_link_sf_int }
- }
- }
-\use_none:n
- {
- \cs_if_exist:NT \@makecol@hook
- {
- \tl_put_right:Nn \@makecol@hook
- {
- \box_if_empty:NF \@cclv
- {
- \vbox_set:Nn \@cclv
- {
- \__driver_postscript:n
- {
- driver.globaldict /driver.brokenlink.rect ~ known
- { driver.bordertracking.continue }
- if
- }
- \vbox_unpack_drop:N \@cclv
- \__driver_postscript:n
- { driver.bordertracking.endpage }
- }
- }
- }
- \tl_set:Nn \l__driver_breaklink_pdfmark_tl { driver.pdfmark }
- \cs_set_eq:NN \__driver_breaklink_postscript:n \__driver_postscript:n
- \cs_set_eq:NN \__driver_breaklink_usebox:N \hbox_unpack:N
- }
- }
-\cs_new:Npn \driver_pdf_link_last:
- { { driver.obj \int_use:N \g__driver_pdf_link_int } }
-\cs_new_protected:Npn \driver_pdf_link_margin:n #1
- {
- \__driver_postscript:x
- {
- /driver.linkmargin { \dim_to_decimal:n {#1} ~ driver.pt.dvi } def
- }
- }
-\cs_new_protected:Npn \driver_pdf_destination:nn #1#2
- {
- \__driver_postscript:n { driver.dest.anchor }
- \__driver_pdfmark:x
- {
- /View
- [
- \str_case:nnF {#2}
- {
- { xyz } { /XYZ ~ driver.dest.point ~ null }
- { fit } { /Fit }
- { fitb } { /FitB }
- { fitbh } { /FitBH ~ driver.dest.y }
- { fitbv } { /FitBV ~ driver.dest.x }
- { fith } { /FitH ~ driver.dest.y }
- { fitv } { /FitV ~ driver.dest.x }
- }
- {
- /XYZ ~ driver.dest.point ~ \fp_eval:n { (#2) / 100 }
- }
- ]
- /Dest ( \exp_not:n {#1} ) cvn
- /DEST
- }
- }
-\cs_new_protected:Npn \driver_pdf_destination_rectangle:nn #1#2
- {
- \group_begin:
- \hbox_set:Nn \l__driver_internal_box {#2}
- \box_move_down:nn
- { \box_dp:N \l__driver_internal_box }
- { \hbox:n { \__driver_postscript:n { driver.save.ll } } }
- \box_use:N \l__driver_internal_box
- \box_move_up:nn
- { \box_ht:N \l__driver_internal_box }
- { \hbox:n { \__driver_postscript:n { driver.save.ur } } }
- \__driver_pdfmark:n
- {
- /View
- [
- /FitR ~
- driver.llx ~ driver.lly ~ driver.dest2device ~
- driver.urx ~ driver.ury ~ driver.dest2device
- ]
- /Dest ( #1 ) cvn
- /DEST
- }
- \group_end:
- }
-\cs_new_protected:Npn \driver_pdf_compresslevel:n #1 { }
-\cs_new_protected:Npn \driver_pdf_compress_objects:n #1 { }
-\cs_new_protected:Npn \driver_pdf_version_major_gset:n #1 { }
-\cs_new_protected:Npn \driver_pdf_version_minor_gset:n #1 { }
-\cs_new:Npn \driver_pdf_version_major: { -1 }
-\cs_new:Npn \driver_pdf_version_minor: { -1 }
-%%
-%%
-%% End of file `l3dvips.def'.
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3dvisvgm.def b/Master/texmf-dist/tex/latex/l3kernel/l3dvisvgm.def
deleted file mode 100644
index fb15c593f01..00000000000
--- a/Master/texmf-dist/tex/latex/l3kernel/l3dvisvgm.def
+++ /dev/null
@@ -1,487 +0,0 @@
-%%
-%% This is file `l3dvisvgm.def',
-%% generated with the docstrip utility.
-%%
-%% The original source files were:
-%%
-%% l3drivers.dtx (with options: `package,dvisvgm')
-%% l3drivers-basics.dtx (with options: `package,dvisvgm')
-%% l3drivers-color.dtx (with options: `package,dvisvgm')
-%% l3drivers-box.dtx (with options: `package,dvisvgm')
-%% l3drivers-draw.dtx (with options: `package,dvisvgm')
-%% l3drivers-graphics.dtx (with options: `package,dvisvgm')
-%% l3drivers-pdf.dtx (with options: `package,dvisvgm')
-%%
-%% Copyright (C) 1990-2019 The LaTeX3 Project
-%%
-%% It may be distributed and/or modified under the conditions of
-%% the LaTeX Project Public License (LPPL), either version 1.3c of
-%% this license or (at your option) any later version. The latest
-%% version of this license is in the file:
-%%
-%% https://www.latex-project.org/lppl.txt
-%%
-%% This file is part of the "l3kernel bundle" (The Work in LPPL)
-%% and all files in that bundle must be distributed together.
-%%
-%% File: l3drivers.dtx
-%% File: l3drivers-basics.dtx
-\ProvidesExplFile
- {l3dvisvgm.def}{2019-04-06}{}
- {L3 Experimental driver: dvisvgm}
-\cs_new_eq:NN \__driver_literal:e \tex_special:D
-\cs_new_protected:Npn \__driver_literal:n #1
- { \__driver_literal:e { \exp_not:n {#1} } }
-\cs_generate_variant:Nn \__driver_literal:n { x }
-\box_new:N \l__driver_internal_box
-\cs_new_protected:Npn \__driver_literal_svg:n #1
- { \__driver_literal:n { dvisvgm:raw~ #1 { ?nl } } }
-\cs_generate_variant:Nn \__driver_literal_svg:n { x }
-\cs_new_protected:Npn \__driver_scope_begin:
- { \__driver_literal_svg:n { <g> } }
-\cs_new_protected:Npn \__driver_scope_end:
- { \__driver_literal_svg:n { </g> } }
-\cs_new_protected:Npn \__driver_scope_begin:n #1
- { \__driver_literal_svg:n { <g~ #1 > } }
-\cs_generate_variant:Nn \__driver_scope_begin:n { x }
-%% File: l3drivers-color.dtx
-\cs_new_protected:Npn \driver_color_pickup:N #1 { }
-\AtBeginDocument
- {
- \@ifpackageloaded { color }
- {
- \cs_set_protected:Npn \driver_color_pickup:N #1
- {
- \exp_args:NV \tl_if_head_is_space:nTF \current@color
- {
- \tl_set:Nx #1
- {
- spot ~
- \exp_after:wN \use:n \current@color \c_space_tl 1
- }
- }
- {
- \exp_last_unbraced:Nx \__driver_color_pickup:w
- { \current@color } \q_stop #1
- }
- }
- \cs_new_protected:Npn \__driver_color_pickup:w #1 ~ #2 \q_stop #3
- { \tl_set:Nn #3 { #1 ~ #2 } }
- }
- { }
- }
-\cs_new_protected:Npn \driver_color_cmyk:nnnn #1#2#3#4
- {
- \__driver_color_select:x
- {
- cmyk~
- \fp_eval:n {#1} ~ \fp_eval:n {#2} ~
- \fp_eval:n {#3} ~ \fp_eval:n {#4}
- }
- }
-\cs_new_protected:Npn \driver_color_gray:n #1
- { \__driver_color_select:x { gray~ \fp_eval:n {#1} } }
-\cs_new_protected:Npn \driver_color_rgb:nnn #1#2#3
- {
- \__driver_color_select:x
- { rgb~ \fp_eval:n {#1} ~ \fp_eval:n {#2} ~ \fp_eval:n {#3} }
- }
-\cs_new_protected:Npn \driver_color_spot:nn #1#2
- { \__driver_color_select:n { #1 } }
-\cs_new_protected:Npn \__driver_color_select:n #1
- {
- \__driver_literal:n { color~push~ #1 }
- \group_insert_after:N \__driver_color_reset:
- }
-\cs_generate_variant:Nn \__driver_color_select:n { x }
-\cs_new_protected:Npn \__driver_color_reset:
- { \__driver_literal:n { color~pop } }
-%% File: l3drivers-box.dtx
-\cs_new_protected:Npn \driver_box_use_clip:N #1
- {
- \int_gincr:N \g__driver_clip_path_int
- \__driver_literal_svg:x
- { < clipPath~id = " l3cp \int_use:N \g__driver_clip_path_int " > }
- \__driver_literal_svg:x
- {
- <
- path ~ d =
- "
- M ~ 0 ~
- \dim_to_decimal:n { -\box_dp:N #1 } ~
- L ~ \dim_to_decimal:n { \box_wd:N #1 } ~
- \dim_to_decimal:n { -\box_dp:N #1 } ~
- L ~ \dim_to_decimal:n { \box_wd:N #1 } ~
- \dim_to_decimal:n { \box_ht:N #1 + \box_dp:N #1 } ~
- L ~ 0 ~
- \dim_to_decimal:n { \box_ht:N #1 + \box_dp:N #1 } ~
- Z
- "
- />
- }
- \__driver_literal_svg:n
- { < /clipPath > }
- \__driver_scope_begin:n
- {
- transform =
- "
- translate ( { ?x } , { ?y } ) ~
- scale ( 1 , -1 )
- "
- }
- \__driver_scope_begin:x
- {
- clip-path =
- "url ( \c_hash_str l3cp \int_use:N \g__driver_clip_path_int ) "
- }
- \__driver_scope_begin:n
- {
- transform =
- "
- scale ( -1 , 1 ) ~
- translate ( { ?x } , { ?y } ) ~
- scale ( -1 , -1 )
- "
- }
- \box_use:N #1
- \__driver_scope_end:
- \__driver_scope_end:
- \__driver_scope_end:
- }
-\int_new:N \g__driver_clip_path_int
-\cs_new_protected:Npn \driver_box_use_rotate:Nn #1#2
- {
- \__driver_scope_begin:x
- {
- transform =
- "
- rotate
- ( \fp_eval:n { round ( -(#2) , 5 ) } , ~ { ?x } , ~ { ?y } )
- "
- }
- \box_use:N #1
- \__driver_scope_end:
- }
-\cs_new_protected:Npn \driver_box_use_scale:Nnn #1#2#3
- {
- \__driver_scope_begin:x
- {
- transform =
- "
- translate ( { ?x } , { ?y } ) ~
- scale
- (
- \fp_eval:n { round ( -#2 , 5 ) } ,
- \fp_eval:n { round ( -#3 , 5 ) }
- ) ~
- translate ( { ?x } , { ?y } ) ~
- scale ( -1 )
- "
- }
- \hbox_overlap_right:n { \box_use:N #1 }
- \__driver_scope_end:
- }
-%% File: l3drivers-draw.dtx
-\cs_new_eq:NN \__driver_draw_literal:n \__driver_literal_svg:n
-\cs_generate_variant:Nn \__driver_draw_literal:n { x }
-\cs_new_protected:Npn \driver_draw_begin:
- {
- \driver_draw_scope_begin:
- \__driver_draw_scope:n { transform="translate({?x},{?y})~scale(1,-1)" }
- }
-\cs_new_protected:Npn \driver_draw_end:
- { \driver_draw_scope_end: }
-\cs_new_protected:Npn \driver_draw_scope_begin:
- {
- \int_set_eq:NN
- \l__driver_draw_scope_int
- \g__driver_draw_scope_int
- \group_begin:
- \int_gzero:N \g__driver_draw_scope_int
- }
-\cs_new_protected:Npn \driver_draw_scope_end:
- {
- \prg_replicate:nn
- { \g__driver_draw_scope_int }
- { \__driver_draw_literal:n { </g> } }
- \group_end:
- \int_gset_eq:NN
- \g__driver_draw_scope_int
- \l__driver_draw_scope_int
- }
-\cs_new_protected:Npn \__driver_draw_scope:n #1
- {
- \__driver_draw_literal:n { <g~ #1 > }
- \int_gincr:N \g__driver_draw_scope_int
- }
-\cs_generate_variant:Nn \__driver_draw_scope:n { x }
-\int_new:N \g__driver_draw_scope_int
-\int_new:N \l__driver_draw_scope_int
-\cs_new_protected:Npn \driver_draw_moveto:nn #1#2
- {
- \__driver_draw_add_to_path:n
- { M ~ \dim_to_decimal:n {#1} ~ \dim_to_decimal:n {#2} }
- }
-\cs_new_protected:Npn \driver_draw_lineto:nn #1#2
- {
- \__driver_draw_add_to_path:n
- { L ~ \dim_to_decimal:n {#1} ~ \dim_to_decimal:n {#2} }
- }
-\cs_new_protected:Npn \driver_draw_rectangle:nnnn #1#2#3#4
- {
- \__driver_draw_add_to_path:n
- {
- M ~ \dim_to_decimal:n {#1} ~ \dim_to_decimal:n {#2}
- h ~ \dim_to_decimal:n {#3} ~
- v ~ \dim_to_decimal:n {#4} ~
- h ~ \dim_to_decimal:n { -#3 } ~
- Z
- }
- }
-\cs_new_protected:Npn \driver_draw_curveto:nnnnnn #1#2#3#4#5#6
- {
- \__driver_draw_add_to_path:n
- {
- C ~
- \dim_to_decimal:n {#1} ~ \dim_to_decimal:n {#2} ~
- \dim_to_decimal:n {#3} ~ \dim_to_decimal:n {#4} ~
- \dim_to_decimal:n {#5} ~ \dim_to_decimal:n {#6}
- }
- }
-\cs_new_protected:Npn \__driver_draw_add_to_path:n #1
- {
- \tl_gset:Nx \g__driver_draw_path_tl
- {
- \g__driver_draw_path_tl
- \tl_if_empty:NF \g__driver_draw_path_tl { \c_space_tl }
- #1
- }
- }
-\tl_new:N \g__driver_draw_path_tl
-\cs_new_protected:Npn \driver_draw_evenodd_rule:
- { \__driver_draw_scope:n { fill-rule="evenodd" } }
-\cs_new_protected:Npn \driver_draw_nonzero_rule:
- { \__driver_draw_scope:n { fill-rule="nonzero" } }
-\cs_new_protected:Npn \driver_draw_closepath:
- { \__driver_draw_add_to_path:n { Z } }
-\cs_new_protected:Npn \__driver_draw_path:n #1
- {
- \bool_if:NTF \g__driver_draw_clip_bool
- {
- \int_gincr:N \g__driver_clip_path_int
- \__driver_draw_literal:x
- {
- < clipPath~id = " l3cp \int_use:N \g__driver_clip_path_int " >
- { ?nl }
- <path~d=" \g__driver_draw_path_tl "/> { ?nl }
- < /clipPath > { ? nl }
- <
- use~xlink:href =
- "\c_hash_str l3path \int_use:N \g__driver_path_int " ~
- #1
- />
- }
- \__driver_draw_scope:x
- {
- clip-path =
- "url( \c_hash_str l3cp \int_use:N \g__driver_clip_path_int)"
- }
- }
- {
- \__driver_draw_literal:x
- { <path ~ d=" \g__driver_draw_path_tl " ~ #1 /> }
- }
- \tl_gclear:N \g__driver_draw_path_tl
- \bool_gset_false:N \g__driver_draw_clip_bool
- }
-\int_new:N \g__driver_path_int
-\cs_new_protected:Npn \driver_draw_stroke:
- { \__driver_draw_path:n { style="fill:none" } }
-\cs_new_protected:Npn \driver_draw_closestroke:
- {
- \driver_draw_closepath:
- \driver_draw_stroke:
- }
-\cs_new_protected:Npn \driver_draw_fill:
- { \__driver_draw_path:n { style="stroke:none" } }
-\cs_new_protected:Npn \driver_draw_fillstroke:
- { \__driver_draw_path:n { } }
-\cs_new_protected:Npn \driver_draw_clip:
- { \bool_gset_true:N \g__driver_draw_clip_bool }
-\bool_new:N \g__driver_draw_clip_bool
-\cs_new_protected:Npn \driver_draw_discardpath:
- {
- \bool_if:NT \g__driver_draw_clip_bool
- {
- \int_gincr:N \g__driver_clip_path_int
- \__driver_draw_literal:x
- {
- < clipPath~id = " l3cp \int_use:N \g__driver_clip_path_int " >
- { ?nl }
- <path~d=" \g__driver_draw_path_tl "/> { ?nl }
- < /clipPath >
- }
- \__driver_draw_scope:x
- {
- clip-path =
- "url( \c_hash_str l3cp \int_use:N \g__driver_clip_path_int)"
- }
- }
- \tl_gclear:N \g__driver_draw_path_tl
- \bool_gset_false:N \g__driver_draw_clip_bool
- }
-\cs_new_protected:Npn \driver_draw_dash_pattern:nn #1#2
- {
- \use:x
- {
- \__driver_draw_dash_aux:nn
- { \clist_map_function:nn {#1} \__driver_draw_dash:n }
- { \dim_to_decimal:n {#2} }
- }
- }
-\cs_new:Npn \__driver_draw_dash:n #1
- { , \dim_to_decimal_in_bp:n {#1} }
-\cs_new_protected:Npn \__driver_draw_dash_aux:nn #1#2
- {
- \__driver_draw_scope:x
- {
- stroke-dasharray =
- "
- \tl_if_empty:oTF { \use_none:n #1 }
- { none }
- { \use_none:n #1 }
- " ~
- stroke-offset=" #2 "
- }
- }
-\cs_new_protected:Npn \driver_draw_linewidth:n #1
- { \__driver_draw_scope:x { stroke-width=" \dim_to_decimal:n {#1} " } }
-\cs_new_protected:Npn \driver_draw_miterlimit:n #1
- { \__driver_draw_scope:x { stroke-miterlimit=" \fp_eval:n {#1} " } }
-\cs_new_protected:Npn \driver_draw_cap_butt:
- { \__driver_draw_scope:n { stroke-linecap="butt" } }
-\cs_new_protected:Npn \driver_draw_cap_round:
- { \__driver_draw_scope:n { stroke-linecap="round" } }
-\cs_new_protected:Npn \driver_draw_cap_rectangle:
- { \__driver_draw_scope:n { stroke-linecap="square" } }
-\cs_new_protected:Npn \driver_draw_join_miter:
- { \__driver_draw_scope:n { stroke-linejoin="miter" } }
-\cs_new_protected:Npn \driver_draw_join_round:
- { \__driver_draw_scope:n { stroke-linejoin="round" } }
-\cs_new_protected:Npn \driver_draw_join_bevel:
- { \__driver_draw_scope:n { stroke-linejoin="bevel" } }
-\cs_new_protected:Npn \driver_draw_color_fill_cmyk:nnnn #1#2#3#4
- {
- \use:x
- {
- \__driver_draw_color_fill:nnn
- { \fp_eval:n { -100 * ( (#1) * ( 1 - (#4) ) - 1 ) } }
- { \fp_eval:n { -100 * ( (#2) * ( 1 - (#4) ) + #4 - 1 ) } }
- { \fp_eval:n { -100 * ( (#3) * ( 1 - (#4) ) + #4 - 1 ) } }
- }
- }
-\cs_new_eq:NN \driver_draw_color_stroke_cmyk:nnnn \driver_color_cmyk:nnnn
-\cs_new_protected:Npn \driver_draw_color_fill_gray:n #1
- {
- \use:x
- {
- \__driver_draw_color_gray_aux:n
- { \fp_eval:n { 100 * (#1) } }
- }
- }
-\cs_new_protected:Npn \__driver_draw_color_gray_aux:n #1
- { \__driver_draw_color_fill:nnn {#1} {#1} {#1} }
-\cs_new_eq:NN \driver_draw_color_stroke_gray:n \driver_color_gray:n
-\cs_new_protected:Npn \driver_draw_color_fill_rgb:nnn #1#2#3
- {
- \use:x
- {
- \__driver_draw_color_fill:nnn
- { \fp_eval:n { 100 * (#1) } }
- { \fp_eval:n { 100 * (#2) } }
- { \fp_eval:n { 100 * (#3) } }
- }
- }
-\cs_new_protected:Npn \__driver_draw_color_fill:nnn #1#2#3
- {
- \__driver_draw_scope:x
- {
- fill =
- "
- rgb
- (
- #1 \c_percent_str ,
- #2 \c_percent_str ,
- #3 \c_percent_str
- )
- "
- }
- }
-\cs_new_eq:NN \driver_draw_color_stroke_rgb:nnn \driver_color_rgb:nnn
-\cs_new_protected:Npn \driver_draw_cm:nnnn #1#2#3#4
- {
- \__driver_draw_scope:n
- {
- transform =
- "
- matrix
- (
- \fp_eval:n {#1} , \fp_eval:n {#2} ,
- \fp_eval:n {#3} , \fp_eval:n {#4} ,
- 0pt , 0pt
- )
- "
- }
- }
-\cs_new_protected:Npn \driver_draw_box_use:Nnnnn #1#2#3#4#5#6#7
- {
- \__driver_scope_begin:
- \driver_draw_cm:nnnn {#2} {#3} {#4} {#5}
- \__driver_literal_svg:n
- {
- < g~
- stroke="none"~
- transform="scale(-1,1)~translate({?x},{?y})~scale(-1,-1)"
- >
- }
- \box_set_wd:Nn #1 { 0pt }
- \box_set_ht:Nn #1 { 0pt }
- \box_set_dp:Nn #1 { 0pt }
- \box_use:N #1
- \__driver_literal_svg:n { </g> }
- \__driver_scope_end:
- }
-%% File: l3drivers-graphics.dtx
-\AtBeginDocument
- {
- \cs_new_eq:NN \driver_graphics_getbb_png:n \graphics_extract_bb:n
- \cs_new_eq:NN \driver_graphics_getbb_jpg:n \graphics_extract_bb:n
- }
-\cs_new_protected:Npn \driver_graphics_include_png:n #1
- {
- \__driver_literal:x
- {
- dvisvgm:img~
- \dim_to_decimal:n { \l_graphics_ury_dim } ~
- \dim_to_decimal:n { \l_graphics_ury_dim } ~
- \__driver_graphics_include_bitmap_quote:w #1 " #1 " \q_stop
- }
- }
-\cs_new_eq:NN \driver_graphics_include_jpg:n \driver_graphics_include_png:n
-\cs_new:Npn \__driver_graphics_include_bitmap_quote:w #1 " #2 " #3 \q_stop
- { " #2 " }
-%% File: l3drivers-pdf.dtx
-\cs_new_protected:Npn \driver_pdf_catalog_gput:nn #1#2 { }
-\cs_new_protected:Npn \driver_pdf_info_gput:nn #1#2 { }
-\cs_new_protected:Npn \driver_pdf_object_new:nn #1#2 { }
-\cs_new:Npn \driver_pdf_object_ref:n #1 { }
-\cs_new_protected:Npn \driver_pdf_object_write:nn #1#2 { }
-\cs_new_protected:Npn \driver_pdf_compresslevel:n #1 { }
-\cs_new_protected:Npn \driver_pdf_compress_objects:n #1 { }
-\cs_new_protected:Npn \driver_pdf_version_major_gset:n #1 { }
-\cs_new_protected:Npn \driver_pdf_version_minor_gset:n #1 { }
-\cs_new:Npn \driver_pdf_version_major: { -1 }
-\cs_new:Npn \driver_pdf_version_minor: { -1 }
-%%
-%%
-%% End of file `l3dvisvgm.def'.
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def b/Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def
deleted file mode 100644
index 3afb54a6b05..00000000000
--- a/Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def
+++ /dev/null
@@ -1,690 +0,0 @@
-%%
-%% This is file `l3pdfmode.def',
-%% generated with the docstrip utility.
-%%
-%% The original source files were:
-%%
-%% l3drivers.dtx (with options: `package,pdfmode')
-%% l3drivers-basics.dtx (with options: `package,pdfmode')
-%% l3drivers-color.dtx (with options: `package,pdfmode')
-%% l3drivers-box.dtx (with options: `package,pdfmode')
-%% l3drivers-draw.dtx (with options: `package,pdfmode')
-%% l3drivers-graphics.dtx (with options: `package,pdfmode')
-%% l3drivers-pdf.dtx (with options: `package,pdfmode')
-%%
-%% Copyright (C) 1990-2019 The LaTeX3 Project
-%%
-%% It may be distributed and/or modified under the conditions of
-%% the LaTeX Project Public License (LPPL), either version 1.3c of
-%% this license or (at your option) any later version. The latest
-%% version of this license is in the file:
-%%
-%% https://www.latex-project.org/lppl.txt
-%%
-%% This file is part of the "l3kernel bundle" (The Work in LPPL)
-%% and all files in that bundle must be distributed together.
-%%
-%% File: l3drivers.dtx
-%% File: l3drivers-basics.dtx
-\ProvidesExplFile
- {l3pdfmode.def}{2019-04-06}{}
- {L3 Experimental driver: PDF mode}
-\cs_new_eq:NN \__driver_literal:e \tex_special:D
-\cs_new_protected:Npn \__driver_literal:n #1
- { \__driver_literal:e { \exp_not:n {#1} } }
-\cs_generate_variant:Nn \__driver_literal:n { x }
-\box_new:N \l__driver_internal_box
-\cs_new_protected:Npx \__driver_literal_pdf:n #1
- {
- \cs_if_exist:NTF \tex_pdfextension:D
- { \tex_pdfextension:D literal }
- { \tex_pdfliteral:D }
- { \exp_not:N \exp_not:n {#1} }
- }
-\cs_generate_variant:Nn \__driver_literal_pdf:n { x }
-\cs_new_protected:Npx \__driver_scope_begin:
- {
- \cs_if_exist:NTF \tex_pdfextension:D
- { \tex_pdfextension:D save \scan_stop: }
- { \tex_pdfsave:D }
- }
-\cs_new_protected:Npx \__driver_scope_end:
- {
- \cs_if_exist:NTF \tex_pdfextension:D
- { \tex_pdfextension:D restore \scan_stop: }
- { \tex_pdfrestore:D }
- }
-\cs_new_protected:Npx \__driver_matrix:n #1
- {
- \cs_if_exist:NTF \tex_pdfextension:D
- { \tex_pdfextension:D setmatrix }
- { \tex_pdfsetmatrix:D }
- { \exp_not:N \exp_not:n {#1} }
- }
-\cs_generate_variant:Nn \__driver_matrix:n { x }
-%% File: l3drivers-color.dtx
-\cs_new_protected:Npn \driver_color_pickup:N #1 { }
-\AtBeginDocument
- {
- \@ifpackageloaded { color }
- {
- \cs_set_protected:Npn \driver_color_pickup:N #1
- {
- \exp_last_unbraced:Nx \__driver_color_pickup:w
- { \current@color } ~ 0 ~ 0 ~ 0 \q_stop #1
- }
- \cs_new_protected:Npn \__driver_color_pickup:w
- #1 ~ #2 ~ #3 ~ #4 ~ #5 ~ #6 \q_stop #7
- {
- \str_if_eq:nnTF {#2} { g }
- { \tl_set:Nn #7 { gray ~ #1 } }
- {
- \str_if_eq:nnTF {#4} { rg }
- { \tl_set:Nn #7 { rgb ~ #1 ~ #2 ~ #3 } }
- {
- \str_if_eq:nnTF {#5} { k }
- { \tl_set:Nn #7 { cmyk ~ #1 ~ #2 ~ #3 ~ #4 } }
- {
- \str_if_eq:nnTF {#2} { cs }
- {
- \tl_set:Nx #7 { spot ~ \use_none:n #1 ~ #5 }
- }
- {
- \tl_set:Nn #7 { gray ~ 0 }
- }
- }
- }
- }
- }
- }
- { }
- }
-\int_new:N \l__driver_color_stack_int
-\cs_new_protected:Npn \driver_color_cmyk:nnnn #1#2#3#4
- {
- \use:x
- {
- \__driver_color_cmyk:nnnn
- { \fp_eval:n {#1} }
- { \fp_eval:n {#2} }
- { \fp_eval:n {#3} }
- { \fp_eval:n {#4} }
- }
- }
-\cs_new_protected:Npn \__driver_color_cmyk:nnnn #1#2#3#4
- {
- \__driver_color_select:n
- { #1 ~ #2 ~ #3 ~ #4 ~ k ~ #1 ~ #2 ~ #3 ~ #4 ~ K }
- }
-\cs_new_protected:Npn \driver_color_gray:n #1
- { \exp_args:Nx \__driver_color_gray:n { \fp_eval:n {#1} } }
-\cs_new_protected:Npn \__driver_color_gray:n #1
- { \__driver_color_select:n { #1 ~ g ~ #1 ~ G } }
-\cs_new_protected:Npn \driver_color_rgb:nnn #1#2#3
- {
- \use:x
- {
- \__driver_color_rgb:nnn
- { \fp_eval:n {#1} }
- { \fp_eval:n {#2} }
- { \fp_eval:n {#3} }
- }
- }
-\cs_new_protected:Npn \__driver_color_rgb:nnn #1#2#3
- { \__driver_color_select:n { #1 ~ #2 ~ #3 ~ rg ~ #1 ~ #2 ~ #3 ~ RG } }
-\cs_new_protected:Npn \driver_color_spot:nn #1#2
- { \__driver_color_select:n { /#1 ~ cs ~ /#1 ~ CS ~ #2 ~ sc ~ #2 ~ SC } }
-\cs_new_protected:Npx \__driver_color_select:n #1
- {
- \cs_if_exist:NTF \tex_pdfextension:D
- { \tex_pdfextension:D colorstack }
- { \tex_pdfcolorstack:D }
- \exp_not:N \l__driver_color_stack_int push {#1}
- \group_insert_after:N \exp_not:N \__driver_color_reset:
- }
-\cs_generate_variant:Nn \__driver_color_select:n { x }
-\cs_new_protected:Npx \__driver_color_reset:
- {
- \cs_if_exist:NTF \tex_pdfextension:D
- { \tex_pdfextension:D colorstack }
- { \tex_pdfcolorstack:D }
- \exp_not:N \l__driver_color_stack_int pop \scan_stop:
- }
-%% File: l3drivers-box.dtx
-\cs_new_protected:Npn \driver_box_use_clip:N #1
- {
- \__driver_scope_begin:
- \__driver_literal_pdf:x
- {
- 0~
- \dim_to_decimal_in_bp:n { -\box_dp:N #1 } ~
- \dim_to_decimal_in_bp:n { \box_wd:N #1 } ~
- \dim_to_decimal_in_bp:n { \box_ht:N #1 + \box_dp:N #1 } ~
- re~W~n
- }
- \hbox_overlap_right:n { \box_use:N #1 }
- \__driver_scope_end:
- \skip_horizontal:n { \box_wd:N #1 }
- }
-\cs_new_protected:Npn \driver_box_use_rotate:Nn #1#2
- { \exp_args:NNf \__driver_box_use_rotate:Nn #1 { \fp_eval:n {#2} } }
-\cs_new_protected:Npn \__driver_box_use_rotate:Nn #1#2
- {
- \__driver_scope_begin:
- \box_set_wd:Nn #1 { 0pt }
- \fp_set:Nn \l__driver_cos_fp { round ( cosd ( #2 ) , 5 ) }
- \fp_compare:nNnT \l__driver_cos_fp = \c_zero_fp
- { \fp_zero:N \l__driver_cos_fp }
- \fp_set:Nn \l__driver_sin_fp { round ( sind ( #2 ) , 5 ) }
- \__driver_matrix:x
- {
- \fp_use:N \l__driver_cos_fp \c_space_tl
- \fp_compare:nNnTF \l__driver_sin_fp = \c_zero_fp
- { 0~0 }
- {
- \fp_use:N \l__driver_sin_fp
- \c_space_tl
- \fp_eval:n { -\l__driver_sin_fp }
- }
- \c_space_tl
- \fp_use:N \l__driver_cos_fp
- }
- \box_use:N #1
- \__driver_scope_end:
- }
-\fp_new:N \l__driver_cos_fp
-\fp_new:N \l__driver_sin_fp
-\cs_new_protected:Npn \driver_box_use_scale:Nnn #1#2#3
- {
- \__driver_scope_begin:
- \__driver_matrix:x
- {
- \fp_eval:n { round ( #2 , 5 ) } ~
- 0~0~
- \fp_eval:n { round ( #3 , 5 ) }
- }
- \hbox_overlap_right:n { \box_use:N #1 }
- \__driver_scope_end:
- }
-%% File: l3drivers-draw.dtx
-\cs_new_eq:NN \__driver_draw_literal:n \__driver_literal_pdf:n
-\cs_generate_variant:Nn \__driver_draw_literal:n { x }
-\cs_new_protected:Npn \driver_draw_begin:
- { \driver_draw_scope_begin: }
-\cs_new_protected:Npn \driver_draw_end:
- { \driver_draw_scope_end: }
-\cs_new_eq:NN \driver_draw_scope_begin: \__driver_scope_begin:
-\cs_new_eq:NN \driver_draw_scope_end: \__driver_scope_end:
-\cs_new_protected:Npn \driver_draw_moveto:nn #1#2
- {
- \__driver_draw_literal:x
- { \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~ m }
- }
-\cs_new_protected:Npn \driver_draw_lineto:nn #1#2
- {
- \__driver_draw_literal:x
- { \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~ l }
- }
-\cs_new_protected:Npn \driver_draw_curveto:nnnnnn #1#2#3#4#5#6
- {
- \__driver_draw_literal:x
- {
- \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~
- \dim_to_decimal_in_bp:n {#3} ~ \dim_to_decimal_in_bp:n {#4} ~
- \dim_to_decimal_in_bp:n {#5} ~ \dim_to_decimal_in_bp:n {#6} ~
- c
- }
- }
-\cs_new_protected:Npn \driver_draw_rectangle:nnnn #1#2#3#4
- {
- \__driver_draw_literal:x
- {
- \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~
- \dim_to_decimal_in_bp:n {#3} ~ \dim_to_decimal_in_bp:n {#4} ~
- re
- }
- }
-\cs_new_protected:Npn \driver_draw_evenodd_rule:
- { \bool_gset_true:N \g__driver_draw_eor_bool }
-\cs_new_protected:Npn \driver_draw_nonzero_rule:
- { \bool_gset_false:N \g__driver_draw_eor_bool }
-\bool_new:N \g__driver_draw_eor_bool
-\cs_new_protected:Npn \driver_draw_closepath:
- { \__driver_draw_literal:n { h } }
-\cs_new_protected:Npn \driver_draw_stroke:
- { \__driver_draw_literal:n { S } }
-\cs_new_protected:Npn \driver_draw_closestroke:
- { \__driver_draw_literal:n { s } }
-\cs_new_protected:Npn \driver_draw_fill:
- {
- \__driver_draw_literal:x
- { f \bool_if:NT \g__driver_draw_eor_bool * }
- }
-\cs_new_protected:Npn \driver_draw_fillstroke:
- {
- \__driver_draw_literal:x
- { B \bool_if:NT \g__driver_draw_eor_bool * }
- }
-\cs_new_protected:Npn \driver_draw_clip:
- {
- \__driver_draw_literal:x
- { W \bool_if:NT \g__driver_draw_eor_bool * }
- }
-\cs_new_protected:Npn \driver_draw_discardpath:
- { \__driver_draw_literal:n { n } }
-\cs_new_protected:Npn \driver_draw_dash_pattern:nn #1#2
- {
- \__driver_draw_literal:x
- {
- [
- \exp_args:Nf \use:n
- { \clist_map_function:nN {#1} \__driver_draw_dash:n }
- ] ~
- \dim_to_decimal_in_bp:n {#2} ~ d
- }
- }
-\cs_new:Npn \__driver_draw_dash:n #1
- { ~ \dim_to_decimal_in_bp:n {#1} }
-\cs_new_protected:Npn \driver_draw_linewidth:n #1
- {
- \__driver_draw_literal:x
- { \dim_to_decimal_in_bp:n {#1} ~ w }
- }
-\cs_new_protected:Npn \driver_draw_miterlimit:n #1
- { \__driver_draw_literal:x { \fp_eval:n {#1} ~ M } }
-\cs_new_protected:Npn \driver_draw_cap_butt:
- { \__driver_draw_literal:n { 0 ~ J } }
-\cs_new_protected:Npn \driver_draw_cap_round:
- { \__driver_draw_literal:n { 1 ~ J } }
-\cs_new_protected:Npn \driver_draw_cap_rectangle:
- { \__driver_draw_literal:n { 2 ~ J } }
-\cs_new_protected:Npn \driver_draw_join_miter:
- { \__driver_draw_literal:n { 0 ~ j } }
-\cs_new_protected:Npn \driver_draw_join_round:
- { \__driver_draw_literal:n { 1 ~ j } }
-\cs_new_protected:Npn \driver_draw_join_bevel:
- { \__driver_draw_literal:n { 2 ~ j } }
-\cs_new_protected:Npn \driver_draw_color_fill_cmyk:nnnn #1#2#3#4
- {
- \__driver_color_fill_select:x
- {
- \fp_eval:n {#1} ~ \fp_eval:n {#2} ~
- \fp_eval:n {#3} ~ \fp_eval:n {#4} ~
- k
- }
- }
-\cs_new_protected:Npn \driver_draw_color_stroke_cmyk:nnnn #1#2#3#4
- {
- \__driver_color_select:x
- {
- \fp_eval:n {#1} ~ \fp_eval:n {#2} ~
- \fp_eval:n {#3} ~ \fp_eval:n {#4} ~
- k
- }
- }
-\cs_new_protected:Npn \driver_draw_color_fill_gray:n #1
- { \__driver_color_fill_select:x { \fp_eval:n {#1} ~ g } }
-\cs_new_protected:Npn \driver_draw_color_stroke_gray:n #1
- { \__driver_color_select:x { \fp_eval:n {#1} ~ G } }
-\cs_new_protected:Npn \driver_draw_color_fill_rgb:nnn #1#2#3
- {
- \__driver_color_fill_select:x
- { \fp_eval:n {#1} ~ \fp_eval:n {#2} ~ \fp_eval:n {#3} ~ rg }
- }
-\cs_new_protected:Npn \driver_draw_color_stroke_rgb:nnn #1#2#3
- {
- \__driver_color_select:x
- { \fp_eval:n {#1} ~ \fp_eval:n {#2} ~ \fp_eval:n {#3} ~ RG }
- }
-\cs_new_eq:NN \__driver_color_fill_select:n \__driver_color_select:n
-\cs_generate_variant:Nn \__driver_color_fill_select:n { x }
-\cs_new_protected:Npn \driver_draw_cm:nnnn #1#2#3#4
- {
- \__driver_matrix:x
- {
- \fp_eval:n {#1} ~ \fp_eval:n {#2} ~
- \fp_eval:n {#3} ~ \fp_eval:n {#4}
- }
- }
-\cs_new_protected:Npn \driver_draw_box_use:Nnnnn #1#2#3#4#5
- {
- \__driver_scope_begin:
- \driver_draw_cm:nnnn {#2} {#3} {#4} {#5}
- \hbox_overlap_right:n { \box_use:N #1 }
- \__driver_scope_end:
- }
-%% File: l3drivers-graphics.dtx
-\tl_new:N \l__driver_graphics_attr_tl
-\cs_new_protected:Npn \driver_graphics_getbb_jpg:n #1
- {
- \int_zero:N \l_graphics_page_int
- \tl_clear:N \l_graphics_pagebox_tl
- \tl_set:Nx \l__driver_graphics_attr_tl
- {
- \tl_if_empty:NF \l_graphics_decodearray_tl
- { :D \l_graphics_decodearray_tl }
- \bool_if:NT \l_graphics_interpolate_bool
- { :I }
- }
- \tl_clear:N \l__driver_graphics_attr_tl
- \__driver_graphics_getbb_auxi:n {#1}
- }
-\cs_new_eq:NN \driver_graphics_getbb_png:n \driver_graphics_getbb_jpg:n
-\cs_new_protected:Npn \driver_graphics_getbb_pdf:n #1
- {
- \tl_clear:N \l_graphics_decodearray_tl
- \bool_set_false:N \l_graphics_interpolate_bool
- \tl_set:Nx \l__driver_graphics_attr_tl
- {
- : \l_graphics_pagebox_tl
- \int_compare:nNnT \l_graphics_page_int > 1
- { :P \int_use:N \l_graphics_page_int }
- }
- \__driver_graphics_getbb_auxi:n {#1}
- }
-\cs_new_protected:Npn \__driver_graphics_getbb_auxi:n #1
- {
- \graphics_bb_restore:xF { #1 \l__driver_graphics_attr_tl }
- { \__driver_graphics_getbb_auxii:n {#1} }
- }
-\cs_new_protected:Npn \__driver_graphics_getbb_auxii: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 }
- {
- attr ~
- {
- \tl_if_empty:NF \l_graphics_decodearray_tl
- { /Decode~[ \l_graphics_decodearray_tl ] }
- \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 }
- {#1}
- \hbox_set:Nn \l__driver_internal_box
- { \tex_pdfrefximage:D \tex_pdflastximage:D }
- \dim_set:Nn \l_graphics_urx_dim { \box_wd:N \l__driver_internal_box }
- \dim_set:Nn \l_graphics_ury_dim { \box_ht:N \l__driver_internal_box }
- \int_const:cn { c__driver_graphics_ #1 \l__driver_graphics_attr_tl _int }
- { \tex_the:D \tex_pdflastximage:D }
- \graphics_bb_save:x { #1 \l__driver_graphics_attr_tl }
- }
-\cs_new_protected:Npn \driver_graphics_include_jpg:n #1
- {
- \tex_pdfrefximage:D
- \int_use:c { c__driver_graphics_ #1 \l__driver_graphics_attr_tl _int }
- }
-\cs_new_eq:NN \driver_graphics_include_pdf:n \driver_graphics_include_jpg:n
-\cs_new_eq:NN \driver_graphics_include_png:n \driver_graphics_include_jpg:n
-\sys_if_shell:T
- {
- \str_new:N \l__driver_dir_str
- \str_new:N \l__driver_name_str
- \str_new:N \l__driver_ext_str
- \cs_new_protected:Npn \driver_graphics_getbb_eps:n #1
- {
- \file_parse_full_name:nNNN {#1}
- \l__driver_dir_str
- \l__driver_name_str
- \l__driver_ext_str
- \exp_args:Nx \__driver_graphics_getbb_eps:nn
- {
- \l__driver_name_str - \str_tail:N \l__driver_ext_str
- -converted-to.pdf
- }
- {#1}
- }
- \cs_new_protected:Npn \__driver_graphics_getbb_eps:nn #1#2
- {
- \file_compare_timestamp:nNnT {#2} > {#1}
- {
- \sys_shell_now:n
- { repstopdf ~ #2 ~ #1 }
- }
- \tl_set:Nn \l_graphics_name_tl {#1}
- \driver_graphics_getbb_pdf:n {#1}
- }
- \cs_new_protected:Npn \driver_graphics_include_eps:n #1
- {
- \file_parse_full_name:nNNN {#1}
- \l__driver_dir_str \l__driver_name_str \l__driver_ext_str
- \exp_args:Nx \driver_graphics_include_pdf:n
- {
- \l__driver_name_str - \str_tail:N \l__driver_ext_str
- -converted-to.pdf
- }
- }
- }
-%% File: l3drivers-pdf.dtx
-\cs_new_protected:Npx \driver_pdf_annotation:nnnn #1#2#3#4
- {
- \cs_if_exist:NTF \tex_pdfextension:D
- { \tex_pdfextension:D annot ~ }
- { \tex_pdfannot:D }
- width ~ \exp_not:N \dim_eval:n {#1} ~
- height ~ \exp_not:N \dim_eval:n {#2} ~
- depth ~ \exp_not:N \dim_eval:n {#3} ~
- {#4}
- }
-\cs_new:Npx \driver_pdf_annotation_last:
- {
- \exp_not:N \tex_the:D
- \cs_if_exist:NTF \tex_pdffeedback:D
- { \exp_not:N \tex_pdffeedback:D annot ~ }
- { \exp_not:N \tex_pdflastannot:D }
- 0 ~ R
- }
-\cs_new_protected:Npn \driver_pdf_link_begin_goto:nnw #1#2
- { \__driver_pdf_link_begin:nnnw {#1} { goto~name } {#2} }
-\cs_new_protected:Npn \driver_pdf_link_begin_user:nnw #1#2
- { \__driver_pdf_link_begin:nnnw {#1} { user } {#2} }
-\cs_new_protected:Npx \__driver_pdf_link_begin:nnnw #1#2#3
- {
- \cs_if_exist:NTF \tex_pdfextension:D
- { \tex_pdfextension:D startlink ~ }
- { \tex_pdfstartlink:D }
- attr {#1}
- #2 {#3}
- }
-\cs_new_protected:Npx \driver_pdf_link_end:
- {
- \cs_if_exist:NTF \tex_pdfextension:D
- { \tex_pdfextension:D endlink \scan_stop: }
- { \tex_pdfendlink:D }
- }
-\cs_new:Npx \driver_pdf_link_last:
- {
- \exp_not:N \tex_the:D
- \cs_if_exist:NTF \tex_pdffeedback:D
- { \exp_not:N \tex_pdffeedback:D lastlink \scan_stop: }
- { \exp_not:N \tex_pdflastlink:D }
- ~ 0 ~ R
- }
-\cs_new_protected:Npx \driver_pdf_link_margin:n #1
- {
- \cs_if_exist:NTF \tex_pdfvariable:D
- { \exp_not:N \tex_pdfvariable:D linkmargin }
- { \exp_not:N \tex_pdflinkmargin:D }
- \exp_not:N \dim_eval:n {#1} \scan_stop:
- }
-\cs_new_protected:Npx \driver_pdf_destination:nn #1#2
- {
- \cs_if_exist:NTF \tex_pdfextension:D
- { \exp_not:N \tex_pdfextension:D dest ~ }
- { \exp_not:N \tex_pdfdest:D }
- name {#1}
- \exp_not:N \str_case:nnF {#2}
- {
- { xyz } { xyz }
- { fit } { fit }
- { fitb } { fitb }
- { fitbh } { fitbh }
- { fitbv } { fitbv }
- { fith } { fith }
- { fitv } { fitv }
- }
- { xyz ~ zoom \exp_not:N \fp_eval:n { #2 * 10 } }
- \scan_stop:
- }
-\cs_new_protected:Npx \driver_pdf_destination_rectangle:nn #1#2
- {
- \group_begin:
- \hbox_set:Nn \l__driver_internal_box {#2}
- \cs_if_exist:NTF \tex_pdfextension:D
- { \exp_not:N \tex_pdfextension:D dest ~ }
- { \exp_not:N \tex_pdfdest:D }
- name {#1}
- fitr ~
- width \exp_not:N \box_wd:N \l__driver_internal_box
- height \exp_not:N \box_ht:N \l__driver_internal_box
- depth \exp_not:N \box_dp:N \l__driver_internal_box
- \box_use:N \l__driver_internal_box
- \group_end:
- }
-\cs_new_protected:Npx \driver_pdf_catalog_gput:nn #1#2
- {
- \cs_if_exist:NTF \tex_pdfextension:D
- { \tex_pdfextension:D catalog }
- { \tex_pdfcatalog:D }
- { / #1 ~ #2 }
- }
-\cs_new_protected:Npx \driver_pdf_info_gput:nn #1#2
- {
- \cs_if_exist:NTF \tex_pdfextension:D
- { \tex_pdfextension:D info }
- { \tex_pdfinfo:D }
- { / #1 ~ #2 }
- }
-\prop_new:N \g__driver_pdf_object_prop
-\group_begin:
- \cs_set_protected:Npn \__driver_tmp:w #1#2
- {
- \cs_new_protected:Npx \driver_pdf_object_new:nn ##1##2
- {
- #1 reserveobjnum ~
- \int_const:cn
- { c__driver_pdf_object_ \exp_not:N \tl_to_str:n {##1} _int }
- {#2}
- \prop_gput:Nnn \exp_not:N \g__driver_pdf_object_prop {##1} {##2}
- }
- }
- \cs_if_exist:NTF \tex_pdfextension:D
- {
- \__driver_tmp:w
- { \tex_pdfextension:D obj ~ }
- { \exp_not:N \tex_pdffeedback:D lastobj }
- }
- { \__driver_tmp:w { \tex_pdfobj:D } { \tex_pdflastobj:D } }
-\group_end:
-\cs_new:Npn \driver_pdf_object_ref:n #1
- { \int_use:c { c__driver_pdf_object_ \tl_to_str:n {#1} _int } ~ 0 ~ R }
-\group_begin:
- \cs_set_protected:Npn \__driver_tmp:w #1
- {
- \cs_new_protected:Npn \driver_pdf_object_write:nn ##1##2
- {
- \tex_immediate:D #1 useobjnum ~
- \int_use:c
- { c__driver_pdf_object_ \tl_to_str:n {##1} _int }
- \str_case_e:nn
- { \prop_item:Nn \g__driver_pdf_object_prop {##1} }
- {
- { array } { { [ ~ \exp_not:n {##2} ~ ] } }
- { dict } { { << ~ \exp_not:n {##2} ~ >> } }
- { fstream }
- {
- stream ~ attr ~ { \__driver_exp_not_i:nn ##2 } ~
- file ~ { \__driver_exp_not_ii:nn ##2 }
- }
- { stream }
- {
- stream ~ attr ~ { \__driver_exp_not_i:nn ##2 } ~
- { \__driver_exp_not_ii:nn ##2 }
- }
- }
- }
- }
- \cs_if_exist:NTF \tex_pdfextension:D
- { \__driver_tmp:w { \tex_pdfextension:D obj ~ } }
- { \__driver_tmp:w { \tex_pdfobj:D } }
-\group_end:
-\cs_new:Npn \__driver_exp_not_i:nn #1#2 { \exp_not:n {#1} }
-\cs_new:Npn \__driver_exp_not_ii:nn #1#2 { \exp_not:n {#2} }
-\cs_new_protected:Npx \driver_pdf_compresslevel:n #1
- {
- \exp_not:N \tex_global:D
- \cs_if_exist:NTF \tex_pdfcompresslevel:D
- { \tex_pdfcompresslevel:D }
- { \tex_pdfvariable:D compresslevel }
- \exp_not:N \int_value:w \exp_not:N \int_eval:n {#1} \scan_stop:
- }
-\cs_new_protected:Npn \driver_pdf_compress_objects:n #1
- {
- \str_if_eq:nnTF {#1} { true }
- { \__driver_pdf_objcompresslevel:n { 2 } }
- { \__driver_pdf_objcompresslevel:n { 0 } }
- }
-\cs_new_protected:Npx \__driver_pdf_objcompresslevel:n #1
- {
- \exp_not:N \tex_global:D
- \cs_if_exist:NTF \tex_pdfobjcompresslevel:D
- { \tex_pdfobjcompresslevel:D }
- { \tex_pdfvariable:D objcompresslevel }
- #1 \scan_stop:
- }
-\cs_new_protected:Npx \driver_pdf_version_major_gset:n #1
- {
- \cs_if_exist:NTF \tex_pdfvariable:D
- {
- \int_compare:nNnT \tex_luatexversion:D > { 106 }
- {
- \exp_not:N \tex_global:D \tex_pdfvariable:D majorversion
- \exp_not:N \int_eval:n {#1} \scan_stop:
- }
- }
- {
- \cs_if_exist:NT \tex_pdfmajorversion:D
- {
- \exp_not:N \tex_global:D \tex_pdfmajorversion:D
- \exp_not:N \int_eval:n {#1} \scan_stop:
- }
- }
- }
-\cs_new_protected:Npx \driver_pdf_version_minor_gset:n #1
- {
- \exp_not:N \tex_global:D
- \cs_if_exist:NTF \tex_pdfminorversion:D
- { \exp_not:N \tex_pdfminorversion:D }
- { \tex_pdfvariable:D minorversion }
- \exp_not:N \int_eval:n {#1} \scan_stop:
- }
-\cs_new:Npx \driver_pdf_version_major:
- {
- \cs_if_exist:NTF \tex_pdfvariable:D
- {
- \int_compare:nNnTF \tex_luatexversion:D > { 106 }
- { \exp_not:N \tex_the:D \tex_pdfvariable:D majorversion }
- { 1 }
- }
- {
- \cs_if_exist:NTF \tex_pdfmajorversion:D
- { \exp_not:N \tex_the:D \tex_pdfmajorversion:D }
- { 1 }
- }
- }
-\cs_new:Npx \driver_pdf_version_minor:
- {
- \exp_not:N \tex_the:D
- \cs_if_exist:NTF \tex_pdfminorversion:D
- { \exp_not:N \tex_pdfminorversion:D }
- { \tex_pdfvariable:D minorversion }
- }
-%%
-%%
-%% End of file `l3pdfmode.def'.
diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88591.def b/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88591.def
index 129e435d16d..a70bc9f6fe8 100644
--- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88591.def
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88591.def
@@ -6,20 +6,20 @@
%%
%% l3str-convert.dtx (with options: `iso88591')
%%
-%% Copyright (C) 2011-2019 The LaTeX3 Project
+%% Copyright (C) 1990-2019 The LaTeX3 Project
%%
%% It may be distributed and/or modified under the conditions of
%% the LaTeX Project Public License (LPPL), either version 1.3c of
%% this license or (at your option) any later version. The latest
%% version of this license is in the file:
%%
-%% http://www.latex-project.org/lppl.txt
+%% https://www.latex-project.org/lppl.txt
%%
-%% This file is part of the "l3experimental bundle" (The Work in LPPL)
+%% This file is part of the "l3kernel bundle" (The Work in LPPL)
%% and all files in that bundle must be distributed together.
%%
%% File: l3str-convert.dtx
-\__str_declare_eight_bit_encoding:nnn { iso88591 }
+\str_declare_eight_bit_encoding:nnn { iso88591 }
{
}
{
diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885910.def b/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885910.def
index 8c4e9ce957b..c24d358a553 100644
--- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885910.def
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885910.def
@@ -6,20 +6,20 @@
%%
%% l3str-convert.dtx (with options: `iso885910')
%%
-%% Copyright (C) 2011-2019 The LaTeX3 Project
+%% Copyright (C) 1990-2019 The LaTeX3 Project
%%
%% It may be distributed and/or modified under the conditions of
%% the LaTeX Project Public License (LPPL), either version 1.3c of
%% this license or (at your option) any later version. The latest
%% version of this license is in the file:
%%
-%% http://www.latex-project.org/lppl.txt
+%% https://www.latex-project.org/lppl.txt
%%
-%% This file is part of the "l3experimental bundle" (The Work in LPPL)
+%% This file is part of the "l3kernel bundle" (The Work in LPPL)
%% and all files in that bundle must be distributed together.
%%
%% File: l3str-convert.dtx
-\__str_declare_eight_bit_encoding:nnn { iso885910 }
+\str_declare_eight_bit_encoding:nnn { iso885910 }
{
{ A1 } { 0104 }
{ A2 } { 0112 }
diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885911.def b/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885911.def
index c9fd87cd3bf..f6b39e6d096 100644
--- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885911.def
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885911.def
@@ -6,20 +6,20 @@
%%
%% l3str-convert.dtx (with options: `iso885911')
%%
-%% Copyright (C) 2011-2019 The LaTeX3 Project
+%% Copyright (C) 1990-2019 The LaTeX3 Project
%%
%% It may be distributed and/or modified under the conditions of
%% the LaTeX Project Public License (LPPL), either version 1.3c of
%% this license or (at your option) any later version. The latest
%% version of this license is in the file:
%%
-%% http://www.latex-project.org/lppl.txt
+%% https://www.latex-project.org/lppl.txt
%%
-%% This file is part of the "l3experimental bundle" (The Work in LPPL)
+%% This file is part of the "l3kernel bundle" (The Work in LPPL)
%% and all files in that bundle must be distributed together.
%%
%% File: l3str-convert.dtx
-\__str_declare_eight_bit_encoding:nnn { iso885911 }
+\str_declare_eight_bit_encoding:nnn { iso885911 }
{
{ A1 } { 0E01 }
{ A2 } { 0E02 }
diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885913.def b/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885913.def
index aac3d64ef2e..24ed74b1c31 100644
--- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885913.def
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885913.def
@@ -6,20 +6,20 @@
%%
%% l3str-convert.dtx (with options: `iso885913')
%%
-%% Copyright (C) 2011-2019 The LaTeX3 Project
+%% Copyright (C) 1990-2019 The LaTeX3 Project
%%
%% It may be distributed and/or modified under the conditions of
%% the LaTeX Project Public License (LPPL), either version 1.3c of
%% this license or (at your option) any later version. The latest
%% version of this license is in the file:
%%
-%% http://www.latex-project.org/lppl.txt
+%% https://www.latex-project.org/lppl.txt
%%
-%% This file is part of the "l3experimental bundle" (The Work in LPPL)
+%% This file is part of the "l3kernel bundle" (The Work in LPPL)
%% and all files in that bundle must be distributed together.
%%
%% File: l3str-convert.dtx
-\__str_declare_eight_bit_encoding:nnn { iso885913 }
+\str_declare_eight_bit_encoding:nnn { iso885913 }
{
{ A1 } { 201D }
{ A5 } { 201E }
diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885914.def b/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885914.def
index 22cd3c76f56..e51b8534a99 100644
--- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885914.def
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885914.def
@@ -6,20 +6,20 @@
%%
%% l3str-convert.dtx (with options: `iso885914')
%%
-%% Copyright (C) 2011-2019 The LaTeX3 Project
+%% Copyright (C) 1990-2019 The LaTeX3 Project
%%
%% It may be distributed and/or modified under the conditions of
%% the LaTeX Project Public License (LPPL), either version 1.3c of
%% this license or (at your option) any later version. The latest
%% version of this license is in the file:
%%
-%% http://www.latex-project.org/lppl.txt
+%% https://www.latex-project.org/lppl.txt
%%
-%% This file is part of the "l3experimental bundle" (The Work in LPPL)
+%% This file is part of the "l3kernel bundle" (The Work in LPPL)
%% and all files in that bundle must be distributed together.
%%
%% File: l3str-convert.dtx
-\__str_declare_eight_bit_encoding:nnn { iso885914 }
+\str_declare_eight_bit_encoding:nnn { iso885914 }
{
{ A1 } { 1E02 }
{ A2 } { 1E03 }
diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885915.def b/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885915.def
index a79469e4425..5776213ff39 100644
--- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885915.def
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885915.def
@@ -6,20 +6,20 @@
%%
%% l3str-convert.dtx (with options: `iso885915')
%%
-%% Copyright (C) 2011-2019 The LaTeX3 Project
+%% Copyright (C) 1990-2019 The LaTeX3 Project
%%
%% It may be distributed and/or modified under the conditions of
%% the LaTeX Project Public License (LPPL), either version 1.3c of
%% this license or (at your option) any later version. The latest
%% version of this license is in the file:
%%
-%% http://www.latex-project.org/lppl.txt
+%% https://www.latex-project.org/lppl.txt
%%
-%% This file is part of the "l3experimental bundle" (The Work in LPPL)
+%% This file is part of the "l3kernel bundle" (The Work in LPPL)
%% and all files in that bundle must be distributed together.
%%
%% File: l3str-convert.dtx
-\__str_declare_eight_bit_encoding:nnn { iso885915 }
+\str_declare_eight_bit_encoding:nnn { iso885915 }
{
{ A4 } { 20AC }
{ A6 } { 0160 }
diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885916.def b/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885916.def
index bfd656f6e7a..b7376b0b252 100644
--- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885916.def
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso885916.def
@@ -6,20 +6,20 @@
%%
%% l3str-convert.dtx (with options: `iso885916')
%%
-%% Copyright (C) 2011-2019 The LaTeX3 Project
+%% Copyright (C) 1990-2019 The LaTeX3 Project
%%
%% It may be distributed and/or modified under the conditions of
%% the LaTeX Project Public License (LPPL), either version 1.3c of
%% this license or (at your option) any later version. The latest
%% version of this license is in the file:
%%
-%% http://www.latex-project.org/lppl.txt
+%% https://www.latex-project.org/lppl.txt
%%
-%% This file is part of the "l3experimental bundle" (The Work in LPPL)
+%% This file is part of the "l3kernel bundle" (The Work in LPPL)
%% and all files in that bundle must be distributed together.
%%
%% File: l3str-convert.dtx
-\__str_declare_eight_bit_encoding:nnn { iso885916 }
+\str_declare_eight_bit_encoding:nnn { iso885916 }
{
{ A1 } { 0104 }
{ A2 } { 0105 }
diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88592.def b/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88592.def
index 3c7f9893795..ef2cd5ab200 100644
--- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88592.def
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88592.def
@@ -6,20 +6,20 @@
%%
%% l3str-convert.dtx (with options: `iso88592')
%%
-%% Copyright (C) 2011-2019 The LaTeX3 Project
+%% Copyright (C) 1990-2019 The LaTeX3 Project
%%
%% It may be distributed and/or modified under the conditions of
%% the LaTeX Project Public License (LPPL), either version 1.3c of
%% this license or (at your option) any later version. The latest
%% version of this license is in the file:
%%
-%% http://www.latex-project.org/lppl.txt
+%% https://www.latex-project.org/lppl.txt
%%
-%% This file is part of the "l3experimental bundle" (The Work in LPPL)
+%% This file is part of the "l3kernel bundle" (The Work in LPPL)
%% and all files in that bundle must be distributed together.
%%
%% File: l3str-convert.dtx
-\__str_declare_eight_bit_encoding:nnn { iso88592 }
+\str_declare_eight_bit_encoding:nnn { iso88592 }
{
{ A1 } { 0104 }
{ A2 } { 02D8 }
diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88593.def b/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88593.def
index 4fa0c24373f..dc7cc7a88fd 100644
--- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88593.def
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88593.def
@@ -6,20 +6,20 @@
%%
%% l3str-convert.dtx (with options: `iso88593')
%%
-%% Copyright (C) 2011-2019 The LaTeX3 Project
+%% Copyright (C) 1990-2019 The LaTeX3 Project
%%
%% It may be distributed and/or modified under the conditions of
%% the LaTeX Project Public License (LPPL), either version 1.3c of
%% this license or (at your option) any later version. The latest
%% version of this license is in the file:
%%
-%% http://www.latex-project.org/lppl.txt
+%% https://www.latex-project.org/lppl.txt
%%
-%% This file is part of the "l3experimental bundle" (The Work in LPPL)
+%% This file is part of the "l3kernel bundle" (The Work in LPPL)
%% and all files in that bundle must be distributed together.
%%
%% File: l3str-convert.dtx
-\__str_declare_eight_bit_encoding:nnn { iso88593 }
+\str_declare_eight_bit_encoding:nnn { iso88593 }
{
{ A1 } { 0126 }
{ A2 } { 02D8 }
diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88594.def b/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88594.def
index b90cb49d143..2ac8afb3b32 100644
--- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88594.def
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88594.def
@@ -6,20 +6,20 @@
%%
%% l3str-convert.dtx (with options: `iso88594')
%%
-%% Copyright (C) 2011-2019 The LaTeX3 Project
+%% Copyright (C) 1990-2019 The LaTeX3 Project
%%
%% It may be distributed and/or modified under the conditions of
%% the LaTeX Project Public License (LPPL), either version 1.3c of
%% this license or (at your option) any later version. The latest
%% version of this license is in the file:
%%
-%% http://www.latex-project.org/lppl.txt
+%% https://www.latex-project.org/lppl.txt
%%
-%% This file is part of the "l3experimental bundle" (The Work in LPPL)
+%% This file is part of the "l3kernel bundle" (The Work in LPPL)
%% and all files in that bundle must be distributed together.
%%
%% File: l3str-convert.dtx
-\__str_declare_eight_bit_encoding:nnn { iso88594 }
+\str_declare_eight_bit_encoding:nnn { iso88594 }
{
{ A1 } { 0104 }
{ A2 } { 0138 }
diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88595.def b/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88595.def
index 0862a7a49b0..e8361b2b6fd 100644
--- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88595.def
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88595.def
@@ -6,20 +6,20 @@
%%
%% l3str-convert.dtx (with options: `iso88595')
%%
-%% Copyright (C) 2011-2019 The LaTeX3 Project
+%% Copyright (C) 1990-2019 The LaTeX3 Project
%%
%% It may be distributed and/or modified under the conditions of
%% the LaTeX Project Public License (LPPL), either version 1.3c of
%% this license or (at your option) any later version. The latest
%% version of this license is in the file:
%%
-%% http://www.latex-project.org/lppl.txt
+%% https://www.latex-project.org/lppl.txt
%%
-%% This file is part of the "l3experimental bundle" (The Work in LPPL)
+%% This file is part of the "l3kernel bundle" (The Work in LPPL)
%% and all files in that bundle must be distributed together.
%%
%% File: l3str-convert.dtx
-\__str_declare_eight_bit_encoding:nnn { iso88595 }
+\str_declare_eight_bit_encoding:nnn { iso88595 }
{
{ A1 } { 0401 }
{ A2 } { 0402 }
diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88596.def b/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88596.def
index d89bc0330c6..912fb1067f7 100644
--- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88596.def
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88596.def
@@ -6,20 +6,20 @@
%%
%% l3str-convert.dtx (with options: `iso88596')
%%
-%% Copyright (C) 2011-2019 The LaTeX3 Project
+%% Copyright (C) 1990-2019 The LaTeX3 Project
%%
%% It may be distributed and/or modified under the conditions of
%% the LaTeX Project Public License (LPPL), either version 1.3c of
%% this license or (at your option) any later version. The latest
%% version of this license is in the file:
%%
-%% http://www.latex-project.org/lppl.txt
+%% https://www.latex-project.org/lppl.txt
%%
-%% This file is part of the "l3experimental bundle" (The Work in LPPL)
+%% This file is part of the "l3kernel bundle" (The Work in LPPL)
%% and all files in that bundle must be distributed together.
%%
%% File: l3str-convert.dtx
-\__str_declare_eight_bit_encoding:nnn { iso88596 }
+\str_declare_eight_bit_encoding:nnn { iso88596 }
{
{ AC } { 060C }
{ BB } { 061B }
diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88597.def b/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88597.def
index 3bbb24b8165..e3486353f1f 100644
--- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88597.def
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88597.def
@@ -6,20 +6,20 @@
%%
%% l3str-convert.dtx (with options: `iso88597')
%%
-%% Copyright (C) 2011-2019 The LaTeX3 Project
+%% Copyright (C) 1990-2019 The LaTeX3 Project
%%
%% It may be distributed and/or modified under the conditions of
%% the LaTeX Project Public License (LPPL), either version 1.3c of
%% this license or (at your option) any later version. The latest
%% version of this license is in the file:
%%
-%% http://www.latex-project.org/lppl.txt
+%% https://www.latex-project.org/lppl.txt
%%
-%% This file is part of the "l3experimental bundle" (The Work in LPPL)
+%% This file is part of the "l3kernel bundle" (The Work in LPPL)
%% and all files in that bundle must be distributed together.
%%
%% File: l3str-convert.dtx
-\__str_declare_eight_bit_encoding:nnn { iso88597 }
+\str_declare_eight_bit_encoding:nnn { iso88597 }
{
{ A1 } { 2018 }
{ A2 } { 2019 }
diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88598.def b/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88598.def
index 61e8c3fe6dc..414212db091 100644
--- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88598.def
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88598.def
@@ -6,20 +6,20 @@
%%
%% l3str-convert.dtx (with options: `iso88598')
%%
-%% Copyright (C) 2011-2019 The LaTeX3 Project
+%% Copyright (C) 1990-2019 The LaTeX3 Project
%%
%% It may be distributed and/or modified under the conditions of
%% the LaTeX Project Public License (LPPL), either version 1.3c of
%% this license or (at your option) any later version. The latest
%% version of this license is in the file:
%%
-%% http://www.latex-project.org/lppl.txt
+%% https://www.latex-project.org/lppl.txt
%%
-%% This file is part of the "l3experimental bundle" (The Work in LPPL)
+%% This file is part of the "l3kernel bundle" (The Work in LPPL)
%% and all files in that bundle must be distributed together.
%%
%% File: l3str-convert.dtx
-\__str_declare_eight_bit_encoding:nnn { iso88598 }
+\str_declare_eight_bit_encoding:nnn { iso88598 }
{
{ AA } { 00D7 }
{ BA } { 00F7 }
diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88599.def b/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88599.def
index 9339941d6ea..946ab0b41bf 100644
--- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88599.def
+++ b/Master/texmf-dist/tex/latex/l3kernel/l3str-enc-iso88599.def
@@ -6,20 +6,20 @@
%%
%% l3str-convert.dtx (with options: `iso88599')
%%
-%% Copyright (C) 2011-2019 The LaTeX3 Project
+%% Copyright (C) 1990-2019 The LaTeX3 Project
%%
%% It may be distributed and/or modified under the conditions of
%% the LaTeX Project Public License (LPPL), either version 1.3c of
%% this license or (at your option) any later version. The latest
%% version of this license is in the file:
%%
-%% http://www.latex-project.org/lppl.txt
+%% https://www.latex-project.org/lppl.txt
%%
-%% This file is part of the "l3experimental bundle" (The Work in LPPL)
+%% This file is part of the "l3kernel bundle" (The Work in LPPL)
%% and all files in that bundle must be distributed together.
%%
%% File: l3str-convert.dtx
-\__str_declare_eight_bit_encoding:nnn { iso88599 }
+\str_declare_eight_bit_encoding:nnn { iso88599 }
{
{ D0 } { 011E }
{ DD } { 0130 }
diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def b/Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def
deleted file mode 100644
index 49ee9115e3a..00000000000
--- a/Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def
+++ /dev/null
@@ -1,681 +0,0 @@
-%%
-%% This is file `l3xdvipdfmx.def',
-%% generated with the docstrip utility.
-%%
-%% The original source files were:
-%%
-%% l3drivers.dtx (with options: `package,xdvipdfmx')
-%% l3drivers-basics.dtx (with options: `package,xdvipdfmx')
-%% l3drivers-color.dtx (with options: `package,xdvipdfmx')
-%% l3drivers-box.dtx (with options: `package,xdvipdfmx')
-%% l3drivers-draw.dtx (with options: `package,xdvipdfmx')
-%% l3drivers-graphics.dtx (with options: `package,xdvipdfmx')
-%% l3drivers-pdf.dtx (with options: `package,xdvipdfmx')
-%%
-%% Copyright (C) 1990-2019 The LaTeX3 Project
-%%
-%% It may be distributed and/or modified under the conditions of
-%% the LaTeX Project Public License (LPPL), either version 1.3c of
-%% this license or (at your option) any later version. The latest
-%% version of this license is in the file:
-%%
-%% https://www.latex-project.org/lppl.txt
-%%
-%% This file is part of the "l3kernel bundle" (The Work in LPPL)
-%% and all files in that bundle must be distributed together.
-%%
-%% File: l3drivers.dtx
-%% File: l3drivers-basics.dtx
-\ProvidesExplFile
- {l3xdvipdfmx.def}{2019-04-06}{}
- {L3 Experimental driver: xdvipdfmx}
-\cs_new_eq:NN \__driver_literal:e \tex_special:D
-\cs_new_protected:Npn \__driver_literal:n #1
- { \__driver_literal:e { \exp_not:n {#1} } }
-\cs_generate_variant:Nn \__driver_literal:n { x }
-\box_new:N \l__driver_internal_box
-\cs_new_protected:Npn \__driver_literal_pdf:n #1
- { \__driver_literal:n { pdf:literal~ #1 } }
-\cs_generate_variant:Nn \__driver_literal_pdf:n { x }
-\cs_new_protected:Npn \__driver_scope_begin:
- { \__driver_literal:n { x:gsave } }
-\cs_new_protected:Npn \__driver_scope_end:
- { \__driver_literal:n { x:grestore } }
-%% File: l3drivers-color.dtx
-\cs_new_protected:Npn \driver_color_pickup:N #1 { }
-\AtBeginDocument
- {
- \@ifpackageloaded { color }
- {
- \cs_set_protected:Npn \driver_color_pickup:N #1
- {
- \exp_args:NV \tl_if_head_is_space:nTF \current@color
- {
- \tl_set:Nx #1
- {
- spot ~
- \exp_after:wN \use:n \current@color \c_space_tl 1
- }
- }
- {
- \exp_last_unbraced:Nx \__driver_color_pickup:w
- { \current@color } \q_stop #1
- }
- }
- \cs_new_protected:Npn \__driver_color_pickup:w #1 ~ #2 \q_stop #3
- { \tl_set:Nn #3 { #1 ~ #2 } }
- }
- { }
- }
-\cs_new_protected:Npn \driver_color_cmyk:nnnn #1#2#3#4
- {
- \__driver_color_select:x
- {
- cmyk~
- \fp_eval:n {#1} ~ \fp_eval:n {#2} ~
- \fp_eval:n {#3} ~ \fp_eval:n {#4}
- }
- }
-\cs_new_protected:Npn \driver_color_gray:n #1
- { \__driver_color_select:x { gray~ \fp_eval:n {#1} } }
-\cs_new_protected:Npn \driver_color_rgb:nnn #1#2#3
- {
- \__driver_color_select:x
- { rgb~ \fp_eval:n {#1} ~ \fp_eval:n {#2} ~ \fp_eval:n {#3} }
- }
-\cs_new_protected:Npn \driver_color_spot:nn #1#2
- { \__driver_color_select:n { #1 } }
-\cs_new_protected:Npn \__driver_color_select:n #1
- {
- \__driver_literal:n { color~push~ #1 }
- \group_insert_after:N \__driver_color_reset:
- }
-\cs_generate_variant:Nn \__driver_color_select:n { x }
-\cs_new_protected:Npn \__driver_color_reset:
- { \__driver_literal:n { color~pop } }
-%% File: l3drivers-box.dtx
-\cs_new_protected:Npn \driver_box_use_clip:N #1
- {
- \__driver_scope_begin:
- \__driver_literal_pdf:x
- {
- 0~
- \dim_to_decimal_in_bp:n { -\box_dp:N #1 } ~
- \dim_to_decimal_in_bp:n { \box_wd:N #1 } ~
- \dim_to_decimal_in_bp:n { \box_ht:N #1 + \box_dp:N #1 } ~
- re~W~n
- }
- \hbox_overlap_right:n { \box_use:N #1 }
- \__driver_scope_end:
- \skip_horizontal:n { \box_wd:N #1 }
- }
-\cs_new_protected:Npn \driver_box_use_rotate:Nn #1#2
- { \exp_args:NNf \__driver_box_use_rotate:Nn #1 { \fp_eval:n {#2} } }
-\cs_new_protected:Npn \__driver_box_use_rotate:Nn #1#2
- {
- \__driver_scope_begin:
- \__driver_literal:x
- {
- x:rotate~
- \fp_compare:nNnTF {#2} = \c_zero_fp
- { 0 }
- { \fp_eval:n { round ( #2 , 5 ) } }
- }
- \box_use:N #1
- \__driver_scope_end:
- }
-\cs_new_protected:Npn \driver_box_use_scale:Nnn #1#2#3
- {
- \__driver_scope_begin:
- \__driver_literal:x
- {
- x:scale~
- \fp_eval:n { round ( #2 , 5 ) } ~
- \fp_eval:n { round ( #3 , 5 ) }
- }
- \hbox_overlap_right:n { \box_use:N #1 }
- \__driver_scope_end:
- }
-%% File: l3drivers-draw.dtx
-\cs_new_eq:NN \__driver_draw_literal:n \__driver_literal_pdf:n
-\cs_generate_variant:Nn \__driver_draw_literal:n { x }
-\cs_new_protected:Npn \driver_draw_begin:
- { \driver_draw_scope_begin: }
-\cs_new_protected:Npn \driver_draw_end:
- { \driver_draw_scope_end: }
-\cs_new_eq:NN \driver_draw_scope_begin: \__driver_scope_begin:
-\cs_new_eq:NN \driver_draw_scope_end: \__driver_scope_end:
-\cs_new_protected:Npn \driver_draw_moveto:nn #1#2
- {
- \__driver_draw_literal:x
- { \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~ m }
- }
-\cs_new_protected:Npn \driver_draw_lineto:nn #1#2
- {
- \__driver_draw_literal:x
- { \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~ l }
- }
-\cs_new_protected:Npn \driver_draw_curveto:nnnnnn #1#2#3#4#5#6
- {
- \__driver_draw_literal:x
- {
- \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~
- \dim_to_decimal_in_bp:n {#3} ~ \dim_to_decimal_in_bp:n {#4} ~
- \dim_to_decimal_in_bp:n {#5} ~ \dim_to_decimal_in_bp:n {#6} ~
- c
- }
- }
-\cs_new_protected:Npn \driver_draw_rectangle:nnnn #1#2#3#4
- {
- \__driver_draw_literal:x
- {
- \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~
- \dim_to_decimal_in_bp:n {#3} ~ \dim_to_decimal_in_bp:n {#4} ~
- re
- }
- }
-\cs_new_protected:Npn \driver_draw_evenodd_rule:
- { \bool_gset_true:N \g__driver_draw_eor_bool }
-\cs_new_protected:Npn \driver_draw_nonzero_rule:
- { \bool_gset_false:N \g__driver_draw_eor_bool }
-\bool_new:N \g__driver_draw_eor_bool
-\cs_new_protected:Npn \driver_draw_closepath:
- { \__driver_draw_literal:n { h } }
-\cs_new_protected:Npn \driver_draw_stroke:
- { \__driver_draw_literal:n { S } }
-\cs_new_protected:Npn \driver_draw_closestroke:
- { \__driver_draw_literal:n { s } }
-\cs_new_protected:Npn \driver_draw_fill:
- {
- \__driver_draw_literal:x
- { f \bool_if:NT \g__driver_draw_eor_bool * }
- }
-\cs_new_protected:Npn \driver_draw_fillstroke:
- {
- \__driver_draw_literal:x
- { B \bool_if:NT \g__driver_draw_eor_bool * }
- }
-\cs_new_protected:Npn \driver_draw_clip:
- {
- \__driver_draw_literal:x
- { W \bool_if:NT \g__driver_draw_eor_bool * }
- }
-\cs_new_protected:Npn \driver_draw_discardpath:
- { \__driver_draw_literal:n { n } }
-\cs_new_protected:Npn \driver_draw_dash_pattern:nn #1#2
- {
- \__driver_draw_literal:x
- {
- [
- \exp_args:Nf \use:n
- { \clist_map_function:nN {#1} \__driver_draw_dash:n }
- ] ~
- \dim_to_decimal_in_bp:n {#2} ~ d
- }
- }
-\cs_new:Npn \__driver_draw_dash:n #1
- { ~ \dim_to_decimal_in_bp:n {#1} }
-\cs_new_protected:Npn \driver_draw_linewidth:n #1
- {
- \__driver_draw_literal:x
- { \dim_to_decimal_in_bp:n {#1} ~ w }
- }
-\cs_new_protected:Npn \driver_draw_miterlimit:n #1
- { \__driver_draw_literal:x { \fp_eval:n {#1} ~ M } }
-\cs_new_protected:Npn \driver_draw_cap_butt:
- { \__driver_draw_literal:n { 0 ~ J } }
-\cs_new_protected:Npn \driver_draw_cap_round:
- { \__driver_draw_literal:n { 1 ~ J } }
-\cs_new_protected:Npn \driver_draw_cap_rectangle:
- { \__driver_draw_literal:n { 2 ~ J } }
-\cs_new_protected:Npn \driver_draw_join_miter:
- { \__driver_draw_literal:n { 0 ~ j } }
-\cs_new_protected:Npn \driver_draw_join_round:
- { \__driver_draw_literal:n { 1 ~ j } }
-\cs_new_protected:Npn \driver_draw_join_bevel:
- { \__driver_draw_literal:n { 2 ~ j } }
-\cs_new_protected:Npn \driver_draw_color_fill_cmyk:nnnn #1#2#3#4
- {
- \__driver_color_fill_select:x
- {
- \fp_eval:n {#1} ~ \fp_eval:n {#2} ~
- \fp_eval:n {#3} ~ \fp_eval:n {#4} ~
- k
- }
- }
-\cs_new_protected:Npn \driver_draw_color_stroke_cmyk:nnnn #1#2#3#4
- {
- \__driver_color_select:x
- {
- \fp_eval:n {#1} ~ \fp_eval:n {#2} ~
- \fp_eval:n {#3} ~ \fp_eval:n {#4} ~
- k
- }
- }
-\cs_new_protected:Npn \driver_draw_color_fill_gray:n #1
- { \__driver_color_fill_select:x { \fp_eval:n {#1} ~ g } }
-\cs_new_protected:Npn \driver_draw_color_stroke_gray:n #1
- { \__driver_color_select:x { \fp_eval:n {#1} ~ G } }
-\cs_new_protected:Npn \driver_draw_color_fill_rgb:nnn #1#2#3
- {
- \__driver_color_fill_select:x
- { \fp_eval:n {#1} ~ \fp_eval:n {#2} ~ \fp_eval:n {#3} ~ rg }
- }
-\cs_new_protected:Npn \driver_draw_color_stroke_rgb:nnn #1#2#3
- {
- \__driver_color_select:x
- { \fp_eval:n {#1} ~ \fp_eval:n {#2} ~ \fp_eval:n {#3} ~ RG }
- }
-\cs_new_eq:NN \__driver_color_fill_select:n \__driver_draw_literal:n
-\cs_generate_variant:Nn \__driver_color_fill_select:n { x }
-\cs_new_protected:Npn \driver_draw_cm:nnnn #1#2#3#4
- {
- \__driver_draw_cm_decompose:nnnnN {#1} {#2} {#3} {#4}
- \__driver_draw_cm:nnnn
- }
-\cs_new_protected:Npn \__driver_draw_cm:nnnn #1#2#3#4
- {
- \__driver_literal:x
- {
- x:rotate~
- \fp_compare:nNnTF {#1} = \c_zero_fp
- { 0 }
- { \fp_eval:n { round ( -#1 , 5 ) } }
- }
- \__driver_literal:x
- {
- x:scale~
- \fp_eval:n { round ( #2 , 5 ) } ~
- \fp_eval:n { round ( #3 , 5 ) }
- }
- \__driver_literal:x
- {
- x:rotate~
- \fp_compare:nNnTF {#4} = \c_zero_fp
- { 0 }
- { \fp_eval:n { round ( -#4 , 5 ) } }
- }
- }
-\cs_new_protected:Npn \__driver_draw_cm_decompose:nnnnN #1#2#3#4#5
- {
- \use:x
- {
- \__driver_draw_cm_decompose_auxi:nnnnN
- { \fp_eval:n { (#1 + #4) / 2 } }
- { \fp_eval:n { (#1 - #4) / 2 } }
- { \fp_eval:n { (#3 + #2) / 2 } }
- { \fp_eval:n { (#3 - #2) / 2 } }
- }
- #5
- }
-\cs_new_protected:Npn \__driver_draw_cm_decompose_auxi:nnnnN #1#2#3#4#5
- {
- \use:x
- {
- \__driver_draw_cm_decompose_auxii:nnnnN
- { \fp_eval:n { 2 * sqrt ( #1 * #1 + #4 * #4 ) } }
- { \fp_eval:n { 2 * sqrt ( #2 * #2 + #3 * #3 ) } }
- { \fp_eval:n { atand ( #3 , #2 ) } }
- { \fp_eval:n { atand ( #4 , #1 ) } }
- }
- #5
- }
-\cs_new_protected:Npn \__driver_draw_cm_decompose_auxii:nnnnN #1#2#3#4#5
- {
- \use:x
- {
- \__driver_draw_cm_decompose_auxiii:nnnnN
- { \fp_eval:n { ( #4 - #3 ) / 2 } }
- { \fp_eval:n { ( #1 + #2 ) / 2 } }
- { \fp_eval:n { ( #1 - #2 ) / 2 } }
- { \fp_eval:n { ( #4 + #3 ) / 2 } }
- }
- #5
- }
-\cs_new_protected:Npn \__driver_draw_cm_decompose_auxiii:nnnnN #1#2#3#4#5
- {
- \fp_compare:nNnTF { abs( #2 ) } > { abs ( #3 ) }
- { #5 {#1} {#2} {#3} {#4} }
- { #5 {#1} {#3} {#2} {#4} }
- }
-\cs_new_protected:Npn \driver_draw_box_use:Nnnnn #1#2#3#4#5
- {
- \__driver_scope_begin:
- \__driver_literal:x
- {
- pdf:btrans~matrix~
- \fp_eval:n {#2} ~ \fp_eval:n {#3} ~
- \fp_eval:n {#4} ~ \fp_eval:n {#5} ~
- 0 ~ 0
- }
- \hbox_overlap_right:n { \box_use:N #1 }
- \__driver_literal:n { pdf:etrans }
- \__driver_scope_end:
- }
-%% File: l3drivers-graphics.dtx
-\AtBeginDocument
- { \cs_new_eq:NN \driver_graphics_getbb_eps:n \graphics_read_bb:n }
-\int_new:N \g__driver_graphics_int
-\cs_new_protected:Npn \driver_graphics_include_eps:n #1
- {
- \__driver_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
- }
- }
-\cs_new_protected:Npn \driver_graphics_include_jpg:n #1
- { \__driver_graphics_include_auxi:nn {#1} { image } }
-\cs_new_eq:NN \driver_graphics_include_png:n \driver_graphics_include_jpg:n
-\cs_new_protected:Npn \__driver_graphics_include_auxi:nn #1#2
- {
- \__driver_graphics_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
- { :I }
- }
- {#1} {#2}
- }
-\cs_new_protected:Npn \__driver_graphics_include_auxii:nnn #1#2#3
- {
- \int_if_exist:cTF { c__driver_graphics_ #2#1 _int }
- {
- \__driver_literal:x
- { pdf:usexobj~@graphic \int_use:c { c__driver_graphics_ #2#1 _int } }
- }
- { \__driver_graphics_include_auxiii:nnn {#2} {#1} {#3} }
- }
-\cs_generate_variant:Nn \__driver_graphics_include_auxii:nnn { x }
-\cs_new_protected:Npn \__driver_graphics_include_auxiii:nnn #1#2#3
- {
- \int_gincr:N \g__driver_graphics_int
- \int_const:cn { c__driver_graphics_ #1#2 _int } { \g__driver_graphics_int }
- \__driver_literal:x
- {
- pdf:#3~
- @graphic \int_use:c { c__driver_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
- 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
- }
- (#1)
- \bool_lazy_or:nnT
- { \l_graphics_interpolate_bool }
- { ! \tl_if_empty_p:N \l_graphics_decodearray_tl }
- {
- <<
- \tl_if_empty:NF \l_graphics_decodearray_tl
- { /Decode~[ \l_graphics_decodearray_tl ] }
- \bool_if:NT \l_graphics_interpolate_bool
- { /Interpolate~true> }
- >>
- }
- }
- }
-\cs_new_protected:Npn \driver_graphics_getbb_jpg:n #1
- {
- \int_zero:N \l_graphics_page_int
- \tl_clear:N \l_graphics_pagebox_tl
- \__driver_graphics_getbb_auxi:nN {#1} \tex_XeTeXpicfile:D
- }
-\cs_new_eq:NN \driver_graphics_getbb_png:n \driver_graphics_getbb_jpg:n
-\cs_new_protected:Npn \driver_graphics_getbb_pdf:n #1
- {
- \tl_clear:N \l_graphics_decodearray_tl
- \bool_set_false:N \l_graphics_interpolate_bool
- \__driver_graphics_getbb_auxi:nN {#1} \tex_XeTeXpdffile:D
- }
-\cs_new_protected:Npn \__driver_graphics_getbb_auxi:nN #1#2
- {
- \int_compare:nNnTF \l_graphics_page_int > 1
- { \__driver_graphics_getbb_auxii:VnN \l_graphics_page_int {#1} #2 }
- { \__driver_graphics_getbb_auxiii:nNnn {#1} #2 { :P 1 } { page 1 } }
- }
-\cs_new_protected:Npn \__driver_graphics_getbb_auxii:nnN #1#2#3
- { \__driver_graphics_getbb_auxiii:nNnn {#2} #3 { :P #1 } { page #1 } }
-\cs_generate_variant:Nn \__driver_graphics_getbb_auxii:nnN { V }
-\cs_new_protected:Npn \__driver_graphics_getbb_auxiii:nNnn #1#2#3#4
- {
- \tl_if_empty:NTF \l_graphics_pagebox_tl
- { \__driver_graphics_getbb_auxiv:VnNnn \l_graphics_pagebox_tl }
- { \__driver_graphics_getbb_auxv:nNnn }
- {#1} #2 {#3} {#4}
- }
-\cs_new_protected:Npn \__driver_graphics_getbb_auxiv:nnNnn #1#2#3#4#5
- {
- \use:x
- {
- \__driver_graphics_getbb_auxv:nNnn {#2} #3 { : #1 #4 }
- { #5 ~ \__driver_graphics_getbb_pagebox:w #1 }
- }
- }
-\cs_generate_variant:Nn \__driver_graphics_getbb_auxiv:nnNnn { V }
-\cs_new_protected:Npn \__driver_graphics_getbb_auxv:nNnn #1#2#3#4
- {
- \graphics_bb_restore:nF {#1#3}
- { \__driver_graphics_getbb_auxvi:nNnn {#1} #2 {#3} {#4} }
- }
-\cs_new_protected:Npn \__driver_graphics_getbb_auxvi:nNnn #1#2#3#4
- {
- \hbox_set:Nn \l__driver_internal_box { #2 #1 ~ #4 }
- \dim_set:Nn \l_graphics_urx_dim { \box_wd:N \l__driver_internal_box }
- \dim_set:Nn \l_graphics_ury_dim { \box_ht:N \l__driver_internal_box }
- \graphics_bb_save:n {#1#3}
- }
-\cs_new:Npn \__driver_graphics_getbb_pagebox:w #1 box {#1}
-\cs_new_protected:Npn \driver_graphics_include_pdf:n #1
- {
- \tex_XeTeXpdffile:D
- \__driver_graphics_include_pdf_quote:w #1 "#1" \q_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 \__driver_graphics_getbb_pagebox:w \l_graphics_pagebox_tl
- }
-\cs_new:Npn \__driver_graphics_include_pdf_quote:w #1 " #2 " #3 \q_stop
- { " #2 " }
-%% File: l3drivers-pdf.dtx
-\cs_new_protected:Npx \__driver_pdf:n #1
- { \__driver_literal:n { pdf: #1 } }
-\cs_generate_variant:Nn \__driver_pdf:n { x }
-\cs_new_protected:Npn \driver_pdf_catalog_gput:nn #1#2
- { \__driver_pdf:n { put ~ @catalog << /#1 ~ #2 >> } }
-\cs_new_protected:Npn \driver_pdf_info_gput:nn #1#2
- { \__driver_pdf:n { docinfo << /#1 ~ #2 >> } }
-\int_new:N \g__driver_pdf_object_int
-\prop_new:N \g__driver_pdf_object_prop
-\cs_new_protected:Npn \driver_pdf_object_new:nn #1#2
- {
- \int_gincr:N \g__driver_pdf_object_int
- \int_const:cn
- { g__driver_pdf_object_ \tl_to_str:n {#1} _int }
- { \g__driver_pdf_object_int }
- \prop_gput:Nnn \g__driver_pdf_object_prop {#1} {#2}
- }
-\cs_new:Npn \driver_pdf_object_ref:n #1
- { @driver.obj \int_use:c { g__driver_pdf_object_ \tl_to_str:n {#1} _int } }
-\cs_new_protected:Npn \driver_pdf_object_write:nn #1#2
- {
- \exp_args:Nx \__driver_pdf_object_write:nnn
- { \prop_item:Nn \g__driver_pdf_object_prop {#1} } {#1} {#2}
- }
-\cs_new_protected:Npn \__driver_pdf_object_write:nnn #1#2#3
- { \use:c { __driver_pdf_object_write_ #1 :nn } {#2} {#3} }
-\cs_new_protected:Npn \__driver_pdf_object_write_array:nn #1#2
- {
- \__driver_pdf:x
- {
- obj ~ \driver_pdf_object_ref:n {#1} ~
- [ ~ \exp_not:n {#2} ~ ]
- }
- }
-\cs_new_protected:Npn \__driver_pdf_object_write_dict:nn #1#2
- {
- \__driver_pdf:x
- {
- obj ~ \driver_pdf_object_ref:n {#1} ~
- << ~ \exp_not:n {#2} ~ >>
- }
- }
-\cs_new_protected:Npn \__driver_pdf_object_write_fstream:nn #1#2
- { \__driver_pdf_object_write_stream:nnnn { f } {#1} #2 }
-\cs_new_protected:Npn \__driver_pdf_object_write_stream:nn #1#2
- { \__driver_pdf_object_write_stream:nnnn { } {#1} #2 }
-\cs_new_protected:Npn \__driver_pdf_object_write_stream:nnnn #1#2#3#4
- {
- \__driver_pdf:x
- {
- #1 stream ~ \driver_pdf_object_ref:n {#2} ~
- ( \exp_not:n {#4} ) ~ << \exp_not:n {#3} >>
-
- }
- }
-\bool_new:N \g__driver_landscape_bool
-\AtBeginDocument
- {
- \cs_if_exist:NT \landscape
- {
- \tl_put_right:Nn \landscape
- { \bool_gset_true:N \g__driver_landscape_bool }
- \tl_put_left:Nn \endlandscape
- { \bool_gset_false:N \g__driver_landscape_bool }
- }
- }
-\int_new:N \g__driver_pdf_annotation_int
-\cs_new_protected:Npn \driver_pdf_annotation:nnnn #1#2#3#4
- {
- \bool_if:NTF \g__driver_landscape_bool
- {
- \box_move_up:nn {#2}
- {
- \vbox:n
- {
- \__driver_pdf_annotation:nnnn
- { #2 + #3 } {#1} { 0pt } {#4}
- }
- }
- }
- { \__driver_pdf_annotation:nnnn {#1} {#2} {#3} {#4} }
- }
-\cs_new_protected:Npn \__driver_pdf_annotation:nnnn #1#2#3#4
- {
- \int_gincr:N \g__driver_pdf_object_int
- \int_gset_eq:NN \g__driver_pdf_annotation_int \g__driver_pdf_object_int
- \__driver_pdf:x
- {
- ann ~ @driver.obj \int_use:N \g__driver_pdf_object_int \c_space_tl
- width ~ \dim_eval:n {#1} ~
- height ~ \dim_eval:n {#2} ~
- depth ~ \dim_eval:n {#3} ~
- << #4 >>
- }
- }
-\cs_new_protected:Npn \driver_pdf_link_begin_goto:nnw #1#2
- { \__driver_pdf_link_begin:n { #1 /Subtype /Link /A << /S /GoTo /D ( #2 ) >> } }
-\cs_new_protected:Npn \driver_pdf_link_begin_user:nnw #1#2
- { \__driver_pdf_link_begin:n {#1#2} }
-\cs_new_protected:Npn \__driver_pdf_link_begin:n #1
- {
- \__driver_pdf:n
- {
- bann
- <<
- /Type /Annot
- #1
- >>
- }
- }
-\cs_new_protected:Npn \driver_pdf_link_end:
- { \__driver_pdf:n { eann } }
-\cs_new:Npn \driver_pdf_link_last: { }
-\cs_new_protected:Npn \driver_pdf_link_margin:n #1
- { \__driver_literal:x { dvipdfmx:config~g~ \dim_eval:n {#1} } }
-\cs_new_protected:Npn \driver_pdf_destination:nn #1#2
- {
- \__driver_pdf:x
- {
- dest ~ ( \exp_not:n {#1} )
- [
- @thispage
- \str_case:nnF {#2}
- {
- { xyz } { /XYZ ~ @xpos ~ @ypos ~ null }
- { fit } { /Fit }
- { fitb } { /FitB }
- { fitbh } { /FitBH }
- { fitbv } { /FitBV ~ @xpos }
- { fith } { /FitH ~ @ypos }
- { fitv } { /FitV ~ @xpos }
- }
- { /XYZ ~ @xpos ~ @ypos ~ \fp_eval:n { (#2) / 100 } }
- ]
- }
- }
-\cs_new_protected:Npn \driver_pdf_destination_rectangle:nn #1#2
- {
- \group_begin:
- \hbox_set:Nn \l__driver_internal_box {#2}
- \box_move_down:nn { \box_dp:N \l__driver_internal_box }
- {
- \hbox:n
- {
- \__driver_pdf:n { obj ~ @driver_#1_llx ~ @xpos }
- \__driver_pdf:n { obj ~ @driver_#1_lly ~ @ypos }
- }
- }
- \box_use:N \l__driver_internal_box
- \box_move_up:nn { \box_ht:N \l__driver_internal_box }
- {
- \hbox:n
- {
- \__driver_pdf:n
- {
- dest ~ (#1)
- [
- @thispage
- /FitR ~
- @driver_#1_llx ~ @driver_#1_lly ~
- @xpos ~ @ypos
- ]
- }
- }
- }
- \group_end:
- }
-\cs_new_protected:Npn \driver_pdf_compresslevel:n #1
- { \__driver_literal:x { dvipdfmx:config~z~ \int_eval:n {#1} } }
-\cs_new_protected:Npn \driver_pdf_compress_objects:n #1
- {
- \str_if_eq:nnF {#1} { true }
- { \__driver_literal:n { dvipdfmx:config~C~0x40 } }
- }
-\cs_new_protected:Npn \driver_pdf_version_major:n #1
- {
- \cs_gset:Npx \driver_pdf_version_major: { \int_eval:n {#1} }
- \__driver_literal:x { pdf:majorversion \driver_pdf_version_major: }
- }
-\cs_new_protected:Npn \driver_pdf_version_minor:n #1
- {
- \cs_gset:Npx \driver_pdf_version_minor: { \int_eval:n {#1} }
- \__driver_literal:x { pdf:minorversion \driver_pdf_version_minor: }
- }
-\cs_new:Npn \driver_pdf_version_major: { 1 }
-\cs_new:Npn \driver_pdf_version_minor: { 5 }
-%%
-%%
-%% End of file `l3xdvipdfmx.def'.