diff options
author | Karl Berry <karl@freefriends.org> | 2019-05-28 21:24:36 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2019-05-28 21:24:36 +0000 |
commit | 0411921af7908fa9daf388b67db154e9fc51caca (patch) | |
tree | f5405f2fef2bc7b0ae9eb9c8809377b88d70c760 | |
parent | c55b67ba30f320ddfc93fbdca08cab7512704011 (diff) |
l3 (28may19)
git-svn-id: svn://tug.org/texlive/trunk@51248 c570f23f-e606-0410-a88d-b1316a301751
167 files changed, 1974 insertions, 409 deletions
diff --git a/Build/source/texk/texlive/linked_scripts/texlive/tlmgr.pl b/Build/source/texk/texlive/linked_scripts/texlive/tlmgr.pl index 30fc0078ef0..48fe7753134 100755 --- a/Build/source/texk/texlive/linked_scripts/texlive/tlmgr.pl +++ b/Build/source/texk/texlive/linked_scripts/texlive/tlmgr.pl @@ -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,13 +5493,14 @@ sub check_runfiles { # 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 |Changes |Makefile |README.* + |a_.*\.enc |cid2code\.txt |etex\.src |fithesis.* @@ -5519,6 +5520,10 @@ sub check_runfiles { |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 @@ This script and its documentation were written for the TeX Live 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 diff --git a/Build/source/texk/texlive/linked_scripts/tlshell/tlshell.tcl b/Build/source/texk/texlive/linked_scripts/tlshell/tlshell.tcl index 451b2cfa52d..130b4ffe265 100755 --- a/Build/source/texk/texlive/linked_scripts/tlshell/tlshell.tcl +++ b/Build/source/texk/texlive/linked_scripts/tlshell/tlshell.tcl @@ -59,6 +59,9 @@ set ddebug 0 # 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 @@ proc do_debug {s} { } } ; # 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 @@ proc selective_dis_enable {} { }; # 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 @@ proc total_dis_enable {y_n} { } } set ::busy [__ "Running"] - } else { + } else { ; # enable . configure -menu .mn foreach c [winfo children .] { if {[winfo class $c] in \ @@ -291,7 +297,7 @@ set ::need_update_tlmgr 0 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 @@ proc run_cmd_waiting {cmd} { # 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 @@ proc run_cmd_waiting {cmd} { # ::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 @@ proc update_globals {} { # 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 @@ proc get_packages_info_remote {} { 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 @@ proc show_logs {} { 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 @@ proc read_mirrors {} { 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 read_mirrors {} { 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 @@ proc get_repos_from_tlmgr {} { 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 @@ proc set_repos_in_tlmgr {} { 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 @@ proc set_repos_in_tlmgr {} { 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 @@ proc repos_commit {} { 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 @@ proc repos_commit {} { } 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,16 +1276,17 @@ proc repository_dialog {} { # 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} 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 @@ proc show_help {} { 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 @@ proc populate_main {} { # 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 @@ proc populate_main {} { " [__ "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,29 +2153,28 @@ proc populate_main {} { 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 - - 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 - - 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 - - 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 + pack [ttk::frame .topfl] -in .topf -side left -anchor nw + + # subframe for repositories, to be filled by show_repos + pack [ttk::frame .toprepo] -in .topfl -side top -anchor 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 .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 @@ -2321,9 +2394,9 @@ proc initialize {} { .topfr.ladmin configure -text \ [expr {$::multiuser ? [__ "Multi-user"] : [__ "Single-user"]}] } - get_repos_from_tlmgr - .topfl.lrepos configure -text [print_repos] get_packages_info_local + get_repos_from_tlmgr + show_repos # svns for tlmgr and tlshell .topfr.linfra configure -text \ "tlmgr: r[dict get $::pkgs texlive.infra localrev]" diff --git a/Master/texmf-dist/doc/latex/l3experimental/CHANGELOG.md b/Master/texmf-dist/doc/latex/l3experimental/CHANGELOG.md index f961c359d40..9f293b18966 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/CHANGELOG.md +++ b/Master/texmf-dist/doc/latex/l3experimental/CHANGELOG.md @@ -7,11 +7,21 @@ this project uses date-based 'snapshot' version identifiers. ## [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 @@ this project uses date-based 'snapshot' version identifiers. - New `l3color` module using `xcolor`-like expression syntax - New `l3draw` module, based on `pgf` layer of the TikZ system -[Unreleased]: https://github.com/latex3/latex3/compare/2019-05-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 diff --git a/Master/texmf-dist/doc/latex/l3experimental/README.md b/Master/texmf-dist/doc/latex/l3experimental/README.md index 0bdc66ae89b..cf1141be526 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/README.md +++ b/Master/texmf-dist/doc/latex/l3experimental/README.md @@ -1,7 +1,7 @@ Experimental LaTeX3 Concepts ============================ -Release 2019-05-03 +Release 2019-05-28 Overview -------- @@ -25,11 +25,11 @@ bundles: * `l3cctab` * `l3color` * `l3draw` +* `l3graphics` * `l3str` * `l3sys-shell` * `xcoffins` * `xgalley` -* `xmarks` `l3benchmark` ------------- @@ -58,6 +58,12 @@ This module provides a code-level interface for constructing drawings. The 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` ------- diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3benchmark/l3benchmark.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3benchmark/l3benchmark.pdf Binary files differindex 5d0b98fe323..4f89389c8ef 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/l3benchmark/l3benchmark.pdf +++ b/Master/texmf-dist/doc/latex/l3experimental/l3benchmark/l3benchmark.pdf diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3cctab/l3cctab.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3cctab/l3cctab.pdf Binary files differindex 153c3507cd1..b8f090325e2 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/l3cctab/l3cctab.pdf +++ b/Master/texmf-dist/doc/latex/l3experimental/l3cctab/l3cctab.pdf diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3color/l3color.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3color/l3color.pdf Binary files differindex b4c817ad1d1..6fe80500240 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/l3color/l3color.pdf +++ b/Master/texmf-dist/doc/latex/l3experimental/l3color/l3color.pdf diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw-code.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw-code.pdf Binary files differindex 4cb96ed35cc..ba355b2f459 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw-code.pdf +++ b/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw-code.pdf diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw.pdf Binary files differindex 34b26ec63b3..977632190ff 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw.pdf +++ b/Master/texmf-dist/doc/latex/l3experimental/l3draw/l3draw.pdf diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3graphics/l3graphics.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3graphics/l3graphics.pdf Binary files differnew file mode 100644 index 00000000000..a86638228fe --- /dev/null +++ b/Master/texmf-dist/doc/latex/l3experimental/l3graphics/l3graphics.pdf diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-convert.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-convert.pdf Binary files differindex 562388df288..a6de90f27e0 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-convert.pdf +++ b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-convert.pdf diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.pdf Binary files differindex 9115fb08b05..29b8f8ecb52 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.pdf +++ b/Master/texmf-dist/doc/latex/l3experimental/l3str/l3str-format.pdf diff --git a/Master/texmf-dist/doc/latex/l3experimental/l3sys-shell/l3sys-shell.pdf b/Master/texmf-dist/doc/latex/l3experimental/l3sys-shell/l3sys-shell.pdf Binary files differindex a0af1966a00..1bf076ed62f 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/l3sys-shell/l3sys-shell.pdf +++ b/Master/texmf-dist/doc/latex/l3experimental/l3sys-shell/l3sys-shell.pdf diff --git a/Master/texmf-dist/doc/latex/l3experimental/xcoffins/xcoffins.pdf b/Master/texmf-dist/doc/latex/l3experimental/xcoffins/xcoffins.pdf Binary files differindex c30c6aa10e5..99ec75598d4 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/xcoffins/xcoffins.pdf +++ b/Master/texmf-dist/doc/latex/l3experimental/xcoffins/xcoffins.pdf diff --git a/Master/texmf-dist/doc/latex/l3experimental/xgalley/l3galley.pdf b/Master/texmf-dist/doc/latex/l3experimental/xgalley/l3galley.pdf Binary files differindex 8408ef4f24d..ad1722b75ab 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/xgalley/l3galley.pdf +++ b/Master/texmf-dist/doc/latex/l3experimental/xgalley/l3galley.pdf diff --git a/Master/texmf-dist/doc/latex/l3experimental/xgalley/xgalley.pdf b/Master/texmf-dist/doc/latex/l3experimental/xgalley/xgalley.pdf Binary files differindex 0e590b82b1b..96353edc24a 100644 --- a/Master/texmf-dist/doc/latex/l3experimental/xgalley/xgalley.pdf +++ b/Master/texmf-dist/doc/latex/l3experimental/xgalley/xgalley.pdf diff --git a/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md b/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md index 63e8548ca17..b9988bdaef2 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md +++ b/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md @@ -7,6 +7,17 @@ this project uses date-based 'snapshot' version identifiers. ## [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 @@ this project uses date-based 'snapshot' version identifiers. ### Added -- `.muskip:N` property +- `.muskip_set:N` property ### Changed @@ -407,7 +418,8 @@ this project uses date-based 'snapshot' version identifiers. - Step funcÂtions have been added for dim variÂables, e.g. `\dim_step_inÂline:nnnn` -[Unreleased]: https://github.com/latex3/latex3/compare/2019-05-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 diff --git a/Master/texmf-dist/doc/latex/l3kernel/README.md b/Master/texmf-dist/doc/latex/l3kernel/README.md index 3f7a8067c46..1a0d088e6e4 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/README.md +++ b/Master/texmf-dist/doc/latex/l3kernel/README.md @@ -1,7 +1,7 @@ LaTeX3 Programming Conventions ============================== -Release 2019-05-09 +Release 2019-05-28 Overview -------- diff --git a/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf b/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf Binary files differindex 382fb2314e7..7ae7a5c282c 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf +++ b/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf diff --git a/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf b/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf Binary files differindex 723b316575b..2630e677388 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf +++ b/Master/texmf-dist/doc/latex/l3kernel/interface3.pdf diff --git a/Master/texmf-dist/doc/latex/l3kernel/interface3.tex b/Master/texmf-dist/doc/latex/l3kernel/interface3.tex index 71aff240816..74a5d4a382f 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/interface3.tex +++ b/Master/texmf-dist/doc/latex/l3kernel/interface3.tex @@ -54,7 +54,7 @@ for those people who are interested. {latex-team@latex-project.org}% }% } -\date{Released 2019-05-09} +\date{Released 2019-05-28} \pagenumbering{roman} \maketitle diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf Binary files differindex 25a43b0807f..421941c18de 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf +++ b/Master/texmf-dist/doc/latex/l3kernel/l3docstrip.pdf diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf Binary files differindex dbea8015d1b..143c0636a2e 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf +++ b/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.pdf diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex b/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex index f834ab02ee4..75a3ac45ef6 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex +++ b/Master/texmf-dist/doc/latex/l3kernel/l3styleguide.tex @@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN. {latex-team@latex-project.org}% }% } -\date{Released 2019-05-09} +\date{Released 2019-05-28} \begin{document} diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf Binary files differindex 3b0ae7b0c56..d8de4454b82 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf +++ b/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.pdf diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex b/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex index b625e65cf3c..444f4ea3255 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex +++ b/Master/texmf-dist/doc/latex/l3kernel/l3syntax-changes.tex @@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN. {latex-team@latex-project.org}% }% } -\date{Released 2019-05-09} +\date{Released 2019-05-28} \newcommand{\TF}{\textit{(TF)}} diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.pdf b/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.pdf Binary files differindex 18fcf09850a..29b6ebee14d 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.pdf +++ b/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.pdf diff --git a/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.tex b/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.tex index bb1a5c5caaa..e2d694bbd7a 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.tex +++ b/Master/texmf-dist/doc/latex/l3kernel/l3term-glossary.tex @@ -32,7 +32,7 @@ The released version of this bundle is available from CTAN. {latex-team@latex-project.org}% }% } -\date{Released 2019-05-09} +\date{Released 2019-05-28} \newcommand{\TF}{\textit{(TF)}} diff --git a/Master/texmf-dist/doc/latex/l3kernel/source3.pdf b/Master/texmf-dist/doc/latex/l3kernel/source3.pdf Binary files differindex a0be473fae7..97d91022f56 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/source3.pdf +++ b/Master/texmf-dist/doc/latex/l3kernel/source3.pdf diff --git a/Master/texmf-dist/doc/latex/l3kernel/source3.tex b/Master/texmf-dist/doc/latex/l3kernel/source3.tex index 91e5f72f6fd..0690e2883dd 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/source3.tex +++ b/Master/texmf-dist/doc/latex/l3kernel/source3.tex @@ -53,7 +53,7 @@ for those people who are interested. {latex-team@latex-project.org}% }% } -\date{Released 2019-05-09} +\date{Released 2019-05-28} \pagenumbering{roman} \maketitle diff --git a/Master/texmf-dist/doc/latex/l3kernel/source3body.tex b/Master/texmf-dist/doc/latex/l3kernel/source3body.tex index 2c55586d3c9..94f74261d8c 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/source3body.tex +++ b/Master/texmf-dist/doc/latex/l3kernel/source3body.tex @@ -168,9 +168,10 @@ following argument specifiers: 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 } diff --git a/Master/texmf-dist/doc/latex/l3packages/CHANGELOG.md b/Master/texmf-dist/doc/latex/l3packages/CHANGELOG.md index 994b4dc2b48..9f4f5373015 100644 --- a/Master/texmf-dist/doc/latex/l3packages/CHANGELOG.md +++ b/Master/texmf-dist/doc/latex/l3packages/CHANGELOG.md @@ -7,6 +7,10 @@ this project uses date-based 'snapshot' version identifiers. ## [Unreleased] +## [2019-05-28] + +- Remove stray spaces in processor information + ## [2019-05-03] ### Added @@ -46,7 +50,8 @@ this project uses date-based 'snapshot' version identifiers. - Switch to ISO date format - Improve cross-module use of internal functions -[Unreleased]: https://github.com/latex3/latex3/compare/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 diff --git a/Master/texmf-dist/doc/latex/l3packages/README.md b/Master/texmf-dist/doc/latex/l3packages/README.md index 690261aedba..413bc2a8a67 100644 --- a/Master/texmf-dist/doc/latex/l3packages/README.md +++ b/Master/texmf-dist/doc/latex/l3packages/README.md @@ -1,7 +1,7 @@ LaTeX3 High-Level Concepts ========================== -Release 2019-05-03 +Release 2019-05-28 Overview -------- diff --git a/Master/texmf-dist/doc/latex/l3packages/l3keys2e/l3keys2e.pdf b/Master/texmf-dist/doc/latex/l3packages/l3keys2e/l3keys2e.pdf Binary files differindex 93919c63e45..aee2995d1f1 100644 --- a/Master/texmf-dist/doc/latex/l3packages/l3keys2e/l3keys2e.pdf +++ b/Master/texmf-dist/doc/latex/l3packages/l3keys2e/l3keys2e.pdf diff --git a/Master/texmf-dist/doc/latex/l3packages/xfp/xfp.pdf b/Master/texmf-dist/doc/latex/l3packages/xfp/xfp.pdf Binary files differindex 5c08ea6300a..3f595b37c9a 100644 --- a/Master/texmf-dist/doc/latex/l3packages/xfp/xfp.pdf +++ b/Master/texmf-dist/doc/latex/l3packages/xfp/xfp.pdf diff --git a/Master/texmf-dist/doc/latex/l3packages/xfrac/xfrac.pdf b/Master/texmf-dist/doc/latex/l3packages/xfrac/xfrac.pdf Binary files differindex b770b367a46..9a4da3d7b33 100644 --- a/Master/texmf-dist/doc/latex/l3packages/xfrac/xfrac.pdf +++ b/Master/texmf-dist/doc/latex/l3packages/xfrac/xfrac.pdf diff --git a/Master/texmf-dist/doc/latex/l3packages/xparse/xparse.pdf b/Master/texmf-dist/doc/latex/l3packages/xparse/xparse.pdf Binary files differindex c84f2aeb7d0..4fb161e35e2 100644 --- a/Master/texmf-dist/doc/latex/l3packages/xparse/xparse.pdf +++ b/Master/texmf-dist/doc/latex/l3packages/xparse/xparse.pdf diff --git a/Master/texmf-dist/doc/latex/l3packages/xtemplate/xtemplate.pdf b/Master/texmf-dist/doc/latex/l3packages/xtemplate/xtemplate.pdf Binary files differindex d69232e2518..0b716f7d707 100644 --- a/Master/texmf-dist/doc/latex/l3packages/xtemplate/xtemplate.pdf +++ b/Master/texmf-dist/doc/latex/l3packages/xtemplate/xtemplate.pdf diff --git a/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.dtx b/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.dtx index 1bb701c02ee..218988c8050 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3benchmark/l3benchmark.dtx @@ -46,7 +46,7 @@ % }^^A % } % -% \date{Released 2019-05-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 } diff --git a/Master/texmf-dist/source/latex/l3experimental/l3cctab/l3cctab.dtx b/Master/texmf-dist/source/latex/l3experimental/l3cctab/l3cctab.dtx index 70952138e5e..e058c450900 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3cctab/l3cctab.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3cctab/l3cctab.dtx @@ -46,7 +46,7 @@ % }^^A % } % -% \date{Released 2019-05-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} diff --git a/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.dtx b/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.dtx index 92ca58363a2..52e60d2b7a2 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3color/l3color.dtx @@ -46,7 +46,7 @@ % }^^A % } % -% \date{Released 2019-05-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 } { diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-boxes.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-boxes.dtx index 0859e7a2f9d..e3994c49e3c 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-boxes.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-boxes.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2019-05-03} +% \date{Released 2019-05-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-layers.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-layers.dtx index 7d5ae3948d6..a24b87bb6bd 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-layers.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-layers.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2019-05-03} +% \date{Released 2019-05-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-paths.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-paths.dtx index 874d1910d09..f3c76c0f24e 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-paths.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-paths.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2019-05-03} +% \date{Released 2019-05-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-points.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-points.dtx index bda4d40370a..460e8b122d6 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-points.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-points.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2019-05-03} +% \date{Released 2019-05-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-scopes.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-scopes.dtx index d360a1ccba5..3797642b8fe 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-scopes.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-scopes.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2019-05-03} +% \date{Released 2019-05-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-softpath.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-softpath.dtx index 13d77d0fdc9..b1cbf83e5e4 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-softpath.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-softpath.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2019-05-03} +% \date{Released 2019-05-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-state.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-state.dtx index 2cf0bf5d500..cbf1eca6768 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-state.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-state.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2019-05-03} +% \date{Released 2019-05-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-transforms.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-transforms.dtx index e8393ec9ee2..77850944890 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-transforms.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw-transforms.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2019-05-03} +% \date{Released 2019-05-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx index b4a3ed383bd..d01788b0c80 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3draw/l3draw.dtx @@ -110,7 +110,7 @@ % }^^A % } % -% \date{Released 2019-05-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} diff --git a/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.dtx b/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.dtx new file mode 100644 index 00000000000..b8378682a59 --- /dev/null +++ b/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.dtx @@ -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@latex-project.org} +% {latex-team@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 diff --git a/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.ins b/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.ins new file mode 100644 index 00000000000..815535a352c --- /dev/null +++ b/Master/texmf-dist/source/latex/l3experimental/l3graphics/l3graphics.ins @@ -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 diff --git a/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-convert.dtx b/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-convert.dtx index 33c7b8fa7a5..fb218771a5a 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-convert.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-convert.dtx @@ -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} % diff --git a/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx b/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx index afb473ccfb9..70448816fb3 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3str/l3str-format.dtx @@ -48,7 +48,7 @@ % }^^A % } % -% \date{Released 2019-05-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} diff --git a/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.dtx b/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.dtx index 173abde66b4..64ab863d807 100644 --- a/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/l3sys-shell/l3sys-shell.dtx @@ -46,7 +46,7 @@ % }^^A % } % -% \date{Released 2019-05-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} diff --git a/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx b/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx index 803b8188769..59860d70d1d 100644 --- a/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/xcoffins/xcoffins.dtx @@ -56,7 +56,7 @@ % }^^A % } % -% \date{Released 2019-05-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} % diff --git a/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx b/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx index 04ec76c9270..716bea363ab 100644 --- a/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/xgalley/l3galley.dtx @@ -61,7 +61,7 @@ % }^^A % } % -% \date{Released 2019-05-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} diff --git a/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx b/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx index 556a51a9511..deefd7a4416 100644 --- a/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx +++ b/Master/texmf-dist/source/latex/l3experimental/xgalley/xgalley.dtx @@ -47,7 +47,7 @@ % }^^A % } % -% \date{Released 2019-05-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} diff --git a/Master/texmf-dist/source/latex/l3kernel/expl3.dtx b/Master/texmf-dist/source/latex/l3kernel/expl3.dtx index 7ddce6aa8ac..72c1d220e18 100644 --- a/Master/texmf-dist/source/latex/l3kernel/expl3.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/expl3.dtx @@ -23,7 +23,7 @@ % for those people who are interested. % %<*driver|generic|package> -\def\ExplFileDate{2019-05-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 % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3alloc.dtx b/Master/texmf-dist/source/latex/l3kernel/l3alloc.dtx index f41ceae0743..01fcdcf977e 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3alloc.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3alloc.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-05-09} +% \date{Released 2019-05-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx b/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx index 659c9f20ef8..188fbfd0f8d 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-05-09} +% \date{Released 2019-05-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx b/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx index 88605016fd7..ffda0047028 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-05-09} +% \date{Released 2019-05-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3box.dtx b/Master/texmf-dist/source/latex/l3kernel/l3box.dtx index ec3fd41f603..91eb4593b05 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3box.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3box.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-05-09} +% \date{Released 2019-05-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx b/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx index 04ed6e0321e..de5a5011bb8 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2019-05-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} % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx b/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx index 4b1444782d1..fe91c5a5baf 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2019-05-09} +% \date{Released 2019-05-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx b/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx index 38f3cd371d8..0aaadefe1a0 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-05-09} +% \date{Released 2019-05-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3color-base.dtx b/Master/texmf-dist/source/latex/l3kernel/l3color-base.dtx index 393ea0f2fe5..0773fc95a4a 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3color-base.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3color-base.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-05-09} +% \date{Released 2019-05-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx b/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx index ce931f0e165..12b990b8d53 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-05-09} +% \date{Released 2019-05-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx b/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx index ebbb552a31d..1bbc500dc1a 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx @@ -79,7 +79,7 @@ and all files in that bundle must be distributed together. % % \title{The \cls{l3doc} class} % \author{\Team} -% \date{Released 2019-05-09} +% \date{Released 2019-05-28} % \maketitle % \tableofcontents % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx b/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx index b648dd93179..9265e066746 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx @@ -63,7 +63,7 @@ % }^^A % } % -% \date{Released 2019-05-09} +% \date{Released 2019-05-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3drivers-basics.dtx b/Master/texmf-dist/source/latex/l3kernel/l3drivers-basics.dtx index e02738d08f1..2ff21a9d65b 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3drivers-basics.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3drivers-basics.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-05-09} +% \date{Released 2019-05-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3drivers-box.dtx b/Master/texmf-dist/source/latex/l3kernel/l3drivers-box.dtx index 3a7728c5b6e..945a93dc6ef 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3drivers-box.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3drivers-box.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-05-09} +% \date{Released 2019-05-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3drivers-color.dtx b/Master/texmf-dist/source/latex/l3kernel/l3drivers-color.dtx index ae4cde421ce..4d5c22462ca 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3drivers-color.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3drivers-color.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-05-09} +% \date{Released 2019-05-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3drivers-draw.dtx b/Master/texmf-dist/source/latex/l3kernel/l3drivers-draw.dtx index 5bdcb3bddc2..1e213647b46 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3drivers-draw.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3drivers-draw.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-05-09} +% \date{Released 2019-05-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3drivers-graphics.dtx b/Master/texmf-dist/source/latex/l3kernel/l3drivers-graphics.dtx index 555b394ae15..86bfcfeb1f7 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3drivers-graphics.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3drivers-graphics.dtx @@ -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,6 +224,60 @@ % \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,14 +385,14 @@ \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} } } \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. diff --git a/Master/texmf-dist/source/latex/l3kernel/l3drivers-pdf.dtx b/Master/texmf-dist/source/latex/l3kernel/l3drivers-pdf.dtx index 50215d5bf8f..62a3bea1119 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3drivers-pdf.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3drivers-pdf.dtx @@ -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 } diff --git a/Master/texmf-dist/source/latex/l3kernel/l3drivers.dtx b/Master/texmf-dist/source/latex/l3kernel/l3drivers.dtx index 24f7ad3eb9b..8e22549f2ae 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3drivers.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3drivers.dtx @@ -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} % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx b/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx index c4afb3010fc..4f0d3af3ef1 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-05-09} +% \date{Released 2019-05-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3file.dtx b/Master/texmf-dist/source/latex/l3kernel/l3file.dtx index d6b61507d47..886e6011167 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3file.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3file.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2019-05-09} +% \date{Released 2019-05-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3final.dtx b/Master/texmf-dist/source/latex/l3kernel/l3final.dtx index fe877311103..9695d202e05 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3final.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3final.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-05-09} +% \date{Released 2019-05-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx b/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx index d5527a62785..3b487b0bec1 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-05-09} +% \date{Released 2019-05-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx index 1b4e5558e7d..4029c929517 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2019-05-09} +% \date{Released 2019-05-28} % \maketitle % % \begin{documentation} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx index 8eda1c12665..79aa81924ec 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-aux.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-05-09} +% \date{Released 2019-05-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx index c87d4fb4bc2..2d5dc0d66ae 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2019-05-09} +% \date{Released 2019-05-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx index 8ff9a3b7c2d..cab359055de 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-05-09} +% \date{Released 2019-05-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx index a87bf8b1226..192a7d447c1 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2019-05-09} +% \date{Released 2019-05-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx index 30113e4b8cd..e5d41df0b39 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2019-05-09} +% \date{Released 2019-05-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx index 37ee7d9a3cb..57441d7ebdc 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2019-05-09} +% \date{Released 2019-05-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx index 15227cc22ae..ff05d8a2260 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2019-05-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,22 +2291,57 @@ #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} @@ -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 } * diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx index 5cf80f99ddb..b45b27d3ea1 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2019-05-09} +% \date{Released 2019-05-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx index 79c83da24de..75e0dd7653d 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-05-09} +% \date{Released 2019-05-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx index 43c579ddde7..b1bf6c6ec13 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2019-05-09} +% \date{Released 2019-05-28} % \maketitle % % \begin{documentation} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx index 2eb21b5137b..9e68208c9cb 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp-trig.dtx @@ -40,7 +40,7 @@ % {latex-team@latex-project.org}^^A % }^^A % } -% \date{Released 2019-05-09} +% \date{Released 2019-05-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx index 1893a78c128..620944118d7 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx @@ -49,7 +49,7 @@ % }^^A % } % -% \date{Released 2019-05-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. diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx index fa6587de3f6..0aec3f16fb1 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2019-05-09} +% \date{Released 2019-05-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3int.dtx b/Master/texmf-dist/source/latex/l3kernel/l3int.dtx index 0eaab0032d0..5ea71b0afb6 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3int.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3int.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-05-09} +% \date{Released 2019-05-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx b/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx index 5e07dbf968e..59bbffa95c2 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2019-05-09} +% \date{Released 2019-05-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx b/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx index b543303a41d..17255a50305 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-05-09} +% \date{Released 2019-05-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx b/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx index ecb249c825d..511d1fd9b7a 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-05-09} +% \date{Released 2019-05-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx b/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx index 3c32583bff1..a67517b667f 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-05-09} +% \date{Released 2019-05-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx b/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx index 293d940191e..1b623da7f46 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-05-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 @@ local function elapsedtime() end l3kernel.elapsedtime = elapsedtime local function resettimer() - base_time = 0 + base_time = os_clock() end l3kernel.resettimer = resettimer % \end{macrocode} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx b/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx index 7a6855623b8..4f3d8a69327 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-05-09} +% \date{Released 2019-05-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3names.dtx b/Master/texmf-dist/source/latex/l3kernel/l3names.dtx index 8c9660c12b8..ed464e73e3a 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3names.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3names.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-05-09} +% \date{Released 2019-05-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx b/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx index 171da06d375..8380415d069 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-05-09} +% \date{Released 2019-05-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx b/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx index 60e155eb59b..7658d804780 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-05-09} +% \date{Released 2019-05-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx b/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx index d5f71ff35c5..6a5b3f4cf5a 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-05-09} +% \date{Released 2019-05-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx b/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx index e6e91a4393a..7246e30ed7f 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-05-09} +% \date{Released 2019-05-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx b/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx index 5ff1628798c..91051b576a4 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-05-09} +% \date{Released 2019-05-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx b/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx index 9951df03fd2..eded1d719ee 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2019-05-09} +% \date{Released 2019-05-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx b/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx index ef8921366c2..9b2b0fdc1f8 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-05-09} +% \date{Released 2019-05-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3str.dtx b/Master/texmf-dist/source/latex/l3kernel/l3str.dtx index c1079afa4c6..213625ab677 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3str.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3str.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-05-09} +% \date{Released 2019-05-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx b/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx index da6bd0b48b0..b411adb645e 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-05-09} +% \date{Released 2019-05-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx b/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx index 1fda8a3ad23..1a32c91153a 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx @@ -44,7 +44,7 @@ % }^^A % } % -% \date{Released 2019-05-09} +% \date{Released 2019-05-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx b/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx index 048580b4e3d..9c6fb5f7bf7 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-05-09} +% \date{Released 2019-05-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3token.dtx b/Master/texmf-dist/source/latex/l3kernel/l3token.dtx index 84bed54d9c8..29581bb5c9b 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3token.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3token.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-05-09} +% \date{Released 2019-05-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx b/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx index 107ba0369ce..77675742962 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx +++ b/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx @@ -43,7 +43,7 @@ % }^^A % } % -% \date{Released 2019-05-09} +% \date{Released 2019-05-28} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx b/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx index 4696ceda345..92f3e82a371 100644 --- a/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx +++ b/Master/texmf-dist/source/latex/l3packages/l3keys2e/l3keys2e.dtx @@ -62,7 +62,7 @@ % }^^A % } % -% \date{Released 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} % diff --git a/Master/texmf-dist/source/latex/l3packages/xfp/xfp.dtx b/Master/texmf-dist/source/latex/l3packages/xfp/xfp.dtx index 71a0d646ebe..1b6cbd36808 100644 --- a/Master/texmf-dist/source/latex/l3packages/xfp/xfp.dtx +++ b/Master/texmf-dist/source/latex/l3packages/xfp/xfp.dtx @@ -64,7 +64,7 @@ % }^^A % } % -% \date{Released 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} % diff --git a/Master/texmf-dist/source/latex/l3packages/xfrac/xfrac.dtx b/Master/texmf-dist/source/latex/l3packages/xfrac/xfrac.dtx index a67213fcb1a..fa1739eee5b 100644 --- a/Master/texmf-dist/source/latex/l3packages/xfrac/xfrac.dtx +++ b/Master/texmf-dist/source/latex/l3packages/xfrac/xfrac.dtx @@ -65,7 +65,7 @@ % }^^A % } % -% \date{Released 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} % diff --git a/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx b/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx index c9061d80572..6aee5f22f6f 100644 --- a/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx +++ b/Master/texmf-dist/source/latex/l3packages/xparse/xparse.dtx @@ -67,7 +67,7 @@ % }^^A % } % -% \date{Released 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} diff --git a/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx b/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx index 2dec040e45b..04aa51be36d 100644 --- a/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx +++ b/Master/texmf-dist/source/latex/l3packages/xtemplate/xtemplate.dtx @@ -63,7 +63,7 @@ % }^^A % } % -% \date{Released 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} % diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3benchmark/l3benchmark.sty b/Master/texmf-dist/tex/latex/l3experimental/l3benchmark/l3benchmark.sty index 924d785f8fc..6c8cdc9cfde 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3benchmark/l3benchmark.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3benchmark/l3benchmark.sty @@ -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 } diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3cctab/l3cctab.sty b/Master/texmf-dist/tex/latex/l3experimental/l3cctab/l3cctab.sty index 19d18d7ed74..d25f70e3f34 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3cctab/l3cctab.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3cctab/l3cctab.sty @@ -20,7 +20,7 @@ %% %% File: l3cctab.dtx \RequirePackage{expl3} -\ProvidesExplPackage{l3cctab}{2019-05-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 } diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3color/l3color.sty b/Master/texmf-dist/tex/latex/l3experimental/l3color/l3color.sty index c6be03b0ae4..1285abf7ae1 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3color/l3color.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3color/l3color.sty @@ -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 } { diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty b/Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty index 4f63b4e692e..e6a07862985 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3draw/l3draw.sty @@ -28,7 +28,7 @@ %% %% File: l3draw.dtx \RequirePackage{expl3} -\ProvidesExplPackage{l3draw}{2019-05-03}{} +\ProvidesExplPackage{l3draw}{2019-05-28}{} {L3 Experimental core drawing support} \RequirePackage { l3color } %% File: l3draw-boxes.dtx diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3graphics/l3graphics.sty b/Master/texmf-dist/tex/latex/l3experimental/l3graphics/l3graphics.sty new file mode 100644 index 00000000000..361523ef595 --- /dev/null +++ b/Master/texmf-dist/tex/latex/l3experimental/l3graphics/l3graphics.sty @@ -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'. diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-convert.sty b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-convert.sty index 6af82fd2621..f9b7c2b0e02 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-convert.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-convert.sty @@ -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 } } diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88591.def b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88591.def index 7d880561227..129e435d16d 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88591.def +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88591.def @@ -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 } { } diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885910.def b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885910.def index 7f838672207..8c4e9ce957b 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885910.def +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885910.def @@ -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 } diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885911.def b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885911.def index 6b271131cc1..c9fd87cd3bf 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885911.def +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885911.def @@ -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 } diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885913.def b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885913.def index 4f95aec07a7..aac3d64ef2e 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885913.def +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885913.def @@ -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 } diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885914.def b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885914.def index 7925d571336..22cd3c76f56 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885914.def +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885914.def @@ -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 } diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885915.def b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885915.def index da46de43466..a79469e4425 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885915.def +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885915.def @@ -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 } diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885916.def b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885916.def index b0083c8050c..bfd656f6e7a 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885916.def +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso885916.def @@ -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 } diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88592.def b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88592.def index 42519770cce..3c7f9893795 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88592.def +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88592.def @@ -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 } diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88593.def b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88593.def index 7d5d80d61cc..4fa0c24373f 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88593.def +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88593.def @@ -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 } diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88594.def b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88594.def index 10491b14483..b90cb49d143 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88594.def +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88594.def @@ -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 } diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88595.def b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88595.def index 1166a482191..0862a7a49b0 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88595.def +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88595.def @@ -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 } diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88596.def b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88596.def index 92438f3aea6..d89bc0330c6 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88596.def +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88596.def @@ -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 } diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88597.def b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88597.def index 2c0c5e7760e..3bbb24b8165 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88597.def +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88597.def @@ -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 } diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88598.def b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88598.def index 50615dfc038..61e8c3fe6dc 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88598.def +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88598.def @@ -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 } diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88599.def b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88599.def index 3d421b2a6c9..9339941d6ea 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88599.def +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-iso88599.def @@ -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 } diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-utf16.def b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-utf16.def index 2ae9485ab91..3b54e12b16d 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-utf16.def +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-utf16.def @@ -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 diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-utf32.def b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-utf32.def index 76ded8b28d6..307e629071a 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-utf32.def +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-utf32.def @@ -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 diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-utf8.def b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-utf8.def index 10b3902661a..fe9fd31ee87 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-utf8.def +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-enc-utf8.def @@ -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 diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-hex.def b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-hex.def index e4cb1e9a2c6..28ff90d79ea 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-hex.def +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-hex.def @@ -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: diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-name.def b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-name.def index 926b3ef9e75..58ddb088092 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-name.def +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-name.def @@ -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: } diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-string.def b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-string.def index 68c16ea5db7..8f294e4220a 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-string.def +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-string.def @@ -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 diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-url.def b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-url.def index ebc2dc2548a..21fa69980a9 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-url.def +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-esc-url.def @@ -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: } diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty index 2658fade981..fa84e0e970d 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3str/l3str-format.sty @@ -20,7 +20,7 @@ %% %% File: l3str-format.dtx \RequirePackage{expl3} -\ProvidesExplPackage{l3str-format}{2019-05-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 } diff --git a/Master/texmf-dist/tex/latex/l3experimental/l3sys-shell/l3sys-shell.sty b/Master/texmf-dist/tex/latex/l3experimental/l3sys-shell/l3sys-shell.sty index 0fdc99a02a6..20fd2db2f33 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/l3sys-shell/l3sys-shell.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/l3sys-shell/l3sys-shell.sty @@ -20,7 +20,7 @@ %% %% File: l3sys-shell.dtx \RequirePackage{expl3} -\ProvidesExplPackage{l3sys-shell}{2019-05-03}{} +\ProvidesExplPackage{l3sys-shell}{2019-05-28}{} {L3 Experimental system shell functions} \cs_new:Npn \__sys_path_to_win:n #1 { diff --git a/Master/texmf-dist/tex/latex/l3experimental/xcoffins/xcoffins.sty b/Master/texmf-dist/tex/latex/l3experimental/xcoffins/xcoffins.sty index 058ae854cd5..9c53fe7d4a6 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/xcoffins/xcoffins.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/xcoffins/xcoffins.sty @@ -20,7 +20,7 @@ %% %% File: xcoffins.dtx \RequirePackage{xparse} -\ProvidesExplPackage{xcoffins}{2019-05-03}{} +\ProvidesExplPackage{xcoffins}{2019-05-28}{} {L3 Experimental design level coffins} \keys_define:nn { coffin } { diff --git a/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty b/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty index 7f4c785a57d..263c06691eb 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/xgalley/l3galley.sty @@ -32,7 +32,7 @@ }% \endinput } -\ProvidesExplPackage{l3galley}{2019-05-03}{} +\ProvidesExplPackage{l3galley}{2019-05-28}{} {L3 Experimental galley code} \int_new:N \l__galley_tmp_int \seq_new:N \g__galley_tmpa_seq diff --git a/Master/texmf-dist/tex/latex/l3experimental/xgalley/xgalley.sty b/Master/texmf-dist/tex/latex/l3experimental/xgalley/xgalley.sty index de6ec90878d..d492282db69 100644 --- a/Master/texmf-dist/tex/latex/l3experimental/xgalley/xgalley.sty +++ b/Master/texmf-dist/tex/latex/l3experimental/xgalley/xgalley.sty @@ -20,7 +20,7 @@ %% %% File: xgalley.dtx \RequirePackage{xparse} -\ProvidesExplPackage{xgalley}{2019-05-03}{} +\ProvidesExplPackage{xgalley}{2019-05-28}{} {L3 Experimental galley} \RequirePackage{xparse,xtemplate,l3galley} \clist_new:N \l__galley_tmpa_clist diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex b/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex index cd2f1013847..dbdc37c17f5 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex +++ b/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex @@ -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,22 +15092,49 @@ #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 @@ -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 diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex b/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex index 6d8a56abcaa..8014aa50960 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex +++ b/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex @@ -19,7 +19,7 @@ %% and all files in that bundle must be distributed together. %% %% File: expl3.dtx -\def\ExplFileDate{2019-05-09}% +\def\ExplFileDate{2019-05-28}% \let\ExplLoaderFileDate\ExplFileDate \begingroup \def\tempa{LaTeX2e}% diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3.lua b/Master/texmf-dist/tex/latex/l3kernel/expl3.lua index 48b4a266506..e81e52a591a 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/expl3.lua +++ b/Master/texmf-dist/tex/latex/l3kernel/expl3.lua @@ -64,7 +64,7 @@ local function elapsedtime() end l3kernel.elapsedtime = elapsedtime local function resettimer() - base_time = 0 + base_time = os_clock() end l3kernel.resettimer = resettimer local function filemdfivesum(name) diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3.sty b/Master/texmf-dist/tex/latex/l3kernel/expl3.sty index b8aaca40a4c..41b84801c47 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/expl3.sty +++ b/Master/texmf-dist/tex/latex/l3kernel/expl3.sty @@ -19,7 +19,7 @@ %% and all files in that bundle must be distributed together. %% %% File: expl3.dtx -\def\ExplFileDate{2019-05-09}% +\def\ExplFileDate{2019-05-28}% \let\ExplLoaderFileDate\ExplFileDate \ProvidesPackage{expl3} [% diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def b/Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def index 3bdc8505acb..20789461412 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def +++ b/Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def @@ -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 diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3dvips.def b/Master/texmf-dist/tex/latex/l3kernel/l3dvips.def index 23675e1c0a1..f51166f9231 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3dvips.def +++ b/Master/texmf-dist/tex/latex/l3kernel/l3dvips.def @@ -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 diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def b/Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def index 25c63471e8f..3afb54a6b05 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def +++ b/Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def @@ -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 } diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def b/Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def index 111087f7509..49ee9115e3a 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def +++ b/Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def @@ -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 diff --git a/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty b/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty index c5a7c0c6a6c..4f76f142838 100644 --- a/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty +++ b/Master/texmf-dist/tex/latex/l3packages/l3keys2e/l3keys2e.sty @@ -32,7 +32,7 @@ }% \endinput } -\ProvidesExplPackage{l3keys2e}{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 } diff --git a/Master/texmf-dist/tex/latex/l3packages/xfp/xfp.sty b/Master/texmf-dist/tex/latex/l3packages/xfp/xfp.sty index 612f3c0e235..65be7159a88 100644 --- a/Master/texmf-dist/tex/latex/l3packages/xfp/xfp.sty +++ b/Master/texmf-dist/tex/latex/l3packages/xfp/xfp.sty @@ -33,7 +33,7 @@ \endinput } \RequirePackage{xparse} -\ProvidesExplPackage{xfp}{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} } diff --git a/Master/texmf-dist/tex/latex/l3packages/xfrac/xfrac.sty b/Master/texmf-dist/tex/latex/l3packages/xfrac/xfrac.sty index d102c8ad839..33bfe8e6696 100644 --- a/Master/texmf-dist/tex/latex/l3packages/xfrac/xfrac.sty +++ b/Master/texmf-dist/tex/latex/l3packages/xfrac/xfrac.sty @@ -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 } { diff --git a/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty b/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty index ff8f6bca7ca..96a9229784e 100644 --- a/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty +++ b/Master/texmf-dist/tex/latex/l3packages/xparse/xparse.sty @@ -32,7 +32,7 @@ }% \endinput } -\ProvidesExplPackage{xparse}{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} diff --git a/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty b/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty index ecbef06db2f..08e2163a82d 100644 --- a/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty +++ b/Master/texmf-dist/tex/latex/l3packages/xtemplate/xtemplate.sty @@ -32,7 +32,7 @@ }% \endinput } -\ProvidesExplPackage{xtemplate}{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~>~ } |