texlive[51248] trunk: l3 (28may19)

commits+karl at tug.org commits+karl at tug.org
Tue May 28 23:24:36 CEST 2019


Revision: 51248
          http://tug.org/svn/texlive?view=revision&revision=51248
Author:   karl
Date:     2019-05-28 23:24:36 +0200 (Tue, 28 May 2019)
Log Message:
-----------
l3 (28may19)

Modified Paths:
--------------
    trunk/Build/source/texk/texlive/linked_scripts/texlive/tlmgr.pl
    trunk/Build/source/texk/texlive/linked_scripts/tlshell/tlshell.tcl
    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/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-graphics.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/l3legacy.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/l3names.dtx
    trunk/Master/texmf-dist/source/latex/l3kernel/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-enc-iso88591.def
    trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885910.def
    trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885911.def
    trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885913.def
    trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885914.def
    trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885915.def
    trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885916.def
    trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88592.def
    trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88593.def
    trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88594.def
    trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88595.def
    trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88596.def
    trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88597.def
    trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88598.def
    trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88599.def
    trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-utf16.def
    trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-utf32.def
    trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-utf8.def
    trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-hex.def
    trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-name.def
    trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-string.def
    trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-url.def
    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.lua
    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/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/doc/latex/l3experimental/l3graphics/
    trunk/Master/texmf-dist/doc/latex/l3experimental/l3graphics/l3graphics.pdf
    trunk/Master/texmf-dist/source/latex/l3experimental/l3graphics/
    trunk/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.dtx
    trunk/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.ins
    trunk/Master/texmf-dist/tex/latex/l3experimental/l3graphics/
    trunk/Master/texmf-dist/tex/latex/l3experimental/l3graphics/l3graphics.sty

Modified: trunk/Build/source/texk/texlive/linked_scripts/texlive/tlmgr.pl
===================================================================
--- trunk/Build/source/texk/texlive/linked_scripts/texlive/tlmgr.pl	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Build/source/texk/texlive/linked_scripts/texlive/tlmgr.pl	2019-05-28 21:24:36 UTC (rev 51248)
@@ -1,12 +1,12 @@
 #!/usr/bin/env perl
-# $Id: tlmgr.pl 51173 2019-05-21 16:35:34Z karl $
+# $Id: tlmgr.pl 51217 2019-05-24 21:47:41Z karl $
 #
 # Copyright 2008-2019 Norbert Preining
 # This file is licensed under the GNU General Public License version 2
 # or any later version.
 
-my $svnrev = '$Revision: 51173 $';
-my $datrev = '$Date: 2019-05-21 18:35:34 +0200 (Tue, 21 May 2019) $';
+my $svnrev = '$Revision: 51217 $';
+my $datrev = '$Date: 2019-05-24 23:47:41 +0200 (Fri, 24 May 2019) $';
 my $tlmgrrevision;
 my $tlmgrversion;
 my $prg;
@@ -5493,7 +5493,7 @@
   # check if duplicates are different files.
   foreach my $f (@duplicates) {
     # assume tex4ht, xdy, afm stuff is ok, and don't worry about
-    # Changes, README et al.  Other per-format versions.
+    # Changes, README et al.  Other per-format versions, etc.
     next if $f =~ /\.(afm|cfg|dll|exe|4hf|htf|pm|xdy)$/;
     next if $f
       =~ /^((czech|slovak)\.sty
@@ -5500,6 +5500,7 @@
             |Changes
             |Makefile
             |README.*
+            |a_.*\.enc
             |cid2code\.txt
             |etex\.src
             |fithesis.*
@@ -5519,6 +5520,10 @@
             |texutil\.rb
             |tlmgrgui\.pl
            )$/x;
+    # For the a_.* line above: source*pro has .enc files which differ
+    # only in comments, hence the otftotfm-hashed name is the same.
+    # Seems like it could happen more or at random with other fonts too.
+    # Just have to accept ...
     #
     my @copies = grep (/\/$f$/, @runtime_files);
     # map files can be duplicated between (but not within) formats.
@@ -9843,7 +9848,7 @@
 distribution (L<https://tug.org/texlive>) and both are licensed under the
 GNU General Public License Version 2 or later.
 
-$Id: tlmgr.pl 51173 2019-05-21 16:35:34Z karl $
+$Id: tlmgr.pl 51217 2019-05-24 21:47:41Z karl $
 =cut
 
 # test HTML version: pod2html --cachedir=/tmp tlmgr.pl >/tmp/tlmgr.html

Modified: trunk/Build/source/texk/texlive/linked_scripts/tlshell/tlshell.tcl
===================================================================
--- trunk/Build/source/texk/texlive/linked_scripts/tlshell/tlshell.tcl	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Build/source/texk/texlive/linked_scripts/tlshell/tlshell.tcl	2019-05-28 21:24:36 UTC (rev 51248)
@@ -59,6 +59,9 @@
 # menus: disable tearoff feature
 option add *Menu.tearOff 0
 
+# for busy/idle indicators
+set ::busy [__ "Idle"]
+
 proc search_nocase {needle haystack} {
   if {$needle eq ""} {return -1}
   if {$haystack eq ""} {return -1}
@@ -90,6 +93,8 @@
   }
 } ; # do_debug
 
+### temporary files and directories #########################
+
 proc maketemp {ext} {
   set fname ""
   foreach i {0 1 2 3 4 5 6 7 8 9} { ; # ten tries
@@ -236,14 +241,15 @@
 }; # selective_dis_enable
 
 proc total_dis_enable {y_n} {
-  # to be invoked when tlmgr becomes busy or idle,, i.e.
+  # to be invoked when tlmgr becomes busy or idle, i.e.
   # if it starts with a tlmgr command through run_cmds
   # or read_line notices the command(s) ha(s|ve) ended.
   # This proc should cover all active interface elements of the main window.
-  # But if actions are initiated via a dialog, the main window can be
-  # deactivated by a grab and focus on the dialog instead.
+  # But if actions are initiated via a dialog, the main window can instead
+  # be deactivated by a grab and focus on the dialog.
 
-  if {!$y_n} {
+  if {!$y_n} { ; # disable
+    set ::busy [__ "Running"]
     . configure -menu .mn_empty
     foreach c [winfo children .] {
       if {$c ne ".showlogs" && [winfo class $c] in \
@@ -253,7 +259,7 @@
       }
     }
     set ::busy [__ "Running"]
-  } else {
+  } else { ; # enable
     . configure -menu .mn
     foreach c [winfo children .] {
       if {[winfo class $c] in \
@@ -291,7 +297,7 @@
 set ::n_updates 0
 set ::tlshell_updatable 0
 
-## data to be displayed ##
+## package data to be displayed ##
 
 # sorted display data for packages; package data stored as lists
 set ::filtered [dict create]
@@ -511,6 +517,12 @@
 # update button/menu states are set at initialization and updated
 # by update_globals, both via the selective_dis_enable proc
 
+# The repositories play a small part in this front end. Tlmgr mostly works
+# with a virtual repository, which is the combined set of repositories,
+# with pinning applied. But get_packages_info_remote must invoke
+# show_repositories to display updated verification info.
+# This proc is also invoked by initialize.
+
 # get_packages_info_local is invoked only once, at initialization.  After
 # installations and removals, the collected information is updated by
 # update_local_revnumbers.
@@ -520,7 +532,7 @@
 # ::have_remote is false. Afterwards, ::have_remote will be true, and
 # therefore get_packages_info_remote will not be called again.
 # get_packages_info_remot also invokes get_platforms
-# get_packages_info_remote invokes update_globals.
+# get_packages_info_remote invokes update_globals and show_repos.
 
 # update_local_revnumbers will be invoked after any updates. It also
 # invokes update_globals.
@@ -552,11 +564,11 @@
 
   # also update displayed status info
   if {$::have_remote && $::need_update_tlmgr} {
-    .topfl.luptodate configure -text [__ "Needs updating"]
+    .topfll.luptodate configure -text [__ "Needs updating"]
   } elseif $::have_remote {
-    .topfl.luptodate configure -text [__ "Up to date"]
+    .topfll.luptodate configure -text [__ "Up to date"]
   } else {
-    .topfl.luptodate configure -text [__ "Unknown"]
+    .topfll.luptodate configure -text [__ "Unknown"]
   }
   # ... and status of update buttons
   selective_dis_enable
@@ -741,10 +753,11 @@
       dict set ::pkgs $nm "shortdesc" $pdescr
     }
   }
-  get_platforms
+  get_platforms ; # derive from $::pkgs
+
   set ::have_remote 1
-  .topfl.loaded configure -text [__ "Loaded"] -foreground black
   update_globals
+  show_repos
   return 1
 } ; # get_packages_info_remote
 
@@ -793,6 +806,7 @@
   ppack .tllg.close -in .tllg.bottom -side right -anchor e
   ppack [ttk::label .tllg.status -anchor w] -in .tllg.bottom -side left
   bind .tllg <Escape> {.tllg.close invoke}
+  wm protocol .tllg WM_DELETE_WINDOW {.tllg.close invoke}
 
   # notebook pages and scrollbars
   ttk::frame .tllg.log
@@ -872,7 +886,7 @@
     do_debug "cannot open mirror list"
     return 0
   }
-    set re_geo {^\s*'([^']+)' => \{\s*$}
+  set re_geo {^\s*'([^']+)' => \{\s*$}
   set re_url {^\s*'(.*)' => ([0-9]+)}
   set re_clo {^\s*\},?\s*$}
   set starting 1
@@ -959,31 +973,32 @@
 
 proc pick_local_repo {} {
   set tail "tlpkg/texlive.tlpdb"
-  set nrep [.tlr.cur cget -text]
-  if {! [file exists [file join $nrep $tail]]} {
-    # not local, try originally configured $::repos(main)
-    set nrep $::repos(main)
-    if {! [file exists [file join $nrep $tail]]} {
+  set nw_repo [.tlr.cur cget -text]
+  if {! [file exists [file join $nw_repo $tail]]} {
+    # not local, try originally configured main repository
+    set nw_repo $::repos(main)
+    if {! [file exists [file join $nw_repo $tail]]} {
       # again, not local
-      set nrep $::env(HOME) ; # HOME also o.k. for windows
+      set nw_repo $::env(HOME) ; # HOME also o.k. for windows
     }
   }
   while 1 {
-    set nrep [browse4dir $nrep .tlr]
-    if {$nrep ne "" && ! [file exists [file join $nrep $tail]]} {
-      tk_messageBox -message [__ "%s not a repository" $nrep] -parent .tlr
+    set nw_repo [browse4dir $nw_repo .tlr]
+    if {$nw_repo ne "" && ! [file exists [file join $nw_repo $tail]]} {
+      tk_messageBox -message [__ "%s not a repository" $nw_repo] -parent .tlr
       continue
     } else {
       break
     }
   }
-  if {$nrep ne ""} {
+  if {$nw_repo ne ""} {
     .tlr.new delete 0 end
-    .tlr.new insert end $nrep
+    .tlr.new insert end $nw_repo
   }
 } ; # pick_local_repo
 
 proc get_repos_from_tlmgr {} {
+  #puts stderr "get_repos start"
   array unset ::repos
   run_cmd_waiting "option repository"
   set rps ""
@@ -1011,12 +1026,16 @@
       array unset ::repos
     }
   }
+  #puts stderr "get_repos end"
 }; # get_repos_from_tlmgr
 
 proc set_repos_in_tlmgr {} {
   # tlmgr has no command to replace a single repository;
-  # we need to compose opt_location ourselves from $::repos.
-  set nr [llength [array names ::repos]]
+  # we need to compose a string for opt_location ourselves from $::repos.
+  # a single repository should not get a tag.
+  # apparently, we can safely ignore bogus pinning data.
+  #puts stderr "set_repos start"
+  set nr [array size ::repos]
   set opt_repos ""
   set rp ""
   foreach nm [array names ::repos] {
@@ -1024,6 +1043,8 @@
       if {$nm ne "main"} {
         err_exit "Internal error"
       } else {
+        # pinning only supported for multiple repositories
+        run_cmd_waiting "pinning remove $nm --all"
         set rp $::repos(main)
       }
     } else {
@@ -1040,33 +1061,87 @@
     append opt_repos " $rp"
   }
   run_cmd_waiting "repository set [string range $opt_repos 1 end]"
+  #puts stderr [string range $opt_repos 1 end]
+  #puts stderr "set_repos end"
 }; # set_repos_in_tlmgr
 
-proc print_repos {} {
+proc show_repos {} {
+  #puts stderr "show_repos start"
+  set w .toprepo
+  foreach ch [winfo children $w] {destroy $ch}
   set nms [array names ::repos]
   set c [llength $nms]
+  grid [ttk::label $w.head -font TkHeadingFont] \
+      -row 0 -column 0 -columnspan 2 -sticky w
   if {$c <= 0} {
-    return ""
+    $w.head configure -text [__ "No repositories"]
+     return
   } elseif {$c == 1} {
-    set nm [lindex $nms 0]
-    return $::repos($nm)
+    $w.head configure -text [__ "Repository"]
   } else {
-    set s [__ "multiple repositories"]
-    set s "($s)"
-    foreach nm $nms {
-      append s "\n$::repos($nm)"
-      if {$nm ne $::repos($nm)} {append s " ($nm)"}
+    $w.head configure -text [__ "Multiple repositories"]
+  }
+  if {! $::have_remote} {
+    pgrid [ttk::label $w.load -text [__ "Not loaded"]] \
+        -sticky nw -row 0 -column 1
+  }
+  set do_veri 0
+  if {$::have_remote && [dict get $::pkgs texlive.infra localrev] >= 51140} {
+    set do_veri 1
+  }
+  set repodict [dict create]
+  if $do_veri {
+    run_cmd_waiting "repository status"
+    set re {^(\S+) (\S+)/tlpkg/texlive.tlpdb (-?\d+) (.*)$}
+    foreach l $::out_log {
+      #puts stderr $l
+      if [regexp $re $l dum nm rp n d] {
+        # dummy tag repository verification_code description
+        #puts stderr "scanning..."
+        # restore spaces and percent characters in nm and rp
+        set nm [string map {"%20" " "} $nm]
+        set nm [string map {"%25" "%"} $nm]
+        set rp [string map {"%20" " "} $rp]
+        set rp [string map {"%25" "%"} $rp]
+        dict set repodict $nm "url" $rp
+        dict set repodict $nm "vericode" $n
+        dict set repodict $nm "veridescr" $d
+        #puts stderr "${nm}: $rp"
+      }
     }
-    return $s
+  } else {
+    #puts stderr "No veri"
   }
-} ; # print_repos
+  set rw 0
+  foreach nm [array names ::repos] {
+    incr rw
+    pgrid [ttk::label $w.u$nm -text $::repos($nm) -justify left] \
+        -sticky nw -row $rw -column 0
+    if {$::repos($nm) eq $::any_mirror && $do_veri} {
+      set s $::repos($nm)
+      append s "\n[__ "Actual repository"]:\n"
+      append s [dict get $repodict $nm "url"]
+      $w.u$nm configure -text $s
+    }
+    if {[array size ::repos] > 1 && $nm ne $::repos($nm)} {
+      pgrid [ttk::label $w.n$nm -text "($nm)"] \
+        -sticky nw -row $rw -column 1
+    }
+    if $do_veri {
+      pgrid [ttk::label $w.v$nm -text \
+                "verification: [dict get $repodict $nm "veridescr"]"] \
+            -sticky nw -row $rw -column 2
+    }
+  }
+  #puts stderr "show_repos end"
+} ; # show_repos
 
 proc repos_commit {} {
+  #puts stderr "repos_commit start"
   set changes 0
-  # first remove pinning if appropriate
-  # then set repositories
-  # then add pinning if appropriate
+  # set repositories then add pinning if appropriate
   if {! [regexp {^\s*$} [.tlr.new get]]} {
+    # repository entry widget non-empty: retrieve it
     if {$::repos(main) ne [.tlr.new get]} {
       set ::repos(main) [.tlr.new get]
       set changes 1
@@ -1075,11 +1150,12 @@
   set had_contrib 0
   if $::toggle_contrib {
     set changes 1
+    #puts stderr "handle tlcontrib"
     foreach nm [array names ::repos] {
       if {$::repos($nm) eq $::tlcontrib} {
         set had_contrib 1
-        run_cmd "pinning remove $nm --all" 0
-        run_cmd "pinning remove $::repos($nm) --all" 0
+        run_cmds [list "pinning remove $nm --all" \
+                      "pinning remove $::repos($nm) --all"] 0
         vwait ::done_waiting
         array unset ::repos $nm
       }
@@ -1090,17 +1166,18 @@
   }
   if $changes {
     set_repos_in_tlmgr
-    .topfl.lrepos configure -text [print_repos]
     close_tlmgr
     start_tlmgr
-    # reload remote package information
     if {$::toggle_contrib && ! $had_contrib} {
       run_cmd_waiting "pinning add tlcontrib \"*\""
     }
+    # reload remote package information
     set ::have_remote 0
     get_packages_info_remote
     collect_filtered
+    #puts stderr "done committing"
   }
+  #puts stderr "really done committing"
 } ; # repos_commit
 
 # main repository dialog
@@ -1199,9 +1276,10 @@
   # two ways to close the dialog
   pack [ttk::frame .tlr.closebuttons] -pady [list 10 0] -in .tlr.bg -fill x
   ttk::button .tlr.save -text [__ "Save and Load"] -command {
-    #set ::repos(main) [.tlr.new get]
+    #puts stderr "save and load invoked"
     repos_commit
     end_dlg "" .tlr
+    #puts stderr "save and load done"
   }
   ppack .tlr.save -in .tlr.closebuttons -side right
   ttk::button .tlr.abort -text [__ "Abort"] -command {end_dlg "" .tlr}
@@ -1208,7 +1286,7 @@
   ppack .tlr.abort -in .tlr.closebuttons -side right
   bind .tlr <Escape> {.tlr.abort invoke}
 
-  wm protocol .tlr WM_DELETE_WINDOW {.tlr.abort invoke}
+  #wm protocol .tlr WM_DELETE_WINDOW {.tlr.abort invoke}
   wm resizable .tlr 1 0
   place_dlg .tlr .
 } ; # repository_dialog
@@ -1930,14 +2008,6 @@
   long_message [exec tlmgr --help] ok
 }
 
-proc run_entry {} {
-  # TODO: some validation of $cmd
-  set cmd [.tlcust.e get]
-  if {$cmd eq ""} return
-  run_cmd $cmd 1
-  end_dlg "" .tlcust
-}
-
 ## arbitrary commands: no way to know what data have to be updated
 #proc custom_command {} {
 #  create_dlg .tlcust .
@@ -1965,6 +2035,8 @@
   # width of '0', as a rough estimate of average character width
   set ::cw [font measure TkTextFont "0"]
 
+  ## menu ##
+
   # dummy empty menu to replace the real menu .mn in disabled states.
   # the "File" cascade should ensure that the dummy menu
   # occupies the same vertical space as the real menu.
@@ -2056,6 +2128,8 @@
 " [__ "GUI interface for TeX Live Manager\nImplemented in Tcl/Tk"]]}
   .mn.help add command -label [__ "tlmgr help"] -command show_help
 
+  ## menu end
+
   # wallpaper frame
   # it is possible to set a background color for a toplevel, but on
   # MacOS I did not find a way to determine the right $::default_bg
@@ -2079,30 +2153,29 @@
   ttk::button .showlogs -text [__ "Show logs"] -command show_logs
   ppack .showlogs -in .endbuttons -side right
 
-  # various info
+  # top of main window
   ppack [ttk::frame .topf] -in .bg -side top -anchor w -fill x
 
   # left frame
-  ppack [ttk::frame .topfl] -in .topf -side left -anchor nw
+  pack [ttk::frame .topfl] -in .topf -side left -anchor nw
 
-  ttk::label .topfl.llrepo -text [__ "Default repositories"] -anchor w
-  pgrid .topfl.llrepo -row 0 -column 0 -sticky nw
-  ttk::label .topfl.lrepos -text "" -justify left -anchor w
-  pgrid .topfl.lrepos -row 0 -column 1 -sticky nw
-  ttk::label .topfl.loaded -text [__ "Not loaded"] -foreground red -anchor w
-  pgrid .topfl.loaded -row 1 -column 1 -sticky w
+  # subframe for repositories, to be filled by show_repos
+  pack [ttk::frame .toprepo] -in .topfl -side top -anchor w
 
-  ttk::label .topfl.lluptodate -text [__ "TL Manager up to date?"] -anchor w
-  pgrid .topfl.lluptodate -row 2 -column 0 -sticky w
-  ttk::label .topfl.luptodate -text [__ "Unknown"] -anchor w
-  pgrid .topfl.luptodate -row 2 -column 1 -sticky w
+  # various info
+  pack [ttk::frame .topfll] -in .topfl -side top -anchor nw -pady [list 6 0]
+  ttk::label .topfll.lluptodate -text [__ "TL Manager up to date?"] -anchor w
+  pgrid .topfll.lluptodate -row 2 -column 0 -sticky w
+  ttk::label .topfll.luptodate -text [__ "Unknown"] -anchor w
+  pgrid .topfll.luptodate -row 2 -column 1 -sticky w
 
-  ttk::label .topfl.llcmd -text [__ "Last tlmgr command:"] -anchor w \
-      -wraplength [expr {60*$::cw}] -justify left
-  pgrid .topfl.llcmd -row 3 -column 0 -sticky w
-  ttk::label .topfl.lcmd -textvariable ::last_cmd -anchor w
-  pgrid .topfl.lcmd -row 3 -column 1 -sticky w
+  ttk::label .topfll.llcmd -text [__ "Last tlmgr command:"] -anchor w \
 
+  pgrid .topfll.llcmd -row 3 -column 0 -sticky w
+  ttk::label .topfll.lcmd -textvariable ::last_cmd \
+      -wraplength [expr {60*$::cw}] -justify left -anchor w
+  pgrid .topfll.lcmd -row 3 -column 1 -sticky w
+
   # right frame
   ppack [ttk::frame .topfr] -in .topf -side right -anchor ne
   if {$::tcl_platform(platform) eq "windows"} {
@@ -2321,9 +2394,9 @@
     .topfr.ladmin configure -text \
         [expr {$::multiuser ? [__ "Multi-user"] : [__ "Single-user"]}]
   }
+  get_packages_info_local
   get_repos_from_tlmgr
-  .topfl.lrepos configure -text [print_repos]
-  get_packages_info_local
+  show_repos
   # svns for  tlmgr and tlshell
   .topfr.linfra configure -text \
       "tlmgr: r[dict get $::pkgs texlive.infra localrev]"

Modified: trunk/Master/texmf-dist/doc/latex/l3experimental/CHANGELOG.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3experimental/CHANGELOG.md	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/doc/latex/l3experimental/CHANGELOG.md	2019-05-28 21:24:36 UTC (rev 51248)
@@ -7,11 +7,21 @@
 
 ## [Unreleased]
 
+## [2019-05-28]
+
+### Added
+
+- New `l3graphics` module
+
+### Fixed
+
+- Missing `\scan_stop:` in benchmark code (fixes #577)
+
 ## [2019-05-03]
 
 ## Fixed
 
-- Cliping of paths by `l3draw`
+- Clipping of paths by `l3draw`
 
 ## [2019-03-05]
 
@@ -75,7 +85,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-05-03...HEAD
+[Unreleased]: https://github.com/latex3/latex3/compare/2019-05-28...HEAD
+[2019-05-28]: https://github.com/latex3/latex3/compare/2019-05-03...2019-05-28
 [2019-05-03]: https://github.com/latex3/latex3/compare/2019-03-05...2019-05-03
 [2019-03-05]: https://github.com/latex3/latex3/compare/2019-01-28...2019-03-05
 [2019-01-28]: https://github.com/latex3/latex3/compare/2018-10-31...2019-01-28

Modified: trunk/Master/texmf-dist/doc/latex/l3experimental/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3experimental/README.md	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/doc/latex/l3experimental/README.md	2019-05-28 21:24:36 UTC (rev 51248)
@@ -1,7 +1,7 @@
 Experimental LaTeX3 Concepts
 ============================
 
-Release 2019-05-03
+Release 2019-05-28
 
 Overview
 --------
@@ -25,11 +25,11 @@
 * `l3cctab`
 * `l3color`
 * `l3draw`
+* `l3graphics`
 * `l3str`
 * `l3sys-shell`
 * `xcoffins`
 * `xgalley`
-* `xmarks`
 
 `l3benchmark`
 -------------
@@ -58,6 +58,12 @@
 interfaces are heavily inspired by the `pgf` layer of the widely-used
 TikZ system.
 
+`l3graphics`
+-------------
+
+This module provides interfaces for the inclusion of graphics files
+in documents, similar to the `graphics` package.
+
 `l3str`
 -------
 

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)

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

Index: trunk/Master/texmf-dist/doc/latex/l3experimental/l3graphics/l3graphics.pdf
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3experimental/l3graphics/l3graphics.pdf	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/doc/latex/l3experimental/l3graphics/l3graphics.pdf	2019-05-28 21:24:36 UTC (rev 51248)

Property changes on: trunk/Master/texmf-dist/doc/latex/l3experimental/l3graphics/l3graphics.pdf
___________________________________________________________________
Added: svn:mime-type
## -0,0 +1 ##
+application/pdf
\ No newline at end of property
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-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md	2019-05-28 21:24:36 UTC (rev 51248)
@@ -7,6 +7,17 @@
 
 ## [Unreleased]
 
+## [2019-05-28]
+
+### Added
+
+- Experimental `\file_compare_timestamp:nNn(TF)`
+
+### Changed
+
+- Precedence of juxtaposition (implicit multiplication) in l3fp
+  now different for keywords/variables and factors in parentheses
+
 ## [2019-05-09]
 
 ### Added
@@ -22,7 +33,7 @@
 
 ### Added
 
-- `.muskip:N` property
+- `.muskip_set:N` property
 
 ### Changed
 
@@ -407,7 +418,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-05-09...HEAD
+[Unreleased]: https://github.com/latex3/latex3/compare/2019-05-28...HEAD
+[2019-05-28]: https://github.com/latex3/latex3/compare/2019-05-09...2019-05-28
 [2019-05-09]: https://github.com/latex3/latex3/compare/2019-05-07...2019-05-09
 [2019-05-07]: https://github.com/latex3/latex3/compare/2019-05-05...2019-05-07
 [2019-05-05]: https://github.com/latex3/latex3/compare/2019-05-03...2019-05-05

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/README.md	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/README.md	2019-05-28 21:24:36 UTC (rev 51248)
@@ -1,7 +1,7 @@
 LaTeX3 Programming Conventions
 ==============================
 
-Release 2019-05-09
+Release 2019-05-28
 
 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-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/interface3.tex	2019-05-28 21:24:36 UTC (rev 51248)
@@ -54,7 +54,7 @@
          {latex-team at latex-project.org}%
    }%
 }
-\date{Released 2019-05-09}
+\date{Released 2019-05-28}
 
 \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-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex	2019-05-28 21:24:36 UTC (rev 51248)
@@ -32,7 +32,7 @@
         {latex-team at latex-project.org}%
     }%
 }
