texlive[50972] Master/texmf-dist: l3 (3may19)

commits+karl at tug.org commits+karl at tug.org
Sat May 4 00:30:06 CEST 2019


Revision: 50972
          http://tug.org/svn/texlive?view=revision&revision=50972
Author:   karl
Date:     2019-05-04 00:30:06 +0200 (Sat, 04 May 2019)
Log Message:
-----------
l3 (3may19)

Modified Paths:
--------------
    trunk/Master/texmf-dist/doc/latex/l3experimental/CHANGELOG.md
    trunk/Master/texmf-dist/doc/latex/l3experimental/README.md
    trunk/Master/texmf-dist/doc/latex/l3experimental/l3benchmark/l3benchmark.pdf
    trunk/Master/texmf-dist/doc/latex/l3experimental/l3cctab/l3cctab.pdf
    trunk/Master/texmf-dist/doc/latex/l3experimental/l3color/l3color.pdf
    trunk/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw-code.pdf
    trunk/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw.pdf
    trunk/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-convert.pdf
    trunk/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.pdf
    trunk/Master/texmf-dist/doc/latex/l3experimental/l3sys-shell/l3sys-shell.pdf
    trunk/Master/texmf-dist/doc/latex/l3experimental/xcoffins/xcoffins.pdf
    trunk/Master/texmf-dist/doc/latex/l3experimental/xgalley/l3galley.pdf
    trunk/Master/texmf-dist/doc/latex/l3experimental/xgalley/xgalley.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md
    trunk/Master/texmf-dist/doc/latex/l3kernel/README.md
    trunk/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/interface3.tex
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.tex
    trunk/Master/texmf-dist/doc/latex/l3kernel/source3.pdf
    trunk/Master/texmf-dist/doc/latex/l3kernel/source3.tex
    trunk/Master/texmf-dist/doc/latex/l3kernel/source3body.tex
    trunk/Master/texmf-dist/doc/latex/l3packages/CHANGELOG.md
    trunk/Master/texmf-dist/doc/latex/l3packages/README.md
    trunk/Master/texmf-dist/doc/latex/l3packages/l3keys2e/l3keys2e.pdf
    trunk/Master/texmf-dist/doc/latex/l3packages/xfp/xfp.pdf
    trunk/Master/texmf-dist/doc/latex/l3packages/xfrac/xfrac.pdf
    trunk/Master/texmf-dist/doc/latex/l3packages/xparse/xparse.pdf
    trunk/Master/texmf-dist/doc/latex/l3packages/xtemplate/xtemplate.pdf
    trunk/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/l3cctab/l3cctab.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-boxes.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-layers.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-paths.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-points.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-scopes.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-softpath.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-state.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-transforms.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-convert.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/expl3.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3.ins
    trunk/Master/texmf-dist/source/latex/l3kernel/l3alloc.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3box.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3color-base.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3drivers-basics.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3drivers-box.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3drivers-color.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3drivers-draw.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3drivers-image.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3drivers-pdf.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3drivers.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3file.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3final.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3int.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3names.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3str.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3token.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx
    trunk/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx
    trunk/Master/texmf-dist/source/latex/l3packages/xfp/xfp.dtx
    trunk/Master/texmf-dist/source/latex/l3packages/xfrac/xfrac.dtx
    trunk/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx
    trunk/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx
    trunk/Master/texmf-dist/tex/latex/l3experimental/l3benchmark/l3benchmark.sty
    trunk/Master/texmf-dist/tex/latex/l3experimental/l3cctab/l3cctab.sty
    trunk/Master/texmf-dist/tex/latex/l3experimental/l3color/l3color.sty
    trunk/Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty
    trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-convert.sty
    trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty
    trunk/Master/texmf-dist/tex/latex/l3experimental/l3sys-shell/l3sys-shell.sty
    trunk/Master/texmf-dist/tex/latex/l3experimental/xcoffins/xcoffins.sty
    trunk/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty
    trunk/Master/texmf-dist/tex/latex/l3experimental/xgalley/xgalley.sty
    trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex
    trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex
    trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.sty
    trunk/Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def
    trunk/Master/texmf-dist/tex/latex/l3kernel/l3dvips.def
    trunk/Master/texmf-dist/tex/latex/l3kernel/l3dvisvgm.def
    trunk/Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def
    trunk/Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def
    trunk/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty
    trunk/Master/texmf-dist/tex/latex/l3packages/xfp/xfp.sty
    trunk/Master/texmf-dist/tex/latex/l3packages/xfrac/xfrac.sty
    trunk/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty
    trunk/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty

Added Paths:
-----------
    trunk/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx

Modified: trunk/Master/texmf-dist/doc/latex/l3experimental/CHANGELOG.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3experimental/CHANGELOG.md	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/doc/latex/l3experimental/CHANGELOG.md	2019-05-03 22:30:06 UTC (rev 50972)
@@ -7,12 +7,17 @@
 
 ## [Unreleased]
 
+## [2019-05-03]
+
+## Fixed
+
+- Cliping of paths by `l3draw`
+
 ## [2019-03-05]
 
 ### Added
 
 - Support for drawing layers
-- `\draw_point:nn` to allow 'fast' processing of co-ordinates
 
 ### Changed
 
@@ -70,7 +75,8 @@
 - New `l3color` module using `xcolor`-like expression syntax
 - New `l3draw` module, based on `pgf` layer of the TikZ system
 
-[Unreleased]: https://github.com/latex3/latex3/compare/2019-03-05...HEAD
+[Unreleased]: https://github.com/latex3/latex3/compare/2019-05-03...HEAD
+[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
 [2019-01-28]: https://github.com/latex3/latex3/compare/2018-10-31...2019-01-28
 [2018-10-31]: https://github.com/latex3/latex3/compare/2018-10-26...2018-10-31

Modified: trunk/Master/texmf-dist/doc/latex/l3experimental/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3experimental/README.md	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/doc/latex/l3experimental/README.md	2019-05-03 22:30:06 UTC (rev 50972)
@@ -1,7 +1,7 @@
 Experimental LaTeX3 Concepts
 ============================
 
-Release 2019-03-05
+Release 2019-05-03
 
 Overview
 --------

Modified: trunk/Master/texmf-dist/doc/latex/l3experimental/l3benchmark/l3benchmark.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3experimental/l3cctab/l3cctab.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3experimental/l3color/l3color.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw-code.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-convert.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3experimental/l3sys-shell/l3sys-shell.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3experimental/xcoffins/xcoffins.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3experimental/xgalley/l3galley.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3experimental/xgalley/xgalley.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md	2019-05-03 22:30:06 UTC (rev 50972)
@@ -7,6 +7,21 @@
 
 ## [Unreleased]
 
+## [2019-05-03]
+
+### Added
+
+- New `l3legacy` module containing
+  - `\legacy_if:n(TF)`
+
+### Changed
+
+- Moved `\file_get_mdfive_hash:nN(TF)`, `\file_get_size:nN(TF)`
+   and `\file_get_timestamp:nN(TF)` to stable
+- Moved `\file_if_exist_input:n` and `\file_if_exist_input:nF` to stable
+- Moved `\file_input_stop:` to stable
+- Moved `\peek_N_type:TF` to stable
+
 ## [2019-04-21]
 
 ### Added
@@ -357,7 +372,8 @@
 - 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-04-21...HEAD
+[Unreleased]: https://github.com/latex3/latex3/compare/2019-05-03...HEAD
+[2019-05-03]: https://github.com/latex3/latex3/compare/2019-04-21...2019-05-03
 [2019-04-21]: https://github.com/latex3/latex3/compare/2019-04-06...2019-04-21
 [2019-04-06]: https://github.com/latex3/latex3/compare/2019-03-26...2019-04-06
 [2019-03-26]: https://github.com/latex3/latex3/compare/2019-03-05...2019-03-26

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/README.md	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/README.md	2019-05-03 22:30:06 UTC (rev 50972)
@@ -1,7 +1,7 @@
 LaTeX3 Programming Conventions
 ==============================
 
-Release 2019-04-21
+Release 2019-05-03
 
 Overview
 --------

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/interface3.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/interface3.tex	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/interface3.tex	2019-05-03 22:30:06 UTC (rev 50972)
@@ -54,7 +54,7 @@
          {latex-team at latex-project.org}%
    }%
 }
-\date{Released 2019-04-21}
+\date{Released 2019-05-03}
 
 \pagenumbering{roman}
 \maketitle

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex	2019-05-03 22:30:06 UTC (rev 50972)
@@ -32,7 +32,7 @@
         {latex-team at latex-project.org}%
     }%
 }
-\date{Released 2019-04-21}
+\date{Released 2019-05-03}
 
 \begin{document}
 

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex	2019-05-03 22:30:06 UTC (rev 50972)
@@ -32,7 +32,7 @@
         {latex-team at latex-project.org}%
     }%
 }
-\date{Released 2019-04-21}
+\date{Released 2019-05-03}
 
 \newcommand{\TF}{\textit{(TF)}}
 

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.tex	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.tex	2019-05-03 22:30:06 UTC (rev 50972)
@@ -32,7 +32,7 @@
         {latex-team at latex-project.org}%
     }%
 }
-\date{Released 2019-04-21}
+\date{Released 2019-05-03}
 
 \newcommand{\TF}{\textit{(TF)}}
 

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/source3.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/source3.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/source3.tex	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/source3.tex	2019-05-03 22:30:06 UTC (rev 50972)
@@ -53,7 +53,7 @@
          {latex-team at latex-project.org}%
    }%
 }
-\date{Released 2019-04-21}
+\date{Released 2019-05-03}
 
 \pagenumbering{roman}
 \maketitle

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/source3body.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/source3body.tex	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/source3body.tex	2019-05-03 22:30:06 UTC (rev 50972)
@@ -481,6 +481,7 @@
 \DocInput{l3color-base.dtx}
 \DocInput{l3luatex.dtx}
 \DocInput{l3unicode.dtx}
+\DocInput{l3legacy.dtx}
 \DocInput{l3candidates.dtx}
 \DocInput{l3drivers.dtx}
 \ExplSyntaxOn

Modified: trunk/Master/texmf-dist/doc/latex/l3packages/CHANGELOG.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3packages/CHANGELOG.md	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/doc/latex/l3packages/CHANGELOG.md	2019-05-03 22:30:06 UTC (rev 50972)
@@ -7,6 +7,12 @@
 
 ## [Unreleased]
 
+## [2019-05-03]
+
+### Added
+
+- `xparse`: Support for `trace` package
+
 ## [2019-03-05]
 
 ### Added
@@ -40,7 +46,8 @@
 - Switch to ISO date format
 - Improve cross-module use of internal functions
 
-[Unreleased]: https://github.com/latex3/latex3/compare/2019-03-05...HEAD
+[Unreleased]: https://github.com/latex3/latex3/compare/2019-05-03...HEAD
+[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-09-24...2019-03-05
 [2018-09-24]: https://github.com/latex3/latex3/compare/2018-08-23...2018-09-24
 [2018-08-23]: https://github.com/latex3/latex3/compare/2018-05-12...2018-08-23

Modified: trunk/Master/texmf-dist/doc/latex/l3packages/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3packages/README.md	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/doc/latex/l3packages/README.md	2019-05-03 22:30:06 UTC (rev 50972)
@@ -1,7 +1,7 @@
 LaTeX3 High-Level Concepts
 ==========================
 
-Release 2019-03-05
+Release 2019-05-03
 
 Overview
 --------

Modified: trunk/Master/texmf-dist/doc/latex/l3packages/l3keys2e/l3keys2e.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3packages/xfp/xfp.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3packages/xfrac/xfrac.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3packages/xparse/xparse.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/doc/latex/l3packages/xtemplate/xtemplate.pdf
===================================================================
(Binary files differ)

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -46,7 +46,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-03-05}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %
@@ -128,7 +128,7 @@
 %
 %    \begin{macrocode}
 %<*package>
-\ProvidesExplPackage{l3benchmark}{2019-03-05}{}
+\ProvidesExplPackage{l3benchmark}{2019-05-03}{}
   {L3 Experimental benchmarking}
 %</package>
 %    \end{macrocode}

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3cctab/l3cctab.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3cctab/l3cctab.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3cctab/l3cctab.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -46,7 +46,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-03-05}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %
@@ -150,7 +150,7 @@
 %
 %    \begin{macrocode}
 %<*package>
-\ProvidesExplPackage{l3cctab}{2019-03-05}{}
+\ProvidesExplPackage{l3cctab}{2019-05-03}{}
   {L3 Experimental category code tables}
 %</package>
 %    \end{macrocode}

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -46,7 +46,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-03-05}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %
@@ -265,7 +265,7 @@
 %
 %    \begin{macrocode}
 %<*package>
-\ProvidesExplPackage{l3color}{2019-03-05}{}
+\ProvidesExplPackage{l3color}{2019-05-03}{}
   {L3 Experimental color support}
 %</package>
 %    \end{macrocode}

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-boxes.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-boxes.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-boxes.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-03-05}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-layers.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-layers.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-layers.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-03-05}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-paths.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-paths.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-paths.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-03-05}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %
@@ -880,7 +880,7 @@
           { \bool_set_true:c { l_@@_path_use_ ##1 _ bool } }
           {
             \cs_if_exist_use:cF { @@_path_use_action_ ##1 : }
-              { \ERROR }
+              { \msg_error:nnn { draw } { invalid-path-action } {##1} }
           }
       }
     \@@_softpath_round_corners:
@@ -888,11 +888,15 @@
       { \l_draw_bb_update_bool }
       { \l_@@_path_use_stroke_bool }
       { \@@_path_use_stroke_bb: }
-    \bool_if:NTF \l_@@_path_use_clear_bool
-      { \@@_softpath_use_clear: }
-      { \@@_softpath_use: }
+    \@@_softpath_use:
     \bool_if:NT \l_@@_path_use_clip_bool
-      { \driver_draw_clip: }
+      {
+        \driver_draw_clip:
+        \bool_lazy_or:nnF
+          { \l_@@_path_use_fill_bool }
+          { \l_@@_path_use_stroke_bool }
+          { \driver_draw_discardpath: }
+      }
     \bool_lazy_or:nnT
       { \l_@@_path_use_fill_bool }
       { \l_@@_path_use_stroke_bool }
@@ -905,6 +909,8 @@
             :
           }
       }
+    \bool_if:NT \l_@@_path_use_clear_bool
+      { \@@_softpath_clear: }
   }
 \cs_new_protected:Npn \@@_path_use_action_draw:
   {
@@ -1016,6 +1022,12 @@
 %    \end{macrocode}
 % \end{macro}
 %
+% \begin{macrocode}
+\msg_new:nnnn { draw } { invalid-path-action }
+  { Invalid~action~'#1'~for~path. }
+  { Paths~can~be~used~with~actions~'draw',~'clip',~'fill'~or~'stroke'. }
+% \end{macrocode}
+%
 %    \begin{macrocode}
 %</initex|package>
 %    \end{macrocode}

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-points.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-points.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-points.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-03-05}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-scopes.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-scopes.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-scopes.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-03-05}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-softpath.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-softpath.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-softpath.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-03-05}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %
@@ -105,7 +105,7 @@
 % \end{macro}
 %
 % \begin{macro}