-\date{Released 2019-05-09}
+\date{Released 2019-05-28}
 
 \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-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex	2019-05-28 21:24:36 UTC (rev 51248)
@@ -32,7 +32,7 @@
         {latex-team at latex-project.org}%
     }%
 }
-\date{Released 2019-05-09}
+\date{Released 2019-05-28}
 
 \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-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.tex	2019-05-28 21:24:36 UTC (rev 51248)
@@ -32,7 +32,7 @@
         {latex-team at latex-project.org}%
     }%
 }
-\date{Released 2019-05-09}
+\date{Released 2019-05-28}
 
 \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-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/source3.tex	2019-05-28 21:24:36 UTC (rev 51248)
@@ -53,7 +53,7 @@
          {latex-team at latex-project.org}%
    }%
 }
-\date{Released 2019-05-09}
+\date{Released 2019-05-28}
 
 \pagenumbering{roman}
 \maketitle

Modified: trunk/Master/texmf-dist/doc/latex/l3kernel/source3body.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3kernel/source3body.tex	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/doc/latex/l3kernel/source3body.tex	2019-05-28 21:24:36 UTC (rev 51248)
@@ -168,9 +168,10 @@
     precisely in non-\LuaTeX{} engines older than 2019.
   \item[\texttt{f}] The \texttt{f} specifier stands for \emph{full
     expansion}, and in contrast to \texttt{x} stops at the first
-    non-expandable item (reading the argument from left to right) without
-    trying to expand it. For example, when setting a token list
-    variable (a macro used for storage), the sequence
+    non-expandable token (reading the argument from left to right) without
+    trying to expand it. If this token is a \meta{space token}, it is gobbled,
+    and thus won't be part of the resulting argument. For example, when
+    setting a token list variable (a macro used for storage), the sequence
     \begin{verbatim}
       \tl_set:Nn \l_mya_tl { A }
       \tl_set:Nn \l_myb_tl { B }

Modified: trunk/Master/texmf-dist/doc/latex/l3packages/CHANGELOG.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3packages/CHANGELOG.md	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/doc/latex/l3packages/CHANGELOG.md	2019-05-28 21:24:36 UTC (rev 51248)
@@ -7,6 +7,10 @@
 
 ## [Unreleased]
 
+## [2019-05-28]
+
+- Remove stray spaces in processor information
+
 ## [2019-05-03]
 
 ### Added
@@ -46,7 +50,8 @@
 - Switch to ISO date format
 - Improve cross-module use of internal functions
 
-[Unreleased]: https://github.com/latex3/latex3/compare/2019-05-03...HEAD
+[Unreleased]: https://github.com/latex3/latex3/compare/2019-05-28...HEAD
+[2019-05-28]: https://github.com/latex3/latex3/compare/2019-05-03...2019-05-28
 [2019-05-03]: https://github.com/latex3/latex3/compare/2019-03-05...2019-05-03
 [2019-03-05]: https://github.com/latex3/latex3/compare/2019-09-24...2019-03-05
 [2018-09-24]: https://github.com/latex3/latex3/compare/2018-08-23...2018-09-24

Modified: trunk/Master/texmf-dist/doc/latex/l3packages/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex/l3packages/README.md	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/doc/latex/l3packages/README.md	2019-05-28 21:24:36 UTC (rev 51248)
@@ -1,7 +1,7 @@
 LaTeX3 High-Level Concepts
 ==========================
 
-Release 2019-05-03
+Release 2019-05-28
 
 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-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -46,7 +46,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-03}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %
@@ -66,8 +66,10 @@
 %     \cs{sys_timer:}
 %   \end{syntax}
 %   Expands to the current value of the engine's timer clock, a
-%   non-negative integer.  In engines without clock support this
-%   expands to $0$.
+%   non-negative integer.  In engines without clock support this expands
+%   to $0$ after an error.  In \LuaTeX{} only the CPU time is measured,
+%   while in other engines real time is measured (including time waiting
+%   for user input).
 % \end{function}
 %
 % \section{Benchmark}
@@ -128,7 +130,7 @@
 %
 %    \begin{macrocode}
 %<*package>
-\ProvidesExplPackage{l3benchmark}{2019-05-03}{}
+\ProvidesExplPackage{l3benchmark}{2019-05-28}{}
   {L3 Experimental benchmarking}
 %</package>
 %    \end{macrocode}
@@ -148,13 +150,13 @@
 \sys_if_engine_luatex:TF
   {
     \cs_new:Npn \sys_timer:
-      { \int_eval:w \lua_now:n { l3kernel.elapsedtime() } \scan_stop: }
+      { \lua_now:n { l3kernel.elapsedtime() } }
   }
   {
     \cs_if_exist:NT \tex_elapsedtime:D
       {
         \cs_new:Npn \sys_timer:
-          { \int_eval:w \tex_elapsedtime:D }
+          { \int_value:w \tex_elapsedtime:D }
       }
   }
 \@@_const:nn { sys_if_timer_exist }

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3cctab/l3cctab.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3cctab/l3cctab.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3cctab/l3cctab.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -46,7 +46,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-03}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %
@@ -150,7 +150,7 @@
 %
 %    \begin{macrocode}
 %<*package>
-\ProvidesExplPackage{l3cctab}{2019-05-03}{}
+\ProvidesExplPackage{l3cctab}{2019-05-28}{}
   {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-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -46,7 +46,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-03}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %
@@ -265,7 +265,7 @@
 %
 %    \begin{macrocode}
 %<*package>
-\ProvidesExplPackage{l3color}{2019-05-03}{}
+\ProvidesExplPackage{l3color}{2019-05-28}{}
   {L3 Experimental color support}
 %</package>
 %    \end{macrocode}
@@ -292,9 +292,9 @@
 %
 % \subsection{Setup}
 %
-% \begin{variable}{\l_@@_tmp_tl}
+% \begin{variable}{\l_@@_internal_tl}
 %    \begin{macrocode}
-\tl_new:N \l_@@_tmp_tl
+\tl_new:N \l_@@_internal_tl
 %    \end{macrocode}
 % \end{variable}
 %
@@ -451,15 +451,7 @@
     \driver_color_pickup:N \l_@@_current_tl
     \tl_set_eq:cN { l_@@_named_ . _tl } \l_@@_current_tl
 %</package>