-%   {\@@_softpath_use:, \@@_softpath_clear:, \@@_softpath_use_clear:}
+%   {\@@_softpath_use:, \@@_softpath_clear:}
 %   Using and clearing is trivial.
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_softpath_use:
@@ -118,11 +118,6 @@
     \tl_build_gclear:N \g_@@_softpath_main_tl
     \bool_gset_false:N \g_@@_softpath_corners_bool
   }
-\cs_new_protected:Npn \@@_softpath_use_clear:
-  {
-    \@@_softpath_use:
-    \@@_softpath_clear:
-  }
 %    \end{macrocode}
 % \end{macro}
 %

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-state.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-state.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-state.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-03-05}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-transforms.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-transforms.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-transforms.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-03-05}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -27,7 +27,6 @@
 %</driver|package>
 %<*driver>
 \documentclass[full]{l3doc}
-\usepackage[utf8]{inputenc}
 \usepackage{l3draw}
 % For creating code demonstrations
 % This needs access to some code-level interfaces in listings
@@ -111,7 +110,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-03-05}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %
@@ -609,13 +608,16 @@
 %   Inserts the current path, carrying out one ore more possible \meta{actions}
 %   (a comma list):
 %   \begin{itemize}
-%     \item \texttt{clear} Resets the path to empty
-%     \item \texttt{clip} Clips any content outside of the path
-%     \item \texttt{draw}
+%     \item \texttt{stroke} Draws a line along the current path
+%     \item \texttt{draw} A synonym for \texttt{stroke}
 %     \item \texttt{fill} Fills the interior of the path with the current
 %       file color
-%     \item \texttt{stroke} Draws a line along the current path
+%     \item \texttt{clip} Clips any content outside of the path
 %   \end{itemize}
+%   Actions are applied in the order given irrespective of the input order.
+%   Note that whilst it is possible to use a path without clearing it, the
+%   normal use case would be to clear the path (this resets data structures
+%   at the macro level).
 % \end{function}
 %
 % \subsubsection{Path operations on drawing axes}
@@ -1143,7 +1145,7 @@
 %
 %    \begin{macrocode}
 %<*package>
-\ProvidesExplPackage{l3draw}{2019-03-05}{}
+\ProvidesExplPackage{l3draw}{2019-05-03}{}
   {L3 Experimental core drawing support}
 %</package>
 %    \end{macrocode}

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-convert.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-convert.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-convert.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -46,7 +46,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-03-05}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %
@@ -234,7 +234,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\ProvidesExplPackage{l3str-convert}{2019-03-05}{}
+\ProvidesExplPackage{l3str-convert}{2019-05-03}{}
   {L3 Experimental string encoding conversions}
 %    \end{macrocode}
 %

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -48,7 +48,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-03-05}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %
@@ -164,7 +164,7 @@
 %
 %    \begin{macrocode}
 %<*package>
-\ProvidesExplPackage{l3str-format}{2019-03-05}{}
+\ProvidesExplPackage{l3str-format}{2019-05-03}{}
   {L3 Experimental string formatting}
 %</package>
 %    \end{macrocode}

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -46,7 +46,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-03-05}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %
@@ -136,7 +136,7 @@
 %
 %    \begin{macrocode}
 %<*package>
-\ProvidesExplPackage{l3sys-shell}{2019-03-05}{}
+\ProvidesExplPackage{l3sys-shell}{2019-05-03}{}
   {L3 Experimental system shell functions}
 %</package>
 %    \end{macrocode}

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -56,7 +56,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-03-05}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %
@@ -675,7 +675,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\ProvidesExplPackage{xcoffins}{2019-03-05}{}
+\ProvidesExplPackage{xcoffins}{2019-05-03}{}
   {L3 Experimental design level coffins}
 %    \end{macrocode}
 %

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -61,7 +61,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-03-05}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %
@@ -687,7 +687,7 @@
 %
 %    \begin{macrocode}
 %<*package>
-\ProvidesExplPackage{l3galley}{2019-03-05}{}
+\ProvidesExplPackage{l3galley}{2019-05-03}{}
   {L3 Experimental galley code}
 %</package>
 %    \end{macrocode}

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -47,7 +47,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-03-05}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %
@@ -734,7 +734,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\ProvidesExplPackage{xgalley}{2019-03-05}{}
+\ProvidesExplPackage{xgalley}{2019-05-03}{}
   {L3 Experimental galley}
 \RequirePackage{xparse,xtemplate,l3galley}
 %    \end{macrocode}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/expl3.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/expl3.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/expl3.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -23,7 +23,7 @@
 % for those people who are interested.
 %
 %<*driver|generic|package>
-\def\ExplFileDate{2019-04-21}%
+\def\ExplFileDate{2019-05-03}%
 %</driver|generic|package>
 %<*driver>
 \documentclass[full]{l3doc}
@@ -51,7 +51,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-04-21}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %
@@ -1025,9 +1025,10 @@
 %   \item Johannes Braams
 %   \item David Carlisle
 %   \item Robin Fairbairns
+%   \item Ulrike Fischer
+%   \item Enrico Gregorio
 %   \item Morten H{\o}gholm
 %   \item Bruno Le Floch
-%   \item Thomas Lotze
 %   \item Frank Mittelbach
 %   \item Will Robertson
 %   \item Chris Rowley
@@ -1039,6 +1040,7 @@
 %   \item Michael Downes
 %   \item Denys Duchier
 %   \item Alan Jeffrey
+%   \item Thomas Lotze
 %   \item Martin Schr{\"o}der
 % \end{itemize}
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3.ins	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3.ins	2019-05-03 22:30:06 UTC (rev 50972)
@@ -104,6 +104,7 @@
         \from{l3luatex.dtx}     {package,tex}
         \from{l3unicode.dtx}    {package}
         \from{l3candidates.dtx} {package}
+        \from{l3legacy.dtx}     {package}
         \from{l3deprecation.dtx}{package}
       }
   }

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3alloc.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3alloc.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3alloc.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-04-21}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-04-21}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %
@@ -914,6 +914,9 @@
 %     abc { def }
 %   \end{verbatim}
 %   \emph{i.e.} only the outer braces are removed.
+%   \begin{texnote}
+%     The \cs{use:n} function is equivalent to \LaTeXe{}'s \tn{@firstofone}.
+%   \end{texnote}
 % \end{function}
 %
 % \begin{function}[EXP]{\use_i:nn, \use_ii:nn}
@@ -929,6 +932,10 @@
 %   of these tokens is also fixed (if it has not already been by
 %   some other absorption). A single expansion is needed for the
 %   functions to take effect.
+%   \begin{texnote}
+%     These are equivalent to \LaTeXe{}'s \tn{@firstoftwo} and
+%     \tn{@secondoftwo}.
+%   \end{texnote}
 % \end{function}
 %
 % \begin{function}[EXP]{\use_i:nnn, \use_ii:nnn, \use_iii:nnn}
@@ -1003,6 +1010,10 @@
 %   These functions work after a single expansion. One or more of the
 %   \texttt{n} arguments may be an unbraced single token
 %   (\emph{i.e.}~an \texttt{N} argument).
+%   \begin{texnote}
+%     These are equivalent to \LaTeXe{}'s \tn{@gobble}, \tn{@gobbbletwo},
+%     \emph{etc.}
+%   \end{texnote}
 % \end{function}
 %
 % \begin{function}[EXP, added = 2018-06-18]{\use:e}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-04-21}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3box.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3box.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3box.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-04-21}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-04-21}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %
@@ -299,83 +299,6 @@
 %
 % \section{Additions to \pkg{l3file}}
 %
-% \begin{function}[noTF, added = 2017-07-11, updated = 2019-02-16]
-%   {\file_get_mdfive_hash:nN}
-%   \begin{syntax}
-%     \cs{file_get_mdfive_hash:nN} \Arg{file name} \meta{tl var}
-%   \end{syntax}
-%   Searches for \meta{file name} using the current \TeX{} search
-%   path and the additional paths controlled by \cs{file_path_include:n}.
-%   If found, sets the \meta{str var} to the MD5 sum generated from the
-%   content of the file. The file is read as bytes, which means that in
-%   contrast to most \TeX{} behaviour there will be a difference in result
-%   depending on the line endings used in text files. The same file will
-%   produce the same result between different engines: the algorithm used
-%   is the same in all cases.
-%   Where the file is not found, the \meta{str var} will be empty.
-% \end{function}
-%
-% \begin{function}[noTF, added = 2017-07-09, updated = 2019-02-16]
-%   {\file_get_size:nN}
-%   \begin{syntax}
-%     \cs{file_get_size:nN} \Arg{file name} \meta{tl var}
-%   \end{syntax}
-%   Searches for \meta{file name} using the current \TeX{} search
-%   path and the additional paths controlled by \cs{file_path_include:n}.
-%   If found, sets the \meta{str var} to the size of the file in bytes.
-%   Where the file is not found, the \meta{str var} will be empty.
-%   This is not available in older versions of \XeTeX{}.
-% \end{function}
-%
-% \begin{function}[noTF, added = 2017-07-09, updated = 2019-02-16]
-%   {\file_get_timestamp:nN}
-%   \begin{syntax}
-%     \cs{file_get_timestamp:nN} \Arg{file name} \meta{tl var}
-%   \end{syntax}
-%   Searches for \meta{file name} using the current \TeX{} search
-%   path and the additional paths controlled by \cs{file_path_include:n}.
-%   If found, sets the \meta{str var} to the modification timestamp of
-%   the file in the form |D:|\meta{year}\meta{month}\meta{day}\meta{hour}^^A
-%   \meta{minute}\meta{second}\meta{offset}, where the latter may be |Z|
-%   (UTC) or \meta{plus-minus}\meta{hours}|'|\meta{minutes}|'|.
-%   Where the file is not found, the \meta{str var} will be empty.
-%   This is not available in older versions of \XeTeX{}.
-% \end{function}
-%
-% \begin{function}[added = 2014-07-02]{\file_if_exist_input:n, \file_if_exist_input:nF}
-%   \begin{syntax}
-%     \cs{file_if_exist_input:n} \Arg{file name}
-%     \cs{file_if_exist_input:nF} \Arg{file name} \Arg{false code}
-%   \end{syntax}
-%   Searches for \meta{file name} using the current \TeX{} search
-%   path and the additional paths controlled by
-%   \cs{file_path_include:n}. If found then
-%   reads in the file as additional \LaTeX{} source as described for
-%   \cs{file_input:n}, otherwise inserts the \meta{false code}.
-%   Note that these functions do not raise
-%   an error if the file is not found, in contrast to \cs{file_input:n}.
-% \end{function}
-%
-% \begin{function}[added = 2017-07-07]{\file_input_stop:}
-%   \begin{syntax}
-%     \cs{file_input_stop:}
-%   \end{syntax}
-%   Ends the reading of a file started by \cs{file_input:n} or similar before
-%   the end of the file is reached. Where the file reading is being terminated
-%   due to an error, \cs{msg_critical:nn(nn)} should be preferred.
-%   \begin{texnote}
-%     This function must be used on a line on its own: \TeX{} reads files
-%     line-by-line and so any additional tokens in the \enquote{current} line
-%     will still be read.
-%
-%     This is also true if the function is hidden inside another function
-%     (which will be the normal case), i.e., all tokens on the same line
-%     in the source file are still processed. Putting it on a line by itself
-%     in the definition doesn't help as it is the line where it is used that
-%     counts!
-%   \end{texnote}
-% \end{function}
-%
 % \begin{function}[added = 2019-01-13]{\ior_map_variable:NNn}
 %   \begin{syntax}
 %     \cs{ior_map_variable:NNn} \meta{stream} \meta{tl~var} \Arg{code}
@@ -1324,26 +1247,6 @@
 %   and |#3| and |#4| empty.
 % \end{function}
 %
-% \begin{function}[TF, updated = 2012-12-20]{\peek_N_type:}
-%   \begin{syntax}
-%     \cs{peek_N_type:TF} \Arg{true code} \Arg{false code}
-%   \end{syntax}
-%   Tests if the next \meta{token} in the input stream can be safely
-%   grabbed as an \texttt{N}-type argument. The test is \meta{false}
-%   if the next \meta{token} is either an explicit or implicit
-%   begin-group or end-group token (with any character code), or
-%   an explicit or implicit space character (with character code $32$
-%   and category code $10$), or an outer token (never used in \LaTeX3)
-%   and \meta{true} in all other cases.
-%   Note that a \meta{true} result ensures that the next \meta{token} is
-%   a valid \texttt{N}-type argument. However, if the next \meta{token}
-%   is for instance \cs{c_space_token}, the test takes the
-%   \meta{false} branch, even though the next \meta{token} is in fact
-%   a valid \texttt{N}-type argument. The \meta{token} is left
-%   in the input stream after the \meta{true code} or \meta{false code}
-%   (as appropriate to the result of the test).
-% \end{function}
-%
 % \begin{function}[added = 2018-09-23]
 %   {
 %     \peek_catcode_collect_inline:Nn,
@@ -1595,130 +1498,6 @@
 %    \end{macrocode}
 % \end{macro}
 %
-% \subsection{Additions to \pkg{l3file}}
-%
-%    \begin{macrocode}
-%<@@=file>
-%    \end{macrocode}
-%
-% \begin{macro}
-%   {\file_get_mdfive_hash:nN, \file_get_size:nN, \file_get_timestamp:nN}
-% \begin{macro}{\@@_get_details:nnN}
-%   These are all wrappers around the \pdfTeX{} primitives doing the same
-%   jobs: as we want consistent file paths to be found, they are all set up
-%   using \cs{file_get_full_name:nN} and so are non-expandable \texttt{get}
-%   functions. Much of the code is repetitive but we need to branch for
-%   \LuaTeX{} (emulation in Lua), for the slightly different syntax
-%   needed for \tn{tex_mdfivesum:D} and for the fact that primitive
-%   coverage varies in other engines.
-%    \begin{macrocode}
-\cs_new_protected:Npn \file_get_mdfive_hash:nN #1#2
-  { \file_get_mdfive_hash:nNF {#1} #2 { \tl_set:Nn #2 { \q_no_value } } }
-\cs_new_protected:Npn \file_get_size:nN #1#2
-  { \file_get_size:nNF {#1} #2 { \tl_set:Nn #2 { \q_no_value } } }
-\cs_new_protected:Npn \file_get_timestamp:nN #1#2
-  { \file_get_timestamp:nNF {#1} #2 { \tl_set:Nn #2 { \q_no_value } } }
-\prg_new_protected_conditional:Npnn \file_get_mdfive_hash:nN #1#2 { T , F , TF }
-  { \@@_get_details:nnN {#1} { mdfivesum } {#2} }
-\prg_new_protected_conditional:Npnn \file_get_size:nN #1#2 { T , F , TF }
-  { \@@_get_details:nnN {#1} { size } {#2} }
-\prg_new_protected_conditional:Npnn \file_get_timestamp:nN #1#2 { T , F , TF }
-  { \@@_get_details:nnN {#1} { moddate } {#2} }
-\cs_new_protected:Npn \@@_get_details:nnN #1#2#3
-  {
-    \file_get_full_name:nNTF {#1} \l_@@_full_name_tl
-      {
-        \tl_set:Nx #3
-          {
-            \use:c { tex_file #2 :D } \exp_after:wN
-              { \l_@@_full_name_tl }
-          }
-        \prg_return_true:  
-      }
-      { \prg_return_false: }
-  }
-\sys_if_engine_luatex:TF
-  {
-    \cs_set_protected:Npn \@@_get_details:nnN #1#2#3
-      {
-        \file_get_full_name:nNTF {#1} \l_@@_full_name_tl
-          {
-            \tl_set:Nx #3
-              {
-                \lua_now:e
-                  {
-                    l3kernel.file#2
-                      ( " \lua_escape:e { \l_@@_full_name_tl } " )
-                  }
-              }
-            \prg_return_true:
-          }
-          { \prg_return_false: }
-      }
-  }
-  {
-    \prg_set_protected_conditional:Npnn \file_get_mdfive_hash:nN #1#2
-      { T , F ,  TF }
-      {
-        \file_get_full_name:nNTF {#1} \l_@@_full_name_tl
-          {
-            \tl_set:Nx #2
-              {
-                \tex_mdfivesum:D file \exp_after:wN
-                  { \l_@@_full_name_tl }
-              }
-            \prg_return_true:
-          }
-          { \prg_return_false: }
-      }
-    \cs_if_exist:NF \tex_filesize:D
-      {
-        \cs_set_protected:Npn \@@_get_details:nnN #1#2#3
-          {
-            \tl_clear:N #3
-            \__kernel_msg_error:nnx
-              { kernel } { primitive-not-available }
-              { \exp_not:c { (pdf)file #2 } }
-            \prg_return_false:
-          }
-      }
-  }
-\__kernel_msg_new:nnnn { kernel } { primitive-not-available }
-  { Primitive~\token_to_str:N #1 not~available }
-  {
-    The~version~of~XeTeX~in~use~does~not~provide~functionality~equivalent~to~
-    the~\token_to_str:N #1 primitive.
-  }
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\file_if_exist_input:n, \file_if_exist_input:nF}
-%   Input of a file with a test for existence.  We do not define the |T|
-%   or |TF| variants because the most useful place to place the
-%   \meta{true code} would be inconsistent with other conditionals.
-%    \begin{macrocode}
-\cs_new_protected:Npn \file_if_exist_input:n #1
-  {
-    \file_get_full_name:nNT {#1} \l_@@_full_name_tl
-      { \@@_input:V \l_@@_full_name_tl }
-  }
-\cs_new_protected:Npn \file_if_exist_input:nF #1#2
-  {
-    \file_get_full_name:nNTF {#1} \l_@@_full_name_tl
-      { \@@_input:V \l_@@_full_name_tl }
-      {#2}
-  }
-%    \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}{\file_input_stop:}
-%   A simple rename.
-%    \begin{macrocode}
-\cs_new_protected:Npn \file_input_stop: { \tex_endinput:D }
-%    \end{macrocode}
-% \end{macro}
-%
 % \subsection{Additions to \pkg{l3flag}}
 %
 %    \begin{macrocode}
@@ -4331,77 +4110,6 @@
 %<@@=peek>
 %    \end{macrocode}
 %
-% \begin{macro}[TF]{\peek_N_type:}
-% \begin{macro}
-%   {\@@_execute_branches_N_type:, \@@_N_type:w, \@@_N_type_aux:nnw}
-%   All tokens are \texttt{N}-type tokens, except in four cases:
-%   begin-group tokens, end-group tokens, space tokens with character
-%   code~$32$, and outer tokens.  Since \cs{l_peek_token} might be
-%   outer, we cannot use the convenient \cs{bool_if:nTF} function, and
-%   must resort to the old trick of using \tn{ifodd} to expand a set of
-%   tests.  The \texttt{false} branch of this test is taken if the token
-%   is one of the first three kinds of non-\texttt{N}-type tokens
-%   (explicit or implicit), thus we call \cs{@@_false:w}.  In the
-%   \texttt{true} branch, we must detect outer tokens, without impacting
-%   performance too much for non-outer tokens.  The first filter is to
-%   search for \texttt{outer} in the \tn{meaning} of \cs{l_peek_token}.
-%   If that is absent, \cs{use_none_delimit_by_q_stop:w} cleans up, and
-%   we call \cs{@@_true:w}.  Otherwise, the token can be a non-outer
-%   macro or a primitive mark whose parameter or replacement text
-%   contains \texttt{outer}, it can be the primitive \tn{outer}, or it
-%   can be an outer token.  Macros and marks would have \texttt{ma} in
-%   the part before the first occurrence of \texttt{outer}; the meaning
-%   of \tn{outer} has nothing after \texttt{outer}, contrarily to outer
-%   macros; and that covers all cases, calling \cs{@@_true:w} or
-%   \cs{@@_false:w} as appropriate.  Here, there is no \meta{search
-%     token}, so we feed a dummy \cs{scan_stop:} to the
-%   \cs{@@_token_generic:NNTF} function.
-%    \begin{macrocode}
-\group_begin:
-  \cs_set_protected:Npn \@@_tmp:w #1 \q_stop
-    {
-      \cs_new_protected:Npn \@@_execute_branches_N_type:
-        {
-          \if_int_odd:w
-              \if_catcode:w \exp_not:N \l_peek_token {   0 \exp_stop_f: \fi:
-              \if_catcode:w \exp_not:N \l_peek_token }   0 \exp_stop_f: \fi:
-              \if_meaning:w \l_peek_token \c_space_token 0 \exp_stop_f: \fi:
-              1 \exp_stop_f:
-            \exp_after:wN \@@_N_type:w
-              \token_to_meaning:N \l_peek_token
-              \q_mark \@@_N_type_aux:nnw
-              #1 \q_mark \use_none_delimit_by_q_stop:w
-              \q_stop
-            \exp_after:wN \@@_true:w
-          \else:
-            \exp_after:wN \@@_false:w
-          \fi:
-        }
-      \cs_new_protected:Npn \@@_N_type:w ##1 #1 ##2 \q_mark ##3
-        { ##3 {##1} {##2} }
-    }
-  \exp_after:wN \@@_tmp:w \tl_to_str:n { outer } \q_stop
-\group_end:
-\cs_new_protected:Npn \@@_N_type_aux:nnw #1 #2 #3 \fi:
-  {
-    \fi:
-    \tl_if_in:noTF {#1} { \tl_to_str:n {ma} }
-      { \@@_true:w }
-      { \tl_if_empty:nTF {#2} { \@@_true:w } { \@@_false:w } }
-  }
-\cs_new_protected:Npn \peek_N_type:TF
-  {
-    \@@_token_generic:NNTF
-      \@@_execute_branches_N_type: \scan_stop:
-  }
-\cs_new_protected:Npn \peek_N_type:T
-  { \@@_token_generic:NNT \@@_execute_branches_N_type: \scan_stop: }
-\cs_new_protected:Npn \peek_N_type:F
-  { \@@_token_generic:NNF \@@_execute_branches_N_type: \scan_stop: }
-%    \end{macrocode}
-% \end{macro}
-% \end{macro}
-%
 % \begin{variable}{\l_@@_collect_tl}
 %    \begin{macrocode}
 \tl_new:N \l_@@_collect_tl

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-04-21}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-04-21}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %
@@ -78,7 +78,7 @@
 % \begin{function}[added = 2011-08-17, updated = 2019-01-21]
 %  {
 %    \coffin_set_eq:NN, \coffin_set_eq:Nc,
-%    \coffin_set_eq:cN, \coffin_set_eq:cc
+%    \coffin_set_eq:cN, \coffin_set_eq:cc,
 %    \coffin_gset_eq:NN, \coffin_gset_eq:Nc,
 %    \coffin_gset_eq:cN, \coffin_gset_eq:cc
 %  }

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3color-base.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3color-base.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3color-base.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-04-21}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-04-21}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -79,7 +79,7 @@
 %
 % \title{The \cls{l3doc} class}
 % \author{\Team}
-% \date{Released 2019-04-21}
+% \date{Released 2019-05-03}
 % \maketitle
 % \tableofcontents
 %
@@ -432,7 +432,7 @@
 % necessary to highlight it as much and you also don't need to check it
 % for, say, having a test function and having a documentation chunk
 % earlier in a \env{function} environment.  \pkg{l3doc} will pick up these
-% cases form the presence of |__| in the name, or you may force marking
+% cases from the presence of |__| in the name, or you may force marking
 % as internal by using |\begin{macro}[int]| to mark it as such. The margin
 % call-out is then printed in grey for such cases.
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -63,7 +63,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-04-21}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3drivers-basics.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3drivers-basics.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3drivers-basics.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-04-21}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %
@@ -148,9 +148,21 @@
 %
 % \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:Npn \@@_postscript_header:n #1
+\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}
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3drivers-box.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3drivers-box.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3drivers-box.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-04-21}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3drivers-color.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3drivers-color.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3drivers-color.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-04-21}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3drivers-draw.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3drivers-draw.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3drivers-draw.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-04-21}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3drivers-image.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3drivers-image.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3drivers-image.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-04-21}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3drivers-pdf.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3drivers-pdf.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3drivers-pdf.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-04-21}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %
@@ -60,6 +60,12 @@
 %<@@=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
@@ -76,6 +82,13 @@
 %    \end{macrocode}
 % \end{variable}
 %
+% \begin{variable}{\l_@@_pdf_tmp_box}
+%   For fitting destinations.
+%    \begin{macrocode}
+\box_new:N \l_@@_pdf_tmp_box
+%    \end{macrocode}
+% \end{variable}
+%
 % \subsection{\texttt{dvips} driver}
 %
 %    \begin{macrocode}
@@ -82,6 +95,26 @@
 %<*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}
@@ -100,12 +133,12 @@
   {
     \int_gincr:N \g_@@_pdf_object_int
     \int_const:cn
-      { g_@@_pdf_object_ \tl_to_str:n {#1} _int }
+      { 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 { g_@@_pdf_object_ \tl_to_str:n {#1} _int } } }
+  { { driver.obj \int_use:c { c_@@_pdf_object_ \tl_to_str:n {#1} _int } } }
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
@@ -123,9 +156,9 @@
 %    \begin{macrocode}
 \cs_new_protected:Npn \driver_pdf_object_write:nn #1#2
   {
-    \@@_postscript:x
+    \@@_pdfmark:x
       {
-        mark /_objdef ~ \driver_pdf_object_ref:n {#1}
+        /_objdef ~ \driver_pdf_object_ref:n {#1}
         /type
         \str_case_e:nn
           { \prop_item:Nn \g_@@_pdf_object_prop {#1} }
@@ -135,7 +168,7 @@
             { fstream } { /stream }
             { stream }  { /stream }
           }
-        /OBJ ~ pdfmark
+        /OBJ
       }
     \use:c
       { @@_pdf_object_write_ \prop_item:Nn \g_@@_pdf_object_prop {#1} :nn }
@@ -143,18 +176,18 @@
   }
 \cs_new_protected:Npn \@@_pdf_object_write_array:nn #1#2
   {
-    \@@_postscript:x
+    \@@_pdfmark:x
       {
-        mark ~ \driver_pdf_object_ref:n {#1}
-          [ ~ \exp_not:n {#2} ~ ] ~ /PUTINTERVAL ~ pdfmark
+        \driver_pdf_object_ref:n {#1}
+          [ ~ \exp_not:n {#2} ~ ] ~ /PUTINTERVAL
       }
   }
 \cs_new_protected:Npn \@@_pdf_object_write_dict:nn #1#2
   {
-    \@@_postscript:x
+    \@@_pdfmark:x
       {
-        mark ~ \driver_pdf_object_ref:n {#1}
-          << \exp_not:n {#2} >> /PUT ~ pdfmark
+        \driver_pdf_object_ref:n {#1}
+          << \exp_not:n {#2} >> /PUT
       }
   }
 \cs_new_protected:Npn \@@_pdf_object_write_stream:nn #1#2
@@ -198,8 +231,9 @@
 % \begin{macro}
 %   {
 %     driver.cvs     ,
-%     driver.rect.ht ,
-%     driver.pt.dvi
+%     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
@@ -208,6 +242,7 @@
 \@@_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
   }
@@ -228,11 +263,15 @@
 %
 % \begin{macro}
 %   {
-%     driver.annotation.border ,
-%     driver.annotation.ll     ,
-%     driver.annotation.ur     ,
-%     driver.link.ll           ,
-%     driver.link.ur           ,
+%     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
@@ -240,9 +279,9 @@
 %    \begin{macrocode}
 \@@_postscript_header:n
   {
-    /driver.annotation.border
+    /driver.rect
       { /Rect [ driver.llx ~ driver.lly ~ driver.urx ~ driver.ury ] } def
-    /driver.annotation.ll
+    /driver.save.ll
       {
         currentpoint
         /driver.lly ~ exch ~ def
@@ -249,7 +288,7 @@
         /driver.llx ~ exch ~ def
       }
         def
-    /driver.annotation.ur
+    /driver.save.ur
       {
         currentpoint
         /driver.ury ~ exch ~ def
@@ -256,7 +295,7 @@
         /driver.urx ~ exch ~ def
       }
         def
-    /driver.link.ll
+    /driver.save.linkll
       {
         currentpoint ~
         driver.linkmargin ~ add ~
@@ -266,7 +305,7 @@
         /driver.llx ~ exch ~ def
       }
         def
-    /driver.link.ur
+    /driver.save.linkur
       {
         currentpoint ~
         driver.linkmargin ~ sub ~
@@ -282,6 +321,68 @@
 %
 % \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      ,
@@ -407,7 +508,7 @@
                 currentpoint ~ driver.originy ~ ne ~ exch ~
                   driver.originx ~ ne ~ or
                   {
-                    driver.link.ll
+                    driver.save.linkll
                     /driver.lly ~
                       driver.lly ~ driver.outerbox ~ 1 ~ get ~ sub ~ def ~
                     driver.bordertracking.begin
@@ -428,7 +529,7 @@
                 currentpoint ~
                 driver.originy ~ ne ~ exch ~ driver.originx ~ ne ~ or
                   {
-                    driver.link.ll
+                    driver.save.linkll
                     /driver.lly ~
                       driver.lly ~ driver.outerbox ~ 1 ~ get ~ sub ~ def ~
                     driver.bordertracking.begin
@@ -672,19 +773,19 @@
     \@@_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
-    \@@_postscript:x
+    \@@_pdfmark:x
       {
-          mark
-            /_objdef { driver.obj \int_use:N \g_@@_pdf_object_int }
-            driver.annotation.border ~
-            #4 ~
-            /ANN ~ pdfmark
+      
+        /_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.annotation.ll } } }
+      { \hbox:n { \@@_postscript:n { driver.save.ll } } }
     \hbox:n {#4}
     \box_move_up:nn {#2}
       {
@@ -691,18 +792,17 @@
         \hbox:n
           {
             \tex_kern:D \dim_eval:n {#1} \scan_stop:
-            \@@_postscript:n { driver.annotation.ur }
+            \@@_postscript:n { driver.save.ur }
           }
       }
     \int_gincr:N \g_@@_pdf_object_int
     \int_gset_eq:NN \g_@@_pdf_annotation_int \g_@@_pdf_object_int
-    \@@_postscript:x
+    \@@_pdfmark:x
       {
-        mark
-          /_objdef { driver.obj \int_use:N \g_@@_pdf_object_int }
-         driver.annotation.border ~
-          \c_@@_pdf_AR_fix_tl
-          /ANN ~ pdfmark
+        /_objdef { driver.obj \int_use:N \g_@@_pdf_object_int }
+        driver.rect ~
+        \c_@@_pdf_AR_fix_tl
+        /ANN
       }
   }
 %    \end{macrocode}
@@ -852,7 +952,7 @@
 %</package>
       }
     \box_move_down:nn { \box_dp:N \l_@@_pdf_content_box }
-      { \hbox:n { \@@_postscript:n { driver.link.ll } } }
+      { \hbox:n { \@@_postscript:n { driver.save.linkll } } }
     \@@_postscript:n { driver.bordertracking.begin }
     \hbox_unpack:N \l_@@_pdf_content_box
     \@@_postscript:n { driver.bordertracking.end }
@@ -859,13 +959,13 @@
     \box_move_up:nn { \box_ht:N \l_@@_pdf_content_box }
       {
         \hbox:n
-          { \@@_postscript:n { driver.link.ur } }
+          { \@@_postscript:n { driver.save.linkur } }
       }
     \@@_postscript:x
       {
         mark
         \g_@@_pdf_link_dict_tl /Subtype /Link ~
-        driver.annotation.border
+        driver.rect
         /ANN ~ driver.pdfmark
       }
     \@@_pdf_link_sf_restore:
@@ -998,6 +1098,63 @@
 %    \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_@@_pdf_tmp_box {#2}
+      \box_move_down:nn
+        { \box_dp:N \l_@@_pdf_tmp_box }
+        { \hbox:n { \@@_postscript:n { driver.save.ll } } }
+      \box_use:N \l_@@_pdf_tmp_box
+      \box_move_up:nn
+        { \box_ht:N \l_@@_pdf_tmp_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}
@@ -1142,6 +1299,70 @@
 %    \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_@@_pdf_tmp_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_@@_pdf_tmp_box
+        height \exp_not:N \box_ht:N \l_@@_pdf_tmp_box
+        depth  \exp_not:N \box_dp:N \l_@@_pdf_tmp_box 
+      \box_use:N \l_@@_pdf_tmp_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}
@@ -1163,7 +1384,7 @@
         {
           #1 reserveobjnum ~
           \int_const:cn
-            { g_@@_pdf_object_ \exp_not:N \tl_to_str:n {##1} _int }
+            { 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}
         }
@@ -1172,12 +1393,12 @@
     {
       \@@_tmp:w
         { \tex_pdfextension:D obj ~ }
-        { \tex_pdffeedback:D lastobj \scan_stop: }
+        { \exp_not:N \tex_pdffeedback:D lastobj \scan_stop: }
     }
     { \@@_tmp:w { \tex_pdfobj:D } { \tex_pdflastobj:D } }
 \group_end:
 \cs_new:Npn \driver_pdf_object_ref:n #1
-  { \int_use:c { g_@@_pdf_object_ \tl_to_str:n {#1} _int } ~ 0 ~ R }
+  { \int_use:c { c_@@_pdf_object_ \tl_to_str:n {#1} _int } ~ 0 ~ R }
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
@@ -1194,7 +1415,7 @@
         {
           \tex_immediate:D #1 useobjnum ~
           \int_use:c
-            { g_@@_pdf_object_ \tl_to_str:n {##1} _int }
+            { c_@@_pdf_object_ \tl_to_str:n {##1} _int }
             \str_case_e:nn
               { \prop_item:Nn \g_@@_pdf_object_prop {##1} }
               {
@@ -1333,6 +1554,17 @@
 %    \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}
@@ -1533,12 +1765,73 @@
 % \end{macro}
 %
 % \begin{macro}{\driver_pdf_link_margin:n}
-%   Nope.
+%   Pass to \texttt{dvipdfmx}.
 %    \begin{macrocode}
-\cs_new_protected:Npn \driver_pdf_link_margin:n #1 { }
+\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_@@_pdf_tmp_box {#2}
+      \box_move_down:nn { \box_dp:N \l_@@_pdf_tmp_box }
+        {
+          \hbox:n
+            {
+              \@@_pdf:n { obj ~ @driver_#1_llx ~ @xpos }
+              \@@_pdf:n { obj ~ @driver_#1_lly ~ @ypos }
+            }
+        }
+      \box_use:N \l_@@_pdf_tmp_box
+      \box_move_up:nn { \box_ht:N \l_@@_pdf_tmp_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}
@@ -1589,6 +1882,16 @@
 %<*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}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3drivers.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3drivers.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3drivers.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-04-21}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %
@@ -439,7 +439,7 @@
 %
 % \begin{function}{\driver_draw_box_use:Nnnnn}
 %   \begin{syntax}
-%     \cs{driver_draw_box:Nnnnnnn} \meta{box}
+%     \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
@@ -447,8 +447,9 @@
 %   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 as for other drawing elements the box here
-%   has no size from a \TeX{} perspective.
+%   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}
@@ -492,6 +493,9 @@
 %     \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
@@ -514,9 +518,76 @@
 %   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{} treat it as scoped by \TeX{}, whilst with
-%   \texttt{dvips} the scope is managed at the PostScript level.
+%   \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.
 % \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

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-04-21}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3file.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3file.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3file.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-04-21}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %
@@ -439,7 +439,7 @@
 % \subsection{Wrapping lines in output}
 %
 % \begin{function}[added = 2012-06-28, updated = 2017-12-04]
-%   {\iow_wrap:nnnN \iow_wrap:nxnN}
+%   {\iow_wrap:nnnN, \iow_wrap:nxnN}
 %   \begin{syntax}
 %     \cs{iow_wrap:nnnN} \Arg{text} \Arg{run-on text} \Arg{set up} \meta{function}
 %   \end{syntax}
@@ -655,6 +655,51 @@
 %   quote (|"|) characters or is surrounded by a pair of quotes.
 % \end{function}
 %
+% \begin{function}[noTF, added = 2017-07-11, updated = 2019-02-16]
+%   {\file_get_mdfive_hash:nN}
+%   \begin{syntax}
+%     \cs{file_get_mdfive_hash:nN} \Arg{file name} \meta{tl var}
+%   \end{syntax}
+%   Searches for \meta{file name} using the current \TeX{} search
+%   path and the additional paths controlled by \cs{l_file_search_path_seq}.
+%   If found, sets the \meta{tl var} to the MD5 sum generated from the
+%   content of the file. The file is read as bytes, which means that in
+%   contrast to most \TeX{} behaviour there will be a difference in result
+%   depending on the line endings used in text files. The same file will
+%   produce the same result between different engines: the algorithm used
+%   is the same in all cases.
+%   Where the file is not found, the \meta{tl var} will set to
+%   \cs{q_no_value}.
+% \end{function}
+%
+% \begin{function}[noTF, added = 2017-07-09, updated = 2019-02-16]
+%   {\file_get_size:nN}
+%   \begin{syntax}
+%     \cs{file_get_size:nN} \Arg{file name} \meta{tl var}
+%   \end{syntax}
+%   Searches for \meta{file name} using the current \TeX{} search
+%   path and the additional paths controlled by \cs{l_file_search_path_seq}.
+%   If found, sets the \meta{tl var} to the size of the file in bytes.
+%   Where the file is not found, the \meta{tl var} will set to \cs{q_no_value}.
+%   This is not available in older versions of \XeTeX{}.
+% \end{function}
+%
+% \begin{function}[noTF, added = 2017-07-09, updated = 2019-02-16]
+%   {\file_get_timestamp:nN}
+%   \begin{syntax}
+%     \cs{file_get_timestamp:nN} \Arg{file name} \meta{tl var}
+%   \end{syntax}
+%   Searches for \meta{file name} using the current \TeX{} search
+%   path and the additional paths controlled by \cs{l_file_search_path_seq}.
+%   If found, sets the \meta{tl var} to the modification timestamp of
+%   the file in the form |D:|\meta{year}\meta{month}\meta{day}\meta{hour}^^A
+%   \meta{minute}\meta{second}\meta{offset}, where the latter may be |Z|
+%   (UTC) or \meta{plus-minus}\meta{hours}|'|\meta{minutes}|'|.
+%   Where the file is not found, the \meta{tl var} will be set to
+%   \cs{q_no_value}.
+%   This is not available in older versions of \XeTeX{}.
+% \end{function}
+%
 % \begin{function}[updated = 2017-06-26]{\file_input:n}
 %   \begin{syntax}
 %     \cs{file_input:n} \Arg{file name}
@@ -666,6 +711,41 @@
 %   function. An error is raised if the file is not found.
 % \end{function}
 %
+% \begin{function}[added = 2014-07-02]{\file_if_exist_input:n, \file_if_exist_input:nF}
+%   \begin{syntax}
+%     \cs{file_if_exist_input:n} \Arg{file name}
+%     \cs{file_if_exist_input:nF} \Arg{file name} \Arg{false code}
+%   \end{syntax}
+%   Searches for \meta{file name} using the current \TeX{} search
+%   path and the additional paths controlled by
+%   \cs{file_path_include:n}. If found then
+%   reads in the file as additional \LaTeX{} source as described for
+%   \cs{file_input:n}, otherwise inserts the \meta{false code}.
+%   Note that these functions do not raise
+%   an error if the file is not found, in contrast to \cs{file_input:n}.
+% \end{function}
+%
+% \begin{function}[added = 2017-07-07]{\file_input_stop:}
+%   \begin{syntax}
+%     \cs{file_input_stop:}
+%   \end{syntax}
+%   Ends the reading of a file started by \cs{file_input:n} or similar before
+%   the end of the file is reached. Where the file reading is being terminated
+%   due to an error, \cs[index = msg_critical:nn]{msg_critical:nn(nn)}
+%   should be preferred.
+%   \begin{texnote}
+%     This function must be used on a line on its own: \TeX{} reads files
+%     line-by-line and so any additional tokens in the \enquote{current} line
+%     will still be read.
+%
+%     This is also true if the function is hidden inside another function
+%     (which will be the normal case), i.e., all tokens on the same line
+%     in the source file are still processed. Putting it on a line by itself
+%     in the definition doesn't help as it is the line where it is used that
+%     counts!
+%   \end{texnote}
+% \end{function}
+%
 % \begin{function}{\file_show_list:, \file_log_list:}
 %   \begin{syntax}
 %     \cs{file_show_list:}
@@ -2360,6 +2440,98 @@
 % \end{macro}
 % \end{macro}
 %
+% \begin{macro}
+%   {\file_get_mdfive_hash:nN, \file_get_size:nN, \file_get_timestamp:nN}
+% \begin{macro}{\@@_get_details:nnN}
+%   These are all wrappers around the \pdfTeX{} primitives doing the same
+%   jobs: as we want consistent file paths to be found, they are all set up
+%   using \cs{file_get_full_name:nN} and so are non-expandable \texttt{get}
+%   functions. Much of the code is repetitive but we need to branch for
+%   \LuaTeX{} (emulation in Lua), for the slightly different syntax
+%   needed for \tn{tex_mdfivesum:D} and for the fact that primitive
+%   coverage varies in other engines.
+%    \begin{macrocode}
+\cs_new_protected:Npn \file_get_mdfive_hash:nN #1#2
+  { \file_get_mdfive_hash:nNF {#1} #2 { \tl_set:Nn #2 { \q_no_value } } }
+\cs_new_protected:Npn \file_get_size:nN #1#2
+  { \file_get_size:nNF {#1} #2 { \tl_set:Nn #2 { \q_no_value } } }
+\cs_new_protected:Npn \file_get_timestamp:nN #1#2
+  { \file_get_timestamp:nNF {#1} #2 { \tl_set:Nn #2 { \q_no_value } } }
+\prg_new_protected_conditional:Npnn \file_get_mdfive_hash:nN #1#2 { T , F , TF }
+  { \@@_get_details:nnN {#1} { mdfivesum } {#2} }
+\prg_new_protected_conditional:Npnn \file_get_size:nN #1#2 { T , F , TF }
+  { \@@_get_details:nnN {#1} { size } {#2} }
+\prg_new_protected_conditional:Npnn \file_get_timestamp:nN #1#2 { T , F , TF }
+  { \@@_get_details:nnN {#1} { moddate } {#2} }
+\cs_new_protected:Npn \@@_get_details:nnN #1#2#3
+  {
+    \file_get_full_name:nNTF {#1} \l_@@_full_name_tl
+      {
+        \tl_set:Nx #3
+          {
+            \use:c { tex_file #2 :D } \exp_after:wN
+              { \l_@@_full_name_tl }
+          }
+        \prg_return_true:  
+      }
+      { \prg_return_false: }
+  }
+\sys_if_engine_luatex:TF
+  {
+    \cs_set_protected:Npn \@@_get_details:nnN #1#2#3
+      {
+        \file_get_full_name:nNTF {#1} \l_@@_full_name_tl
+          {
+            \tl_set:Nx #3
+              {
+                \lua_now:e
+                  {
+                    l3kernel.file#2
+                      ( " \lua_escape:e { \l_@@_full_name_tl } " )
+                  }
+              }
+            \prg_return_true:
+          }
+          { \prg_return_false: }
+      }
+  }
+  {
+    \prg_set_protected_conditional:Npnn \file_get_mdfive_hash:nN #1#2
+      { T , F ,  TF }
+      {
+        \file_get_full_name:nNTF {#1} \l_@@_full_name_tl
+          {
+            \tl_set:Nx #2
+              {
+                \tex_mdfivesum:D file \exp_after:wN
+                  { \l_@@_full_name_tl }
+              }
+            \prg_return_true:
+          }
+          { \prg_return_false: }
+      }
+    \cs_if_exist:NF \tex_filesize:D
+      {
+        \cs_set_protected:Npn \@@_get_details:nnN #1#2#3
+          {
+            \tl_clear:N #3
+            \__kernel_msg_error:nnx
+              { kernel } { primitive-not-available }
+              { \exp_not:c { (pdf)file #2 } }
+            \prg_return_false:
+          }
+      }
+  }
+\__kernel_msg_new:nnnn { kernel } { primitive-not-available }
+  { Primitive~\token_to_str:N #1 not~available }
+  {
+    The~version~of~XeTeX~in~use~does~not~provide~functionality~equivalent~to~
+    the~\token_to_str:N #1 primitive.
+  }
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
 % \begin{macro}[TF]{\file_if_exist:n}
 %   The test for the existence of a file is a wrapper around the function to
 %   add a path to a file. If the file was found, the path contains
@@ -2375,6 +2547,32 @@
 %    \end{macrocode}
 % \end{macro}
 %
+% \begin{macro}{\file_if_exist_input:n, \file_if_exist_input:nF}
+%   Input of a file with a test for existence.  We do not define the |T|
+%   or |TF| variants because the most useful place to place the
+%   \meta{true code} would be inconsistent with other conditionals.
+%    \begin{macrocode}
+\cs_new_protected:Npn \file_if_exist_input:n #1
+  {
+    \file_get_full_name:nNT {#1} \l_@@_full_name_tl
+      { \@@_input:V \l_@@_full_name_tl }
+  }
+\cs_new_protected:Npn \file_if_exist_input:nF #1#2
+  {
+    \file_get_full_name:nNTF {#1} \l_@@_full_name_tl
+      { \@@_input:V \l_@@_full_name_tl }
+      {#2}
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\file_input_stop:}
+%   A simple rename.
+%    \begin{macrocode}
+\cs_new_protected:Npn \file_input_stop: { \tex_endinput:D }
+%    \end{macrocode}
+% \end{macro}
+%
 % \begin{macro}{\__kernel_file_missing:n}
 %   An error message for a missing file, also used in \cs{ior_open:Nn}.
 %    \begin{macrocode}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3final.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3final.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3final.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-04-21}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-04-21}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -40,7 +40,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2019-04-21}
+% \date{Released 2019-05-03}
 % \maketitle
 %
 % \begin{documentation}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-04-21}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -40,7 +40,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2019-04-21}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-04-21}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -40,7 +40,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2019-04-21}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -40,7 +40,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2019-04-21}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -40,7 +40,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2019-04-21}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -40,7 +40,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2019-04-21}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -40,7 +40,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2019-04-21}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-04-21}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -40,7 +40,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2019-04-21}
+% \date{Released 2019-05-03}
 % \maketitle
 %
 % \begin{documentation}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -40,7 +40,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2019-04-21}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -49,7 +49,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-04-21}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %
@@ -888,7 +888,7 @@
 % specified, providing a tuple as an argument of any other operation
 % yields the \enquote{invalid operation} exception and a \nan{} result.
 %
-% \begin{function}[tested = m3fp-logic002, module = ]{?:}
+% \begin{function}[tested = m3fp-logic002]{?:}
 %   \begin{syntax}
 %     \cs{fp_eval:n} \{ \meta{operand_1} |?| \meta{operand_2} |:| \meta{operand_3} \}
 %   \end{syntax}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-04-21}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3int.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3int.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3int.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-04-21}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-04-21}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-04-21}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-04-21}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %

Added: trunk/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -0,0 +1,100 @@
+% \iffalse meta-comment
+%
+%% File: l3legacy.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{l3legacy} package\\ Interfaces to legacy concepts^^A
+% }
+%
+% \author{^^A
+%  The \LaTeX3 Project\thanks
+%    {^^A
+%      E-mail:
+%        \href{mailto:latex-team at latex-project.org}
+%          {latex-team at latex-project.org}^^A
+%    }^^A
+% }
+%
+% \date{Released 2019-05-03}
+%
+% \maketitle
+%
+% \begin{documentation}
+%
+% There are a small number of \TeX{} or \LaTeXe{} concepts which are not used
+% in \pkg{expl3} code but which need to be manipulated when working as a \LaTeXe{}
+% package. To allow these to be integrated cleanly into \pkg{expl3} code, a set
+% of legacy interfaces are provided here.
+%
+% \begin{function}[EXP,pTF]{\legacy_if:n}
+%   \begin{syntax}
+%     \cs{legacy_if:nTF} \Arg{name} \Arg{true code} \Arg{false code}
+%   \end{syntax}
+%   Tests if the \LaTeXe{}/plain \TeX{} conditional (generated by \tn{newif})
+%   if \texttt{true} or \texttt{false} and branches accordingly. The
+%   \meta{name} of the conditional should \emph{omit} the leading \texttt{if}.
+% \end{function}
+%
+% \end{documentation}
+%
+% \begin{implementation}
+%
+% \section{\pkg{l3legacy} Implementation}
+%
+%    \begin{macrocode}
+%<*package>
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+%<@@=legacy>
+%    \end{macrocode}
+%
+% \begin{macro}[EXP,pTF]{\legacy_if:n}
+%   A friendly wrapper.
+%    \begin{macrocode}
+\prg_new_conditional:Npnn \legacy_if:n #1 { p , T , F , TF }
+  {
+    \exp_args:Nc \if_meaning:w { if#1 } \iftrue
+      \prg_return_true:
+    \else:
+      \prg_return_false:
+    \fi:
+  }
+%    \end{macrocode}
+% \end{macro}
+%
+%    \begin{macrocode}
+%</package>
+%    \end{macrocode}
+%
+% \end{implementation}
+%
+% \PrintIndex


Property changes on: trunk/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-04-21}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-04-21}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3names.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3names.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3names.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-04-21}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %
@@ -578,6 +578,7 @@
   \@@_primitive:NN \pdfoutline            \tex_pdfoutline:D
   \@@_primitive:NN \pdfoutput             \tex_pdfoutput:D
   \@@_primitive:NN \pdfpageattr           \tex_pdfpageattr:D
+  \@@_primitive:NN \pdfpagesattr          \tex_pdfpagesattr:D
   \@@_primitive:NN \pdfpagebox            \tex_pdfpagebox:D
   \@@_primitive:NN \pdfpageref            \tex_pdfpageref:D
   \@@_primitive:NN \pdfpageresources      \tex_pdfpageresources:D
@@ -1107,6 +1108,11 @@
   \@@_primitive:NN \Uunderdelimiter       \tex_Uunderdelimiter:D
   \@@_primitive:NN \Uvextensible          \tex_Uvextensible:D
 %    \end{macrocode}
+% Primitives from Harf\TeX{}.
+%    \begin{macrocode}
+  \@@_primitive:NN \harftexrevision       \tex_harftexrevision:D
+  \@@_primitive:NN \harftexversion        \tex_harftexversion:D
+%    \end{macrocode}
 % Primitives from \pTeX{}.
 %    \begin{macrocode}
   \@@_primitive:NN \autospacing           \tex_autospacing:D

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-04-21}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-04-21}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-04-21}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-04-21}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-04-21}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-04-21}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-04-21}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3str.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3str.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3str.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-04-21}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-04-21}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-04-21}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-04-21}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3token.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3token.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3token.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-04-21}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %
@@ -931,6 +931,26 @@
 %   (as appropriate to the result of the test).
 % \end{function}
 %
+% \begin{function}[TF, updated = 2012-12-20]{\peek_N_type:}
+%   \begin{syntax}
+%     \cs{peek_N_type:TF} \Arg{true code} \Arg{false code}
+%   \end{syntax}
+%   Tests if the next \meta{token} in the input stream can be safely
+%   grabbed as an \texttt{N}-type argument. The test is \meta{false}
+%   if the next \meta{token} is either an explicit or implicit
+%   begin-group or end-group token (with any character code), or
+%   an explicit or implicit space character (with character code $32$
+%   and category code $10$), or an outer token (never used in \LaTeX3)
+%   and \meta{true} in all other cases.
+%   Note that a \meta{true} result ensures that the next \meta{token} is
+%   a valid \texttt{N}-type argument. However, if the next \meta{token}
+%   is for instance \cs{c_space_token}, the test takes the
+%   \meta{false} branch, even though the next \meta{token} is in fact
+%   a valid \texttt{N}-type argument. The \meta{token} is left
+%   in the input stream after the \meta{true code} or \meta{false code}
+%   (as appropriate to the result of the test).
+% \end{function}
+%
 % \section{Description of all possible tokens}
 % \label{sec:l3token:all-tokens}
 %
@@ -2405,7 +2425,78 @@
 %    \end{macrocode}
 % \end{macro}
 %
+% \begin{macro}[TF]{\peek_N_type:}
+% \begin{macro}
+%   {\@@_execute_branches_N_type:, \@@_N_type:w, \@@_N_type_aux:nnw}
+%   All tokens are \texttt{N}-type tokens, except in four cases:
+%   begin-group tokens, end-group tokens, space tokens with character
+%   code~$32$, and outer tokens.  Since \cs{l_peek_token} might be
+%   outer, we cannot use the convenient \cs{bool_if:nTF} function, and
+%   must resort to the old trick of using \tn{ifodd} to expand a set of
+%   tests.  The \texttt{false} branch of this test is taken if the token
+%   is one of the first three kinds of non-\texttt{N}-type tokens
+%   (explicit or implicit), thus we call \cs{@@_false:w}.  In the
+%   \texttt{true} branch, we must detect outer tokens, without impacting
+%   performance too much for non-outer tokens.  The first filter is to
+%   search for \texttt{outer} in the \tn{meaning} of \cs{l_peek_token}.
+%   If that is absent, \cs{use_none_delimit_by_q_stop:w} cleans up, and
+%   we call \cs{@@_true:w}.  Otherwise, the token can be a non-outer
+%   macro or a primitive mark whose parameter or replacement text
+%   contains \texttt{outer}, it can be the primitive \tn{outer}, or it
+%   can be an outer token.  Macros and marks would have \texttt{ma} in
+%   the part before the first occurrence of \texttt{outer}; the meaning
+%   of \tn{outer} has nothing after \texttt{outer}, contrarily to outer
+%   macros; and that covers all cases, calling \cs{@@_true:w} or
+%   \cs{@@_false:w} as appropriate.  Here, there is no \meta{search
+%     token}, so we feed a dummy \cs{scan_stop:} to the
+%   \cs{@@_token_generic:NNTF} function.
 %    \begin{macrocode}
+\group_begin:
+  \cs_set_protected:Npn \@@_tmp:w #1 \q_stop
+    {
+      \cs_new_protected:Npn \@@_execute_branches_N_type:
+        {
+          \if_int_odd:w
+              \if_catcode:w \exp_not:N \l_peek_token {   0 \exp_stop_f: \fi:
+              \if_catcode:w \exp_not:N \l_peek_token }   0 \exp_stop_f: \fi:
+              \if_meaning:w \l_peek_token \c_space_token 0 \exp_stop_f: \fi:
+              1 \exp_stop_f:
+            \exp_after:wN \@@_N_type:w
+              \token_to_meaning:N \l_peek_token
+              \q_mark \@@_N_type_aux:nnw
+              #1 \q_mark \use_none_delimit_by_q_stop:w
+              \q_stop
+            \exp_after:wN \@@_true:w
+          \else:
+            \exp_after:wN \@@_false:w
+          \fi:
+        }
+      \cs_new_protected:Npn \@@_N_type:w ##1 #1 ##2 \q_mark ##3
+        { ##3 {##1} {##2} }
+    }
+  \exp_after:wN \@@_tmp:w \tl_to_str:n { outer } \q_stop
+\group_end:
+\cs_new_protected:Npn \@@_N_type_aux:nnw #1 #2 #3 \fi:
+  {
+    \fi:
+    \tl_if_in:noTF {#1} { \tl_to_str:n {ma} }
+      { \@@_true:w }
+      { \tl_if_empty:nTF {#2} { \@@_true:w } { \@@_false:w } }
+  }
+\cs_new_protected:Npn \peek_N_type:TF
+  {
+    \@@_token_generic:NNTF
+      \@@_execute_branches_N_type: \scan_stop:
+  }
+\cs_new_protected:Npn \peek_N_type:T
+  { \@@_token_generic:NNT \@@_execute_branches_N_type: \scan_stop: }
+\cs_new_protected:Npn \peek_N_type:F
+  { \@@_token_generic:NNF \@@_execute_branches_N_type: \scan_stop: }
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%    \begin{macrocode}
 %</initex|package>
 %    \end{macrocode}
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-04-21}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -62,7 +62,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-03-05}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %
@@ -133,7 +133,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\ProvidesExplPackage{l3keys2e}{2019-03-05}{}
+\ProvidesExplPackage{l3keys2e}{2019-05-03}{}
   {LaTeX2e option processing using LaTeX3 keys}
 %    \end{macrocode}
 %

Modified: trunk/Master/texmf-dist/source/latex/l3packages/xfp/xfp.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3packages/xfp/xfp.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3packages/xfp/xfp.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -64,7 +64,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-03-05}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %
@@ -167,7 +167,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\ProvidesExplPackage{xfp}{2019-03-05}{}
+\ProvidesExplPackage{xfp}{2019-05-03}{}
   {L3 Floating point unit}
 %    \end{macrocode}
 %

Modified: trunk/Master/texmf-dist/source/latex/l3packages/xfrac/xfrac.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3packages/xfrac/xfrac.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3packages/xfrac/xfrac.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -65,7 +65,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-03-05}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %
@@ -535,7 +535,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\ProvidesExplPackage{xfrac}{2019-03-05}{}
+\ProvidesExplPackage{xfrac}{2019-05-03}{}
   {L3 Experimental split-level fractions}
 %    \end{macrocode}
 %

Modified: trunk/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -67,7 +67,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-03-05}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %
@@ -898,7 +898,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\ProvidesExplPackage{xparse}{2019-03-05}{}
+\ProvidesExplPackage{xparse}{2019-05-03}{}
   {L3 Experimental document command parser}
 %    \end{macrocode}
 %
@@ -1415,6 +1415,9 @@
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_start_env:nnnnn #1#2
   {
+%<*package>
+    \cs_if_exist_use:N \conditionally at traceoff
+%</package>
     \str_set:Nn \l_@@_environment_str {#2}
     \bool_set_true:N \l_@@_environment_bool
     \@@_start_aux:ccnnnn
@@ -1424,6 +1427,9 @@
   }
 \cs_new_protected:Npx \@@_start:nNNnnn #1#2#3
   {
+%<*package>
+    \exp_not:n { \cs_if_exist_use:N \conditionally at traceoff }
+%</package>
     \exp_not:c { xparse~function~is~not~expandable }
     \exp_not:n { \bool_set_false:N \l_@@_environment_bool }
     \exp_not:N \@@_start_aux:NNnnnn
@@ -1460,6 +1466,9 @@
   {
     \tl_if_empty:NF \l_@@_defaults_tl { \@@_defaults: }
     \tl_if_empty:NF \l_@@_process_all_tl { \@@_args_process: }
+%<*package>
+    \cs_if_exist_use:N \conditionally at traceon
+%</package>
     \exp_after:wN \l_@@_fn_code_tl \l_@@_args_tl
   }
 %    \end{macrocode}

Modified: trunk/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx	2019-05-03 22:30:06 UTC (rev 50972)
@@ -63,7 +63,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-03-05}
+% \date{Released 2019-05-03}
 %
 % \maketitle
 %
@@ -682,7 +682,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\ProvidesExplPackage{xtemplate}{2019-03-05}{}
+\ProvidesExplPackage{xtemplate}{2019-05-03}{}
   {L3 Experimental prototype document functions}
 %    \end{macrocode}
 %

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/l3benchmark/l3benchmark.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/l3benchmark/l3benchmark.sty	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3benchmark/l3benchmark.sty	2019-05-03 22:30:06 UTC (rev 50972)
@@ -20,7 +20,7 @@
 %% 
 %% File: l3benchmark.dtx
 \RequirePackage{expl3}
-\ProvidesExplPackage{l3benchmark}{2019-03-05}{}
+\ProvidesExplPackage{l3benchmark}{2019-05-03}{}
   {L3 Experimental benchmarking}
 \sys_if_engine_luatex:TF
   {

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/l3cctab/l3cctab.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/l3cctab/l3cctab.sty	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3cctab/l3cctab.sty	2019-05-03 22:30:06 UTC (rev 50972)
@@ -20,7 +20,7 @@
 %% 
 %% File: l3cctab.dtx
 \RequirePackage{expl3}
-\ProvidesExplPackage{l3cctab}{2019-03-05}{}
+\ProvidesExplPackage{l3cctab}{2019-05-03}{}
   {L3 Experimental category code tables}
 \int_new:N  \g__cctab_allocate_int
 \int_gset:Nn \g__cctab_allocate_int { -1 }

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/l3color/l3color.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/l3color/l3color.sty	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3color/l3color.sty	2019-05-03 22:30:06 UTC (rev 50972)
@@ -20,7 +20,7 @@
 %% 
 %% File: l3color.dtx
 \RequirePackage{expl3}
-\ProvidesExplPackage{l3color}{2019-03-05}{}
+\ProvidesExplPackage{l3color}{2019-05-03}{}
   {L3 Experimental color support}
 \tl_new:N \l__color_tmp_tl
 \prg_new_conditional:Npnn \__color_if_defined:n #1 { T, F, TF }

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty	2019-05-03 22:30:06 UTC (rev 50972)
@@ -28,7 +28,7 @@
 %% 
 %% File: l3draw.dtx
 \RequirePackage{expl3}
-\ProvidesExplPackage{l3draw}{2019-03-05}{}
+\ProvidesExplPackage{l3draw}{2019-05-03}{}
   {L3 Experimental core drawing support}
 \RequirePackage { l3color }
 %% File: l3draw-boxes.dtx
@@ -685,7 +685,7 @@
           { \bool_set_true:c { l__draw_path_use_ ##1 _ bool } }
           {
             \cs_if_exist_use:cF { __draw_path_use_action_ ##1 : }
-              { \ERROR }
+              { \msg_error:nnn { draw } { invalid-path-action } {##1} }
           }
       }
     \__draw_softpath_round_corners:
@@ -693,11 +693,15 @@
       { \l_draw_bb_update_bool }
       { \l__draw_path_use_stroke_bool }
       { \__draw_path_use_stroke_bb: }
-    \bool_if:NTF \l__draw_path_use_clear_bool
-      { \__draw_softpath_use_clear: }
-      { \__draw_softpath_use: }
+    \__draw_softpath_use:
     \bool_if:NT \l__draw_path_use_clip_bool
-      { \driver_draw_clip: }
+      {
+        \driver_draw_clip:
+        \bool_lazy_or:nnF
+          { \l__draw_path_use_fill_bool }
+          { \l__draw_path_use_stroke_bool }
+          { \driver_draw_discardpath: }
+      }
     \bool_lazy_or:nnT
       { \l__draw_path_use_fill_bool }
       { \l__draw_path_use_stroke_bool }
@@ -710,6 +714,8 @@
             :
           }
       }
+    \bool_if:NT \l__draw_path_use_clear_bool
+      { \__draw_softpath_clear: }
   }
 \cs_new_protected:Npn \__draw_path_use_action_draw:
   {
@@ -786,6 +792,9 @@
       \dim_gset_eq:NN \g__draw_path_lasty_dim \l__draw_path_lasty_dim
     \group_end:
   }
+\msg_new:nnnn { draw } { invalid-path-action }
+  { Invalid~action~'#1'~for~path. }
+  { Paths~can~be~used~with~actions~'draw',~'clip',~'fill'~or~'stroke'. }
 %% File: l3draw-points.dtx
 \cs_new:Npn \__draw_point_process:nn #1#2
   {
@@ -1323,11 +1332,6 @@
     \tl_build_gclear:N \g__draw_softpath_main_tl
     \bool_gset_false:N \g__draw_softpath_corners_bool
   }
-\cs_new_protected:Npn \__draw_softpath_use_clear:
-  {
-    \__draw_softpath_use:
-    \__draw_softpath_clear:
-  }
 \dim_new:N \g__draw_softpath_lastx_dim
 \dim_new:N \g__draw_softpath_lasty_dim
 \bool_new:N \g__draw_softpath_move_bool

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-convert.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-convert.sty	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-convert.sty	2019-05-03 22:30:06 UTC (rev 50972)
@@ -20,7 +20,7 @@
 %% 
 %% File: l3str-convert.dtx Copyright (C) 2013-2019 The LaTeX3 Project
 \RequirePackage{expl3}
-\ProvidesExplPackage{l3str-convert}{2019-03-05}{}
+\ProvidesExplPackage{l3str-convert}{2019-05-03}{}
   {L3 Experimental string encoding conversions}
 \cs_if_exist:NF \use_ii_i:nn
   { \cs_new:Npn \use_ii_i:nn #1#2 { #2 #1 } }

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty	2019-05-03 22:30:06 UTC (rev 50972)
@@ -20,7 +20,7 @@
 %% 
 %% File: l3str-format.dtx
 \RequirePackage{expl3}
-\ProvidesExplPackage{l3str-format}{2019-03-05}{}
+\ProvidesExplPackage{l3str-format}{2019-05-03}{}
   {L3 Experimental string formatting}
 \cs_generate_variant:Nn \use:nn { nf }
 \cs_generate_variant:Nn \use:nnn { fnf }

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/l3sys-shell/l3sys-shell.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/l3sys-shell/l3sys-shell.sty	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3sys-shell/l3sys-shell.sty	2019-05-03 22:30:06 UTC (rev 50972)
@@ -20,7 +20,7 @@
 %% 
 %% File: l3sys-shell.dtx
 \RequirePackage{expl3}
-\ProvidesExplPackage{l3sys-shell}{2019-03-05}{}
+\ProvidesExplPackage{l3sys-shell}{2019-05-03}{}
   {L3 Experimental system shell functions}
 \cs_new:Npn \__sys_path_to_win:n #1
   {

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/xcoffins/xcoffins.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/xcoffins/xcoffins.sty	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/xcoffins/xcoffins.sty	2019-05-03 22:30:06 UTC (rev 50972)
@@ -20,7 +20,7 @@
 %% 
 %% File: xcoffins.dtx
 \RequirePackage{xparse}
-\ProvidesExplPackage{xcoffins}{2019-03-05}{}
+\ProvidesExplPackage{xcoffins}{2019-05-03}{}
   {L3 Experimental design level coffins}
 \keys_define:nn { coffin }
   {

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty	2019-05-03 22:30:06 UTC (rev 50972)
@@ -32,7 +32,7 @@
       }%
     \endinput
   }
-\ProvidesExplPackage{l3galley}{2019-03-05}{}
+\ProvidesExplPackage{l3galley}{2019-05-03}{}
   {L3 Experimental galley code}
 \int_new:N \l__galley_tmp_int
 \seq_new:N \g__galley_tmpa_seq

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/xgalley/xgalley.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/xgalley/xgalley.sty	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/xgalley/xgalley.sty	2019-05-03 22:30:06 UTC (rev 50972)
@@ -20,7 +20,7 @@
 %% 
 %% File: xgalley.dtx
 \RequirePackage{xparse}
-\ProvidesExplPackage{xgalley}{2019-03-05}{}
+\ProvidesExplPackage{xgalley}{2019-05-03}{}
   {L3 Experimental galley}
 \RequirePackage{xparse,xtemplate,l3galley}
 \clist_new:N \l__galley_tmpa_clist

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex	2019-05-03 22:30:06 UTC (rev 50972)
@@ -48,6 +48,7 @@
 %% l3luatex.dtx  (with options: `package,tex')
 %% l3unicode.dtx  (with options: `package')
 %% l3candidates.dtx  (with options: `package')
+%% l3legacy.dtx  (with options: `package')
 %% l3deprecation.dtx  (with options: `package')
 %% 
 %% Copyright (C) 1990-2019 The LaTeX3 Project
@@ -63,7 +64,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: expl3.dtx
-\def\ExplFileDate{2019-04-21}%
+\def\ExplFileDate{2019-05-03}%
 \begingroup
   \def\next{\endgroup}%
   \expandafter\ifx\csname PackageError\endcsname\relax
@@ -744,6 +745,7 @@
   \__kernel_primitive:NN \pdfoutline            \tex_pdfoutline:D
   \__kernel_primitive:NN \pdfoutput             \tex_pdfoutput:D
   \__kernel_primitive:NN \pdfpageattr           \tex_pdfpageattr:D
+  \__kernel_primitive:NN \pdfpagesattr          \tex_pdfpagesattr:D
   \__kernel_primitive:NN \pdfpagebox            \tex_pdfpagebox:D
   \__kernel_primitive:NN \pdfpageref            \tex_pdfpageref:D
   \__kernel_primitive:NN \pdfpageresources      \tex_pdfpageresources:D
@@ -1223,6 +1225,8 @@
   \__kernel_primitive:NN \Usuperscript          \tex_Usuperscript:D
   \__kernel_primitive:NN \Uunderdelimiter       \tex_Uunderdelimiter:D
   \__kernel_primitive:NN \Uvextensible          \tex_Uvextensible:D
+  \__kernel_primitive:NN \harftexrevision       \tex_harftexrevision:D
+  \__kernel_primitive:NN \harftexversion        \tex_harftexversion:D
   \__kernel_primitive:NN \autospacing           \tex_autospacing:D
   \__kernel_primitive:NN \autoxspacing          \tex_autoxspacing:D
   \__kernel_primitive:NN \dtou                  \tex_dtou:D
@@ -8979,6 +8983,47 @@
           { \exp_not:c { peek_#1:NF } ##1 {##2} }
       }
   }
+\group_begin:
+  \cs_set_protected:Npn \__peek_tmp:w #1 \q_stop
+    {
+      \cs_new_protected:Npn \__peek_execute_branches_N_type:
+        {
+          \if_int_odd:w
+              \if_catcode:w \exp_not:N \l_peek_token {   0 \exp_stop_f: \fi:
+              \if_catcode:w \exp_not:N \l_peek_token }   0 \exp_stop_f: \fi:
+              \if_meaning:w \l_peek_token \c_space_token 0 \exp_stop_f: \fi:
+              1 \exp_stop_f:
+            \exp_after:wN \__peek_N_type:w
+              \token_to_meaning:N \l_peek_token
+              \q_mark \__peek_N_type_aux:nnw
+              #1 \q_mark \use_none_delimit_by_q_stop:w
+              \q_stop
+            \exp_after:wN \__peek_true:w
+          \else:
+            \exp_after:wN \__peek_false:w
+          \fi:
+        }
+      \cs_new_protected:Npn \__peek_N_type:w ##1 #1 ##2 \q_mark ##3
+        { ##3 {##1} {##2} }
+    }
+  \exp_after:wN \__peek_tmp:w \tl_to_str:n { outer } \q_stop
+\group_end:
+\cs_new_protected:Npn \__peek_N_type_aux:nnw #1 #2 #3 \fi:
+  {
+    \fi:
+    \tl_if_in:noTF {#1} { \tl_to_str:n {ma} }
+      { \__peek_true:w }
+      { \tl_if_empty:nTF {#2} { \__peek_true:w } { \__peek_false:w } }
+  }
+\cs_new_protected:Npn \peek_N_type:TF
+  {
+    \__peek_token_generic:NNTF
+      \__peek_execute_branches_N_type: \scan_stop:
+  }
+\cs_new_protected:Npn \peek_N_type:T
+  { \__peek_token_generic:NNT \__peek_execute_branches_N_type: \scan_stop: }
+\cs_new_protected:Npn \peek_N_type:F
+  { \__peek_token_generic:NNF \__peek_execute_branches_N_type: \scan_stop: }
 %% File: l3prop.dtx
 \scan_new:N \s__prop
 \cs_new:Npn \__prop_pair:wn #1 \s__prop #2
@@ -11012,6 +11057,83 @@
     \__kernel_ior_open:No \g__file_internal_ior \l__file_full_name_tl
     \ior_if_eof:NF \g__file_internal_ior { #2 { \prg_break: } }
   }
+\cs_new_protected:Npn \file_get_mdfive_hash:nN #1#2
+  { \file_get_mdfive_hash:nNF {#1} #2 { \tl_set:Nn #2 { \q_no_value } } }
+\cs_new_protected:Npn \file_get_size:nN #1#2
+  { \file_get_size:nNF {#1} #2 { \tl_set:Nn #2 { \q_no_value } } }
+\cs_new_protected:Npn \file_get_timestamp:nN #1#2
+  { \file_get_timestamp:nNF {#1} #2 { \tl_set:Nn #2 { \q_no_value } } }
+\prg_new_protected_conditional:Npnn \file_get_mdfive_hash:nN #1#2 { T , F , TF }
+  { \__file_get_details:nnN {#1} { mdfivesum } {#2} }
+\prg_new_protected_conditional:Npnn \file_get_size:nN #1#2 { T , F , TF }
+  { \__file_get_details:nnN {#1} { size } {#2} }
+\prg_new_protected_conditional:Npnn \file_get_timestamp:nN #1#2 { T , F , TF }
+  { \__file_get_details:nnN {#1} { moddate } {#2} }
+\cs_new_protected:Npn \__file_get_details:nnN #1#2#3
+  {
+    \file_get_full_name:nNTF {#1} \l__file_full_name_tl
+      {
+        \tl_set:Nx #3
+          {
+            \use:c { tex_file #2 :D } \exp_after:wN
+              { \l__file_full_name_tl }
+          }
+        \prg_return_true:
+      }
+      { \prg_return_false: }
+  }
+\sys_if_engine_luatex:TF
+  {
+    \cs_set_protected:Npn \__file_get_details:nnN #1#2#3
+      {
+        \file_get_full_name:nNTF {#1} \l__file_full_name_tl
+          {
+            \tl_set:Nx #3
+              {
+                \lua_now:e
+                  {
+                    l3kernel.file#2
+                      ( " \lua_escape:e { \l__file_full_name_tl } " )
+                  }
+              }
+            \prg_return_true:
+          }
+          { \prg_return_false: }
+      }
+  }
+  {
+    \prg_set_protected_conditional:Npnn \file_get_mdfive_hash:nN #1#2
+      { T , F ,  TF }
+      {
+        \file_get_full_name:nNTF {#1} \l__file_full_name_tl
+          {
+            \tl_set:Nx #2
+              {
+                \tex_mdfivesum:D file \exp_after:wN
+                  { \l__file_full_name_tl }
+              }
+            \prg_return_true:
+          }
+          { \prg_return_false: }
+      }
+    \cs_if_exist:NF \tex_filesize:D
+      {
+        \cs_set_protected:Npn \__file_get_details:nnN #1#2#3
+          {
+            \tl_clear:N #3
+            \__kernel_msg_error:nnx
+              { kernel } { primitive-not-available }
+              { \exp_not:c { (pdf)file #2 } }
+            \prg_return_false:
+          }
+      }
+  }
+\__kernel_msg_new:nnnn { kernel } { primitive-not-available }
+  { Primitive~\token_to_str:N #1 not~available }
+  {
+    The~version~of~XeTeX~in~use~does~not~provide~functionality~equivalent~to~
+    the~\token_to_str:N #1 primitive.
+  }
 \prg_new_protected_conditional:Npnn \file_if_exist:n #1 { T , F , TF }
   {
     \file_get_full_name:nNTF {#1} \l__file_full_name_tl
@@ -11018,6 +11140,18 @@
       { \prg_return_true: }
       { \prg_return_false: }
   }
+\cs_new_protected:Npn \file_if_exist_input:n #1
+  {
+    \file_get_full_name:nNT {#1} \l__file_full_name_tl
+      { \__file_input:V \l__file_full_name_tl }
+  }
+\cs_new_protected:Npn \file_if_exist_input:nF #1#2
+  {
+    \file_get_full_name:nNTF {#1} \l__file_full_name_tl
+      { \__file_input:V \l__file_full_name_tl }
+      {#2}
+  }
+\cs_new_protected:Npn \file_input_stop: { \tex_endinput:D }
 \cs_new_protected:Npn \__kernel_file_missing:n #1
   {
     \__kernel_file_name_sanitize:nN {#1} \l__file_base_name_tl
@@ -25830,95 +25964,6 @@
   }
 \cs_new:Npn \fp_sign:n #1
   { \fp_to_decimal:n { sign \__fp_parse:n {#1} } }
-\cs_new_protected:Npn \file_get_mdfive_hash:nN #1#2
-  { \file_get_mdfive_hash:nNF {#1} #2 { \tl_set:Nn #2 { \q_no_value } } }
-\cs_new_protected:Npn \file_get_size:nN #1#2
-  { \file_get_size:nNF {#1} #2 { \tl_set:Nn #2 { \q_no_value } } }
-\cs_new_protected:Npn \file_get_timestamp:nN #1#2
-  { \file_get_timestamp:nNF {#1} #2 { \tl_set:Nn #2 { \q_no_value } } }
-\prg_new_protected_conditional:Npnn \file_get_mdfive_hash:nN #1#2 { T , F , TF }
-  { \__file_get_details:nnN {#1} { mdfivesum } {#2} }
-\prg_new_protected_conditional:Npnn \file_get_size:nN #1#2 { T , F , TF }
-  { \__file_get_details:nnN {#1} { size } {#2} }
-\prg_new_protected_conditional:Npnn \file_get_timestamp:nN #1#2 { T , F , TF }
-  { \__file_get_details:nnN {#1} { moddate } {#2} }
-\cs_new_protected:Npn \__file_get_details:nnN #1#2#3
-  {
-    \file_get_full_name:nNTF {#1} \l__file_full_name_tl
-      {
-        \tl_set:Nx #3
-          {
-            \use:c { tex_file #2 :D } \exp_after:wN
-              { \l__file_full_name_tl }
-          }
-        \prg_return_true:
-      }
-      { \prg_return_false: }
-  }
-\sys_if_engine_luatex:TF
-  {
-    \cs_set_protected:Npn \__file_get_details:nnN #1#2#3
-      {
-        \file_get_full_name:nNTF {#1} \l__file_full_name_tl
-          {
-            \tl_set:Nx #3
-              {
-                \lua_now:e
-                  {
-                    l3kernel.file#2
-                      ( " \lua_escape:e { \l__file_full_name_tl } " )
-                  }
-              }
-            \prg_return_true:
-          }
-          { \prg_return_false: }
-      }
-  }
-  {
-    \prg_set_protected_conditional:Npnn \file_get_mdfive_hash:nN #1#2
-      { T , F ,  TF }
-      {
-        \file_get_full_name:nNTF {#1} \l__file_full_name_tl
-          {
-            \tl_set:Nx #2
-              {
-                \tex_mdfivesum:D file \exp_after:wN
-                  { \l__file_full_name_tl }
-              }
-            \prg_return_true:
-          }
-          { \prg_return_false: }
-      }
-    \cs_if_exist:NF \tex_filesize:D
-      {
-        \cs_set_protected:Npn \__file_get_details:nnN #1#2#3
-          {
-            \tl_clear:N #3
-            \__kernel_msg_error:nnx
-              { kernel } { primitive-not-available }
-              { \exp_not:c { (pdf)file #2 } }
-            \prg_return_false:
-          }
-      }
-  }
-\__kernel_msg_new:nnnn { kernel } { primitive-not-available }
-  { Primitive~\token_to_str:N #1 not~available }
-  {
-    The~version~of~XeTeX~in~use~does~not~provide~functionality~equivalent~to~
-    the~\token_to_str:N #1 primitive.
-  }
-\cs_new_protected:Npn \file_if_exist_input:n #1
-  {
-    \file_get_full_name:nNT {#1} \l__file_full_name_tl
-      { \__file_input:V \l__file_full_name_tl }
-  }
-\cs_new_protected:Npn \file_if_exist_input:nF #1#2
-  {
-    \file_get_full_name:nNTF {#1} \l__file_full_name_tl
-      { \__file_input:V \l__file_full_name_tl }
-      {#2}
-  }
-\cs_new_protected:Npn \file_input_stop: { \tex_endinput:D }
 \__kernel_patch:nnNNpn { \__flag_chk_exist:n {#1} } { }
 \cs_new:Npn \flag_raise_if_clear:n #1
   {
@@ -27549,47 +27594,6 @@
   \char_set_lccode:nn { `* } { `\ }
   \tex_lowercase:D { \tl_const:Nn \c_catcode_active_space_tl { * } }
 \group_end:
-\group_begin:
-  \cs_set_protected:Npn \__peek_tmp:w #1 \q_stop
-    {
-      \cs_new_protected:Npn \__peek_execute_branches_N_type:
-        {
-          \if_int_odd:w
-              \if_catcode:w \exp_not:N \l_peek_token {   0 \exp_stop_f: \fi:
-              \if_catcode:w \exp_not:N \l_peek_token }   0 \exp_stop_f: \fi:
-              \if_meaning:w \l_peek_token \c_space_token 0 \exp_stop_f: \fi:
-              1 \exp_stop_f:
-            \exp_after:wN \__peek_N_type:w
-              \token_to_meaning:N \l_peek_token
-              \q_mark \__peek_N_type_aux:nnw
-              #1 \q_mark \use_none_delimit_by_q_stop:w
-              \q_stop
-            \exp_after:wN \__peek_true:w
-          \else:
-            \exp_after:wN \__peek_false:w
-          \fi:
-        }
-      \cs_new_protected:Npn \__peek_N_type:w ##1 #1 ##2 \q_mark ##3
-        { ##3 {##1} {##2} }
-    }
-  \exp_after:wN \__peek_tmp:w \tl_to_str:n { outer } \q_stop
-\group_end:
-\cs_new_protected:Npn \__peek_N_type_aux:nnw #1 #2 #3 \fi:
-  {
-    \fi:
-    \tl_if_in:noTF {#1} { \tl_to_str:n {ma} }
-      { \__peek_true:w }
-      { \tl_if_empty:nTF {#2} { \__peek_true:w } { \__peek_false:w } }
-  }
-\cs_new_protected:Npn \peek_N_type:TF
-  {
-    \__peek_token_generic:NNTF
-      \__peek_execute_branches_N_type: \scan_stop:
-  }
-\cs_new_protected:Npn \peek_N_type:T
-  { \__peek_token_generic:NNT \__peek_execute_branches_N_type: \scan_stop: }
-\cs_new_protected:Npn \peek_N_type:F
-  { \__peek_token_generic:NNF \__peek_execute_branches_N_type: \scan_stop: }
 \tl_new:N \l__peek_collect_tl
 \cs_new_protected:Npn \peek_catcode_collect_inline:Nn
   { \__peek_collect:NNn \__peek_execute_branches_catcode: }
@@ -27637,6 +27641,15 @@
     \tl_put_right:Nn \l__peek_collect_tl {#1}
     \exp_after:wN \__peek_true_remove:w
   }
+%% File: l3legacy.dtx
+\prg_new_conditional:Npnn \legacy_if:n #1 { p , T , F , TF }
+  {
+    \exp_args:Nc \if_meaning:w { if#1 } \iftrue
+      \prg_return_true:
+    \else:
+      \prg_return_false:
+    \fi:
+  }
 %% File: l3deprecation.dtx
 \bool_new:N \l__deprecation_grace_period_bool
 \cs_new:Npn \__deprecation_date_compare:nNnTF #1#2#3

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex	2019-05-03 22:30:06 UTC (rev 50972)
@@ -19,7 +19,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: expl3.dtx
-\def\ExplFileDate{2019-04-21}%
+\def\ExplFileDate{2019-05-03}%
 \let\ExplLoaderFileDate\ExplFileDate
 \begingroup
   \def\tempa{LaTeX2e}%

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.sty	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.sty	2019-05-03 22:30:06 UTC (rev 50972)
@@ -19,7 +19,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: expl3.dtx
-\def\ExplFileDate{2019-04-21}%
+\def\ExplFileDate{2019-05-03}%
 \let\ExplLoaderFileDate\ExplFileDate
 \ProvidesPackage{expl3}
   [%

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def	2019-05-03 22:30:06 UTC (rev 50972)
@@ -437,9 +437,14 @@
 %% File: l3drivers-pdf.dtx
 \tl_const:Nn \c__driver_pdf_AR_fix_tl
   { /Ff ~ 65537 /FT /Btn /Subtype /Widget }
+\box_new:N \l__driver_pdf_tmp_box
 \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
@@ -557,7 +562,60 @@
 \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 { }
+\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_pdf_tmp_box {#2}
+      \box_move_down:nn { \box_dp:N \l__driver_pdf_tmp_box }
+        {
+          \hbox:n
+            {
+              \__driver_pdf:n { obj ~ @driver_#1_llx ~ @xpos }
+              \__driver_pdf:n { obj ~ @driver_#1_lly ~ @ypos }
+            }
+        }
+      \box_use:N \l__driver_pdf_tmp_box
+      \box_move_up:nn { \box_ht:N \l__driver_pdf_tmp_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_objects_enable: { }

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/l3dvips.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/l3dvips.def	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3dvips.def	2019-05-03 22:30:06 UTC (rev 50972)
@@ -39,8 +39,13 @@
 \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:Npn \__driver_postscript_header:n #1
-  { \__driver_literal:n { ! #1 } }
+\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] }
@@ -413,6 +418,14 @@
 %% File: l3drivers-pdf.dtx
 \tl_const:Nn \c__driver_pdf_AR_fix_tl
   { /Ff ~ 65537 /FT /Btn /Subtype /Widget }
+\box_new:N \l__driver_pdf_tmp_box
+\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
@@ -419,17 +432,17 @@
   {
     \int_gincr:N \g__driver_pdf_object_int
     \int_const:cn
-      { g__driver_pdf_object_ \tl_to_str:n {#1} _int }
+      { 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 { g__driver_pdf_object_ \tl_to_str:n {#1} _int } } }
+  { { 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_postscript:x
+    \__driver_pdfmark:x
       {
-        mark /_objdef ~ \driver_pdf_object_ref:n {#1}
+        /_objdef ~ \driver_pdf_object_ref:n {#1}
         /type
         \str_case_e:nn
           { \prop_item:Nn \g__driver_pdf_object_prop {#1} }
@@ -439,7 +452,7 @@
             { fstream } { /stream }
             { stream }  { /stream }
           }
-        /OBJ ~ pdfmark
+        /OBJ
       }
     \use:c
       { __driver_pdf_object_write_ \prop_item:Nn \g__driver_pdf_object_prop {#1} :nn }
@@ -447,18 +460,18 @@
   }
 \cs_new_protected:Npn \__driver_pdf_object_write_array:nn #1#2
   {
-    \__driver_postscript:x
+    \__driver_pdfmark:x
       {
-        mark ~ \driver_pdf_object_ref:n {#1}
-          [ ~ \exp_not:n {#2} ~ ] ~ /PUTINTERVAL ~ pdfmark
+        \driver_pdf_object_ref:n {#1}
+          [ ~ \exp_not:n {#2} ~ ] ~ /PUTINTERVAL
       }
   }
 \cs_new_protected:Npn \__driver_pdf_object_write_dict:nn #1#2
   {
-    \__driver_postscript:x
+    \__driver_pdfmark:x
       {
-        mark ~ \driver_pdf_object_ref:n {#1}
-          << \exp_not:n {#2} >> /PUT ~ pdfmark
+        \driver_pdf_object_ref:n {#1}
+          << \exp_not:n {#2} >> /PUT
       }
   }
 \cs_new_protected:Npn \__driver_pdf_object_write_stream:nn #1#2
@@ -486,6 +499,7 @@
 \__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
   }
@@ -497,9 +511,9 @@
   }
 \__driver_postscript_header:n
   {
-    /driver.annotation.border
+    /driver.rect
       { /Rect [ driver.llx ~ driver.lly ~ driver.urx ~ driver.ury ] } def
-    /driver.annotation.ll
+    /driver.save.ll
       {
         currentpoint
         /driver.lly ~ exch ~ def
@@ -506,7 +520,7 @@
         /driver.llx ~ exch ~ def
       }
         def
-    /driver.annotation.ur
+    /driver.save.ur
       {
         currentpoint
         /driver.ury ~ exch ~ def
@@ -513,7 +527,7 @@
         /driver.urx ~ exch ~ def
       }
         def
-    /driver.link.ll
+    /driver.save.linkll
       {
         currentpoint ~
         driver.linkmargin ~ add ~
@@ -523,7 +537,7 @@
         /driver.llx ~ exch ~ def
       }
         def
-    /driver.link.ur
+    /driver.save.linkur
       {
         currentpoint ~
         driver.linkmargin ~ sub ~
@@ -536,6 +550,44 @@
   }
 \__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
       {
@@ -640,7 +692,7 @@
                 currentpoint ~ driver.originy ~ ne ~ exch ~
                   driver.originx ~ ne ~ or
                   {
-                    driver.link.ll
+                    driver.save.linkll
                     /driver.lly ~
                       driver.lly ~ driver.outerbox ~ 1 ~ get ~ sub ~ def ~
                     driver.bordertracking.begin
@@ -661,7 +713,7 @@
                 currentpoint ~
                 driver.originy ~ ne ~ exch ~ driver.originx ~ ne ~ or
                   {
-                    driver.link.ll
+                    driver.save.linkll
                     /driver.lly ~
                       driver.lly ~ driver.outerbox ~ 1 ~ get ~ sub ~ def ~
                     driver.bordertracking.begin
@@ -838,19 +890,19 @@
     \__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_postscript:x
+    \__driver_pdfmark:x
       {
-          mark
-            /_objdef { driver.obj \int_use:N \g__driver_pdf_object_int }
-            driver.annotation.border ~
-            #4 ~
-            /ANN ~ pdfmark
+
+        /_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.annotation.ll } } }
+      { \hbox:n { \__driver_postscript:n { driver.save.ll } } }
     \hbox:n {#4}
     \box_move_up:nn {#2}
       {
@@ -857,18 +909,17 @@
         \hbox:n
           {
             \tex_kern:D \dim_eval:n {#1} \scan_stop:
-            \__driver_postscript:n { driver.annotation.ur }
+            \__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_postscript:x
+    \__driver_pdfmark:x
       {
-        mark
-          /_objdef { driver.obj \int_use:N \g__driver_pdf_object_int }
-         driver.annotation.border ~
-          \c__driver_pdf_AR_fix_tl
-          /ANN ~ pdfmark
+        /_objdef { driver.obj \int_use:N \g__driver_pdf_object_int }
+        driver.rect ~
+        \c__driver_pdf_AR_fix_tl
+        /ANN
       }
   }
 \cs_new:Npn \driver_pdf_annotation_last:
@@ -933,7 +984,7 @@
            { \evensidemargin }
       }
     \box_move_down:nn { \box_dp:N \l__driver_pdf_content_box }
-      { \hbox:n { \__driver_postscript:n { driver.link.ll } } }
+      { \hbox:n { \__driver_postscript:n { driver.save.linkll } } }
     \__driver_postscript:n { driver.bordertracking.begin }
     \hbox_unpack:N \l__driver_pdf_content_box
     \__driver_postscript:n { driver.bordertracking.end }
@@ -940,13 +991,13 @@
     \box_move_up:nn { \box_ht:N \l__driver_pdf_content_box }
       {
         \hbox:n
-          { \__driver_postscript:n { driver.link.ur } }
+          { \__driver_postscript:n { driver.save.linkur } }
       }
     \__driver_postscript:x
       {
         mark
         \g__driver_pdf_link_dict_tl /Subtype /Link ~
-        driver.annotation.border
+        driver.rect
         /ANN ~ driver.pdfmark
       }
     \__driver_pdf_link_sf_restore:
@@ -1044,6 +1095,55 @@
         /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_pdf_tmp_box {#2}
+      \box_move_down:nn
+        { \box_dp:N \l__driver_pdf_tmp_box }
+        { \hbox:n { \__driver_postscript:n { driver.save.ll } } }
+      \box_use:N \l__driver_pdf_tmp_box
+      \box_move_up:nn
+        { \box_ht:N \l__driver_pdf_tmp_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_objects_enable: { }
 \cs_new_protected:Npn \driver_pdf_objects_disable: { }

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/l3dvisvgm.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/l3dvisvgm.def	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3dvisvgm.def	2019-05-03 22:30:06 UTC (rev 50972)
@@ -469,6 +469,9 @@
 %% File: l3drivers-pdf.dtx
 \tl_const:Nn \c__driver_pdf_AR_fix_tl
   { /Ff ~ 65537 /FT /Btn /Subtype /Widget }
+\box_new:N \l__driver_pdf_tmp_box
+\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 { }

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def	2019-05-03 22:30:06 UTC (rev 50972)
@@ -424,6 +424,7 @@
 %% File: l3drivers-pdf.dtx
 \tl_const:Nn \c__driver_pdf_AR_fix_tl
   { /Ff ~ 65537 /FT /Btn /Subtype /Widget }
+\box_new:N \l__driver_pdf_tmp_box
 \cs_new_protected:Npx \__driver_pdf_AR_fix:
   {
     \cs_if_exist:NTF \tex_pdfextension:D
@@ -485,6 +486,54 @@
       { \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_pdf_tmp_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_pdf_tmp_box
+        height \exp_not:N \box_ht:N \l__driver_pdf_tmp_box
+        depth  \exp_not:N \box_dp:N \l__driver_pdf_tmp_box
+      \box_use:N \l__driver_pdf_tmp_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
@@ -493,7 +542,7 @@
         {
           #1 reserveobjnum ~
           \int_const:cn
-            { g__driver_pdf_object_ \exp_not:N \tl_to_str:n {##1} _int }
+            { 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}
         }
@@ -502,12 +551,12 @@
     {
       \__driver_tmp:w
         { \tex_pdfextension:D obj ~ }
-        { \tex_pdffeedback:D lastobj \scan_stop: }
+        { \exp_not:N \tex_pdffeedback:D lastobj \scan_stop: }
     }
     { \__driver_tmp:w { \tex_pdfobj:D } { \tex_pdflastobj:D } }
 \group_end:
 \cs_new:Npn \driver_pdf_object_ref:n #1
-  { \int_use:c { g__driver_pdf_object_ \tl_to_str:n {#1} _int } ~ 0 ~ R }
+  { \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
     {
@@ -515,7 +564,7 @@
         {
           \tex_immediate:D #1 useobjnum ~
           \int_use:c
-            { g__driver_pdf_object_ \tl_to_str:n {##1} _int }
+            { c__driver_pdf_object_ \tl_to_str:n {##1} _int }
             \str_case_e:nn
               { \prop_item:Nn \g__driver_pdf_object_prop {##1} }
               {

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def	2019-05-03 22:30:06 UTC (rev 50972)
@@ -480,9 +480,14 @@
 %% File: l3drivers-pdf.dtx
 \tl_const:Nn \c__driver_pdf_AR_fix_tl
   { /Ff ~ 65537 /FT /Btn /Subtype /Widget }
+\box_new:N \l__driver_pdf_tmp_box
 \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
@@ -600,7 +605,60 @@
 \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 { }
+\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_pdf_tmp_box {#2}
+      \box_move_down:nn { \box_dp:N \l__driver_pdf_tmp_box }
+        {
+          \hbox:n
+            {
+              \__driver_pdf:n { obj ~ @driver_#1_llx ~ @xpos }
+              \__driver_pdf:n { obj ~ @driver_#1_lly ~ @ypos }
+            }
+        }
+      \box_use:N \l__driver_pdf_tmp_box
+      \box_move_up:nn { \box_ht:N \l__driver_pdf_tmp_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_objects_enable: { }

Modified: trunk/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty	2019-05-03 22:30:06 UTC (rev 50972)
@@ -32,7 +32,7 @@
       }%
     \endinput
   }
-\ProvidesExplPackage{l3keys2e}{2019-03-05}{}
+\ProvidesExplPackage{l3keys2e}{2019-05-03}{}
   {LaTeX2e option processing using LaTeX3 keys}
 \cs_generate_variant:Nn \clist_put_right:Nn { Nv }
 \cs_generate_variant:Nn \keys_if_exist:nnT  { nx }

Modified: trunk/Master/texmf-dist/tex/latex/l3packages/xfp/xfp.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3packages/xfp/xfp.sty	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/tex/latex/l3packages/xfp/xfp.sty	2019-05-03 22:30:06 UTC (rev 50972)
@@ -33,7 +33,7 @@
     \endinput
   }
 \RequirePackage{xparse}
-\ProvidesExplPackage{xfp}{2019-03-05}{}
+\ProvidesExplPackage{xfp}{2019-05-03}{}
   {L3 Floating point unit}
 \NewExpandableDocumentCommand \fpeval { m } { \fp_eval:n {#1} }
 \NewExpandableDocumentCommand \inteval { m } { \int_eval:n {#1} }

Modified: trunk/Master/texmf-dist/tex/latex/l3packages/xfrac/xfrac.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3packages/xfrac/xfrac.sty	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/tex/latex/l3packages/xfrac/xfrac.sty	2019-05-03 22:30:06 UTC (rev 50972)
@@ -33,7 +33,7 @@
     \endinput
   }
 \RequirePackage{amstext,graphicx,l3keys2e,textcomp,xparse,xtemplate}
-\ProvidesExplPackage{xfrac}{2019-03-05}{}
+\ProvidesExplPackage{xfrac}{2019-05-03}{}
   {L3 Experimental split-level fractions}
 \keys_define:nn { xfrac }
   {

Modified: trunk/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty	2019-05-03 22:30:06 UTC (rev 50972)
@@ -32,7 +32,7 @@
       }%
     \endinput
   }
-\ProvidesExplPackage{xparse}{2019-03-05}{}
+\ProvidesExplPackage{xparse}{2019-05-03}{}
   {L3 Experimental document command parser}
 \tl_new:N \l__xparse_arg_spec_tl
 \tl_new:N \l__xparse_args_tl
@@ -238,6 +238,7 @@
   }
 \cs_new_protected:Npn \__xparse_start_env:nnnnn #1#2
   {
+    \cs_if_exist_use:N \conditionally at traceoff
     \str_set:Nn \l__xparse_environment_str {#2}
     \bool_set_true:N \l__xparse_environment_bool
     \__xparse_start_aux:ccnnnn
@@ -247,6 +248,7 @@
   }
 \cs_new_protected:Npx \__xparse_start:nNNnnn #1#2#3
   {
+    \exp_not:n { \cs_if_exist_use:N \conditionally at traceoff }
     \exp_not:c { xparse~function~is~not~expandable }
     \exp_not:n { \bool_set_false:N \l__xparse_environment_bool }
     \exp_not:N \__xparse_start_aux:NNnnnn
@@ -266,6 +268,7 @@
   {
     \tl_if_empty:NF \l__xparse_defaults_tl { \__xparse_defaults: }
     \tl_if_empty:NF \l__xparse_process_all_tl { \__xparse_args_process: }
+    \cs_if_exist_use:N \conditionally at traceon
     \exp_after:wN \l__xparse_fn_code_tl \l__xparse_args_tl
   }
 \cs_new_protected:Npn \__xparse_defaults:

Modified: trunk/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty	2019-05-03 22:29:09 UTC (rev 50971)
+++ trunk/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty	2019-05-03 22:30:06 UTC (rev 50972)
@@ -32,7 +32,7 @@
       }%
     \endinput
   }
-\ProvidesExplPackage{xtemplate}{2019-03-05}{}
+\ProvidesExplPackage{xtemplate}{2019-05-03}{}
   {L3 Experimental prototype document functions}
 \tl_const:Nn \c__xtemplate_code_root_tl      { template~code~>~ }
 \tl_const:Nn \c__xtemplate_defaults_root_tl  { template~defaults~>~ }



More information about the tex-live-commits mailing list