-    \group_begin:
-      \seq_map_inline:Nn \l_char_active_seq
-        {
-          \tl_set:Nx \l_@@_tmp_tl { \cs_to_str:N ##1 }
-          \char_set_active_eq:NN ##1 \l_@@_tmp_tl
-        }
-      \tl_set:Nx \l_@@_tmp_tl {#1}
-    \exp_args:NNV \group_end:
-    \@@_parse:nN \l_@@_tmp_tl #2
+    \exp_args:Ne \@@_parse:nN { \tl_to_str:n {#1} } #2
   }
 %    \end{macrocode}
 %   Before going to all of the effort of parsing an expression, these two
@@ -496,10 +488,10 @@
     \group_begin:
       \@@_extract:nNN {#2} \l_@@_model_tl \l_@@_value_tl
       \@@_parse_loop:w #3 ! ! ! ! \q_stop
-      \tl_set:Nx \l_@@_tmp_tl
+      \tl_set:Nx \l_@@_internal_tl
         { \l_@@_model_tl \c_space_tl \l_@@_value_tl }
     \exp_args:NNNV \group_end:
-    \tl_set:Nn #1 \l_@@_tmp_tl
+    \tl_set:Nn #1 \l_@@_internal_tl
   }
 %    \end{macrocode}
 %   This is the loop proper: there can be an open-ended set of colors to parse,
@@ -633,21 +625,42 @@
 % \end{macro}
 %
 % \begin{macro}[EXP]
-%   {\@@_parse_gray:w, \@@_parse_rgb:w, \@@_parse_cmyk:w, \@@_parse_spot:w}
+%   {
+%     \@@_parse_model_gray:w, \@@_parse_model_rgb:w,
+%     \@@_parse_model_cmyk:w, \@@_parse_model_spot:w
+%   }
+% \begin{macro}[EXP]{\@@_parse_number:n}
+% \begin{macro}[EXP]{\@@_parse_number:w}
 % \begin{macro}[EXP]{\@@_parse_spot_aux:w}
-%   Turn the input into internal form.
+%   Turn the input into internal form, also tidying up the number quickly.
 %    \begin{macrocode}
-\cs_new:Npn \@@_parse_gray:w #1 , #2 \q_stop {#1}
-\cs_new:Npn \@@_parse_rgb:w #1 , #2 , #3 , #4 \q_stop { #1 ~ #2 ~ #3 }
-\cs_new:Npn \@@_parse_cmyk:w #1 , #2 , #3 , #4 , #5 \q_stop
-  { #1 ~ #2 ~ #3 ~ #4 }
-\cs_new:Npn \@@_parse_spot:w #1 , #2 \q_stop
+\cs_new:Npn \@@_parse_model_gray:w #1 , #2 \q_stop { \@@_parse_number:n {#1} }
+\cs_new:Npn \@@_parse_model_rgb:w #1 , #2 , #3 , #4 \q_stop
+  {
+    \@@_parse_number:n {#1} ~ 
+    \@@_parse_number:n {#2} ~
+    \@@_parse_number:n {#3}
+  }
+\cs_new:Npn \@@_parse_model_cmyk:w #1 , #2 , #3 , #4 , #5 \q_stop
+  {
+    \@@_parse_number:n {#1} ~ 
+    \@@_parse_number:n {#2} ~
+    \@@_parse_number:n {#3} ~
+    \@@_parse_number:n {#4}
+  }
+\cs_new:Npn \@@_parse_model_spot:w #1 , #2 \q_stop
   { \@@_parse_spot_aux:w #1 ! 100 ! \q_stop }
 \cs_new:Npn \@@_parse_spot_aux:w #1 ! #2 ! #3 \q_stop
   { #1 ~ \fp_eval:n { #2 / 100 } }
+\cs_new:Npn \@@_parse_number:n #1
+  {  \@@_parse_number:w #1 . 0 . \q_stop }
+\cs_new:Npn \@@_parse_number:w #1 . #2 . #3 \q_stop
+  { \tl_if_blank:nTF {#1} { 0 } {#1} . #2 }
 %    \end{macrocode}
 % \end{macro}
 % \end{macro}
+% \end{macro}
+% \end{macro}
 %
 % \subsection{Selecting colors (and color models)}
 %
@@ -725,10 +738,10 @@
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_direct:nnN #1#2#3
   {
-    \cs_if_exist:cTF { @@_parse_ #1 :w }
+    \cs_if_exist:cTF { @@_parse_model_ #1 :w }
       {
         \tl_set:Nx #3
-          { #1 ~ \use:c {  @@_parse_ #1 :w } #2 , 0 , 0 , 0 , 0 \q_stop }
+          { #1 ~ \use:c {  @@_parse_model_ #1 :w } #2 , 0 , 0 , 0 , 0 \q_stop }
         \@@_check_model:N #3
       }
       {

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-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-boxes.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-03}
+% \date{Released 2019-05-28}
 %
 % \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-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-layers.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-03}
+% \date{Released 2019-05-28}
 %
 % \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-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-paths.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-03}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %

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-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-points.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-03}
+% \date{Released 2019-05-28}
 %
 % \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-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-scopes.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-03}
+% \date{Released 2019-05-28}
 %
 % \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-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-softpath.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-03}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %

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-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-state.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-03}
+% \date{Released 2019-05-28}
 %
 % \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-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-transforms.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-03}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -110,7 +110,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-03}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %
@@ -1145,7 +1145,7 @@
 %
 %    \begin{macrocode}
 %<*package>
-\ProvidesExplPackage{l3draw}{2019-05-03}{}
+\ProvidesExplPackage{l3draw}{2019-05-28}{}
   {L3 Experimental core drawing support}
 %</package>
 %    \end{macrocode}

Added: trunk/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.dtx	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -0,0 +1,716 @@
+% \iffalse meta-comment
+%
+%% File: l3graphics.dtx
+%
+% Copyright (C) 2017-2019 The LaTeX3 Project
+%
+% It may be distributed and/or modified under the conditions of the
+% LaTeX Project Public License (LPPL), either version 1.3c of this
+% license or (at your option) any later version.  The latest version
+% of this license is in the file
+%
+%    http://www.latex-project.org/lppl.txt
+%
+% This file is part of the "l3experimental bundle" (The Work in LPPL)
+% and all files in that bundle must be distributed together.
+%
+% -----------------------------------------------------------------------
+%
+% The development version of the bundle can be found at
+%
+%    https://github.com/latex3/latex3
+%
+% for those people who are interested.
+%
+%<*driver|package>
+\RequirePackage{expl3}
+%</driver|package>
+%<*driver>
+\documentclass[full]{l3doc}
+\begin{document}
+  \DocInput{\jobname.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \title{^^A
+%   The \pkg{l3graphics} package\\ Graphics inclusion support^^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-28}
+%
+% \maketitle
+%
+% \begin{documentation}
+%
+% \section{\pkg{l3graphics} documentation}
+%
+% \subsection{Driver functions}
+%
+% Inclusion of graphic files requires a range of low-level data be passed to
+% the driver layer. These functions are primarily aimed at supporting this
+% work.
+%
+% \begin{variable}{\l_graphics_decodearray_tl}
+%   Array to decode color in bitmap graphic: when non-empty, this should
+%   be in the form of one, two or three pairs of real numbers in the range
+%   $[0,1]$, separated by spaces.
+% \end{variable}
+%
+% \begin{variable}{\l_graphics_interpolate_bool}
+%   Indicates whether interpolation should be applied to bitmap graphic files.
+% \end{variable}
+%
+% \begin{variable}{\l_graphics_page_int}
+%   The page to extract from a multi-page graphic file: used for |.pdf| files
+%   which may contain multiple pages.
+% \end{variable}
+%
+% \begin{variable}{\l_graphics_pagebox_tl}
+%   The nature of the page box setting used to determine the bounding box of
+%   material: used for |.pdf| files which feature multiple page box
+%   specifications.
+% \end{variable}
+%
+% \begin{variable}{\l_graphics_draft_bool}
+%   Switch to enable draft mode: graphics are read but not included when this is
+%   true.
+% \end{variable}
+%
+% \begin{variable}
+%   {\l_graphics_llx_dim, \l_graphics_lly_dim, \l_graphics_urx_dim, \l_graphics_ury_dim}
+%   Dimensions which return the points $(\meta{llx},\meta{lly})$ and
+%   $(\meta{urx},\meta{ury})$ for the graphic. For many graphics only the resulting
+%   height and width are significant, but this is driver-dependent.
+% \end{variable}
+%
+% \begin{variable}{\l_graphics_name_bool}
+%   The name of a graphics file being loaded: usually the same as the
+%   input file name, but may be altered by some drivers.
+% \end{variable}
+%
+% \begin{function}
+%   {
+%     \graphics_bb_save:n, \graphics_bb_save:x,
+%     \graphics_bb_restore:nF, \graphics_bb_restore:xF
+%   }
+%   \begin{syntax}
+%     \cs{graphics_bb_save:n} \Arg{graphic}
+%     \cs{graphics_bb_restore:nF} \Arg{graphic} \Arg{false code}
+%   \end{syntax}
+%   This pair of functions are used to cache the bounding box of an \meta{graphic}
+%   so that extraction/reading is only required once. The \texttt{save}
+%   function stores the values from \cs{l_graphics_llx_dim},
+%   \cs{l_graphics_lly_dim}, \cs{l_graphics_urx_dim} and
+%   \cs{l_graphics_ury_dim} as constants. The \texttt{restore} function will then
+%   look up values for the bounding box of an \meta{graphic} and set the four
+%   dimensions appropriately. For any one \meta{graphic} the bounding box will
+%   be constant, so the \texttt{save} function should only be called once. Thus
+%   a typical use case is
+%   \begin{verbatim}
+%   \graphics_bb_restore:nF { <name> }
+%     {
+%       % Code to read the bb
+%       \graphics_bb_save:n { <name> }
+%     }
+%   \end{verbatim}
+%   \emph{i.e.}~every use of a bounding box will attempt to restore saved data,
+%   and saving will only take place where that is not possible.
+%   
+%   Note that the \meta{graphic} may not be a simple file name: a multi-page PDF,
+%   for example, will need to have the bounding box cached for each page used.
+% \end{function}
+%
+% \begin{function}{\graphics_extract_bb:n}
+%   \begin{syntax}
+%     \cs{graphics_extract_bb:n} \Arg{file}
+%   \end{syntax}
+%   Extracts bounding box data for the graphic \meta{file} using the |extractbb|
+%   utility, and stores the bounding box of the graphic file in
+%   \cs{l_graphics_llx_dim}, \cs{l_graphics_lly_dim}, \cs{l_graphics_urx_dim} and
+%   \cs{l_graphics_ury_dim}.
+%
+%   The \meta{file} name should be fully-qualified and sanitized: no search
+%   or other manipulation is carried out at this level. No check is made on
+%   the file \emph{type} at this stage: it is assumed that the driver code
+%   using this function has made such a check. File types such as |.pdf| and
+%   |.jpg| are appropriate for parsing using this function.
+%
+%   When \cs{l_graphics_page_int} is positive the appropriate page will be
+%   queried from the graphic file.
+%
+%   Note that this function requires pipe shell calls to be enabled: this is
+%   generally true but may require the option |--enable-pipes| to be enabled
+%   when running the \TeX{} job.
+% \end{function}
+%
+% \begin{function}{\graphics_read_bb:n}
+%   \begin{syntax}
+%     \cs{graphics_read_bb:n} \Arg{file}
+%   \end{syntax}
+%   Parses the graphic \meta{file} to find a PostScript-style bounding box
+%   line of the form
+%   \begin{verbatim}
+%   %%BoundingBox: llx lly urx urx
+%   \end{verbatim}
+%   where \meta{llx}, \meta{lly}, \meta{urx} and \meta{ury} are the corners
+%   of the bounding box expressed in PostScript (\enquote{big}) points. The
+%   values are stored in \cs{l_graphics_llx_dim}, \cs{l_graphics_lly_dim},
+%   \cs{l_graphics_urx_dim} and \cs{l_graphics_ury_dim}.
+%
+%   The \meta{file} name should be fully-qualified and sanitized: no search
+%   or other manipulation is carried out at this level. No check is made on
+%   the file \emph{type} at this stage: it is assumed that the driver code
+%   using this function has made such a check. File types such as |.eps| and
+%   |.bb|/|.xbb| are appropriate for parsing using this function.
+% \end{function}
+%
+% \begin{function}{\graphics_include:n, \graphics_include:nn}
+%   \begin{syntax}
+%     \cs{graphics_include:n} \Arg{file}
+%     \cs{graphics_include:nn} \Arg{file} \Arg{type}
+%   \end{syntax}
+%   Horizontal-mode commands which include the \meta{file} as an graphic
+%   at the current location. The file \meta{type} is given explicitly in
+%   the two-argument version, or is inferred from the file extension extracted
+%   in the single-argument form. The exact graphic types supported depend upon
+%   the driver in use.
+%
+%   Where the \meta{file} is not found and the \meta{type} is \emph{not}
+%   given, a search for possible graphic files is undertaken using the extensions
+%   stored in \cs{l_graphics_search_ext_seq}.
+% \end{function}
+%
+% \begin{variable}{\l_graphics_ext_type_prop}
+%   Defines mapping between file extensions and file types; where there is
+%   no entry for an extension, the type is assumed to be the extension
+%   with the leading |.| removed. Entries should be made in lower case, and
+%   the key should be an extension including the leading |.|, for example
+%   \begin{verbatim}
+%     \prop_put:Nnn \l_graphics_ext_type_prop { .ps } { eps }
+%   \end{verbatim}
+% \end{variable}
+%
+% \begin{variable}{\l_graphics_search_ext_seq}
+%   Extensions to use for graphic searching when the given \meta{file} name is not
+%   found by \cs{graphics_include:n}.
+% \end{variable}
+%
+% \begin{variable}{\l_graphics_search_path_seq}
+%   Each entry is the path to a directory which should be searched when
+%   seeking an graphic file. Each path can be relative or absolute, and should
+%   not include the trailing slash. The entries are not expanded when
+%   used so may contain active characters but should not feature any
+%   variable content. Spaces need not be quoted.
+% \end{variable}
+%
+% \begin{function}{\graphics_show_list:, \graphics_log_list:}
+%   \begin{syntax}
+%     \cs{graphics_show_list:}
+%     \cs{graphics_log_list:}
+%   \end{syntax}
+%   These functions list all graphic files loaded by in a similar manner to
+%   \cs{file_show_list:} and \cs{file_log_list:}. While
+%   \cs{graphics_show_list:} displays the list in the terminal,
+%   \cs{graphics_log_list:} outputs it to the log file only. In both cases, only
+%   graphics loaded by \pkg{l3graphics} are listed.
+% \end{function}
+%
+% \end{documentation}
+%
+% \begin{implementation}
+%
+% \section{\pkg{l3graphics} implementation}
+%
+%    \begin{macrocode}
+%<*initex|package>
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+%<@@=graphics>
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+%<*package>
+\ProvidesExplPackage{l3graphics}{2019-05-28}{}
+  {L3 Experimental graphics inclusion support}
+%</package>
+%    \end{macrocode}
+%
+% \begin{variable}{\l_@@_tmp_ior, \l_@@_tmp_tl}
+%   Scratch space.
+%    \begin{macrocode}
+\ior_new:N \l_@@_tmp_ior
+\tl_new:N  \l_@@_tmp_tl
+%    \end{macrocode}
+% \end{variable}
+%
+% \subsection{Image feature support}
+%
+% \begin{macro}
+%   {
+%     \l_graphics_decodearray_tl  ,
+%     \l_graphics_interpolate_bool,
+%     \l_graphics_page_int        ,
+%     \l_graphics_pagebox_tl
+%   }
+%   Keys which control features of graphics. The standard value of |pagebox|
+%   set up here should match the default for the drivers themselves: in
+%   the absence of any other setting the |cropbox| should be used.
+%    \begin{macrocode}
+\tl_new:N \l_graphics_decodearray_tl 
+\tl_new:N \l_graphics_pagebox_tl
+\bool_new:N \l_graphics_interpolate_bool
+\tl_set:Nn \l_graphics_pagebox_tl { cropbox }
+\int_new:N \l_graphics_page_int
+%    \end{macrocode}
+% \end{macro}
+%
+% \subsection{Obtaining bounding box data}
+%
+% \begin{variable}
+%   {
+%     \l_graphics_llx_dim , \l_graphics_lly_dim,
+%     \l_graphics_urx_dim , \l_graphics_ury_dim
+%   } 
+%   Storage for the return of bounding box.
+%    \begin{macrocode}
+\dim_new:N \l_graphics_llx_dim
+\dim_new:N \l_graphics_lly_dim
+\dim_new:N \l_graphics_urx_dim
+\dim_new:N \l_graphics_ury_dim
+%    \end{macrocode}
+% \end{variable}
+%
+% \begin{macro}{\graphics_bb_save:n, \graphics_bb_save:x}
+% \begin{macro}{\graphics_bb_restore:nF, \graphics_bb_restore:xF}
+%   Caching graphic bounding boxes is sensible, and these functions are needed both
+%   here and for drive-specific work. So they are made available as documented
+%   functions. To save on registers, the \enquote{origin} is only saved if it is
+%   not at zero.
+%     \begin{macrocode}
+\cs_new_protected:Npn \graphics_bb_save:n #1
+  {
+    \dim_if_exist:cTF { c_@@_ #1 _urx_dim }
+      { \__kernel_msg_error:nnn { graphic } { bb-already-cached } {#1} }
+      {
+        \dim_compare:nNnF \l_graphics_llx_dim = { 0pt }
+          { \dim_const:cn { c_@@_ #1 _llx_dim } { \l_graphics_llx_dim } }
+        \dim_compare:nNnF \l_graphics_lly_dim = { 0pt }
+          { \dim_const:cn { c_@@_ #1 _lly_dim } { \l_graphics_lly_dim } }
+        \dim_const:cn { c_@@_ #1 _urx_dim } { \l_graphics_urx_dim }
+        \dim_const:cn { c_@@_ #1 _ury_dim } { \l_graphics_ury_dim }
+      }
+  }
+\cs_generate_variant:Nn \graphics_bb_save:n { x }
+\cs_new_protected:Npn \graphics_bb_restore:nF #1#2
+  {
+    \dim_if_exist:cTF { c_@@_ #1 _urx_dim }
+      {
+        \dim_set_eq:Nc \l_graphics_urx_dim { c_@@_ #1 _urx_dim }
+        \dim_set_eq:Nc \l_graphics_ury_dim { c_@@_ #1 _ury_dim }
+        \dim_if_exist:cTF { c_@@_ #1 _llx_dim }
+          { \dim_set_eq:Nc \l_graphics_llx_dim { c_@@_ #1 _llx_dim } }
+          { \dim_zero:N \l_graphics_llx_dim }
+        \dim_if_exist:cTF { c_@@_ #1 _lly_dim }
+          { \dim_set_eq:Nc \l_graphics_lly_dim { c_@@_ #1 _lly_dim } }
+          { \dim_zero:N \l_graphics_lly_dim }
+      }
+      {#2}
+  }
+\cs_generate_variant:Nn \graphics_bb_restore:nF { x }
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\graphics_extract_bb:n, \graphics_read_bb:n}
+% \begin{macro}{\@@_extract_bb_auix:nn, \@@_extract_bb_auix:Vn}
+% \begin{macro}{\@@_extract_bb_auxii:nnn}
+% \begin{macro}{\@@_extract_bb_auxiii:nnnn, \@@_extract_bb_auxiii:Vnnn}
+% \begin{macro}{\@@_extract_bb_auxiv:nnn}
+% \begin{macro}{\@@_read_bb_auxi:nnnn, \@@_read_bb_auxii:Vnnn}
+% \begin{macro}
+%   {
+%     \@@_read_bb_auxii:w ,
+%     \@@_read_bb_auxiv:w ,
+%     \@@_read_bb_auxv:w
+%   }
+%  Extracting the bounding box from an |.eps| or |.bb| file is done by
+%  reading each line and searching for the marker text |%%BoundingBox:|.
+%  The data is read as a string with a mapping over
+%  the lines: as there is a colon involved, a little bit of work is needed to
+%  get the matching correct. The same approach covers cases where the bounding
+%  box has to be calculated by |extractbb|, with just the initial phase
+%  different.
+%    \begin{macrocode}
+\cs_new_protected:Npn \graphics_extract_bb:n #1
+  {
+    \int_compare:nNnTF \l_graphics_page_int > 0
+      { \@@_extract_bb_auxi:Vn \l_graphics_page_int {#1} }
+      { \@@_extract_bb_auxii:nnn {#1} { } { } }
+  }
+\cs_new_protected:Npn \@@_extract_bb_auxi:nn #1#2
+  { \@@_extract_bb_auxii:nnn {#2} { :P #1 } { -p~#1~ } }
+\cs_generate_variant:Nn \@@_extract_bb_auxi:nn { Vn }
+\cs_new_protected:Npn \@@_extract_bb_auxii:nnn #1#2#3
+  {
+   \tl_if_empty:NTF \l_graphics_pagebox_tl
+      { \@@_extract_bb_auxiv:nnn }
+      { \@@_extract_bb_auxiii:Vnnn \l_graphics_pagebox_tl }
+      {#1} {#2} {#3}
+  }
+\cs_new_protected:Npn \@@_extract_bb_auxiii:nnnn #1#2#3#4
+  { \@@_extract_bb_auxiv:nnn {#2} { : #1 #3 } { #4 -B~#1~ } }
+\cs_generate_variant:Nn \@@_extract_bb_auxiii:nnnn { V }
+\cs_new_protected:Npn \@@_extract_bb_auxiv:nnn #1#2#3
+  {
+    \@@_read_bb_auxi:nnnn {#1} {#2}
+      { \ior_shell_open:Nn \l_@@_tmp_ior { extractbb~#3-O~#1 } }
+      { pipe-failed }
+  }
+\cs_new_protected:Npn \graphics_read_bb:n #1
+  {
+    \@@_read_bb_auxi:nnnn {#1} { }
+      { \ior_open:Nn \l_@@_tmp_ior {#1} }
+      { graphic-not-found }
+  }
+%   \end{macrocode}
+%  Before any real searching, a check to see if there are cached values
+%  available. The name of each graphic will be unique and so it's sensible to
+%  store the bounding box data in \TeX{}: this avoids multiple file operations.
+%  As bounding boxes here start away from the lower-left origin, we need to
+%  store all four values (contrast with for example the \texttt{pdfmode}
+%  driver). Here |#2| is a potential page identifier: used to allow caching of
+%  individual pages in a multi-page document. Caching is applied to the
+%  upper-right position in all cases, but as the lower-left will often be
+%  $(0,0)$ it is only cached if required.
+%   \begin{macrocode}
+\cs_new_protected:Npn \@@_read_bb_auxi:nnnn #1#2#3#4
+  {
+    \graphics_bb_restore:nF {#1#2}
+      { \@@_read_bb_auxii:nnnn {#3} {#4} {#1} {#2} }
+  }
+\cs_new_protected:Npx \@@_read_bb_auxii:nnnn #1#2#3#4
+  {
+    #1
+    \exp_not:N \ior_if_eof:NTF \exp_not:N \l_@@_tmp_ior
+      { \__kernel_msg_error:nnn { graphics } {#2} {#3} }
+      {
+        \ior_str_map_inline:Nn \exp_not:N \l_@@_tmp_ior
+          {
+            \exp_not:N \@@_read_bb_auxiii:w
+              ##1 ~ \c_colon_str \exp_not:N \q_stop
+          }
+      }
+    \exp_not:n
+      {
+        \ior_close:N \l_@@_tmp_ior
+        \dim_compare:nNnF \l_graphics_llx_dim = { 0pt }
+          { \dim_const:cn { c_@@_ #3#4 _llx_dim } { \l_graphics_llx_dim } }
+        \dim_compare:nNnF \l_graphics_lly_dim = { 0pt }
+          { \dim_const:cn { c_@@_ #3#4 _lly_dim } { \l_graphics_lly_dim } }
+        \dim_const:cn { c_@@_ #3#4 _urx_dim } { \l_graphics_urx_dim }
+        \dim_const:cn { c_@@_ #3#4 _ury_dim } { \l_graphics_ury_dim }
+      }
+  }
+\use:x
+  {
+    \cs_new_protected:Npn \exp_not:N \@@_read_bb_auxiii:w
+      ##1 \c_colon_str ##2 \exp_not:N \q_stop
+      {
+        \exp_not:N \str_if_eq:nnT
+          { \c_percent_str \c_percent_str BoundingBox }
+          {##1}
+          { \exp_not:N \@@_read_bb_auxiv:w ##2 ( ) \exp_not:N \q_stop }
+      }
+  }
+%    \end{macrocode}
+%   If the bounding box is |atend|, just ignore the current one and keep going.
+%   Otherwise, we need to allow for tabs and multiple spaces (as the line has
+%   been read as a string). The easiest way to deal with that is to scan the
+%   tokens: at this stage the line fragment should be just numbers and
+%   whitespace. \TeX{} will then tidy up for us, with just a leading space to
+%   worry about: that is taken out by the |\use:n| here.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_read_bb_auxiv:w #1 ( #2 ) #3 \q_stop
+  {
+    \str_if_eq:nnF {#2} { atend }
+      {
+        \tl_set_rescan:Nnx \l_@@_tmp_tl
+          {
+            \char_set_catcode_space:n {  9 }
+            \char_set_catcode_space:n { 32 }
+          }
+          { \use:n #1 }
+        \exp_after:wN \@@_read_bb_auxv:w \l_@@_tmp_tl \q_stop
+      }
+  }
+%    \end{macrocode}
+%   A trailing space was deliberately added earlier so we know that the final
+%   data point is terminated by a space.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_read_bb_auxv:w #1~#2~#3~#4~#5 \q_stop
+  {
+    \dim_set:Nn \l_graphics_llx_dim { #1 bp }
+    \dim_set:Nn \l_graphics_lly_dim { #2 bp }
+    \dim_set:Nn \l_graphics_urx_dim { #3 bp }
+    \dim_set:Nn \l_graphics_ury_dim { #4 bp }
+    \ior_map_break:
+  }
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{variable}{\l_graphics_draft_bool}
+%   Relevant to including graphics but not to reading them.
+%    \begin{macrocode}
+\bool_new:N \l_graphics_draft_bool
+%    \end{macrocode}
+% \end{variable}
+%
+% \begin{variable}{\l_graphics_name_tl, \l_@@_name_tl}
+%    \begin{macrocode}
+\tl_new:N \l_graphics_name_tl
+\tl_new:N \l_@@_name_tl
+%    \end{macrocode}
+% \end{variable}
+%
+% \begin{variable}{\l_@@_internal_box}
+%    \begin{macrocode}
+\box_new:N \l_@@_internal_box
+%    \end{macrocode}
+% \end{variable}
+%
+% \begin{variable}{\l_@@_dir_str \l_@@_name_str \l_@@_ext_str}
+%    \begin{macrocode}
+\str_new:N \l_@@_dir_str
+\str_new:N \l_@@_name_str
+\str_new:N \l_@@_ext_str
+%    \end{macrocode}
+% \end{variable}
+%
+% \begin{variable}{\l_graphics_search_path_seq}
+%    \begin{macrocode}
+\seq_new:N \l_graphics_search_path_seq
+%    \end{macrocode}
+% \end{variable}
+%
+% \begin{variable}{\l_graphics_search_ext_seq}
+%   Used to specify fall-back extensions: actually set on a per-driver basis.
+%    \begin{macrocode}
+\seq_new:N \l_graphics_search_ext_seq
+%    \end{macrocode}
+% \end{variable}
+%
+% \begin{variable}{\l_graphics_ext_type_prop}
+%   Mapping between extensions and types for non-standard mappings
+%    \begin{macrocode}
+\prop_new:N \l_graphics_ext_type_prop
+\prop_put:Nnn \l_graphics_ext_type_prop { .ps } { eps }
+%    \end{macrocode}
+% \end{variable}
+%
+% \begin{variable}{\g_@@_record_seq}
+%   A list of graphic files used.
+%    \begin{macrocode}
+\seq_new:N \g_@@_record_seq
+%    \end{macrocode}
+% \end{variable}
+%
+% \begin{macro}{\graphics_include:n}
+% \begin{macro}{\@@_include_search:n}
+% \begin{macro}{\@@_include:}
+% \begin{macro}{\graphics_include:nn}
+% \begin{macro}
+%   {
+%     \@@_include_auxi:n, \@@_include_auxii:n,
+%     \@@_include_auxiii:n, \@@_include_auxiv:n
+%   }
+%   Actually including an graphic is relatively straight-forward: most of the
+%   work is done by the driver. We only have to deal with making sure the
+%   box has no apparent depth. Where the first given name is not found, we
+%   search based on extension only if the \meta{type} was not given. The one
+%   wrinkle is that we may have found a \texttt{.tex} file matching the file
+%   name stem: that's not what we want, so we have to filter out.
+%    \begin{macrocode}
+\cs_new_protected:Npn \graphics_include:n #1
+  {
+    \group_begin:
+      \seq_set_eq:NN \l_file_search_path_seq \l_graphics_search_path_seq
+      \file_get_full_name:nNTF {#1} \l_@@_name_tl
+        {
+          \str_if_eq:eeTF { \l_@@_name_tl } { #1 .tex }
+            { \@@_include_search:n {#1} }
+            { \@@_include: }
+        }
+        { \@@_include_search:n {#1} }
+    \group_end:
+  }
+\cs_new_protected:Npn \@@_include_search:n #1
+  {
+    \seq_map_inline:Nn \l_graphics_search_ext_seq
+      {
+        \file_get_full_name:nNT { #1 . ##1 } \l_@@_name_tl
+          { \seq_map_break:n { \use_i:nnn \@@_include: } }
+      }
+    \use:n
+      { \__kernel_msg_error:nnn { graphics } { graphic-not-found } {#1} }
+  }
+\cs_new_protected:Npn \@@_include:
+  {
+    \file_parse_full_name:VNNN \l_@@_name_tl
+      \l_@@_dir_str \l_@@_name_str \l_@@_ext_str
+    \exp_args:Ne \@@_include_auxi:n
+      {
+        \exp_args:Ne \str_tail:n
+          { \str_fold_case:V \l_@@_ext_str }
+      }
+  }
+\cs_new_protected:Npn \graphics_include:nn #1#2
+  {
+    \group_begin:
+      \seq_set_eq:NN \l_file_search_path_seq \l_graphics_search_path_seq
+      \file_get_full_name:nNTF {#1} \l_@@_name_tl
+        {
+          \exp_args:Ne \@@_include_auxi:n
+            { \str_fold_case:n {#1} }
+        }
+        { \__kernel_msg_error:nnn { graphics } { graphic-not-found } {#1} }
+    \group_end:
+  }
+\cs_new_protected:Npn \@@_include_auxi:n #1
+  {
+    \prop_get:NnNF \l_graphics_ext_type_prop { .#1 } \l_@@_internal_tl
+      { \tl_set:Nn \l_@@_internal_tl {#1} }
+    \exp_args:NV \@@_include_auxii:n \l_@@_internal_tl
+  }
+\cs_new_protected:Npn \@@_include_auxii:n #1
+  {
+    \mode_leave_vertical:
+    \cs_if_exist:cTF { driver_graphics_include_ #1 :n }
+      {
+        \tl_set_eq:NN \l_graphics_name_tl \l_@@_name_tl
+        \exp_args:NnV \use:c { driver_graphics_getbb_ #1 :n }
+          \l_@@_name_tl
+        \seq_gput_right:NV \g_@@_record_seq \l_graphics_name_tl
+%<*package>
+        \clist_if_exist:NT \@filelist
+          { \exp_args:NV \@addtofilelist \l_graphics_name_tl }
+%</package>
+        \bool_if:NTF \l_graphics_draft_bool
+          { \@@_include_auxiii:n }
+          { \@@_include_auxiv:n }
+            {#1}
+      }
+      { \__kernel_msg_error:nnn { graphics } { unsupported-graphic-type } {#1} }
+  }
+\cs_new_protected:Npn \@@_include_auxiii:n #1
+  {
+    \hbox_to_wd:nn { \l_graphics_urx_dim - \l_graphics_llx_dim }
+      {
+        \tex_vrule:D
+        \tex_hss:D
+        \vbox_to_ht:nn
+          { \l_graphics_ury_dim - \l_graphics_lly_dim }
+          {
+            \tex_hrule:D width
+              \dim_eval:n { \l_graphics_urx_dim - \l_graphics_llx_dim }
+            \tex_vss:D
+            \hbox_to_wd:nn
+              { \l_graphics_urx_dim - \l_graphics_llx_dim }
+              {
+%<*package>
+                \ttfamily
+%</package>
+                \tex_hss:D \l_@@_name_tl \tex_hss:D
+              }
+            \tex_vss:D
+            \tex_hrule:D
+          }
+        \tex_hss:D
+        \tex_vrule:D
+      }
+  }
+\cs_new_protected:Npn \@@_include_auxiv:n #1
+  {
+    \hbox_set:Nn \l_@@_internal_box
+      {
+        \exp_args:NnV \use:c { driver_graphics_include_ #1 :n }
+          \l_@@_name_tl
+      }
+    \box_set_dp:Nn \l_@@_internal_box { 0pt }
+    \box_set_ht:Nn \l_@@_internal_box
+      { \l_graphics_ury_dim - \l_graphics_lly_dim }
+     \box_set_wd:Nn \l_@@_internal_box
+      { \l_graphics_urx_dim - \l_graphics_llx_dim }
+    \box_use_drop:N \l_@@_internal_box
+  }
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\graphics_show_list:, \graphics_log_list:, \@@_list:N}
+% \begin{macro}[EXP]{\@@_list_aux:n}
+%   A function to list all graphic files used.
+%    \begin{macrocode}
+\cs_new_protected:Npn \graphics_show_list: { \@@_list:N \msg_show:nnxxxx }
+\cs_new_protected:Npn \graphics_log_list: { \@@_list:N \msg_log:nnxxxx }
+\cs_new_protected:Npn \@@_list:N #1
+  {
+    \seq_remove_duplicates:N \g_@@_record_seq
+    #1 { LaTeX/kernel } { file-list }
+      { \seq_map_function:NN \g_@@_record_seq \@@_list_aux:n }
+        { } { } { }
+  }
+\cs_new:Npn \@@_list_aux:n #1 { \iow_newline: #1 }
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Messages}
+%
+%    \begin{macrocode}
+\__kernel_msg_new:nnnn { graphics } { graphic-not-found }
+  { Image~file~'#1'~not~found. }
+  {
+    LaTeX~tried~to~open~graphic~file~'#1',
+    ~but~the~file~could~not~be~read.
+  }
+\__kernel_msg_new:nnnn { graphics } { pipe-failed }
+  { Cannot~run~piped~system~commands. }
+  {
+    LaTeX~tried~to~call~a~system~process~but~this~was~not~possible.\\
+    Try~the~"--shell-escape"~(or~"--enable-pipes")~option.
+  }
+\__kernel_msg_new:nnnn { graphics } { unsupported-graphic-type }
+  { Image~type~'#1'~not~supported~by~current~driver. }
+  {
+    LaTeX~was~asked~to~include~an~graphic~of~type~'#1',~
+    but~this~is~not~supported~by~the~current~driver~(production~route).
+  }
+%    \end{macrocode}
+%
+%    \begin{macrocode}
+%</initex|package>
+%    \end{macrocode}
+%
+% \end{implementation}
+%
+% \PrintIndex


Property changes on: trunk/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: trunk/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.ins	                        (rev 0)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.ins	2019-05-28 21:24:36 UTC (rev 51248)
@@ -0,0 +1,56 @@
+\iffalse meta-comment
+
+File l3graphics.ins Copyright (C) 2017,2019 The LaTeX3 Project
+
+It may be distributed and/or modified under the conditions of the
+LaTeX Project Public License (LPPL), either version 1.3c of this
+license or (at your option) any later version.  The latest version
+of this license is in the file
+
+   http://www.latex-project.org/lppl.txt
+
+This file is part of the "l3experimental bundle" (The Work in LPPL)
+and all files in that bundle must be distributed together.
+
+-----------------------------------------------------------------------
+
+The development version of the bundle can be found at
+
+   https://github.com/latex3/latex3
+
+for those people who are interested.
+
+-----------------------------------------------------------------------
+
+Any modification of this file should ensure that the copyright and
+license information is placed in the derived files.
+
+\fi
+
+\input l3docstrip.tex
+\askforoverwritefalse
+
+\preamble
+
+Copyright (C) 2019 The LaTeX3 Project
+
+It may be distributed and/or modified under the conditions of
+the LaTeX Project Public License (LPPL), either version 1.3c of
+this license or (at your option) any later version.  The latest
+version of this license is in the file:
+
+   http://www.latex-project.org/lppl.txt
+
+This file is part of the "l3experimental bundle" (The Work in LPPL)
+and all files in that bundle must be distributed together.
+
+\endpreamble
+% stop docstrip adding \endinput
+\postamble
+\endpostamble
+
+\keepsilent
+
+\generate{\file{l3graphics.sty}{\from{l3graphics.dtx}{package}}}
+
+\endbatchfile

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-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-convert.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -1,6 +1,8 @@
 % \iffalse meta-comment
 %
-%% File: l3str-convert.dtx Copyright (C) 2013-2019 The LaTeX3 Project
+%% File: l3str-convert.dtx
+% 
+% Copyright (C) 2013-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
@@ -46,7 +48,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-03}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %
@@ -234,7 +236,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\ProvidesExplPackage{l3str-convert}{2019-05-03}{}
+\ProvidesExplPackage{l3str-convert}{2019-05-28}{}
   {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-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -48,7 +48,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-03}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %
@@ -164,7 +164,7 @@
 %
 %    \begin{macrocode}
 %<*package>
-\ProvidesExplPackage{l3str-format}{2019-05-03}{}
+\ProvidesExplPackage{l3str-format}{2019-05-28}{}
   {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-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -46,7 +46,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-03}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %
@@ -136,7 +136,7 @@
 %
 %    \begin{macrocode}
 %<*package>
-\ProvidesExplPackage{l3sys-shell}{2019-05-03}{}
+\ProvidesExplPackage{l3sys-shell}{2019-05-28}{}
   {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-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -56,7 +56,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-03}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %
@@ -675,7 +675,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\ProvidesExplPackage{xcoffins}{2019-05-03}{}
+\ProvidesExplPackage{xcoffins}{2019-05-28}{}
   {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-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -61,7 +61,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-03}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %
@@ -687,7 +687,7 @@
 %
 %    \begin{macrocode}
 %<*package>
-\ProvidesExplPackage{l3galley}{2019-05-03}{}
+\ProvidesExplPackage{l3galley}{2019-05-28}{}
   {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-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -47,7 +47,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-03}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %
@@ -734,7 +734,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\ProvidesExplPackage{xgalley}{2019-05-03}{}
+\ProvidesExplPackage{xgalley}{2019-05-28}{}
   {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-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/expl3.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -23,7 +23,7 @@
 % for those people who are interested.
 %
 %<*driver|generic|package>
-\def\ExplFileDate{2019-05-09}%
+\def\ExplFileDate{2019-05-28}%
 %</driver|generic|package>
 %<*driver>
 \documentclass[full]{l3doc}
@@ -51,7 +51,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3alloc.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3alloc.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3alloc.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3box.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3box.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3box.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %
@@ -299,6 +299,25 @@
 %
 % \section{Additions to \pkg{l3file}}
 %
+% \begin{function}[added = 2019-05-13, TF]{\file_compare_timestamp:nNn}
+%   \begin{syntax}
+%     \cs{file_compare_timestamp:nNn} \Arg{file-1} \meta{comparator} \Arg{file-2} \Arg{true code} \Arg{false code}
+%   \end{syntax}
+%   Compares the file stamps on the two \meta{files} as indicated by
+%   the \meta{comparator}, and inserts either the \meta{true code}
+%   or \meta{false case} as required. A file which is not found
+%   is treated as older than any file which is found.This allows for
+%   example the construct
+%   \begin{verbatim}
+%     \file_compare_timestamp:nNnT { source-file } > { derived-file }
+%       {
+%         % Code to regenerate derived file
+%       }
+%   \end{verbatim}
+%   to work when the derived file is entirely absent. The timestamp
+%   of two absent files is regarded as different.
+% \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}
@@ -2346,6 +2365,104 @@
 % \subsection{Additions to \pkg{l3file}}
 %
 %    \begin{macrocode}
+%<@@=file>
+%    \end{macrocode}
+%
+% \begin{macro}[EXP]{\@@_str_cmp:nn}
+% \begin{macro}[EXP]{\@@_str_escape:n}
+%   As we are doing a fixed-length \enquote{big} integer comparison, it
+%   is easiest to use the low-level behavior  of string comparisons.
+%    \begin{macrocode}
+\cs_new:Npn \@@_str_cmp:nn #1#2 { \tex_strcmp:D {#1} {#2} }
+\sys_if_engine_luatex:T
+  {
+    \cs_set:Npn \@@_str_cmp:nn #1#2
+      {
+        \lua_now:e
+          {
+            l3kernel.strcmp
+              (
+                " \@@_str_escape:n {#1}",
+                " \@@_str_escape:n {#2}"
+              )
+          }
+      }
+   \cs_new:Npn \@@_str_escape:n #1
+     {
+       \lua_escape:e
+         { \__kernel_tl_to_str:w \use:e { {#1} } }
+     }
+  }
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{variable}{\l_@@_first_tl, \l_@@_second_tl}
+%    \begin{macrocode}
+\tl_new:N \l_@@_first_tl
+\tl_new:N \l_@@_second_tl
+%    \end{macrocode}
+% \end{variable}
+%
+% \begin{macro}[TF]{\file_compare_timestamp:nNn}
+% \begin{macro}[EXP]{\@@_timestamp:n}
+%   Comparison of file date can be done by using the low-level nature of the
+%   string comparison functions. This could be expandable but that would
+%   skip any file look-up: to stay consistent we retain that at the cost of
+%   expansion.
+%    \begin{macrocode}
+\prg_new_protected_conditional:Npnn \file_compare_timestamp:nNn #1#2#3
+  { T , F , TF }
+  {
+    \group_begin:
+      \file_get_full_name:nNTF {#1} \l_@@_first_tl
+        {
+          \file_get_full_name:nNTF {#3} \l_@@_second_tl
+            {
+              \if_int_compare:w
+                  \@@_str_cmp:nn
+                    { \@@_timestamp:n \exp_after:wN { \l_@@_first_tl } }
+                    { \@@_timestamp:n \exp_after:wN { \l_@@_second_tl } }
+                    #2 0 \exp_stop_f:
+              \group_end:
+              \prg_return_true:
+            \else:
+              \group_end:
+               \prg_return_false:
+            \fi:
+            }
+            {
+              \group_end:
+               \if_charcode:w #2 >
+                  \prg_return_true:
+                \else:
+                  \prg_return_false:
+                \fi:
+            }
+        }
+        {
+          \group_end:
+          \if_charcode:w #2 <
+            \prg_return_true:
+          \else:
+            \prg_return_false:
+          \fi:
+        }
+  }
+\sys_if_engine_luatex:TF
+  {
+    \cs_new:Npn \@@_timestamp:n #1
+      {
+        \lua_now:e
+          { l3kernel.filemoddate ( " \lua_escape:e {#1} " ) }
+      }
+  }
+  { \cs_new_eq:NN \@@_timestamp:n \tex_filemoddate:D }
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+%    \begin{macrocode}
 %<@@=ior>
 %    \end{macrocode}
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3color-base.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3color-base.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3color-base.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -79,7 +79,7 @@
 %
 % \title{The \cls{l3doc} class}
 % \author{\Team}
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 % \maketitle
 % \tableofcontents
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -63,7 +63,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3drivers-basics.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3drivers-basics.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3drivers-basics.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3drivers-box.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3drivers-box.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3drivers-box.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3drivers-color.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3drivers-color.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3drivers-color.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3drivers-draw.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3drivers-draw.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3drivers-draw.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3drivers-graphics.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3drivers-graphics.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3drivers-graphics.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %
@@ -108,9 +108,9 @@
 %    \end{macrocode}
 %
 % \begin{variable}{\l_@@_graphics_attr_tl}
-%   In PDF mode, additional attributes of an image (such as page number) are
-%   needed both to obtain the bounding box and when inserting the image: this
-%   occurs as the image dictionary approach means they are read as part of
+%   In PDF mode, additional attributes of an graphic (such as page number) are
+%   needed both to obtain the bounding box and when inserting the graphic: this
+%   occurs as the graphic dictionary approach means they are read as part of
 %   the bounding box operation. As such, it is easier to track additional
 %   attributes using a dedicated |tl| rather than build up the same data
 %   twice.
@@ -127,9 +127,9 @@
 %   }
 % \begin{macro}
 %   {\@@_graphics_getbb_auxi:n, \@@_graphics_getbb_auxii:n}
-%   Getting the bounding box here requires us to box up the image and
+%   Getting the bounding box here requires us to box up the graphic and
 %   measure it. To deal with the difference in feature support in bitmap
-%   and vector images but keeping the common parts, there is a little work
+%   and vector graphics but keeping the common parts, there is a little work
 %   to do in terms of auxiliaries. The key here is to notice that we need
 %   two forms of the attributes: a \enquote{short} set to allow us to
 %   track for caching, and the full form to pass to the primitive.
@@ -167,7 +167,7 @@
       { \@@_graphics_getbb_auxii:n {#1} }
   }
 %    \begin{macrocode}
-%   Measuring the image is done by boxing up: for PDF images we could
+%   Measuring the graphic is done by boxing up: for PDF graphics we could
 %   use |\tex_pdfximagebbox:D|, but if doesn't work for other types.
 %   As the box always starts at $(0,0)$ there is no need to worry about
 %   the lower-left position.
@@ -224,7 +224,61 @@
 %    \end{macrocode}
 % \end{macro}
 %
+% \begin{macro}{\driver_graphics_getbb_eps:n}
+% \begin{macro}{\@@_graphics_getbb_eps:nm}
+% \begin{macro}{\driver_graphics_include_eps:n}
+% \begin{variable}{\l_@@_dir_str, \l_@@_name_str, \l_@@_ext_str}
+%   EPS graphics may be included in \texttt{pdfmode} by conversion to
+%   PDF: this requires restricted shell escape. Modelled on the \pkg{epstopdf}
+%   \LaTeXe{} package, but simplified, conversion takes place here if we have
+%   shell access.
 %    \begin{macrocode}
+\sys_if_shell:T
+  {
+    \str_new:N \l_@@_dir_str
+    \str_new:N \l_@@_name_str
+    \str_new:N \l_@@_ext_str
+    \cs_new_protected:Npn \driver_graphics_getbb_eps:n #1
+      {
+        \file_parse_full_name:nNNN {#1}
+          \l_@@_dir_str
+          \l_@@_name_str
+          \l_@@_ext_str
+        \exp_args:Nx \@@_graphics_getbb_eps:nn
+          {
+            \l_@@_name_str - \str_tail:N \l_@@_ext_str
+            -converted-to.pdf
+          }
+          {#1}
+     }
+    \cs_new_protected:Npn \@@_graphics_getbb_eps:nn #1#2
+      {
+        \file_compare_timestamp:nNnT {#2} > {#1}
+          {
+            \sys_shell_now:n
+              { repstopdf ~ #2 ~ #1 }
+          }
+        \tl_set:Nn \l_graphics_name_tl {#1}
+        \driver_graphics_getbb_pdf:n {#1}
+      }
+    \cs_new_protected:Npn \driver_graphics_include_eps:n #1
+      {
+        \file_parse_full_name:nNNN {#1}
+          \l_@@_dir_str \l_@@_name_str \l_@@_ext_str
+        \exp_args:Nx \driver_graphics_include_pdf:n
+          {
+            \l_@@_name_str - \str_tail:N \l_@@_ext_str
+            -converted-to.pdf
+          }
+      }
+  }
+%    \end{macrocode}
+% \end{variable}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+%    \begin{macrocode}
 %</pdfmode>
 %    \end{macrocode}
 %
@@ -268,7 +322,7 @@
 % \end{macro}
 %
 % \begin{variable}{\g_@@_graphics_int}
-%   Used to track the object number associated with each image.
+%   Used to track the object number associated with each graphic.
 %    \begin{macrocode}
 \int_new:N \g_@@_graphics_int
 %    \end{macrocode}
@@ -283,7 +337,7 @@
 %  \begin{macro}{\@@_graphics_include_auxii:nnn, \@@_graphics_include_auxii:xnn}
 %  \begin{macro}{\@@_graphics_include_auxiii:nnn}
 %   The special syntax depends on the file type. There is a difference in
-%   how PDF images are best handled between |dvipdfmx| and |xdvipdfmx|: for
+%   how PDF graphics are best handled between |dvipdfmx| and |xdvipdfmx|: for
 %   the latter it is better to use the primitive route. The relevant code for
 %   that is included later in this file.
 %    \begin{macrocode}
@@ -306,7 +360,7 @@
   { \@@_graphics_include_auxi:nn {#1} { epdf } }
 %</dvipdfmx>
 %    \end{macrocode}
-%   Image inclusion is set up to use the fact that each image is stored in
+%   Graphic inclusion is set up to use the fact that each image is stored in
 %   the PDF as an XObject. This means that we can include repeated images
 %   only once and refer to them. To allow that, track the nature of each
 %   image: much the same as for the direct PDF mode case.
@@ -331,7 +385,7 @@
     \int_if_exist:cTF { c_@@_graphics_ #2#1 _int }
       {
         \@@_literal:x
-          { pdf:usexobj~@image \int_use:c { c_@@_graphics_ #2#1 _int } }
+          { pdf:usexobj~@graphic \int_use:c { c_@@_graphics_ #2#1 _int } }
       }
       { \@@_graphics_include_auxiii:nnn {#2} {#1} {#3} }
   }
@@ -338,7 +392,7 @@
 \cs_generate_variant:Nn \@@_graphics_include_auxii:nnn { x }
 %    \end{macrocode}
 %  Inclusion using the specials is relatively straight-forward, but there
-%  is one wrinkle. To get the |pagebox| correct for PDF images in all cases,
+%  is one wrinkle. To get the |pagebox| correct for PDF graphics in all cases,
 %  it is necessary to provide both that information and the |bbox| argument:
 %  odd things happen otherwise!
 %    \begin{macrocode}
@@ -349,7 +403,7 @@
     \@@_literal:x
       {
         pdf:#3~
-        @image \int_use:c { c_@@_graphics_ #1#2 _int } ~
+        @graphic \int_use:c { c_@@_graphics_ #1#2 _int } ~
         \int_compare:nNnT \l_graphics_page_int > 1
           { page ~ \int_use:N \l_graphics_page_int \c_space_tl }
         \tl_if_empty:NF \l_graphics_pagebox_tl
@@ -473,9 +527,9 @@
 %
 % \begin{macro}{\driver_graphics_include_pdf:n}
 % \begin{macro}{\@@_graphics_include_bitmap_quote:w}
-%   For PDF images, properly supporting the |pagebox| concept in \XeTeX{}
+%   For PDF graphics, properly supporting the |pagebox| concept in \XeTeX{}
 %   is best done using the |\tex_XeTeXpdffile:D| primitive. The syntax here
-%   is the same as for the image measurement part, although we know at this
+%   is the same as for the graphic measurement part, although we know at this
 %   stage that there must be some valid setting for \cs{l_graphics_pagebox_tl}.
 %    \begin{macrocode}
 \cs_new_protected:Npn \driver_graphics_include_pdf:n #1
@@ -520,9 +574,9 @@
 %
 % \begin{macro}{\driver_graphics_include_png:n, \driver_graphics_include_jpg:n}
 % \begin{macro}{\@@_graphics_include_bitmap_quote:w}
-%   The driver here has built-in support for basic image inclusion (see
+%   The driver here has built-in support for basic graphic inclusion (see
 %   \texttt{dvisvgm.def} for a more complex approach, needed if clipping,
-%   \emph{etc.}, is covered at the image driver level). The only issue is
+%   \emph{etc.}, is covered at the graphic driver level). The only issue is
 %   that |#1| must be quote-corrected. The \texttt{dvisvgm:img} operation
 %   quotes the file name, but if it is already quoted (contains spaces)
 %   then we have an issue: we simply strip off any quotes as a result.

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3drivers-pdf.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3drivers-pdf.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3drivers-pdf.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %
@@ -630,6 +630,19 @@
       def
     /driver.breaklink.write
       {
+        counttomark ~ 1 ~ sub ~
+        index /_objdef ~ eq
+          {
+            counttomark ~ -2 ~ roll ~
+            dup ~ wcheck ~
+              {
+                readonly ~
+                counttomark ~ 2 ~ roll
+              }
+              { pop ~ pop }
+            ifelse
+          }
+        if ~
         counttomark ~ 1 ~ add ~ copy ~
         pop ~ driver.currentrect
         /ANN ~ pdfmark
@@ -645,8 +658,7 @@
 %     driver.pdfmark.good ,
 %     driver.outerbox     ,
 %     driver.baselineskip ,
-%     driver.pdfmark.dict ,
-%     driver.pdfmark.obj
+%     driver.pdfmark.dict
 %   }
 %   The business end of breaking links starts by hooking into |pdfmarks|.
 %   Unlike \pkg{hypdvips}, we avoid altering any links we have not created
@@ -676,11 +688,9 @@
                     Rect ~ 1 ~ get ~ sub ~
                     driver.baselineskip ~ div ~ round ~ cvi ~ 0 ~ gt
                       { driver.breaklink }
-                      { driver.pdfmark.obj }
-                    ifelse
+                    if
                   }
-                  { driver.pdfmark.obj }
-                ifelse ~
+                if ~
               end ~
             SDict /driver.outerbox ~ undef ~
             SDict /driver.baselineskip ~ undef ~
@@ -713,8 +723,6 @@
         loop
     }
       def
-  /driver.pdfmark.obj
-    { /_objdef ~ exch ~ driver.link.obj ~ exch } def
   }
 %    \end{macrocode}
 % \end{macro}
@@ -835,22 +843,18 @@
 %    \end{macrocode}
 % \end{variable}
 %
-% \begin{variable}{\l_@@_breaklink_obj_tl, \l_@@_breaklink_pdfmark_tl}
+% \begin{variable}{\l_@@_breaklink_pdfmark_tl}
 %   Swappable content for link breaking.
 %    \begin{macrocode}
-\tl_new:N \l_@@_breaklink_obj_tl
-\tl_set:Nn \l_@@_breaklink_obj_tl
-  { /_objdef ~  { driver.obj \int_use:N \g_@@_pdf_link_int } }
 \tl_new:N \l_@@_breaklink_pdfmark_tl
 \tl_set:Nn \l_@@_breaklink_pdfmark_tl { pdfmark }
 %    \end{macrocode}
 % \end{variable}
 %
-% \begin{macro}{\@@_breaklink_postscript:n, \@@_breaklink_postscript:x}
+% \begin{macro}{\@@_breaklink_postscript:n}
 %   To allow dropping material unless link breaking is active.
 %    \begin{macrocode}
 \cs_new_protected:Npn \@@_breaklink_postscript:n #1 { }
-\cs_generate_variant:Nn \@@_breaklink_postscript:n { x }
 %    \end{macrocode}
 % \end{macro}
 %
@@ -861,7 +865,6 @@
 %    \end{macrocode}
 % \end{macro}
 %
-%
 % \begin{macro}{\driver_pdf_link_begin_goto:nnw, \driver_pdf_link_begin_user:nnw}
 % \begin{macro}{\@@_pdf_link:nw, \@@_pdf_link_aux:nw}
 % \begin{macro}{\driver_pdf_link_end:, \@@_pdf_link_end:}
@@ -875,7 +878,6 @@
 %     driver.llx, driver.lly ,
 %     driver.ury, driver.ury ,
 %     driver.link.dict       ,
-%     driver.link.obj        ,
 %     driver.outerbox        ,
 %     driver.baselineskip
 %   }
@@ -912,7 +914,6 @@
 \cs_new_protected:Npn \@@_pdf_link_begin_aux:nw #1
   {
     \bool_gset_true:N \g_@@_pdf_link_bool
-    \@@_pdf_annotation:nnnn { 3pt } { 3pt } { 0pt } { }
     \@@_postscript:n
       { /driver.link.dict ( #1 ) def }
     \tl_gset:Nn \g_@@_pdf_link_dict_tl {#1}
@@ -961,18 +962,10 @@
       }
     \int_gincr:N \g_@@_pdf_object_int
     \int_gset_eq:NN \g_@@_pdf_link_int \g_@@_pdf_object_int
-    \@@_breaklink_postscript:x
-      {
-        /driver.link.obj
-          {
-            { driver.obj \int_use:N \g_@@_pdf_link_int \c_space_tl driver.cvs }
-          }
-            def
-      }
     \@@_postscript:x
       {
         mark
-        \l_@@_breaklink_obj_tl
+        /_objdef { driver.obj \int_use:N \g_@@_pdf_link_int }
         \g_@@_pdf_link_dict_tl \c_space_tl
         driver.rect
         /ANN ~ \l_@@_breaklink_pdfmark_tl
@@ -1088,7 +1081,6 @@
                   }
               }
           }
-        \tl_clear:N \l_@@_breaklink_obj_tl
         \tl_set:Nn \l_@@_breaklink_pdfmark_tl { driver.pdfmark }
         \cs_set_eq:NN \@@_breaklink_postscript:n \@@_postscript:n
         \cs_set_eq:NN \@@_breaklink_usebox:N \hbox_unpack:N
@@ -1397,7 +1389,7 @@
     {
       \@@_tmp:w
         { \tex_pdfextension:D obj ~ }
-        { \exp_not:N \tex_pdffeedback:D lastobj \scan_stop: }
+        { \exp_not:N \tex_pdffeedback:D lastobj }
     }
     { \@@_tmp:w { \tex_pdfobj:D } { \tex_pdflastobj:D } }
 \group_end:
@@ -1457,6 +1449,7 @@
 %    \begin{macrocode}
 \cs_new_protected:Npx \driver_pdf_compresslevel:n #1
   {
+    \exp_not:N \tex_global:D
     \cs_if_exist:NTF \tex_pdfcompresslevel:D
       { \tex_pdfcompresslevel:D }
       { \tex_pdfvariable:D compresslevel }
@@ -1470,6 +1463,7 @@
   }
 \cs_new_protected:Npx \@@_pdf_objcompresslevel:n #1
   {
+    \exp_not:N \tex_global:D
     \cs_if_exist:NTF \tex_pdfobjcompresslevel:D
       { \tex_pdfobjcompresslevel:D }
       { \tex_pdfvariable:D objcompresslevel }

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3drivers.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3drivers.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3drivers.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %
@@ -568,15 +568,18 @@
 %
 % \begin{function}[EXP, added = 2019-04-11]{\driver_pdf_link_margin:n}
 %   \begin{syntax}
-%     \cs{driver_pdf_link_margin:} \Arg{dimen}
+%     \cs{driver_pdf_link_margin:n} \Arg{dimen}
 %   \end{syntax}
 %   Sets the length of the margin between content and the border of a link.
 %   Different back-ends treat the scoping of this value in different ways:
-%   \pdfTeX{} and \LuaTeX{} treat it as scoped by \TeX{}, whilst with
+%   \pdfTeX{} and \LuaTeX{} apply this at shipout (so it is global, once per
+%   page), whilst with
 %   \texttt{dvips} the scope is managed at the PostScript level. For
 %   \texttt{(x)dvipdfmx}, this setting applies to \emph{all} annotations
 %   (\emph{i.e.}~it is global), and thus it may be necessary to set to
-%   \texttt{0pt} to avoid breaking for example animations.
+%   \texttt{0pt} to avoid breaking for example animations. In general,
+%   this setting should be applied once per document, prior to the
+%   first page being shipped out.
 % \end{function}
 %
 % \begin{function}[added = 2019-04-26]{\driver_pdf_destination:nn}
@@ -676,10 +679,10 @@
 %     \item[\texttt{array}] A space-separated list of values
 %     \item[\texttt{dict}] Key--value pairs in the form
 %       \texttt{/\meta{key} \meta{value}}
-%     \item[\texttt{fstream}] Two brace groups: \meta{content} and
-%       \meta{file name}
-%     \item[\texttt{stream}] Two brace groups: \meta{content} and
-%       \meta{additional attributes}
+%     \item[\texttt{fstream}] Two brace groups: \meta{file name} and
+%       \meta{content}
+%     \item[\texttt{stream}] Two brace groups: \meta{attributes (dictionary)}
+%       and \meta{content}
 %   \end{itemize}
 % \end{function}
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3file.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3file.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3file.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3final.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3final.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3final.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -40,7 +40,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 % \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-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -40,7 +40,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -40,7 +40,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -40,7 +40,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -40,7 +40,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -40,7 +40,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %
@@ -96,6 +96,7 @@
 %     \c_@@_prec_hatii_int,
 %     \c_@@_prec_hat_int,
 %     \c_@@_prec_not_int,
+%     \c_@@_prec_juxt_int,
 %     \c_@@_prec_times_int,
 %     \c_@@_prec_plus_int,
 %     \c_@@_prec_comp_int,
@@ -118,7 +119,8 @@
 %     \item[16] Function calls.
 %     \item[13/14] Binary |**| and~|^| (right to left).
 %     \item[12] Unary |+|, |-|, |!| (right to left).
-%     \item[10] Binary |*|, |/|, and juxtaposition (implicit~|*|).
+%     \item[11] Juxtaposition (implicit~|*|) with no parenthesis.
+%     \item[10] Binary |*| and~|/|.
 %     \item[9] Binary |+| and~|-|.
 %     \item[7] Comparisons.
 %     \item[6] Logical \texttt{and}, denoted by~|&&|.
@@ -134,6 +136,7 @@
 \int_const:Nn \c_@@_prec_hatii_int  { 14 }
 \int_const:Nn \c_@@_prec_hat_int    { 13 }
 \int_const:Nn \c_@@_prec_not_int    { 12 }
+\int_const:Nn \c_@@_prec_juxt_int   { 11 }
 \int_const:Nn \c_@@_prec_times_int  { 10 }
 \int_const:Nn \c_@@_prec_plus_int   { 9 }
 \int_const:Nn \c_@@_prec_comp_int   { 7 }
@@ -1946,7 +1949,7 @@
       {
         \exp_not:N \@@_exp_after_array_f:w #2 \s_@@_stop
         \exp_not:N \exp_after:wN
-        \exp_not:N \@@_parse_infix:NN
+        \exp_not:N \@@_parse_infix_after_paren:NN
         \exp_not:N \exp_after:wN #1
         \exp_not:N \exp:w
         \exp_not:N \@@_parse_expand:w
@@ -1981,7 +1984,7 @@
       \fi:
       \exp_end_continue_f:w
     \fi:
-    \@@_parse_infix:NN #1 )
+    \@@_parse_infix_after_paren:NN #1 )
   }
 %    \end{macrocode}
 % \end{macro}
@@ -2268,7 +2271,7 @@
         \exp_after:wN \@@_parse_infix_mark:NNN
       \else:
         \exp_after:wN \exp_after:wN
-        \exp_after:wN \@@_parse_infix_mul:N
+        \exp_after:wN \@@_parse_infix_juxt:N
       \fi:
     \else:
       \if_int_compare:w
@@ -2276,7 +2279,7 @@
             ( `#2 \if_int_compare:w `#2 > `Z - 32 \fi: ) / 26
           = 3 \exp_stop_f:
         \exp_after:wN \exp_after:wN
-        \exp_after:wN \@@_parse_infix_mul:N
+        \exp_after:wN \@@_parse_infix_juxt:N
       \else:
         \exp_after:wN \@@_parse_infix_check:NNN
         \cs:w
@@ -2288,26 +2291,61 @@
     #1
     #2
   }
-\cs_new:Npx \@@_parse_infix_check:NNN #1#2#3
+\cs_new:Npn \@@_parse_infix_check:NNN #1#2#3
   {
-    \exp_not:N \if_meaning:w \scan_stop: #1
-      \exp_not:N \__kernel_msg_expandable_error:nnn
+    \if_meaning:w \scan_stop: #1
+      \__kernel_msg_expandable_error:nnn
         { kernel } { fp-missing } { * }
-      \exp_not:N \exp_after:wN
-      \exp_not:c { @@_parse_infix_*:N }
-      \exp_not:N \exp_after:wN #2
-      \exp_not:N \exp_after:wN #3
-    \exp_not:N \else:
-      \exp_not:N \exp_after:wN #1
-      \exp_not:N \exp_after:wN #2
-      \exp_not:N \exp:w
-      \exp_not:N \exp_after:wN
-      \exp_not:N \@@_parse_expand:w
-    \exp_not:N \fi:
+      \exp_after:wN \@@_parse_infix_mul:N
+      \exp_after:wN #2
+      \exp_after:wN #3
+    \else:
+      \exp_after:wN #1
+      \exp_after:wN #2
+      \exp:w \exp_after:wN \@@_parse_expand:w
+    \fi:
   }
 %    \end{macrocode}
 % \end{macro}
 %
+% \begin{macro}{\@@_parse_infix_after_paren:NN}
+%   Variant of \cs{@@_parse_infix:NN} for use after a closing
+%   parenthesis.  The only difference is that \cs{@@_parse_infix_juxt:N}
+%   is replaced by \cs{@@_parse_infix_mul:N}.
+%    \begin{macrocode}
+\cs_new:Npn \@@_parse_infix_after_paren:NN #1 #2
+  {
+    \if_catcode:w \scan_stop: \exp_not:N #2
+      \if_int_compare:w
+          \@@_str_if_eq:nn { \s_@@_mark } { \exp_not:N #2 }
+          = 0 \exp_stop_f:
+        \exp_after:wN \exp_after:wN
+        \exp_after:wN \@@_parse_infix_mark:NNN
+      \else:
+        \exp_after:wN \exp_after:wN
+        \exp_after:wN \@@_parse_infix_mul:N
+      \fi:
+    \else:
+      \if_int_compare:w
+          \@@_int_eval:w
+            ( `#2 \if_int_compare:w `#2 > `Z - 32 \fi: ) / 26
+          = 3 \exp_stop_f:
+        \exp_after:wN \exp_after:wN
+        \exp_after:wN \@@_parse_infix_mul:N
+      \else:
+        \exp_after:wN \@@_parse_infix_check:NNN
+        \cs:w
+          @@_parse_infix_ \token_to_str:N #2 :N
+          \exp_after:wN \exp_after:wN \exp_after:wN
+        \cs_end:
+      \fi:
+    \fi:
+    #1
+    #2
+  }
+%    \end{macrocode}
+% \end{macro}
+%
 % \subsubsection{Closing parentheses and commas}
 %
 % \begin{macro}[EXP]{\@@_parse_infix_mark:NNN}
@@ -2411,6 +2449,7 @@
 % \begin{macro}[EXP]
 %   {
 %     \@@_parse_infix_+:N, \@@_parse_infix_-:N,
+%     \@@_parse_infix_juxt:N,
 %     \@@_parse_infix_/:N, \@@_parse_infix_mul:N,
 %     \@@_parse_infix_and:N, \@@_parse_infix_or:N,
 %   }
@@ -2442,6 +2481,8 @@
   }
 \exp_args:Nc \@@_tmp:w { @@_parse_infix_^:N }   ^
   \c_@@_prec_hatii_int \c_@@_prec_hat_int
+\exp_args:Nc \@@_tmp:w { @@_parse_infix_juxt:N } *
+  \c_@@_prec_juxt_int \c_@@_prec_juxt_int
 \exp_args:Nc \@@_tmp:w { @@_parse_infix_/:N }   /
   \c_@@_prec_times_int \c_@@_prec_times_int
 \exp_args:Nc \@@_tmp:w { @@_parse_infix_mul:N } *

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -40,7 +40,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -40,7 +40,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 % \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-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -40,7 +40,7 @@
 %          {latex-team at latex-project.org}^^A
 %    }^^A
 % }
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -49,7 +49,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %
@@ -858,8 +858,9 @@
 %   \item Function calls (\texttt{sin}, \texttt{ln}, \emph{etc}).
 %   \item Binary |**| and |^| (right associative).
 %   \item Unary |+|, |-|, |!|.
-%   \item Binary |*|, |/|, and implicit multiplication by juxtaposition
-%     (\texttt{2pi}, \texttt{3(4+5)}, \emph{etc}).
+%   \item Implicit multiplication by juxtaposition (\texttt{2pi})
+%     when neither factor is in parentheses.
+%   \item Binary |*| and |/|, implicit multiplication by juxtaposition with parentheses (for instance \texttt{3(4+5)}).
 %   \item Binary |+| and |-|.
 %   \item Comparisons |>=|, |!=|, |<?|, \emph{etc}.
 %   \item Logical \texttt{and}, denoted by |&&|.
@@ -868,10 +869,13 @@
 %   \item Comma (to build tuples).
 % \end{itemize}
 % The precedence of operations can be overridden using parentheses.
-% In particular, those precedences imply that
+% In particular, the precedence of juxtaposition implies that
 % \begin{align*}
-%   \mathtt{sin 2pi} & = \sin(2)\pi != 0, \\
-%   \mathtt{2\char`\^2max(3,5)} & = 2^2 \max(3,5) = 20.
+%   \mathtt{1/2pi} & = 1/(2\pi), \\
+%   \mathtt{1/2pi(pi+pi)} & = (2\pi)^{-1}(\pi+\pi) \simeq 1, \\
+%   \mathtt{sin 2pi} & = \sin(2)\pi \neq 0, \\
+%   \mathtt{2\char`\^2max(3,5)} & = 2^2 \max(3,5) = 20, \\
+%   \mathtt{1in/1cm} & = (1in)/(1cm) = 2.54 .
 % \end{align*}
 % Functions are called on the value of their argument, contrarily to
 % \TeX{} macros.

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3int.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3int.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3int.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %
@@ -137,8 +137,10 @@
 %   \begin{syntax}
 %     |l3kernel.elapsedtime()|
 %   \end{syntax}
-%  Returns the time in \meta{scaled seconds} since the start of the \TeX{} run
-%  or since |l3kernel.resettimer| was issued.
+%   Returns the CPU time in \meta{scaled seconds} since the start of the
+%   \TeX{} run or since |l3kernel.resettimer| was issued.  This only
+%   measures the time used by the CPU, not the real time, e.g., waiting
+%   for user input.
 % \end{function}
 %
 % \begin{function}{l3kernel.filemdfivesum}
@@ -380,7 +382,7 @@
 end
 l3kernel.elapsedtime = elapsedtime
 local function resettimer()
-  base_time = 0
+  base_time = os_clock()
 end
 l3kernel.resettimer = resettimer
 %    \end{macrocode}

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3names.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3names.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3names.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3str.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3str.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3str.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -44,7 +44,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3token.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3token.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3token.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -43,7 +43,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-09}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %

Modified: trunk/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -62,7 +62,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-03}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %
@@ -133,7 +133,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\ProvidesExplPackage{l3keys2e}{2019-05-03}{}
+\ProvidesExplPackage{l3keys2e}{2019-05-28}{}
   {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-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3packages/xfp/xfp.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -64,7 +64,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-03}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %
@@ -167,7 +167,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\ProvidesExplPackage{xfp}{2019-05-03}{}
+\ProvidesExplPackage{xfp}{2019-05-28}{}
   {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-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3packages/xfrac/xfrac.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -65,7 +65,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-03}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %
@@ -535,7 +535,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\ProvidesExplPackage{xfrac}{2019-05-03}{}
+\ProvidesExplPackage{xfrac}{2019-05-28}{}
   {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-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -67,7 +67,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-03}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %
@@ -898,7 +898,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\ProvidesExplPackage{xparse}{2019-05-03}{}
+\ProvidesExplPackage{xparse}{2019-05-28}{}
   {L3 Experimental document command parser}
 %    \end{macrocode}
 %
@@ -1824,7 +1824,7 @@
           { \iow_char:N \\ \l_@@_function_tl } { \tl_to_str:n {#1} }
         \@@_bad_def:wn
       }
-    \tl_put_right:Nn \l_@@_arg_spec_tl { > {#1} }
+    \tl_put_right:Nx \l_@@_arg_spec_tl { > { \tl_trim_spaces:n {#1} } }
     \int_decr:N \l_@@_current_arg_int
     \bool_set_false:N \l_@@_grab_expandably_bool
     \@@_normalize_arg_spec_loop:n {#2}

Modified: trunk/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx	2019-05-28 21:24:36 UTC (rev 51248)
@@ -63,7 +63,7 @@
 %    }^^A
 % }
 %
-% \date{Released 2019-05-03}
+% \date{Released 2019-05-28}
 %
 % \maketitle
 %
@@ -682,7 +682,7 @@
 %    \end{macrocode}
 %
 %    \begin{macrocode}
-\ProvidesExplPackage{xtemplate}{2019-05-03}{}
+\ProvidesExplPackage{xtemplate}{2019-05-28}{}
   {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-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3benchmark/l3benchmark.sty	2019-05-28 21:24:36 UTC (rev 51248)
@@ -20,18 +20,18 @@
 %% 
 %% File: l3benchmark.dtx
 \RequirePackage{expl3}
-\ProvidesExplPackage{l3benchmark}{2019-05-03}{}
+\ProvidesExplPackage{l3benchmark}{2019-05-28}{}
   {L3 Experimental benchmarking}
 \sys_if_engine_luatex:TF
   {
     \cs_new:Npn \sys_timer:
-      { \int_eval:w \lua_now:n { l3kernel.elapsedtime() } \scan_stop: }
+      { \lua_now:n { l3kernel.elapsedtime() } }
   }
   {
     \cs_if_exist:NT \tex_elapsedtime:D
       {
         \cs_new:Npn \sys_timer:
-          { \int_eval:w \tex_elapsedtime:D }
+          { \int_value:w \tex_elapsedtime:D }
       }
   }
 \__sys_const:nn { sys_if_timer_exist }

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/l3cctab/l3cctab.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/l3cctab/l3cctab.sty	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3cctab/l3cctab.sty	2019-05-28 21:24:36 UTC (rev 51248)
@@ -20,7 +20,7 @@
 %% 
 %% File: l3cctab.dtx
 \RequirePackage{expl3}
-\ProvidesExplPackage{l3cctab}{2019-05-03}{}
+\ProvidesExplPackage{l3cctab}{2019-05-28}{}
   {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-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3color/l3color.sty	2019-05-28 21:24:36 UTC (rev 51248)
@@ -20,9 +20,9 @@
 %% 
 %% File: l3color.dtx
 \RequirePackage{expl3}
-\ProvidesExplPackage{l3color}{2019-05-03}{}
+\ProvidesExplPackage{l3color}{2019-05-28}{}
   {L3 Experimental color support}
-\tl_new:N \l__color_tmp_tl
+\tl_new:N \l__color_internal_tl
 \prg_new_conditional:Npnn \__color_if_defined:n #1 { T, F, TF }
   {
     \tl_if_exist:cTF { l__color_named_ #1 _tl }
@@ -88,15 +88,7 @@
   {
     \driver_color_pickup:N \l__color_current_tl
     \tl_set_eq:cN { l__color_named_ . _tl } \l__color_current_tl
-    \group_begin:
-      \seq_map_inline:Nn \l_char_active_seq
-        {
-          \tl_set:Nx \l__color_tmp_tl { \cs_to_str:N ##1 }
-          \char_set_active_eq:NN ##1 \l__color_tmp_tl
-        }
-      \tl_set:Nx \l__color_tmp_tl {#1}
-    \exp_args:NNV \group_end:
-    \__color_parse:nN \l__color_tmp_tl #2
+    \exp_args:Ne \__color_parse:nN { \tl_to_str:n {#1} } #2
   }
 \cs_new_protected:Npn \__color_parse:nN #1#2
   {
@@ -123,10 +115,10 @@
     \group_begin:
       \__color_extract:nNN {#2} \l__color_model_tl \l__color_value_tl
       \__color_parse_loop:w #3 ! ! ! ! \q_stop
-      \tl_set:Nx \l__color_tmp_tl
+      \tl_set:Nx \l__color_internal_tl
         { \l__color_model_tl \c_space_tl \l__color_value_tl }
     \exp_args:NNNV \group_end:
-    \tl_set:Nn #1 \l__color_tmp_tl
+    \tl_set:Nn #1 \l__color_internal_tl
   }
 \cs_new_protected:Npn \__color_parse_loop:w #1 ! #2 ! #3 ! #4 ! #5 \q_stop
   {
@@ -222,14 +214,28 @@
     \fp_eval:n { #4 * #1 + #8 * ( 1 - #1 ) } \c_space_tl
     \fp_eval:n { #5 * #1 + #9 * ( 1 - #1 ) }
   }
-\cs_new:Npn \__color_parse_gray:w #1 , #2 \q_stop {#1}
-\cs_new:Npn \__color_parse_rgb:w #1 , #2 , #3 , #4 \q_stop { #1 ~ #2 ~ #3 }
-\cs_new:Npn \__color_parse_cmyk:w #1 , #2 , #3 , #4 , #5 \q_stop
-  { #1 ~ #2 ~ #3 ~ #4 }
-\cs_new:Npn \__color_parse_spot:w #1 , #2 \q_stop
+\cs_new:Npn \__color_parse_model_gray:w #1 , #2 \q_stop { \__color_parse_number:n {#1} }
+\cs_new:Npn \__color_parse_model_rgb:w #1 , #2 , #3 , #4 \q_stop
+  {
+    \__color_parse_number:n {#1} ~
+    \__color_parse_number:n {#2} ~
+    \__color_parse_number:n {#3}
+  }
+\cs_new:Npn \__color_parse_model_cmyk:w #1 , #2 , #3 , #4 , #5 \q_stop
+  {
+    \__color_parse_number:n {#1} ~
+    \__color_parse_number:n {#2} ~
+    \__color_parse_number:n {#3} ~
+    \__color_parse_number:n {#4}
+  }
+\cs_new:Npn \__color_parse_model_spot:w #1 , #2 \q_stop
   { \__color_parse_spot_aux:w #1 ! 100 ! \q_stop }
 \cs_new:Npn \__color_parse_spot_aux:w #1 ! #2 ! #3 \q_stop
   { #1 ~ \fp_eval:n { #2 / 100 } }
+\cs_new:Npn \__color_parse_number:n #1
+  {  \__color_parse_number:w #1 . 0 . \q_stop }
+\cs_new:Npn \__color_parse_number:w #1 . #2 . #3 \q_stop
+  { \tl_if_blank:nTF {#1} { 0 } {#1} . #2 }
 \tl_new:N \l_color_fixed_model_tl
 \cs_new_protected:Npn \__color_check_model:N #1
   {
@@ -267,10 +273,10 @@
   }
 \cs_new_protected:Npn \__color_direct:nnN #1#2#3
   {
-    \cs_if_exist:cTF { __color_parse_ #1 :w }
+    \cs_if_exist:cTF { __color_parse_model_ #1 :w }
       {
         \tl_set:Nx #3
-          { #1 ~ \use:c {  __color_parse_ #1 :w } #2 , 0 , 0 , 0 , 0 \q_stop }
+          { #1 ~ \use:c {  __color_parse_model_ #1 :w } #2 , 0 , 0 , 0 , 0 \q_stop }
         \__color_check_model:N #3
       }
       {

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty	2019-05-28 21:24:36 UTC (rev 51248)
@@ -28,7 +28,7 @@
 %% 
 %% File: l3draw.dtx
 \RequirePackage{expl3}
-\ProvidesExplPackage{l3draw}{2019-05-03}{}
+\ProvidesExplPackage{l3draw}{2019-05-28}{}
   {L3 Experimental core drawing support}
 \RequirePackage { l3color }
 %% File: l3draw-boxes.dtx

Added: trunk/Master/texmf-dist/tex/latex/l3experimental/l3graphics/l3graphics.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/l3graphics/l3graphics.sty	                        (rev 0)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3graphics/l3graphics.sty	2019-05-28 21:24:36 UTC (rev 51248)
@@ -0,0 +1,307 @@
+%%
+%% This is file `l3graphics.sty',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% l3graphics.dtx  (with options: `package')
+%% 
+%% Copyright (C) 2019 The LaTeX3 Project
+%% 
+%% It may be distributed and/or modified under the conditions of
+%% the LaTeX Project Public License (LPPL), either version 1.3c of
+%% this license or (at your option) any later version.  The latest
+%% version of this license is in the file:
+%% 
+%%    http://www.latex-project.org/lppl.txt
+%% 
+%% This file is part of the "l3experimental bundle" (The Work in LPPL)
+%% and all files in that bundle must be distributed together.
+%% 
+%% File: l3graphics.dtx
+\RequirePackage{expl3}
+\ProvidesExplPackage{l3graphics}{2019-05-28}{}
+  {L3 Experimental graphics inclusion support}
+\ior_new:N \l__graphics_tmp_ior
+\tl_new:N  \l__graphics_tmp_tl
+\tl_new:N \l_graphics_decodearray_tl
+\tl_new:N \l_graphics_pagebox_tl
+\bool_new:N \l_graphics_interpolate_bool
+\tl_set:Nn \l_graphics_pagebox_tl { cropbox }
+\int_new:N \l_graphics_page_int
+\dim_new:N \l_graphics_llx_dim
+\dim_new:N \l_graphics_lly_dim
+\dim_new:N \l_graphics_urx_dim
+\dim_new:N \l_graphics_ury_dim
+\cs_new_protected:Npn \graphics_bb_save:n #1
+  {
+    \dim_if_exist:cTF { c__graphics_ #1 _urx_dim }
+      { \__kernel_msg_error:nnn { graphic } { bb-already-cached } {#1} }
+      {
+        \dim_compare:nNnF \l_graphics_llx_dim = { 0pt }
+          { \dim_const:cn { c__graphics_ #1 _llx_dim } { \l_graphics_llx_dim } }
+        \dim_compare:nNnF \l_graphics_lly_dim = { 0pt }
+          { \dim_const:cn { c__graphics_ #1 _lly_dim } { \l_graphics_lly_dim } }
+        \dim_const:cn { c__graphics_ #1 _urx_dim } { \l_graphics_urx_dim }
+        \dim_const:cn { c__graphics_ #1 _ury_dim } { \l_graphics_ury_dim }
+      }
+  }
+\cs_generate_variant:Nn \graphics_bb_save:n { x }
+\cs_new_protected:Npn \graphics_bb_restore:nF #1#2
+  {
+    \dim_if_exist:cTF { c__graphics_ #1 _urx_dim }
+      {
+        \dim_set_eq:Nc \l_graphics_urx_dim { c__graphics_ #1 _urx_dim }
+        \dim_set_eq:Nc \l_graphics_ury_dim { c__graphics_ #1 _ury_dim }
+        \dim_if_exist:cTF { c__graphics_ #1 _llx_dim }
+          { \dim_set_eq:Nc \l_graphics_llx_dim { c__graphics_ #1 _llx_dim } }
+          { \dim_zero:N \l_graphics_llx_dim }
+        \dim_if_exist:cTF { c__graphics_ #1 _lly_dim }
+          { \dim_set_eq:Nc \l_graphics_lly_dim { c__graphics_ #1 _lly_dim } }
+          { \dim_zero:N \l_graphics_lly_dim }
+      }
+      {#2}
+  }
+\cs_generate_variant:Nn \graphics_bb_restore:nF { x }
+\cs_new_protected:Npn \graphics_extract_bb:n #1
+  {
+    \int_compare:nNnTF \l_graphics_page_int > 0
+      { \__graphics_extract_bb_auxi:Vn \l_graphics_page_int {#1} }
+      { \__graphics_extract_bb_auxii:nnn {#1} { } { } }
+  }
+\cs_new_protected:Npn \__graphics_extract_bb_auxi:nn #1#2
+  { \__graphics_extract_bb_auxii:nnn {#2} { :P #1 } { -p~#1~ } }
+\cs_generate_variant:Nn \__graphics_extract_bb_auxi:nn { Vn }
+\cs_new_protected:Npn \__graphics_extract_bb_auxii:nnn #1#2#3
+  {
+   \tl_if_empty:NTF \l_graphics_pagebox_tl
+      { \__graphics_extract_bb_auxiv:nnn }
+      { \__graphics_extract_bb_auxiii:Vnnn \l_graphics_pagebox_tl }
+      {#1} {#2} {#3}
+  }
+\cs_new_protected:Npn \__graphics_extract_bb_auxiii:nnnn #1#2#3#4
+  { \__graphics_extract_bb_auxiv:nnn {#2} { : #1 #3 } { #4 -B~#1~ } }
+\cs_generate_variant:Nn \__graphics_extract_bb_auxiii:nnnn { V }
+\cs_new_protected:Npn \__graphics_extract_bb_auxiv:nnn #1#2#3
+  {
+    \__graphics_read_bb_auxi:nnnn {#1} {#2}
+      { \ior_shell_open:Nn \l__graphics_tmp_ior { extractbb~#3-O~#1 } }
+      { pipe-failed }
+  }
+\cs_new_protected:Npn \graphics_read_bb:n #1
+  {
+    \__graphics_read_bb_auxi:nnnn {#1} { }
+      { \ior_open:Nn \l__graphics_tmp_ior {#1} }
+      { graphic-not-found }
+  }
+\cs_new_protected:Npn \__graphics_read_bb_auxi:nnnn #1#2#3#4
+  {
+    \graphics_bb_restore:nF {#1#2}
+      { \__graphics_read_bb_auxii:nnnn {#3} {#4} {#1} {#2} }
+  }
+\cs_new_protected:Npx \__graphics_read_bb_auxii:nnnn #1#2#3#4
+  {
+    #1
+    \exp_not:N \ior_if_eof:NTF \exp_not:N \l__graphics_tmp_ior
+      { \__kernel_msg_error:nnn { graphics } {#2} {#3} }
+      {
+        \ior_str_map_inline:Nn \exp_not:N \l__graphics_tmp_ior
+          {
+            \exp_not:N \__graphics_read_bb_auxiii:w
+              ##1 ~ \c_colon_str \exp_not:N \q_stop
+          }
+      }
+    \exp_not:n
+      {
+        \ior_close:N \l__graphics_tmp_ior
+        \dim_compare:nNnF \l_graphics_llx_dim = { 0pt }
+          { \dim_const:cn { c__graphics_ #3#4 _llx_dim } { \l_graphics_llx_dim } }
+        \dim_compare:nNnF \l_graphics_lly_dim = { 0pt }
+          { \dim_const:cn { c__graphics_ #3#4 _lly_dim } { \l_graphics_lly_dim } }
+        \dim_const:cn { c__graphics_ #3#4 _urx_dim } { \l_graphics_urx_dim }
+        \dim_const:cn { c__graphics_ #3#4 _ury_dim } { \l_graphics_ury_dim }
+      }
+  }
+\use:x
+  {
+    \cs_new_protected:Npn \exp_not:N \__graphics_read_bb_auxiii:w
+      ##1 \c_colon_str ##2 \exp_not:N \q_stop
+      {
+        \exp_not:N \str_if_eq:nnT
+          { \c_percent_str \c_percent_str BoundingBox }
+          {##1}
+          { \exp_not:N \__graphics_read_bb_auxiv:w ##2 ( ) \exp_not:N \q_stop }
+      }
+  }
+\cs_new_protected:Npn \__graphics_read_bb_auxiv:w #1 ( #2 ) #3 \q_stop
+  {
+    \str_if_eq:nnF {#2} { atend }
+      {
+        \tl_set_rescan:Nnx \l__graphics_tmp_tl
+          {
+            \char_set_catcode_space:n {  9 }
+            \char_set_catcode_space:n { 32 }
+          }
+          { \use:n #1 }
+        \exp_after:wN \__graphics_read_bb_auxv:w \l__graphics_tmp_tl \q_stop
+      }
+  }
+\cs_new_protected:Npn \__graphics_read_bb_auxv:w #1~#2~#3~#4~#5 \q_stop
+  {
+    \dim_set:Nn \l_graphics_llx_dim { #1 bp }
+    \dim_set:Nn \l_graphics_lly_dim { #2 bp }
+    \dim_set:Nn \l_graphics_urx_dim { #3 bp }
+    \dim_set:Nn \l_graphics_ury_dim { #4 bp }
+    \ior_map_break:
+  }
+\bool_new:N \l_graphics_draft_bool
+\tl_new:N \l_graphics_name_tl
+\tl_new:N \l__graphics_name_tl
+\box_new:N \l__graphics_internal_box
+\str_new:N \l__graphics_dir_str
+\str_new:N \l__graphics_name_str
+\str_new:N \l__graphics_ext_str
+\seq_new:N \l_graphics_search_path_seq
+\seq_new:N \l_graphics_search_ext_seq
+\prop_new:N \l_graphics_ext_type_prop
+\prop_put:Nnn \l_graphics_ext_type_prop { .ps } { eps }
+\seq_new:N \g__graphics_record_seq
+\cs_new_protected:Npn \graphics_include:n #1
+  {
+    \group_begin:
+      \seq_set_eq:NN \l_file_search_path_seq \l_graphics_search_path_seq
+      \file_get_full_name:nNTF {#1} \l__graphics_name_tl
+        {
+          \str_if_eq:eeTF { \l__graphics_name_tl } { #1 .tex }
+            { \__graphics_include_search:n {#1} }
+            { \__graphics_include: }
+        }
+        { \__graphics_include_search:n {#1} }
+    \group_end:
+  }
+\cs_new_protected:Npn \__graphics_include_search:n #1
+  {
+    \seq_map_inline:Nn \l_graphics_search_ext_seq
+      {
+        \file_get_full_name:nNT { #1 . ##1 } \l__graphics_name_tl
+          { \seq_map_break:n { \use_i:nnn \__graphics_include: } }
+      }
+    \use:n
+      { \__kernel_msg_error:nnn { graphics } { graphic-not-found } {#1} }
+  }
+\cs_new_protected:Npn \__graphics_include:
+  {
+    \file_parse_full_name:VNNN \l__graphics_name_tl
+      \l__graphics_dir_str \l__graphics_name_str \l__graphics_ext_str
+    \exp_args:Ne \__graphics_include_auxi:n
+      {
+        \exp_args:Ne \str_tail:n
+          { \str_fold_case:V \l__graphics_ext_str }
+      }
+  }
+\cs_new_protected:Npn \graphics_include:nn #1#2
+  {
+    \group_begin:
+      \seq_set_eq:NN \l_file_search_path_seq \l_graphics_search_path_seq
+      \file_get_full_name:nNTF {#1} \l__graphics_name_tl
+        {
+          \exp_args:Ne \__graphics_include_auxi:n
+            { \str_fold_case:n {#1} }
+        }
+        { \__kernel_msg_error:nnn { graphics } { graphic-not-found } {#1} }
+    \group_end:
+  }
+\cs_new_protected:Npn \__graphics_include_auxi:n #1
+  {
+    \prop_get:NnNF \l_graphics_ext_type_prop { .#1 } \l__graphics_internal_tl
+      { \tl_set:Nn \l__graphics_internal_tl {#1} }
+    \exp_args:NV \__graphics_include_auxii:n \l__graphics_internal_tl
+  }
+\cs_new_protected:Npn \__graphics_include_auxii:n #1
+  {
+    \mode_leave_vertical:
+    \cs_if_exist:cTF { driver_graphics_include_ #1 :n }
+      {
+        \tl_set_eq:NN \l_graphics_name_tl \l__graphics_name_tl
+        \exp_args:NnV \use:c { driver_graphics_getbb_ #1 :n }
+          \l__graphics_name_tl
+        \seq_gput_right:NV \g__graphics_record_seq \l_graphics_name_tl
+        \clist_if_exist:NT \@filelist
+          { \exp_args:NV \@addtofilelist \l_graphics_name_tl }
+        \bool_if:NTF \l_graphics_draft_bool
+          { \__graphics_include_auxiii:n }
+          { \__graphics_include_auxiv:n }
+            {#1}
+      }
+      { \__kernel_msg_error:nnn { graphics } { unsupported-graphic-type } {#1} }
+  }
+\cs_new_protected:Npn \__graphics_include_auxiii:n #1
+  {
+    \hbox_to_wd:nn { \l_graphics_urx_dim - \l_graphics_llx_dim }
+      {
+        \tex_vrule:D
+        \tex_hss:D
+        \vbox_to_ht:nn
+          { \l_graphics_ury_dim - \l_graphics_lly_dim }
+          {
+            \tex_hrule:D width
+              \dim_eval:n { \l_graphics_urx_dim - \l_graphics_llx_dim }
+            \tex_vss:D
+            \hbox_to_wd:nn
+              { \l_graphics_urx_dim - \l_graphics_llx_dim }
+              {
+                \ttfamily
+                \tex_hss:D \l__graphics_name_tl \tex_hss:D
+              }
+            \tex_vss:D
+            \tex_hrule:D
+          }
+        \tex_hss:D
+        \tex_vrule:D
+      }
+  }
+\cs_new_protected:Npn \__graphics_include_auxiv:n #1
+  {
+    \hbox_set:Nn \l__graphics_internal_box
+      {
+        \exp_args:NnV \use:c { driver_graphics_include_ #1 :n }
+          \l__graphics_name_tl
+      }
+    \box_set_dp:Nn \l__graphics_internal_box { 0pt }
+    \box_set_ht:Nn \l__graphics_internal_box
+      { \l_graphics_ury_dim - \l_graphics_lly_dim }
+     \box_set_wd:Nn \l__graphics_internal_box
+      { \l_graphics_urx_dim - \l_graphics_llx_dim }
+    \box_use_drop:N \l__graphics_internal_box
+  }
+\cs_new_protected:Npn \graphics_show_list: { \__graphics_list:N \msg_show:nnxxxx }
+\cs_new_protected:Npn \graphics_log_list: { \__graphics_list:N \msg_log:nnxxxx }
+\cs_new_protected:Npn \__graphics_list:N #1
+  {
+    \seq_remove_duplicates:N \g__graphics_record_seq
+    #1 { LaTeX/kernel } { file-list }
+      { \seq_map_function:NN \g__graphics_record_seq \__graphics_list_aux:n }
+        { } { } { }
+  }
+\cs_new:Npn \__graphics_list_aux:n #1 { \iow_newline: #1 }
+\__kernel_msg_new:nnnn { graphics } { graphic-not-found }
+  { Image~file~'#1'~not~found. }
+  {
+    LaTeX~tried~to~open~graphic~file~'#1',
+    ~but~the~file~could~not~be~read.
+  }
+\__kernel_msg_new:nnnn { graphics } { pipe-failed }
+  { Cannot~run~piped~system~commands. }
+  {
+    LaTeX~tried~to~call~a~system~process~but~this~was~not~possible.\\
+    Try~the~"--shell-escape"~(or~"--enable-pipes")~option.
+  }
+\__kernel_msg_new:nnnn { graphics } { unsupported-graphic-type }
+  { Image~type~'#1'~not~supported~by~current~driver. }
+  {
+    LaTeX~was~asked~to~include~an~graphic~of~type~'#1',~
+    but~this~is~not~supported~by~the~current~driver~(production~route).
+  }
+%% 
+%%
+%% End of file `l3graphics.sty'.


Property changes on: trunk/Master/texmf-dist/tex/latex/l3experimental/l3graphics/l3graphics.sty
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
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-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-convert.sty	2019-05-28 21:24:36 UTC (rev 51248)
@@ -18,9 +18,9 @@
 %% This file is part of the "l3experimental bundle" (The Work in LPPL)
 %% and all files in that bundle must be distributed together.
 %% 
-%% File: l3str-convert.dtx Copyright (C) 2013-2019 The LaTeX3 Project
+%% File: l3str-convert.dtx
 \RequirePackage{expl3}
-\ProvidesExplPackage{l3str-convert}{2019-05-03}{}
+\ProvidesExplPackage{l3str-convert}{2019-05-28}{}
   {L3 Experimental string encoding conversions}
 \cs_if_exist:NF \use_ii_i:nn
   { \cs_new:Npn \use_ii_i:nn #1#2 { #2 #1 } }

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88591.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88591.def	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88591.def	2019-05-28 21:24:36 UTC (rev 51248)
@@ -18,7 +18,7 @@
 %% This file is part of the "l3experimental bundle" (The Work in LPPL)
 %% and all files in that bundle must be distributed together.
 %% 
-%% File: l3str-convert.dtx Copyright (C) 2013-2019 The LaTeX3 Project
+%% File: l3str-convert.dtx
 \__str_declare_eight_bit_encoding:nnn { iso88591 }
   {
   }

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885910.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885910.def	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885910.def	2019-05-28 21:24:36 UTC (rev 51248)
@@ -18,7 +18,7 @@
 %% This file is part of the "l3experimental bundle" (The Work in LPPL)
 %% and all files in that bundle must be distributed together.
 %% 
-%% File: l3str-convert.dtx Copyright (C) 2013-2019 The LaTeX3 Project
+%% File: l3str-convert.dtx
 \__str_declare_eight_bit_encoding:nnn { iso885910 }
   {
     { A1 } { 0104 }

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885911.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885911.def	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885911.def	2019-05-28 21:24:36 UTC (rev 51248)
@@ -18,7 +18,7 @@
 %% This file is part of the "l3experimental bundle" (The Work in LPPL)
 %% and all files in that bundle must be distributed together.
 %% 
-%% File: l3str-convert.dtx Copyright (C) 2013-2019 The LaTeX3 Project
+%% File: l3str-convert.dtx
 \__str_declare_eight_bit_encoding:nnn { iso885911 }
   {
     { A1 } { 0E01 }

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885913.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885913.def	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885913.def	2019-05-28 21:24:36 UTC (rev 51248)
@@ -18,7 +18,7 @@
 %% This file is part of the "l3experimental bundle" (The Work in LPPL)
 %% and all files in that bundle must be distributed together.
 %% 
-%% File: l3str-convert.dtx Copyright (C) 2013-2019 The LaTeX3 Project
+%% File: l3str-convert.dtx
 \__str_declare_eight_bit_encoding:nnn { iso885913 }
   {
     { A1 } { 201D }

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885914.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885914.def	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885914.def	2019-05-28 21:24:36 UTC (rev 51248)
@@ -18,7 +18,7 @@
 %% This file is part of the "l3experimental bundle" (The Work in LPPL)
 %% and all files in that bundle must be distributed together.
 %% 
-%% File: l3str-convert.dtx Copyright (C) 2013-2019 The LaTeX3 Project
+%% File: l3str-convert.dtx
 \__str_declare_eight_bit_encoding:nnn { iso885914 }
   {
     { A1 } { 1E02 }

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885915.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885915.def	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885915.def	2019-05-28 21:24:36 UTC (rev 51248)
@@ -18,7 +18,7 @@
 %% This file is part of the "l3experimental bundle" (The Work in LPPL)
 %% and all files in that bundle must be distributed together.
 %% 
-%% File: l3str-convert.dtx Copyright (C) 2013-2019 The LaTeX3 Project
+%% File: l3str-convert.dtx
 \__str_declare_eight_bit_encoding:nnn { iso885915 }
   {
     { A4 } { 20AC }

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885916.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885916.def	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885916.def	2019-05-28 21:24:36 UTC (rev 51248)
@@ -18,7 +18,7 @@
 %% This file is part of the "l3experimental bundle" (The Work in LPPL)
 %% and all files in that bundle must be distributed together.
 %% 
-%% File: l3str-convert.dtx Copyright (C) 2013-2019 The LaTeX3 Project
+%% File: l3str-convert.dtx
 \__str_declare_eight_bit_encoding:nnn { iso885916 }
   {
     { A1 } { 0104 }

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88592.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88592.def	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88592.def	2019-05-28 21:24:36 UTC (rev 51248)
@@ -18,7 +18,7 @@
 %% This file is part of the "l3experimental bundle" (The Work in LPPL)
 %% and all files in that bundle must be distributed together.
 %% 
-%% File: l3str-convert.dtx Copyright (C) 2013-2019 The LaTeX3 Project
+%% File: l3str-convert.dtx
 \__str_declare_eight_bit_encoding:nnn { iso88592 }
   {
     { A1 } { 0104 }

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88593.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88593.def	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88593.def	2019-05-28 21:24:36 UTC (rev 51248)
@@ -18,7 +18,7 @@
 %% This file is part of the "l3experimental bundle" (The Work in LPPL)
 %% and all files in that bundle must be distributed together.
 %% 
-%% File: l3str-convert.dtx Copyright (C) 2013-2019 The LaTeX3 Project
+%% File: l3str-convert.dtx
 \__str_declare_eight_bit_encoding:nnn { iso88593 }
   {
     { A1 } { 0126 }

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88594.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88594.def	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88594.def	2019-05-28 21:24:36 UTC (rev 51248)
@@ -18,7 +18,7 @@
 %% This file is part of the "l3experimental bundle" (The Work in LPPL)
 %% and all files in that bundle must be distributed together.
 %% 
-%% File: l3str-convert.dtx Copyright (C) 2013-2019 The LaTeX3 Project
+%% File: l3str-convert.dtx
 \__str_declare_eight_bit_encoding:nnn { iso88594 }
   {
     { A1 } { 0104 }

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88595.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88595.def	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88595.def	2019-05-28 21:24:36 UTC (rev 51248)
@@ -18,7 +18,7 @@
 %% This file is part of the "l3experimental bundle" (The Work in LPPL)
 %% and all files in that bundle must be distributed together.
 %% 
-%% File: l3str-convert.dtx Copyright (C) 2013-2019 The LaTeX3 Project
+%% File: l3str-convert.dtx
 \__str_declare_eight_bit_encoding:nnn { iso88595 }
   {
     { A1 } { 0401 }

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88596.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88596.def	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88596.def	2019-05-28 21:24:36 UTC (rev 51248)
@@ -18,7 +18,7 @@
 %% This file is part of the "l3experimental bundle" (The Work in LPPL)
 %% and all files in that bundle must be distributed together.
 %% 
-%% File: l3str-convert.dtx Copyright (C) 2013-2019 The LaTeX3 Project
+%% File: l3str-convert.dtx
 \__str_declare_eight_bit_encoding:nnn { iso88596 }
   {
     { AC } { 060C }

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88597.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88597.def	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88597.def	2019-05-28 21:24:36 UTC (rev 51248)
@@ -18,7 +18,7 @@
 %% This file is part of the "l3experimental bundle" (The Work in LPPL)
 %% and all files in that bundle must be distributed together.
 %% 
-%% File: l3str-convert.dtx Copyright (C) 2013-2019 The LaTeX3 Project
+%% File: l3str-convert.dtx
 \__str_declare_eight_bit_encoding:nnn { iso88597 }
   {
     { A1 } { 2018 }

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88598.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88598.def	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88598.def	2019-05-28 21:24:36 UTC (rev 51248)
@@ -18,7 +18,7 @@
 %% This file is part of the "l3experimental bundle" (The Work in LPPL)
 %% and all files in that bundle must be distributed together.
 %% 
-%% File: l3str-convert.dtx Copyright (C) 2013-2019 The LaTeX3 Project
+%% File: l3str-convert.dtx
 \__str_declare_eight_bit_encoding:nnn { iso88598 }
   {
     { AA } { 00D7 }

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88599.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88599.def	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88599.def	2019-05-28 21:24:36 UTC (rev 51248)
@@ -18,7 +18,7 @@
 %% This file is part of the "l3experimental bundle" (The Work in LPPL)
 %% and all files in that bundle must be distributed together.
 %% 
-%% File: l3str-convert.dtx Copyright (C) 2013-2019 The LaTeX3 Project
+%% File: l3str-convert.dtx
 \__str_declare_eight_bit_encoding:nnn { iso88599 }
   {
     { D0 } { 011E }

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-utf16.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-utf16.def	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-utf16.def	2019-05-28 21:24:36 UTC (rev 51248)
@@ -18,7 +18,7 @@
 %% This file is part of the "l3experimental bundle" (The Work in LPPL)
 %% and all files in that bundle must be distributed together.
 %% 
-%% File: l3str-convert.dtx Copyright (C) 2013-2019 The LaTeX3 Project
+%% File: l3str-convert.dtx
 \group_begin:
   \char_set_catcode_other:N \^^fe
   \char_set_catcode_other:N \^^ff

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-utf32.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-utf32.def	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-utf32.def	2019-05-28 21:24:36 UTC (rev 51248)
@@ -18,7 +18,7 @@
 %% This file is part of the "l3experimental bundle" (The Work in LPPL)
 %% and all files in that bundle must be distributed together.
 %% 
-%% File: l3str-convert.dtx Copyright (C) 2013-2019 The LaTeX3 Project
+%% File: l3str-convert.dtx
 \group_begin:
   \char_set_catcode_other:N \^^00
   \char_set_catcode_other:N \^^fe

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-utf8.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-utf8.def	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-utf8.def	2019-05-28 21:24:36 UTC (rev 51248)
@@ -18,7 +18,7 @@
 %% This file is part of the "l3experimental bundle" (The Work in LPPL)
 %% and all files in that bundle must be distributed together.
 %% 
-%% File: l3str-convert.dtx Copyright (C) 2013-2019 The LaTeX3 Project
+%% File: l3str-convert.dtx
 \cs_new_protected:cpn { __str_convert_encode_utf8: }
   { \__str_convert_gmap_internal:N \__str_encode_utf_viii_char:n }
 \cs_new:Npn \__str_encode_utf_viii_char:n #1

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-hex.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-hex.def	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-hex.def	2019-05-28 21:24:36 UTC (rev 51248)
@@ -18,7 +18,7 @@
 %% This file is part of the "l3experimental bundle" (The Work in LPPL)
 %% and all files in that bundle must be distributed together.
 %% 
-%% File: l3str-convert.dtx Copyright (C) 2013-2019 The LaTeX3 Project
+%% File: l3str-convert.dtx
 \cs_new_protected:Npn \__str_convert_unescape_hex:
   {
     \group_begin:

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-name.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-name.def	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-name.def	2019-05-28 21:24:36 UTC (rev 51248)
@@ -18,7 +18,7 @@
 %% This file is part of the "l3experimental bundle" (The Work in LPPL)
 %% and all files in that bundle must be distributed together.
 %% 
-%% File: l3str-convert.dtx Copyright (C) 2013-2019 The LaTeX3 Project
+%% File: l3str-convert.dtx
 \cs_set_protected:Npn \__str_tmp:w #1#2#3
   {
     \cs_new_protected:cpn { __str_convert_unescape_#2: }

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-string.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-string.def	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-string.def	2019-05-28 21:24:36 UTC (rev 51248)
@@ -18,7 +18,7 @@
 %% This file is part of the "l3experimental bundle" (The Work in LPPL)
 %% and all files in that bundle must be distributed together.
 %% 
-%% File: l3str-convert.dtx Copyright (C) 2013-2019 The LaTeX3 Project
+%% File: l3str-convert.dtx
 \group_begin:
   \char_set_catcode_other:N \^^J
   \char_set_catcode_other:N \^^M

Modified: trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-url.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-url.def	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-url.def	2019-05-28 21:24:36 UTC (rev 51248)
@@ -18,7 +18,7 @@
 %% This file is part of the "l3experimental bundle" (The Work in LPPL)
 %% and all files in that bundle must be distributed together.
 %% 
-%% File: l3str-convert.dtx Copyright (C) 2013-2019 The LaTeX3 Project
+%% File: l3str-convert.dtx
 \cs_set_protected:Npn \__str_tmp:w #1#2#3
   {
     \cs_new_protected:cpn { __str_convert_unescape_#2: }

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-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty	2019-05-28 21:24:36 UTC (rev 51248)
@@ -20,7 +20,7 @@
 %% 
 %% File: l3str-format.dtx
 \RequirePackage{expl3}
-\ProvidesExplPackage{l3str-format}{2019-05-03}{}
+\ProvidesExplPackage{l3str-format}{2019-05-28}{}
   {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-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/l3sys-shell/l3sys-shell.sty	2019-05-28 21:24:36 UTC (rev 51248)
@@ -20,7 +20,7 @@
 %% 
 %% File: l3sys-shell.dtx
 \RequirePackage{expl3}
-\ProvidesExplPackage{l3sys-shell}{2019-05-03}{}
+\ProvidesExplPackage{l3sys-shell}{2019-05-28}{}
   {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-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/xcoffins/xcoffins.sty	2019-05-28 21:24:36 UTC (rev 51248)
@@ -20,7 +20,7 @@
 %% 
 %% File: xcoffins.dtx
 \RequirePackage{xparse}
-\ProvidesExplPackage{xcoffins}{2019-05-03}{}
+\ProvidesExplPackage{xcoffins}{2019-05-28}{}
   {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-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty	2019-05-28 21:24:36 UTC (rev 51248)
@@ -32,7 +32,7 @@
       }%
     \endinput
   }
-\ProvidesExplPackage{l3galley}{2019-05-03}{}
+\ProvidesExplPackage{l3galley}{2019-05-28}{}
   {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-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/tex/latex/l3experimental/xgalley/xgalley.sty	2019-05-28 21:24:36 UTC (rev 51248)
@@ -20,7 +20,7 @@
 %% 
 %% File: xgalley.dtx
 \RequirePackage{xparse}
-\ProvidesExplPackage{xgalley}{2019-05-03}{}
+\ProvidesExplPackage{xgalley}{2019-05-28}{}
   {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-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex	2019-05-28 21:24:36 UTC (rev 51248)
@@ -64,7 +64,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: expl3.dtx
-\def\ExplFileDate{2019-05-09}%
+\def\ExplFileDate{2019-05-28}%
 \begingroup
   \def\next{\endgroup}%
   \expandafter\ifx\csname PackageError\endcsname\relax
@@ -14156,6 +14156,7 @@
 \int_const:Nn \c__fp_prec_hatii_int  { 14 }
 \int_const:Nn \c__fp_prec_hat_int    { 13 }
 \int_const:Nn \c__fp_prec_not_int    { 12 }
+\int_const:Nn \c__fp_prec_juxt_int   { 11 }
 \int_const:Nn \c__fp_prec_times_int  { 10 }
 \int_const:Nn \c__fp_prec_plus_int   { 9 }
 \int_const:Nn \c__fp_prec_comp_int   { 7 }
@@ -14874,7 +14875,7 @@
       {
         \exp_not:N \__fp_exp_after_array_f:w #2 \s__fp_stop
         \exp_not:N \exp_after:wN
-        \exp_not:N \__fp_parse_infix:NN
+        \exp_not:N \__fp_parse_infix_after_paren:NN
         \exp_not:N \exp_after:wN #1
         \exp_not:N \exp:w
         \exp_not:N \__fp_parse_expand:w
@@ -14900,7 +14901,7 @@
       \fi:
       \exp_end_continue_f:w
     \fi:
-    \__fp_parse_infix:NN #1 )
+    \__fp_parse_infix_after_paren:NN #1 )
   }
 \cs_set_protected:Npn \__fp_tmp:w #1 #2
   {
@@ -15071,7 +15072,7 @@
         \exp_after:wN \__fp_parse_infix_mark:NNN
       \else:
         \exp_after:wN \exp_after:wN
-        \exp_after:wN \__fp_parse_infix_mul:N
+        \exp_after:wN \__fp_parse_infix_juxt:N
       \fi:
     \else:
       \if_int_compare:w
@@ -15079,7 +15080,7 @@
             ( `#2 \if_int_compare:w `#2 > `Z - 32 \fi: ) / 26
           = 3 \exp_stop_f:
         \exp_after:wN \exp_after:wN
-        \exp_after:wN \__fp_parse_infix_mul:N
+        \exp_after:wN \__fp_parse_infix_juxt:N
       \else:
         \exp_after:wN \__fp_parse_infix_check:NNN
         \cs:w
@@ -15091,23 +15092,50 @@
     #1
     #2
   }
-\cs_new:Npx \__fp_parse_infix_check:NNN #1#2#3
+\cs_new:Npn \__fp_parse_infix_check:NNN #1#2#3
   {
-    \exp_not:N \if_meaning:w \scan_stop: #1
-      \exp_not:N \__kernel_msg_expandable_error:nnn
+    \if_meaning:w \scan_stop: #1
+      \__kernel_msg_expandable_error:nnn
         { kernel } { fp-missing } { * }
-      \exp_not:N \exp_after:wN
-      \exp_not:c { __fp_parse_infix_*:N }
-      \exp_not:N \exp_after:wN #2
-      \exp_not:N \exp_after:wN #3
-    \exp_not:N \else:
-      \exp_not:N \exp_after:wN #1
-      \exp_not:N \exp_after:wN #2
-      \exp_not:N \exp:w
-      \exp_not:N \exp_after:wN
-      \exp_not:N \__fp_parse_expand:w
-    \exp_not:N \fi:
+      \exp_after:wN \__fp_parse_infix_mul:N
+      \exp_after:wN #2
+      \exp_after:wN #3
+    \else:
+      \exp_after:wN #1
+      \exp_after:wN #2
+      \exp:w \exp_after:wN \__fp_parse_expand:w
+    \fi:
   }
+\cs_new:Npn \__fp_parse_infix_after_paren:NN #1 #2
+  {
+    \if_catcode:w \scan_stop: \exp_not:N #2
+      \if_int_compare:w
+          \__fp_str_if_eq:nn { \s__fp_mark } { \exp_not:N #2 }
+          = 0 \exp_stop_f:
+        \exp_after:wN \exp_after:wN
+        \exp_after:wN \__fp_parse_infix_mark:NNN
+      \else:
+        \exp_after:wN \exp_after:wN
+        \exp_after:wN \__fp_parse_infix_mul:N
+      \fi:
+    \else:
+      \if_int_compare:w
+          \__fp_int_eval:w
+            ( `#2 \if_int_compare:w `#2 > `Z - 32 \fi: ) / 26
+          = 3 \exp_stop_f:
+        \exp_after:wN \exp_after:wN
+        \exp_after:wN \__fp_parse_infix_mul:N
+      \else:
+        \exp_after:wN \__fp_parse_infix_check:NNN
+        \cs:w
+          __fp_parse_infix_ \token_to_str:N #2 :N
+          \exp_after:wN \exp_after:wN \exp_after:wN
+        \cs_end:
+      \fi:
+    \fi:
+    #1
+    #2
+  }
 \cs_new:Npn \__fp_parse_infix_mark:NNN #1#2#3 { #3 #1 }
 \cs_new:Npn \__fp_parse_infix_end:N #1
   { @ \use_none:n \__fp_parse_infix_end:N }
@@ -15183,6 +15211,8 @@
   }
 \exp_args:Nc \__fp_tmp:w { __fp_parse_infix_^:N }   ^
   \c__fp_prec_hatii_int \c__fp_prec_hat_int
+\exp_args:Nc \__fp_tmp:w { __fp_parse_infix_juxt:N } *
+  \c__fp_prec_juxt_int \c__fp_prec_juxt_int
 \exp_args:Nc \__fp_tmp:w { __fp_parse_infix_/:N }   /
   \c__fp_prec_times_int \c__fp_prec_times_int
 \exp_args:Nc \__fp_tmp:w { __fp_parse_infix_mul:N } *
@@ -26454,6 +26484,75 @@
       { \iow_shipout:Nn \c__sys_shell_stream_int {#1} }
   }
 \cs_generate_variant:Nn \sys_shell_shipout:n { x }
+\cs_new:Npn \__file_str_cmp:nn #1#2 { \tex_strcmp:D {#1} {#2} }
+\sys_if_engine_luatex:T
+  {
+    \cs_set:Npn \__file_str_cmp:nn #1#2
+      {
+        \lua_now:e
+          {
+            l3kernel.strcmp
+              (
+                " \__file_str_escape:n {#1}",
+                " \__file_str_escape:n {#2}"
+              )
+          }
+      }
+   \cs_new:Npn \__file_str_escape:n #1
+     {
+       \lua_escape:e
+         { \__kernel_tl_to_str:w \use:e { {#1} } }
+     }
+  }
+\tl_new:N \l__file_first_tl
+\tl_new:N \l__file_second_tl
+\prg_new_protected_conditional:Npnn \file_compare_timestamp:nNn #1#2#3
+  { T , F , TF }
+  {
+    \group_begin:
+      \file_get_full_name:nNTF {#1} \l__file_first_tl
+        {
+          \file_get_full_name:nNTF {#3} \l__file_second_tl
+            {
+              \if_int_compare:w
+                  \__file_str_cmp:nn
+                    { \__file_timestamp:n \exp_after:wN { \l__file_first_tl } }
+                    { \__file_timestamp:n \exp_after:wN { \l__file_second_tl } }
+                    #2 0 \exp_stop_f:
+              \group_end:
+              \prg_return_true:
+            \else:
+              \group_end:
+               \prg_return_false:
+            \fi:
+            }
+            {
+              \group_end:
+               \if_charcode:w #2 >
+                  \prg_return_true:
+                \else:
+                  \prg_return_false:
+                \fi:
+            }
+        }
+        {
+          \group_end:
+          \if_charcode:w #2 <
+            \prg_return_true:
+          \else:
+            \prg_return_false:
+          \fi:
+        }
+  }
+\sys_if_engine_luatex:TF
+  {
+    \cs_new:Npn \__file_timestamp:n #1
+      {
+        \lua_now:e
+          { l3kernel.filemoddate ( " \lua_escape:e {#1} " ) }
+      }
+  }
+  { \cs_new_eq:NN \__file_timestamp:n \tex_filemoddate:D }
 \cs_new_protected:Npn \ior_shell_open:Nn #1#2
   {
     \sys_if_shell:TF

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex	2019-05-28 21:24:36 UTC (rev 51248)
@@ -19,7 +19,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: expl3.dtx
-\def\ExplFileDate{2019-05-09}%
+\def\ExplFileDate{2019-05-28}%
 \let\ExplLoaderFileDate\ExplFileDate
 \begingroup
   \def\tempa{LaTeX2e}%

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.lua
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.lua	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.lua	2019-05-28 21:24:36 UTC (rev 51248)
@@ -64,7 +64,7 @@
 end
 l3kernel.elapsedtime = elapsedtime
 local function resettimer()
-  base_time = 0
+  base_time = os_clock()
 end
 l3kernel.resettimer = resettimer
 local function filemdfivesum(name)

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.sty	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/expl3.sty	2019-05-28 21:24:36 UTC (rev 51248)
@@ -19,7 +19,7 @@
 %% and all files in that bundle must be distributed together.
 %% 
 %% File: expl3.dtx
-\def\ExplFileDate{2019-05-09}%
+\def\ExplFileDate{2019-05-28}%
 \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-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def	2019-05-28 21:24:36 UTC (rev 51248)
@@ -405,7 +405,7 @@
     \int_if_exist:cTF { c__driver_graphics_ #2#1 _int }
       {
         \__driver_literal:x
-          { pdf:usexobj~@image \int_use:c { c__driver_graphics_ #2#1 _int } }
+          { pdf:usexobj~@graphic \int_use:c { c__driver_graphics_ #2#1 _int } }
       }
       { \__driver_graphics_include_auxiii:nnn {#2} {#1} {#3} }
   }
@@ -417,7 +417,7 @@
     \__driver_literal:x
       {
         pdf:#3~
-        @image \int_use:c { c__driver_graphics_ #1#2 _int } ~
+        @graphic \int_use:c { c__driver_graphics_ #1#2 _int } ~
         \int_compare:nNnT \l_graphics_page_int > 1
           { page ~ \int_use:N \l_graphics_page_int \c_space_tl }
         \tl_if_empty:NF \l_graphics_pagebox_tl

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/l3dvips.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/l3dvips.def	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3dvips.def	2019-05-28 21:24:36 UTC (rev 51248)
@@ -823,6 +823,19 @@
       def
     /driver.breaklink.write
       {
+        counttomark ~ 1 ~ sub ~
+        index /_objdef ~ eq
+          {
+            counttomark ~ -2 ~ roll ~
+            dup ~ wcheck ~
+              {
+                readonly ~
+                counttomark ~ 2 ~ roll
+              }
+              { pop ~ pop }
+            ifelse
+          }
+        if ~
         counttomark ~ 1 ~ add ~ copy ~
         pop ~ driver.currentrect
         /ANN ~ pdfmark
@@ -850,11 +863,9 @@
                     Rect ~ 1 ~ get ~ sub ~
                     driver.baselineskip ~ div ~ round ~ cvi ~ 0 ~ gt
                       { driver.breaklink }
-                      { driver.pdfmark.obj }
-                    ifelse
+                    if
                   }
-                  { driver.pdfmark.obj }
-                ifelse ~
+                if ~
               end ~
             SDict /driver.outerbox ~ undef ~
             SDict /driver.baselineskip ~ undef ~
@@ -887,8 +898,6 @@
         loop
     }
       def
-  /driver.pdfmark.obj
-    { /_objdef ~ exch ~ driver.link.obj ~ exch } def
   }
 \box_new:N \l__driver_pdf_content_box
 \box_new:N \l__driver_pdf_model_box
@@ -936,13 +945,9 @@
 \int_new:N \g__driver_pdf_link_sf_int
 \bool_new:N \g__driver_pdf_link_math_bool
 \bool_new:N \g__driver_pdf_link_bool
-\tl_new:N \l__driver_breaklink_obj_tl
-\tl_set:Nn \l__driver_breaklink_obj_tl
-  { /_objdef ~  { driver.obj \int_use:N \g__driver_pdf_link_int } }
 \tl_new:N \l__driver_breaklink_pdfmark_tl
 \tl_set:Nn \l__driver_breaklink_pdfmark_tl { pdfmark }
 \cs_new_protected:Npn \__driver_breaklink_postscript:n #1 { }
-\cs_generate_variant:Nn \__driver_breaklink_postscript:n { x }
 \cs_new_eq:NN \__driver_breaklink_usebox:N \box_use:N
 \cs_new_protected:Npn \driver_pdf_link_begin_goto:nnw #1#2
   { \__driver_pdf_link_begin:nw { #1 /Subtype /Link /A << /S /GoTo /D ( #2 ) >> } }
@@ -956,7 +961,6 @@
 \cs_new_protected:Npn \__driver_pdf_link_begin_aux:nw #1
   {
     \bool_gset_true:N \g__driver_pdf_link_bool
-    \__driver_pdf_annotation:nnnn { 3pt } { 3pt } { 0pt } { }
     \__driver_postscript:n
       { /driver.link.dict ( #1 ) def }
     \tl_gset:Nn \g__driver_pdf_link_dict_tl {#1}
@@ -1000,18 +1004,10 @@
       }
     \int_gincr:N \g__driver_pdf_object_int
     \int_gset_eq:NN \g__driver_pdf_link_int \g__driver_pdf_object_int
-    \__driver_breaklink_postscript:x
-      {
-        /driver.link.obj
-          {
-            { driver.obj \int_use:N \g__driver_pdf_link_int \c_space_tl driver.cvs }
-          }
-            def
-      }
     \__driver_postscript:x
       {
         mark
-        \l__driver_breaklink_obj_tl
+        /_objdef { driver.obj \int_use:N \g__driver_pdf_link_int }
         \g__driver_pdf_link_dict_tl \c_space_tl
         driver.rect
         /ANN ~ \l__driver_breaklink_pdfmark_tl
@@ -1106,7 +1102,6 @@
                   }
               }
           }
-        \tl_clear:N \l__driver_breaklink_obj_tl
         \tl_set:Nn \l__driver_breaklink_pdfmark_tl { driver.pdfmark }
         \cs_set_eq:NN \__driver_breaklink_postscript:n \__driver_postscript:n
         \cs_set_eq:NN \__driver_breaklink_usebox:N \hbox_unpack:N

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def	2019-05-28 21:24:36 UTC (rev 51248)
@@ -422,6 +422,45 @@
   }
 \cs_new_eq:NN \driver_graphics_include_pdf:n \driver_graphics_include_jpg:n
 \cs_new_eq:NN \driver_graphics_include_png:n \driver_graphics_include_jpg:n
+\sys_if_shell:T
+  {
+    \str_new:N \l__driver_dir_str
+    \str_new:N \l__driver_name_str
+    \str_new:N \l__driver_ext_str
+    \cs_new_protected:Npn \driver_graphics_getbb_eps:n #1
+      {
+        \file_parse_full_name:nNNN {#1}
+          \l__driver_dir_str
+          \l__driver_name_str
+          \l__driver_ext_str
+        \exp_args:Nx \__driver_graphics_getbb_eps:nn
+          {
+            \l__driver_name_str - \str_tail:N \l__driver_ext_str
+            -converted-to.pdf
+          }
+          {#1}
+     }
+    \cs_new_protected:Npn \__driver_graphics_getbb_eps:nn #1#2
+      {
+        \file_compare_timestamp:nNnT {#2} > {#1}
+          {
+            \sys_shell_now:n
+              { repstopdf ~ #2 ~ #1 }
+          }
+        \tl_set:Nn \l_graphics_name_tl {#1}
+        \driver_graphics_getbb_pdf:n {#1}
+      }
+    \cs_new_protected:Npn \driver_graphics_include_eps:n #1
+      {
+        \file_parse_full_name:nNNN {#1}
+          \l__driver_dir_str \l__driver_name_str \l__driver_ext_str
+        \exp_args:Nx \driver_graphics_include_pdf:n
+          {
+            \l__driver_name_str - \str_tail:N \l__driver_ext_str
+            -converted-to.pdf
+          }
+      }
+  }
 %% File: l3drivers-pdf.dtx
 \cs_new_protected:Npx \driver_pdf_annotation:nnnn #1#2#3#4
   {
@@ -539,7 +578,7 @@
     {
       \__driver_tmp:w
         { \tex_pdfextension:D obj ~ }
-        { \exp_not:N \tex_pdffeedback:D lastobj \scan_stop: }
+        { \exp_not:N \tex_pdffeedback:D lastobj }
     }
     { \__driver_tmp:w { \tex_pdfobj:D } { \tex_pdflastobj:D } }
 \group_end:
@@ -579,6 +618,7 @@
 \cs_new:Npn \__driver_exp_not_ii:nn #1#2 { \exp_not:n {#2} }
 \cs_new_protected:Npx \driver_pdf_compresslevel:n #1
   {
+    \exp_not:N \tex_global:D
     \cs_if_exist:NTF \tex_pdfcompresslevel:D
       { \tex_pdfcompresslevel:D }
       { \tex_pdfvariable:D compresslevel }
@@ -592,6 +632,7 @@
   }
 \cs_new_protected:Npx \__driver_pdf_objcompresslevel:n #1
   {
+    \exp_not:N \tex_global:D
     \cs_if_exist:NTF \tex_pdfobjcompresslevel:D
       { \tex_pdfobjcompresslevel:D }
       { \tex_pdfvariable:D objcompresslevel }

Modified: trunk/Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def	2019-05-28 21:24:36 UTC (rev 51248)
@@ -390,7 +390,7 @@
     \int_if_exist:cTF { c__driver_graphics_ #2#1 _int }
       {
         \__driver_literal:x
-          { pdf:usexobj~@image \int_use:c { c__driver_graphics_ #2#1 _int } }
+          { pdf:usexobj~@graphic \int_use:c { c__driver_graphics_ #2#1 _int } }
       }
       { \__driver_graphics_include_auxiii:nnn {#2} {#1} {#3} }
   }
@@ -402,7 +402,7 @@
     \__driver_literal:x
       {
         pdf:#3~
-        @image \int_use:c { c__driver_graphics_ #1#2 _int } ~
+        @graphic \int_use:c { c__driver_graphics_ #1#2 _int } ~
         \int_compare:nNnT \l_graphics_page_int > 1
           { page ~ \int_use:N \l_graphics_page_int \c_space_tl }
         \tl_if_empty:NF \l_graphics_pagebox_tl

Modified: trunk/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty	2019-05-28 21:24:36 UTC (rev 51248)
@@ -32,7 +32,7 @@
       }%
     \endinput
   }
-\ProvidesExplPackage{l3keys2e}{2019-05-03}{}
+\ProvidesExplPackage{l3keys2e}{2019-05-28}{}
   {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-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/tex/latex/l3packages/xfp/xfp.sty	2019-05-28 21:24:36 UTC (rev 51248)
@@ -33,7 +33,7 @@
     \endinput
   }
 \RequirePackage{xparse}
-\ProvidesExplPackage{xfp}{2019-05-03}{}
+\ProvidesExplPackage{xfp}{2019-05-28}{}
   {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-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/tex/latex/l3packages/xfrac/xfrac.sty	2019-05-28 21:24:36 UTC (rev 51248)
@@ -33,7 +33,7 @@
     \endinput
   }
 \RequirePackage{amstext,graphicx,l3keys2e,textcomp,xparse,xtemplate}
-\ProvidesExplPackage{xfrac}{2019-05-03}{}
+\ProvidesExplPackage{xfrac}{2019-05-28}{}
   {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-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty	2019-05-28 21:24:36 UTC (rev 51248)
@@ -32,7 +32,7 @@
       }%
     \endinput
   }
-\ProvidesExplPackage{xparse}{2019-05-03}{}
+\ProvidesExplPackage{xparse}{2019-05-28}{}
   {L3 Experimental document command parser}
 \tl_new:N \l__xparse_arg_spec_tl
 \tl_new:N \l__xparse_args_tl
@@ -464,7 +464,7 @@
           { \iow_char:N \\ \l__xparse_function_tl } { \tl_to_str:n {#1} }
         \__xparse_bad_def:wn
       }
-    \tl_put_right:Nn \l__xparse_arg_spec_tl { > {#1} }
+    \tl_put_right:Nx \l__xparse_arg_spec_tl { > { \tl_trim_spaces:n {#1} } }
     \int_decr:N \l__xparse_current_arg_int
     \bool_set_false:N \l__xparse_grab_expandably_bool
     \__xparse_normalize_arg_spec_loop:n {#2}

Modified: trunk/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty	2019-05-28 21:23:18 UTC (rev 51247)
+++ trunk/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty	2019-05-28 21:24:36 UTC (rev 51248)
@@ -32,7 +32,7 @@
       }%
     \endinput
   }
-\ProvidesExplPackage{xtemplate}{2019-05-03}{}
+\ProvidesExplPackage{xtemplate}{2019-05-28}{}
   {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