diff options
author | Karl Berry <karl@freefriends.org> | 2019-05-09 21:21:40 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2019-05-09 21:21:40 +0000 |
commit | 6b8660f398522ec8c9225f4743bf35d7ead3fdbb (patch) | |
tree | 2d739ca19f398762c708fde206952877d04b1d9f /Master | |
parent | 85d267d6035b359acbbc8620e9f215658e2ef473 (diff) |
l3kernel (9may19)
git-svn-id: svn://tug.org/texlive/trunk@51060 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master')
84 files changed, 1108 insertions, 884 deletions
diff --git a/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md b/Master/texmf-dist/doc/latex/l3kernel/CHANGELOG.md index d09efb4b54f..63e8548ca17 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-09] + +### Added + +- Experimental driver-level interfaces for image inclusion +- Experimental `\ior_shell_open:Nn` + +### Fixed + +- Some issues in `dvisvgm` driver + ## [2019-05-07] ### Added @@ -396,7 +407,8 @@ this project uses date-based 'snapshot' version identifiers. - Step functions have been added for dim variables, e.g. `\dim_step_inline:nnnn` -[Unreleased]: https://github.com/latex3/latex3/compare/2019-05-07...HEAD +[Unreleased]: https://github.com/latex3/latex3/compare/2019-05-09...HEAD +[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 [2019-05-03]: https://github.com/latex3/latex3/compare/2019-04-21...2019-05-03 diff --git a/Master/texmf-dist/doc/latex/l3kernel/README.md b/Master/texmf-dist/doc/latex/l3kernel/README.md index c1758199134..3f7a8067c46 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-07 +Release 2019-05-09 Overview -------- diff --git a/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf b/Master/texmf-dist/doc/latex/l3kernel/expl3.pdf Binary files differindex cd428ad7b74..382fb2314e7 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 0b99e50a6bc..723b316575b 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 d0cee5124dd..71aff240816 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-07} +\date{Released 2019-05-09} \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 59e4ccdb67d..25a43b0807f 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 1e86c317208..dbea8015d1b 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 5b4843f2264..f834ab02ee4 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-07} +\date{Released 2019-05-09} \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 e182c17d145..3b0ae7b0c56 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 ea0330009d3..b625e65cf3c 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-07} +\date{Released 2019-05-09} \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 510a5e3438d..18fcf09850a 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 d2cfb6c425c..bb1a5c5caaa 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-07} +\date{Released 2019-05-09} \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 eddbd6c1f1e..a0be473fae7 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 cd9c6f4cad4..91e5f72f6fd 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-07} +\date{Released 2019-05-09} \pagenumbering{roman} \maketitle diff --git a/Master/texmf-dist/doc/latex/l3kernel/source3body.tex b/Master/texmf-dist/doc/latex/l3kernel/source3body.tex index cd0f7aaee18..2c55586d3c9 100644 --- a/Master/texmf-dist/doc/latex/l3kernel/source3body.tex +++ b/Master/texmf-dist/doc/latex/l3kernel/source3body.tex @@ -491,7 +491,7 @@ used on top of \LaTeXe{} if \cs{outer} tokens are used in the arguments. l3drivers-color.dtx , l3drivers-box.dtx , l3drivers-draw.dtx , - l3drivers-image.dtx , + l3drivers-graphics.dtx , l3drivers-pdf.dtx } \ExplSyntaxOff diff --git a/Master/texmf-dist/source/latex/l3kernel/expl3.dtx b/Master/texmf-dist/source/latex/l3kernel/expl3.dtx index 77aef12afe7..7ddce6aa8ac 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-07}% +\def\ExplFileDate{2019-05-09}% %</driver|generic|package> %<*driver> \documentclass[full]{l3doc} @@ -51,7 +51,7 @@ % }^^A % } % -% \date{Released 2019-05-07} +% \date{Released 2019-05-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3.ins b/Master/texmf-dist/source/latex/l3kernel/l3.ins index ed2d726b1fb..7977e037451 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3.ins +++ b/Master/texmf-dist/source/latex/l3kernel/l3.ins @@ -120,65 +120,65 @@ and all files in that bundle must be distributed together. { \file{l3dvipdfmx.def} { - \from{l3drivers.dtx} {package,dvipdfmx} - \from{l3drivers-basics.dtx}{package,dvipdfmx} - \from{l3drivers-color.dtx} {package,dvipdfmx} - \from{l3drivers-box.dtx} {package,dvipdfmx} - \from{l3drivers-draw.dtx} {package,dvipdfmx} - \from{l3drivers-image.dtx} {package,dvipdfmx} - \from{l3drivers-pdf.dtx} {package,dvipdfmx} + \from{l3drivers.dtx} {package,dvipdfmx} + \from{l3drivers-basics.dtx} {package,dvipdfmx} + \from{l3drivers-color.dtx} {package,dvipdfmx} + \from{l3drivers-box.dtx} {package,dvipdfmx} + \from{l3drivers-draw.dtx} {package,dvipdfmx} + \from{l3drivers-graphics.dtx}{package,dvipdfmx} + \from{l3drivers-pdf.dtx} {package,dvipdfmx} } } \generate { \file{l3dvips.def} { - \from{l3drivers.dtx} {package,dvips} - \from{l3drivers-basics.dtx}{package,dvips} - \from{l3drivers-color.dtx} {package,dvips} - \from{l3drivers-box.dtx} {package,dvips} - \from{l3drivers-draw.dtx} {package,dvips} - \from{l3drivers-image.dtx} {package,dvips} - \from{l3drivers-pdf.dtx} {package,dvips} + \from{l3drivers.dtx} {package,dvips} + \from{l3drivers-basics.dtx} {package,dvips} + \from{l3drivers-color.dtx} {package,dvips} + \from{l3drivers-box.dtx} {package,dvips} + \from{l3drivers-draw.dtx} {package,dvips} + \from{l3drivers-graphics.dtx}{package,dvips} + \from{l3drivers-pdf.dtx} {package,dvips} } } \generate { \file{l3dvisvgm.def} { - \from{l3drivers.dtx} {package,dvisvgm} - \from{l3drivers-basics.dtx}{package,dvisvgm} - \from{l3drivers-color.dtx} {package,dvisvgm} - \from{l3drivers-box.dtx} {package,dvisvgm} - \from{l3drivers-draw.dtx} {package,dvisvgm} - \from{l3drivers-image.dtx} {package,dvisvgm} - \from{l3drivers-pdf.dtx} {package,dvisvgm} + \from{l3drivers.dtx} {package,dvisvgm} + \from{l3drivers-basics.dtx} {package,dvisvgm} + \from{l3drivers-color.dtx} {package,dvisvgm} + \from{l3drivers-box.dtx} {package,dvisvgm} + \from{l3drivers-draw.dtx} {package,dvisvgm} + \from{l3drivers-graphics.dtx}{package,dvisvgm} + \from{l3drivers-pdf.dtx} {package,dvisvgm} } } \generate { \file{l3pdfmode.def} { - \from{l3drivers.dtx} {package,pdfmode} - \from{l3drivers-basics.dtx}{package,pdfmode} - \from{l3drivers-color.dtx} {package,pdfmode} - \from{l3drivers-box.dtx} {package,pdfmode} - \from{l3drivers-draw.dtx} {package,pdfmode} - \from{l3drivers-image.dtx} {package,pdfmode} - \from{l3drivers-pdf.dtx} {package,pdfmode} + \from{l3drivers.dtx} {package,pdfmode} + \from{l3drivers-basics.dtx} {package,pdfmode} + \from{l3drivers-color.dtx} {package,pdfmode} + \from{l3drivers-box.dtx} {package,pdfmode} + \from{l3drivers-draw.dtx} {package,pdfmode} + \from{l3drivers-graphics.dtx}{package,pdfmode} + \from{l3drivers-pdf.dtx} {package,pdfmode} } } \generate { \file{l3xdvipdfmx.def} { - \from{l3drivers.dtx} {package,xdvipdfmx} - \from{l3drivers-basics.dtx}{package,xdvipdfmx} - \from{l3drivers-color.dtx} {package,xdvipdfmx} - \from{l3drivers-box.dtx} {package,xdvipdfmx} - \from{l3drivers-draw.dtx} {package,xdvipdfmx} - \from{l3drivers-image.dtx} {package,xdvipdfmx} - \from{l3drivers-pdf.dtx} {package,xdvipdfmx} + \from{l3drivers.dtx} {package,xdvipdfmx} + \from{l3drivers-basics.dtx} {package,xdvipdfmx} + \from{l3drivers-color.dtx} {package,xdvipdfmx} + \from{l3drivers-box.dtx} {package,xdvipdfmx} + \from{l3drivers-draw.dtx} {package,xdvipdfmx} + \from{l3drivers-graphics.dtx}{package,xdvipdfmx} + \from{l3drivers-pdf.dtx} {package,xdvipdfmx} } } diff --git a/Master/texmf-dist/source/latex/l3kernel/l3alloc.dtx b/Master/texmf-dist/source/latex/l3kernel/l3alloc.dtx index 8630aadd0e7..f41ceae0743 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-07} +% \date{Released 2019-05-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx b/Master/texmf-dist/source/latex/l3kernel/l3basics.dtx index 2d2ca43f60e..659c9f20ef8 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-07} +% \date{Released 2019-05-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx b/Master/texmf-dist/source/latex/l3kernel/l3bootstrap.dtx index 19c48145a9a..88605016fd7 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-07} +% \date{Released 2019-05-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3box.dtx b/Master/texmf-dist/source/latex/l3kernel/l3box.dtx index 922daa52a8f..ec3fd41f603 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-07} +% \date{Released 2019-05-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx b/Master/texmf-dist/source/latex/l3kernel/l3candidates.dtx index 62ace001892..04ed6e0321e 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-07} +% \date{Released 2019-05-09} % % \maketitle % @@ -356,6 +356,23 @@ % \end{verbatim} % \end{function} % +% \begin{function}[added = 2019-05-08]{\ior_shell_open:Nn} +% \begin{syntax} +% \cs{ior_shell_open:nN} \meta{stream} \Arg{shell~command} +% \end{syntax} +% Opens the \emph{pseudo}-file created by the output of the +% \meta{shell command} for reading using \meta{stream} as the +% control sequence for access. If the \meta{stream} was already +% open it is closed before the new operation begins. The +% \meta{stream} is available for access immediately and will remain +% allocated to \meta{shell command} until a \cs{ior_close:N} instruction +% is given or the \TeX{} run ends. +% If piped system calls are disabled an error is raised. +% +% For details of handling of the \meta{shell command}, see +% \cs{sys_shell_get:nnN(TF)}. +% \end{function} +% % \section{Additions to \pkg{l3flag}} % % \begin{function}[EXP, added = 2018-04-02]{\flag_raise_if_clear:n} @@ -2326,6 +2343,41 @@ % \end{macrocode} % \end{macro} % +% \subsection{Additions to \pkg{l3file}} +% +% \begin{macrocode} +%<@@=ior> +% \end{macrocode} +% +% \begin{macro}{\ior_shell_open:Nn} +% \begin{macro}{\@@_shell_open:nN} +% Actually much easier than either the standard open or input versions! +% \begin{macrocode} +\cs_new_protected:Npn \ior_shell_open:Nn #1#2 + { + \sys_if_shell:TF + { \exp_args:No \@@_shell_open:nN { \tl_to_str:n {#2} } #1 } + { \__kernel_msg_error:nn { kernel } { pipe-failed } } + } +\cs_new_protected:Npn \@@_shell_open:nN #1#2 + { + \tl_if_in:nnTF {#1} { " } + { + \__kernel_msg_error:nnx + { kernel } { quote-in-shell } {#1} + } + { \__kernel_ior_open:Nn #2 { "|#1" } } + } +\__kernel_msg_new:nnnn { kernel } { 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. + } +% \end{macrocode} +% \end{macro} +% \end{macro} +% % \subsection{Additions to \pkg{l3tl}} % % \subsubsection{Unicode case changing} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx b/Master/texmf-dist/source/latex/l3kernel/l3clist.dtx index bd26eae590f..4b1444782d1 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-07} +% \date{Released 2019-05-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx b/Master/texmf-dist/source/latex/l3kernel/l3coffins.dtx index ad7ae7d9d61..38f3cd371d8 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-07} +% \date{Released 2019-05-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3color-base.dtx b/Master/texmf-dist/source/latex/l3kernel/l3color-base.dtx index bdb82b59cb9..393ea0f2fe5 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-07} +% \date{Released 2019-05-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx b/Master/texmf-dist/source/latex/l3kernel/l3deprecation.dtx index 9d97cf80368..ce931f0e165 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-07} +% \date{Released 2019-05-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx b/Master/texmf-dist/source/latex/l3kernel/l3doc.dtx index fe5c6443f0f..ebbb552a31d 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-07} +% \date{Released 2019-05-09} % \maketitle % \tableofcontents % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx b/Master/texmf-dist/source/latex/l3kernel/l3docstrip.dtx index 3fe44c872b8..b648dd93179 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-07} +% \date{Released 2019-05-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3drivers-basics.dtx b/Master/texmf-dist/source/latex/l3kernel/l3drivers-basics.dtx index 9b9674406f1..e02738d08f1 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-07} +% \date{Released 2019-05-09} % % \maketitle % @@ -117,6 +117,13 @@ % \end{macrocode} % \end{macro} % +% \begin{variable}{\l_@@_internal_box} +% A scratch box. +% \begin{macrocode} +\box_new:N \l_@@_internal_box +% \end{macrocode} +% \end{variable} +% % \subsection{\texttt{dvips} driver} % % \begin{macrocode} diff --git a/Master/texmf-dist/source/latex/l3kernel/l3drivers-box.dtx b/Master/texmf-dist/source/latex/l3kernel/l3drivers-box.dtx index f8a5f1e3a84..3a7728c5b6e 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-07} +% \date{Released 2019-05-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3drivers-color.dtx b/Master/texmf-dist/source/latex/l3kernel/l3drivers-color.dtx index 6a97beffa33..ae4cde421ce 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-07} +% \date{Released 2019-05-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3drivers-draw.dtx b/Master/texmf-dist/source/latex/l3kernel/l3drivers-draw.dtx index bc7bac514eb..5bdcb3bddc2 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-07} +% \date{Released 2019-05-09} % % \maketitle % @@ -1223,7 +1223,7 @@ % \texttt{dvips}. Here, we are only allowed RGB colors so there is some % conversion to do. % \begin{macrocode} -\cs_new_protected:Npn \driver_draw_color_stroke_cmyk:nnnn #1#2#3#4 +\cs_new_protected:Npn \driver_draw_color_fill_cmyk:nnnn #1#2#3#4 { \use:x { @@ -1234,18 +1234,18 @@ } } \cs_new_eq:NN \driver_draw_color_stroke_cmyk:nnnn \driver_color_cmyk:nnnn -\cs_new_protected:Npn \driver_draw_color_gray:n #1 +\cs_new_protected:Npn \driver_draw_color_fill_gray:n #1 { \use:x { \@@_draw_color_gray_aux:n - { \fp_eval:n { 100 * (#3) } } + { \fp_eval:n { 100 * (#1) } } } } \cs_new_protected:Npn \@@_draw_color_gray_aux:n #1 { \@@_draw_color_fill:nnn {#1} {#1} {#1} } \cs_new_eq:NN \driver_draw_color_stroke_gray:n \driver_color_gray:n -\cs_new_protected:Npn \driver_draw_color_rgb:nnn #1#2#3 +\cs_new_protected:Npn \driver_draw_color_fill_rgb:nnn #1#2#3 { \use:x { diff --git a/Master/texmf-dist/source/latex/l3kernel/l3drivers-graphics.dtx b/Master/texmf-dist/source/latex/l3kernel/l3drivers-graphics.dtx new file mode 100644 index 00000000000..555b394ae15 --- /dev/null +++ b/Master/texmf-dist/source/latex/l3kernel/l3drivers-graphics.dtx @@ -0,0 +1,557 @@ +% \iffalse meta-comment +% +%% File: l3drivers-graphics.dtx +% +% Copyright (C) 2019 The LaTeX3 Project +% +% It may be distributed and/or modified under the conditions of the +% LaTeX Project Public License (LPPL), either version 1.3c of this +% license or (at your option) any later version. The latest version +% of this license is in the file +% +% https://www.latex-project.org/lppl.txt +% +% This file is part of the "l3kernel bundle" (The Work in LPPL) +% and all files in that bundle must be distributed together. +% +% ----------------------------------------------------------------------- +% +% The development version of the bundle can be found at +% +% https://github.com/latex3/latex3 +% +% for those people who are interested. +% +%<*driver> +\documentclass[full,kernel]{l3doc} +\begin{document} + \DocInput{\jobname.dtx} +\end{document} +%</driver> +% \fi +% +% \title{^^A +% The \textsf{l3drivers-graphics} package\\ Driver graphics support^^A +% } +% +% \author{^^A +% The \LaTeX3 Project\thanks +% {^^A +% E-mail: +% \href{mailto:latex-team@latex-project.org} +% {latex-team@latex-project.org}^^A +% }^^A +% } +% +% \date{Released 2019-05-09} +% +% \maketitle +% +% \begin{documentation} +% +% \end{documentation} +% +% \begin{implementation} +% +% \section{\pkg{l3drivers-graphics} Implementation} +% +% \begin{macrocode} +%<*initex|package> +%<@@=driver> +% \end{macrocode} +% +% \subsection{\texttt{dvips} driver} +% +% \begin{macrocode} +%<*dvips> +% \end{macrocode} +% +% \begin{macro}{\driver_graphics_getbb_eps:n} +% Simply use the generic function. +% \begin{macrocode} +%<*initex> +\use:n +%</initex> +%<*package> +\AtBeginDocument +%</package> + { \cs_new_eq:NN \driver_graphics_getbb_eps:n \graphics_read_bb:n } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\driver_graphics_include_eps:n} +% The special syntax is relatively clear here: remember we need PostScript +% sizes here. +% \begin{macrocode} +\cs_new_protected:Npn \driver_graphics_include_eps:n #1 + { + \@@_literal:x + { + PSfile = #1 \c_space_tl + llx = \dim_to_decimal_in_bp:n \l_graphics_llx_dim \c_space_tl + lly = \dim_to_decimal_in_bp:n \l_graphics_lly_dim \c_space_tl + urx = \dim_to_decimal_in_bp:n \l_graphics_urx_dim \c_space_tl + ury = \dim_to_decimal_in_bp:n \l_graphics_ury_dim + } + } +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +%</dvips> +% \end{macrocode} +% +% \subsection{\texttt{pdfmode} driver} +% +% \begin{macrocode} +%<*pdfmode> +% \end{macrocode} +% +% \begin{variable}{\l_@@_graphics_attr_tl} +% In PDF mode, additional attributes of an 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 +% the bounding box operation. As such, it is easier to track additional +% attributes using a dedicated |tl| rather than build up the same data +% twice. +% \begin{macrocode} +\tl_new:N \l_@@_graphics_attr_tl +% \end{macrocode} +% \end{variable} +% +% \begin{macro} +% { +% \driver_graphics_getbb_jpg:n, +% \driver_graphics_getbb_pdf:n, +% \driver_graphics_getbb_png:n +% } +% \begin{macro} +% {\@@_graphics_getbb_auxi:n, \@@_graphics_getbb_auxii:n} +% Getting the bounding box here requires us to box up the image 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 +% to do in terms of auxiliaries. The key here is to notice that we need +% two forms of the attributes: a \enquote{short} set to allow us to +% track for caching, and the full form to pass to the primitive. +% \begin{macrocode} +\cs_new_protected:Npn \driver_graphics_getbb_jpg:n #1 + { + \int_zero:N \l_graphics_page_int + \tl_clear:N \l_graphics_pagebox_tl + \tl_set:Nx \l_@@_graphics_attr_tl + { + \tl_if_empty:NF \l_graphics_decodearray_tl + { :D \l_graphics_decodearray_tl } + \bool_if:NT \l_graphics_interpolate_bool + { :I } + } + \tl_clear:N \l_@@_graphics_attr_tl + \@@_graphics_getbb_auxi:n {#1} + } +\cs_new_eq:NN \driver_graphics_getbb_png:n \driver_graphics_getbb_jpg:n +\cs_new_protected:Npn \driver_graphics_getbb_pdf:n #1 + { + \tl_clear:N \l_graphics_decodearray_tl + \bool_set_false:N \l_graphics_interpolate_bool + \tl_set:Nx \l_@@_graphics_attr_tl + { + : \l_graphics_pagebox_tl + \int_compare:nNnT \l_graphics_page_int > 1 + { :P \int_use:N \l_graphics_page_int } + } + \@@_graphics_getbb_auxi:n {#1} + } +\cs_new_protected:Npn \@@_graphics_getbb_auxi:n #1 + { + \graphics_bb_restore:xF { #1 \l_@@_graphics_attr_tl } + { \@@_graphics_getbb_auxii:n {#1} } + } +% \begin{macrocode} +% Measuring the image is done by boxing up: for PDF images we could +% use |\tex_pdfximagebbox:D|, but if doesn't work for other types. +% As the box always starts at $(0,0)$ there is no need to worry about +% the lower-left position. +% \begin{macrocode} +\cs_new_protected:Npn \@@_graphics_getbb_auxii:n #1 + { + \tex_immediate:D \tex_pdfximage:D + \bool_lazy_or:nnT + { \l_graphics_interpolate_bool } + { ! \tl_if_empty_p:N \l_graphics_decodearray_tl } + { + attr ~ + { + \tl_if_empty:NF \l_graphics_decodearray_tl + { /Decode~[ \l_graphics_decodearray_tl ] } + \bool_if:NT \l_graphics_interpolate_bool + { /Interpolate~true } + } + } + \int_compare:nNnT \l_graphics_page_int > 0 + { page ~ \int_use:N \l_graphics_page_int } + \tl_if_empty:NF \l_graphics_pagebox_tl + { \l_graphics_pagebox_tl } + {#1} + \hbox_set:Nn \l_@@_internal_box + { \tex_pdfrefximage:D \tex_pdflastximage:D } + \dim_set:Nn \l_graphics_urx_dim { \box_wd:N \l_@@_internal_box } + \dim_set:Nn \l_graphics_ury_dim { \box_ht:N \l_@@_internal_box } + \int_const:cn { c_@@_graphics_ #1 \l_@@_graphics_attr_tl _int } + { \tex_the:D \tex_pdflastximage:D } + \graphics_bb_save:x { #1 \l_@@_graphics_attr_tl } + } +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macro} +% { +% \driver_graphics_include_jpg:n, +% \driver_graphics_include_pdf:n, +% \driver_graphics_include_png:n +% } +% Images are already loaded for the measurement part of the code, so +% inclusion is straight-forward, with only any attributes to worry about. The +% latter carry through from determination of the bounding box. +% \begin{macrocode} +\cs_new_protected:Npn \driver_graphics_include_jpg:n #1 + { + \tex_pdfrefximage:D + \int_use:c { c_@@_graphics_ #1 \l_@@_graphics_attr_tl _int } + } +\cs_new_eq:NN \driver_graphics_include_pdf:n \driver_graphics_include_jpg:n +\cs_new_eq:NN \driver_graphics_include_png:n \driver_graphics_include_jpg:n +% \end{macrocode} +% \end{macro} +% +% \begin{macrocode} +%</pdfmode> +% \end{macrocode} +% +% \subsection{\texttt{dvipdfmx} driver} +% +% \begin{macrocode} +%<*dvipdfmx|xdvipdfmx> +% \end{macrocode} +% +% \begin{macro} +% { +% \driver_graphics_getbb_eps:n, \driver_graphics_getbb_jpg:n, +% \driver_graphics_getbb_pdf:n, \driver_graphics_getbb_png:n +% } +% Simply use the generic functions: only for \texttt{dvipdfmx} in the +% extraction cases. +% \begin{macrocode} +%<*initex> +\use:n +%</initex> +%<*package> +\AtBeginDocument +%</package> + { \cs_new_eq:NN \driver_graphics_getbb_eps:n \graphics_read_bb:n } +%<*dvipdfmx> +\cs_new_protected:Npn \driver_graphics_getbb_jpg:n #1 + { + \int_zero:N \l_graphics_page_int + \tl_clear:N \l_graphics_pagebox_tl + \graphics_extract_bb:n {#1} + } +\cs_new_eq:NN \driver_graphics_getbb_png:n \driver_graphics_getbb_jpg:n +\cs_new_protected:Npn \driver_graphics_getbb_pdf:n #1 + { + \tl_clear:N \l_graphics_decodearray_tl + \bool_set_false:N \l_graphics_interpolate_bool + \graphics_extract_bb:n {#1} + } +%</dvipdfmx> +% \end{macrocode} +% \end{macro} +% +% \begin{variable}{\g_@@_graphics_int} +% Used to track the object number associated with each image. +% \begin{macrocode} +\int_new:N \g_@@_graphics_int +% \end{macrocode} +% \end{variable} +% +% \begin{macro} +% { +% \driver_graphics_include_eps:n, \driver_graphics_include_jpg:n, +% \driver_graphics_include_pdf:n, \driver_graphics_include_png:n +% } +% \begin{macro}{\@@_graphics_include_auxi:nn} +% \begin{macro}{\@@_graphics_include_auxii:nnn, \@@_graphics_include_auxii:xnn} +% \begin{macro}{\@@_graphics_include_auxiii:nnn} +% The special syntax depends on the file type. There is a difference in +% how PDF images are best handled between |dvipdfmx| and |xdvipdfmx|: for +% the latter it is better to use the primitive route. The relevant code for +% that is included later in this file. +% \begin{macrocode} +\cs_new_protected:Npn \driver_graphics_include_eps:n #1 + { + \@@_literal:x + { + PSfile = #1 \c_space_tl + llx = \dim_to_decimal_in_bp:n \l_graphics_llx_dim \c_space_tl + lly = \dim_to_decimal_in_bp:n \l_graphics_lly_dim \c_space_tl + urx = \dim_to_decimal_in_bp:n \l_graphics_urx_dim \c_space_tl + ury = \dim_to_decimal_in_bp:n \l_graphics_ury_dim + } + } +\cs_new_protected:Npn \driver_graphics_include_jpg:n #1 + { \@@_graphics_include_auxi:nn {#1} { image } } +\cs_new_eq:NN \driver_graphics_include_png:n \driver_graphics_include_jpg:n +%<*dvipdfmx> +\cs_new_protected:Npn \driver_graphics_include_pdf:n #1 + { \@@_graphics_include_auxi:nn {#1} { epdf } } +%</dvipdfmx> +% \end{macrocode} +% Image inclusion is set up to use the fact that each image is stored in +% the PDF as an XObject. This means that we can include repeated images +% only once and refer to them. To allow that, track the nature of each +% image: much the same as for the direct PDF mode case. +% \begin{macrocode} +\cs_new_protected:Npn \@@_graphics_include_auxi:nn #1#2 + { + \@@_graphics_include_auxii:xnn + { + \tl_if_empty:NF \l_graphics_pagebox_tl + { : \l_graphics_pagebox_tl } + \int_compare:nNnT \l_graphics_page_int > 1 + { :P \int_use:N \l_graphics_page_int } + \tl_if_empty:NF \l_graphics_decodearray_tl + { :D \l_graphics_decodearray_tl } + \bool_if:NT \l_graphics_interpolate_bool + { :I } + } + {#1} {#2} + } +\cs_new_protected:Npn \@@_graphics_include_auxii:nnn #1#2#3 + { + \int_if_exist:cTF { c_@@_graphics_ #2#1 _int } + { + \@@_literal:x + { pdf:usexobj~@image \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, +% it is necessary to provide both that information and the |bbox| argument: +% odd things happen otherwise! +% \begin{macrocode} +\cs_new_protected:Npn \@@_graphics_include_auxiii:nnn #1#2#3 + { + \int_gincr:N \g_@@_graphics_int + \int_const:cn { c_@@_graphics_ #1#2 _int } { \g_@@_graphics_int } + \@@_literal:x + { + pdf:#3~ + @image \int_use:c { c_@@_graphics_ #1#2 _int } ~ + \int_compare:nNnT \l_graphics_page_int > 1 + { page ~ \int_use:N \l_graphics_page_int \c_space_tl } + \tl_if_empty:NF \l_graphics_pagebox_tl + { + pagebox ~ \l_graphics_pagebox_tl \c_space_tl + bbox ~ + \dim_to_decimal_in_bp:n \l_graphics_llx_dim \c_space_tl + \dim_to_decimal_in_bp:n \l_graphics_lly_dim \c_space_tl + \dim_to_decimal_in_bp:n \l_graphics_urx_dim \c_space_tl + \dim_to_decimal_in_bp:n \l_graphics_ury_dim \c_space_tl + } + (#1) + \bool_lazy_or:nnT + { \l_graphics_interpolate_bool } + { ! \tl_if_empty_p:N \l_graphics_decodearray_tl } + { + << + \tl_if_empty:NF \l_graphics_decodearray_tl + { /Decode~[ \l_graphics_decodearray_tl ] } + \bool_if:NT \l_graphics_interpolate_bool + { /Interpolate~true> } + >> + } + } + } +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macrocode} +%</dvipdfmx|xdvipdfmx> +% \end{macrocode} +% +% \subsection{\texttt{xdvipdfmx} driver} +% +% \begin{macrocode} +%<*xdvipdfmx> +% \end{macrocode} +% +% \subsubsection{Images} +% +% \begin{macro} +% { +% \driver_graphics_getbb_jpg:n, +% \driver_graphics_getbb_pdf:n, +% \driver_graphics_getbb_png:n +% } +% \begin{macro}{\@@_graphics_getbb_auxi:nN} +% \begin{macro}{\@@_graphics_getbb_auxii:nnN, \@@_graphics_getbb_auxii:VnN} +% \begin{macro}{\@@_graphics_getbb_auxiii:nNnn} +% \begin{macro}{\@@_graphics_getbb_auxiv:nnNnn, \@@_graphics_getbb_auxiv:VnNnn} +% \begin{macro}{\@@_graphics_getbb_auxv:nNnn, \@@_graphics_getbb_auxv:nNnn} +% \begin{macro}[EXP]{\@@_graphics_getbb_pagebox:w} +% For \texttt{xdvipdfmx}, there are two primitives that allow us to obtain +% the bounding box without needing \texttt{extractbb}. The only complexity +% is passing the various minor variations to a common core process. The +% \XeTeX{} primitive omits the text |box| from the page box specification, +% so there is also some \enquote{trimming} to do here. +% \begin{macrocode} +\cs_new_protected:Npn \driver_graphics_getbb_jpg:n #1 + { + \int_zero:N \l_graphics_page_int + \tl_clear:N \l_graphics_pagebox_tl + \@@_graphics_getbb_auxi:nN {#1} \tex_XeTeXpicfile:D + } +\cs_new_eq:NN \driver_graphics_getbb_png:n \driver_graphics_getbb_jpg:n +\cs_new_protected:Npn \driver_graphics_getbb_pdf:n #1 + { + \tl_clear:N \l_graphics_decodearray_tl + \bool_set_false:N \l_graphics_interpolate_bool + \@@_graphics_getbb_auxi:nN {#1} \tex_XeTeXpdffile:D + } +\cs_new_protected:Npn \@@_graphics_getbb_auxi:nN #1#2 + { + \int_compare:nNnTF \l_graphics_page_int > 1 + { \@@_graphics_getbb_auxii:VnN \l_graphics_page_int {#1} #2 } + { \@@_graphics_getbb_auxiii:nNnn {#1} #2 { :P 1 } { page 1 } } + } +\cs_new_protected:Npn \@@_graphics_getbb_auxii:nnN #1#2#3 + { \@@_graphics_getbb_auxiii:nNnn {#2} #3 { :P #1 } { page #1 } } +\cs_generate_variant:Nn \@@_graphics_getbb_auxii:nnN { V } +\cs_new_protected:Npn \@@_graphics_getbb_auxiii:nNnn #1#2#3#4 + { + \tl_if_empty:NTF \l_graphics_pagebox_tl + { \@@_graphics_getbb_auxiv:VnNnn \l_graphics_pagebox_tl } + { \@@_graphics_getbb_auxv:nNnn } + {#1} #2 {#3} {#4} + } +\cs_new_protected:Npn \@@_graphics_getbb_auxiv:nnNnn #1#2#3#4#5 + { + \use:x + { + \@@_graphics_getbb_auxv:nNnn {#2} #3 { : #1 #4 } + { #5 ~ \@@_graphics_getbb_pagebox:w #1 } + } + } +\cs_generate_variant:Nn \@@_graphics_getbb_auxiv:nnNnn { V } +\cs_new_protected:Npn \@@_graphics_getbb_auxv:nNnn #1#2#3#4 + { + \graphics_bb_restore:nF {#1#3} + { \@@_graphics_getbb_auxvi:nNnn {#1} #2 {#3} {#4} } + } +\cs_new_protected:Npn \@@_graphics_getbb_auxvi:nNnn #1#2#3#4 + { + \hbox_set:Nn \l_@@_internal_box { #2 #1 ~ #4 } + \dim_set:Nn \l_graphics_urx_dim { \box_wd:N \l_@@_internal_box } + \dim_set:Nn \l_graphics_ury_dim { \box_ht:N \l_@@_internal_box } + \graphics_bb_save:n {#1#3} + } +\cs_new:Npn \@@_graphics_getbb_pagebox:w #1 box {#1} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% +% \begin{macro}{\driver_graphics_include_pdf:n} +% \begin{macro}{\@@_graphics_include_bitmap_quote:w} +% For PDF images, 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 +% stage that there must be some valid setting for \cs{l_graphics_pagebox_tl}. +% \begin{macrocode} +\cs_new_protected:Npn \driver_graphics_include_pdf:n #1 + { + \tex_XeTeXpdffile:D + \@@_graphics_include_pdf_quote:w #1 "#1" \q_stop \c_space_tl + \int_compare:nNnT \l_graphics_page_int > 0 + { page ~ \int_use:N \l_graphics_page_int \c_space_tl } + \exp_after:wN \@@_graphics_getbb_pagebox:w \l_graphics_pagebox_tl + } +\cs_new:Npn \@@_graphics_include_pdf_quote:w #1 " #2 " #3 \q_stop + { " #2 " } +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macrocode} +%</xdvipdfmx> +% \end{macrocode} +% +% \subsection{\texttt{dvisvgm} driver} +% +% \begin{macrocode} +%<*dvisvgm> +% \end{macrocode} +% +% \begin{macro}{\driver_graphics_getbb_png:n, \driver_graphics_getbb_jpg:n} +% These can be included by extracting the bounding box data. +% \begin{macrocode} +%<*initex> +\use:n +%</initex> +%<*package> +\AtBeginDocument +%</package> + { + \cs_new_eq:NN \driver_graphics_getbb_png:n \graphics_extract_bb:n + \cs_new_eq:NN \driver_graphics_getbb_jpg:n \graphics_extract_bb:n + } +% \end{macrocode} +% \end{macro} +% +% \begin{macro}{\driver_graphics_include_png:n, \driver_graphics_include_jpg:n} +% \begin{macro}{\@@_graphics_include_bitmap_quote:w} +% The driver here has built-in support for basic image 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 +% that |#1| must be quote-corrected. The \texttt{dvisvgm:img} operation +% quotes the file name, but if it is already quoted (contains spaces) +% then we have an issue: we simply strip off any quotes as a result. +% \begin{macrocode} +\cs_new_protected:Npn \driver_graphics_include_png:n #1 + { + \@@_literal:x + { + dvisvgm:img~ + \dim_to_decimal:n { \l_graphics_ury_dim } ~ + \dim_to_decimal:n { \l_graphics_ury_dim } ~ + \@@_graphics_include_bitmap_quote:w #1 " #1 " \q_stop + } + } +\cs_new_eq:NN \driver_graphics_include_jpg:n \driver_graphics_include_png:n +\cs_new:Npn \@@_graphics_include_bitmap_quote:w #1 " #2 " #3 \q_stop + { " #2 " } +% \end{macrocode} +% \end{macro} +% \end{macro} +% +% \begin{macrocode} +%</dvisvgm> +% \end{macrocode} +% +% \begin{macrocode} +%</initex|package> +% \end{macrocode} +% +% \end{implementation} +% +% \PrintIndex diff --git a/Master/texmf-dist/source/latex/l3kernel/l3drivers-image.dtx b/Master/texmf-dist/source/latex/l3kernel/l3drivers-image.dtx deleted file mode 100644 index f8f88d28bd6..00000000000 --- a/Master/texmf-dist/source/latex/l3kernel/l3drivers-image.dtx +++ /dev/null @@ -1,504 +0,0 @@ -% \iffalse meta-comment -% -%% File: l3drivers-image.dtx -% -% Copyright (C) 2011-2019 The LaTeX3 Project -% -% It may be distributed and/or modified under the conditions of the -% LaTeX Project Public License (LPPL), either version 1.3c of this -% license or (at your option) any later version. The latest version -% of this license is in the file -% -% https://www.latex-project.org/lppl.txt -% -% This file is part of the "l3kernel bundle" (The Work in LPPL) -% and all files in that bundle must be distributed together. -% -% ----------------------------------------------------------------------- -% -% The development version of the bundle can be found at -% -% https://github.com/latex3/latex3 -% -% for those people who are interested. -% -%<*driver> -\documentclass[full,kernel]{l3doc} -\begin{document} - \DocInput{\jobname.dtx} -\end{document} -%</driver> -% \fi -% -% \title{^^A -% The \textsf{l3drivers-image} package\\ Driver image 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-07} -% -% \maketitle -% -% \begin{documentation} -% -% \end{documentation} -% -% \begin{implementation} -% -% \section{\pkg{l3drivers-image} Implementation} -% -% \begin{macrocode} -%<*initex|package> -%<@@=driver> -% \end{macrocode} -% -% \subsection{\texttt{dvips} driver} -% -% \begin{macrocode} -%<*dvips> -% \end{macrocode} -% -% \begin{macro}{\@@_image_getbb_eps:n} -% Simply use the generic function. -% \begin{macrocode} -\cs_new_eq:NN \@@_image_getbb_eps:n \image_read_bb:n -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_image_include_eps:n} -% The special syntax is relatively clear here: remember we need PostScript -% sizes here. -% \begin{macrocode} -\cs_new_protected:Npn \@@_image_include_eps:n #1 - { \@@_literal:n { PSfile = #1 } } -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -%</dvips> -% \end{macrocode} -% -% \subsection{\texttt{pdfmode} driver} -% -% \begin{macrocode} -%<*pdfmode> -% \end{macrocode} -% -% \begin{variable}{\l_@@_image_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 -% the bounding box operation. As such, it is easier to track additional -% attributes using a dedicated |tl| rather than build up the same data -% twice. -% \begin{macrocode} -\tl_new:N \l_@@_image_attr_tl -% \end{macrocode} -% \end{variable} -% -% \begin{macro} -% {\@@_image_getbb_jpg:n, \@@_image_getbb_pdf:n, \@@_image_getbb_png:n} -% \begin{macro} -% {\@@_image_getbb_auxi:n, \@@_image_getbb_auxii:n} -% Getting the bounding box here requires us to box up the image 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 -% to do in terms of auxiliaries. The key here is to notice that we need -% two forms of the attributes: a \enquote{short} set to allow us to -% track for caching, and the full form to pass to the primitive. -% \begin{macrocode} -\cs_new_protected:Npn \@@_image_getbb_jpg:n #1 - { - \int_zero:N \l_image_page_int - \tl_clear:N \l_image_pagebox_tl - \tl_set:Nx \l_@@_image_attr_tl - { - \tl_if_empty:NF \l_image_decode_tl - { :D \l_image_decodearray_tl } - \bool_if:NT \l_image_interpolate_bool - { :I } - } - \tl_clear:N \l_@@_image_attr_tl - \@@_image_getbb_auxi:n {#1} - } -\cs_new_eq:NN \@@_image_getbb_png:n \@@_image_getbb_jpg:n -\cs_new_protected:Npn \@@_image_getbb_pdf:n #1 - { - \tl_clear:N \l_image_decode_tl - \bool_set_false:N \l_image_interpolate_bool - \tl_set:Nx \l_@@_image_attr_tl - { - : \l_image_pagebox_tl - \int_compare:nNnT \l_image_page_int > 1 - { :P \int_use:N \l_image_page_int } - } - \@@_image_getbb_auxi:n {#1} - } -\cs_new_protected:Npn \@@_image_getbb_auxi:n #1 - { - \image_bb_restore:xF { #1 \l_@@_image_attr_tl } - { \@@_image_getbb_auxii:n {#1} } - } -% \begin{macrocode} -% Measuring the image is done by boxing up: for PDF images we could -% use |\tex_pdfximagebbox:D|, but if doesn't work for other types. -% As the box always starts at $(0,0)$ there is no need to worry about -% the lower-left position. -% \begin{macrocode} -\cs_new_protected:Npn \@@_image_getbb_auxii:n #1 - { - \tex_immediate:D \tex_pdfximage:D - \bool_lazy_or:nnT - { \l_image_interpolate_bool } - { ! \tl_if_empty_p:N \l_image_decodearray_tl } - { - attr ~ - { - \tl_if_empty:NF \l_image_decode_tl - { /Decode~[ \l_image_decodearray_tl ] } - \bool_if:NT \l_image_interpolate_bool - { /Interpolate~true } - } - } - \int_compare:nNnT \l_image_page_int > 0 - { page ~ \int_use:N \l_image_page_int } - \tl_if_empty:NF \l_image_pagebox_tl - { \l_image_pagebox_tl } - {#1} - \hbox_set:Nn \l_@@_tmp_box - { \tex_pdfrefximage:D \tex_pdflastximage:D } - \dim_set:Nn \l_image_urx_dim { \box_wd:N \l_@@_tmp_box } - \dim_set:Nn \l_image_ury_dim { \box_ht:N \l_@@_tmp_box } - \int_const:cn { c_@@_image_ #1 \l_@@_image_attr_tl _int } - { \tex_the:D \tex_pdflastximage:D } - \image_bb_save:x { #1 \l_@@_image_attr_tl } - } -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macro} -% {\@@_image_include_jpg:n, \@@_image_include_pdf:n, \@@_image_include_png:n} -% Images are already loaded for the measurement part of the code, so -% inclusion is straight-forward, with only any attributes to worry about. The -% latter carry through from determination of the bounding box. -% \begin{macrocode} -\cs_new_protected:Npn \@@_image_include_jpg:n #1 - { - \tex_pdfrefximage:D - \int_use:c { c_@@_image_ #1 \l_@@_image_attr_tl _int } - } -\cs_new_eq:NN \@@_image_include_pdf:n \@@_image_include_jpg:n -\cs_new_eq:NN \@@_image_include_png:n \@@_image_include_jpg:n -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -%</pdfmode> -% \end{macrocode} -% -% \subsection{\texttt{dvipdfmx} driver} -% -% \begin{macrocode} -%<*dvipdfmx|xdvipdfmx> -% \end{macrocode} -% -% \begin{macro} -% { -% \@@_image_getbb_eps:n, \@@_image_getbb_jpg:n, -% \@@_image_getbb_pdf:n, \@@_image_getbb_png:n -% } -% Simply use the generic functions: only for \texttt{dvipdfmx} in the -% extraction cases. -% \begin{macrocode} -\cs_new_eq:NN \@@_image_getbb_eps:n \image_read_bb:n -%<*dvipdfmx> -\cs_new_protected:Npn \@@_image_getbb_jpg:n #1 - { - \int_zero:N \l_image_page_int - \tl_clear:N \l_image_pagebox_tl - \image_extract_bb:n {#1} - } -\cs_new_eq:NN \@@_image_getbb_png:n \@@_image_getbb_jpg:n -\cs_new_protected:Npn \@@_image_getbb_pdf:n #1 - { - \tl_clear:N \l_image_decode_tl - \bool_set_false:N \l_image_interpolate_bool - \image_extract_bb:n {#1} - } -%</dvipdfmx> -% \end{macrocode} -% \end{macro} -% -% \begin{variable}{\g_@@_image_int} -% Used to track the object number associated with each image. -% \begin{macrocode} -\int_new:N \g_@@_image_int -% \end{macrocode} -% \end{variable} -% -% \begin{macro} -% { -% \@@_image_include_eps:n, \@@_image_include_jpg:n, -% \@@_image_include_pdf:n, \@@_image_include_png:n -% } -% \begin{macro}{\@@_image_include_auxi:nn} -% \begin{macro}{\@@_image_include_auxii:nnn, \@@_image_include_auxii:xnn} -% \begin{macro}{\@@_image_include_auxiii:nn} -% The special syntax depends on the file type. There is a difference in -% how PDF images are best handled between |dvipdfmx| and |xdvipdfmx|: for -% the latter it is better to use the primitive route. The relevant code for -% that is included later in this file. -% \begin{macrocode} -\cs_new_protected:Npn \@@_image_include_eps:n #1 - { - \@@_literal:n { PSfile = #1 } - } -\cs_new_protected:Npn \@@_image_include_jpg:n #1 - { \@@_image_include_auxi:nn {#1} { image } } -\cs_new_eq:NN \@@_image_include_png:n \@@_image_include_jpg:n -%<*dvipdfmx> -\cs_new_protected:Npn \@@_image_include_pdf:n #1 - { \@@_image_include_auxi:nn {#1} { epdf } } -%</dvipdfmx> -% \end{macrocode} -% Image inclusion is set up to use the fact that each image is stored in -% the PDF as an XObject. This means that we can include repeated images -% only once and refer to them. To allow that, track the nature of each -% image: much the same as for the direct PDF mode case. -% \begin{macrocode} -\cs_new_protected:Npn \@@_image_include_auxi:nn #1#2 - { - \@@_image_include_auxii:xnn - { - \tl_if_empty:NF \l_image_pagebox_tl - { : \l_image_pagebox_tl } - \int_compare:nNnT \l_image_page_int > 1 - { :P \int_use:N \l_image_page_int } - \tl_if_empty:NF \l_image_decode_tl - { :D \l_image_decodearray_tl } - \bool_if:NT \l_image_interpolate_bool - { :I } - } - {#1} {#2} - } -\cs_new_protected:Npn \@@_image_include_auxii:nnn #1#2#3 - { - \int_if_exist:cTF { c_@@_image_ #2#1 _int } - { - \@@_literal:x - { pdf:usexobj~@image \int_use:c { c_@@_image_ #2#1 _int } } - } - { \@@_image_include_auxiii:nn {#2} {#1} {#3} } - } -\cs_generate_variant:Nn \@@_image_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, -% it is necessary to provide both that information and the |bbox| argument: -% odd things happen otherwise! -% \begin{macrocode} -\cs_new_protected:Npn \@@_image_include_auxiii:nnn #1#2#3 - { - \int_gincr:N \g_@@_image_int - \int_const:cn { c_@@_image_ #1#2 _int } { \g_@@_image_int } - \@@_literal:x - { - pdf:#3~ - @image \int_use:c { c_@@_image_ #1#2 _int } - \int_compare:nNnT \l_image_page_int > 1 - { page ~ \int_use:N \l_image_page_int \c_space_tl } - \tl_if_empty:NF \l_image_pagebox_tl - { - pagebox ~ \l_image_pagebox_tl \c_space_tl - bbox ~ - \dim_to_decimal_in_bp:n \l_image_llx_dim \c_space_tl - \dim_to_decimal_in_bp:n \l_image_lly_dim \c_space_tl - \dim_to_decimal_in_bp:n \l_image_urx_dim \c_space_tl - \dim_to_decimal_in_bp:n \l_image_ury_dim \c_space_tl - } - (#1) - \bool_lazy_or:nnT - { \l_image_interpolate_bool } - { ! \tl_if_empty_p:N \l_image_decodearray_tl } - { - << - \tl_if_empty:NF \l_image_decode_tl - { /Decode~[ \l_image_decodearray_tl ] } - \bool_if:NT \l_image_interpolate_bool - { /Interpolate~true> } - >> - } - } - } -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macrocode} -%</dvipdfmx|xdvipdfmx> -% \end{macrocode} -% -% \subsection{\texttt{xdvipdfmx} driver} -% -% \begin{macrocode} -%<*xdvipdfmx> -% \end{macrocode} -% -% \subsubsection{Images} -% -% \begin{macro} -% {\@@_image_getbb_jpg:n, \@@_image_getbb_pdf:n, \@@_image_getbb_png:n} -% \begin{macro}{\@@_image_getbb_auxi:nN} -% \begin{macro}{\@@_image_getbb_auxii:nnN, \@@_image_getbb_auxii:VnN} -% \begin{macro}{\@@_image_getbb_auxiii:nNnn} -% \begin{macro}{\@@_image_getbb_auxiv:nnNnn, \@@_image_getbb_auxiv:VnNnn} -% \begin{macro}{\@@_image_getbb_auxv:nNnn, \@@_image_getbb_auxv:nNnn} -% \begin{macro}[EXP]{\@@_image_getbb_pagebox:w} -% For \texttt{xdvipdfmx}, there are two primitives that allow us to obtain -% the bounding box without needing \texttt{extractbb}. The only complexity -% is passing the various minor variations to a common core process. The -% \XeTeX{} primitive omits the text |box| from the page box specification, -% so there is also some \enquote{trimming} to do here. -% \begin{macrocode} -\cs_new_protected:Npn \@@_image_getbb_jpg:n #1 - { - \int_zero:N \l_image_page_int - \tl_clear:N \l_image_pagebox_tl - \@@_image_getbb_auxi:nN {#1} \tex_XeTeXpicfile:D - } -\cs_new_eq:NN \@@_image_getbb_png:n \@@_image_getbb_jpg:n -\cs_new_protected:Npn \@@_image_getbb_pdf:n #1 - { - \tl_clear:N \l_image_decode_tl - \bool_set_false:N \l_image_interpolate_bool - \@@_image_getbb_auxi:nN {#1} \tex_XeTeXpdffile:D - } -\cs_new_protected:Npn \@@_image_getbb_auxi:nN #1#2 - { - \int_compare:nNnTF \l_image_page_int > 1 - { \@@_image_getbb_auxii:VnN \l_image_page_int {#1} #2 } - { \@@_image_getbb_auxiii:nNnn {#1} #2 } - } -\cs_new_protected:Npn \@@_image_getbb_auxii:nnN #1#2#3 - { \@@_image_getbb_aux:nNnn {#2} #3 { :P #1 } { page #1 } } -\cs_generate_variant:Nn \@@_image_getbb_auxii:nnN { V } -\cs_new_protected:Npn \@@_image_getbb_auxiii:nNnn #1#2#3#4 - { - \tl_if_empty:NTF \l_image_pagebox_tl - { \@@_image_getbb_auxiv:VnNnn \l_image_pagebox_tl } - { \@@_image_getbb_auxv:nNnn } - {#1} #2 {#3} {#4} - } -\cs_new_protected:Npn \@@_image_getbb_auxiv:nnNnn #1#2#3#4#5 - { - \use:x - { - \@@_image_getbb_auxv:nNnn {#2} #3 { : #1 #4 } - { #5 ~ \@@_image_getbb_pagebox:w #1 } - } - } -\cs_generate_variant:Nn \@@_image_getbb_auxiv:nnNnn { V } -\cs_new_protected:Npn \@@_image_getbb_auxv:nNnn #1#2#3#4 - { - \image_bb_restore:nF {#1#3} - { \@@_image_getbb_auxvi:nNnn {#1} #2 {#3} {#4} } - } -\cs_new_protected:Npn \@@_image_getbb_auxvi:nNnn #1#2#3#4 - { - \hbox_set:Nn \l_@@_tmp_box { #2 #1 ~ #4 } - \dim_set:Nn \l_image_utx_dim { \box_wd:N \l_@@_tmp_box } - \dim_set:Nn \l_image_ury_dim { \box_ht:N \l_@@_tmp_box } - \image_bb_save:n {#1#3} - } -\cs_new:Npn \@@_image_getbb_pagebox:w #1 box {#1} -% \end{macrocode} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% \end{macro} -% -% \begin{macro}{\@@_image_include_pdf:n} -% For PDF images, 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 -% stage that there must be some valid setting for \cs{l_image_pagebox_tl}. -% \begin{macrocode} -\cs_new_protected:Npn \@@_image_include_pdf:n #1 - { - \tex_XeTeXpdffile:D "#1" ~ - \int_compare:nNnT \l_image_page_int > 0 - { page~ \int_use:N \l_image_page_int } - \@@_image_getbb_auxiv:VnNnn \l_image_pagebox_tl - } -% \end{macrocode} -% \end{macro} -% -% \begin{macrocode} -%</xdvipdfmx> -% \end{macrocode} -% -% \subsection{\texttt{dvisvgm} driver} -% -% \begin{macrocode} -%<*dvisvgm> -% \end{macrocode} -% -% \begin{macro}{\@@_image_getbb_png:n, \@@_image_getbb_jpg:n} -% These can be included by extracting the bounding box data. -% \begin{macrocode} -\cs_new_eq:NN \@@_image_getbb_png:n \image_extract_bb:n -\cs_new_eq:NN \@@_image_getbb_jpg:n \image_extract_bb:n -% \end{macrocode} -% \end{macro} -% -% \begin{macro}{\@@_image_include_png:n, \@@_image_include_jpg:n} -% \begin{macro}{\@@_image_include_bitmap_quote:w} -% The driver here has built-in support for basic image 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 -% that |#1| must be quote-corrected. The \texttt{dvisvgm:img} operation -% quotes the file name, but if it is already quoted (contains spaces) -% then we have an issue: we simply strip off any quotes as a result. -% \begin{macrocode} -\cs_new_protected:Npn \@@_image_include_png:n #1 - { - \@@_literal:x - { - dvisvgm:img~ - \dim_to_decimal:n { \l_image_ury_dim } ~ - \dim_to_decimal:n { \l_image_ury_dim } ~ - \@@_image_include_bitmap_quote:w #1 " #1 " \q_stop - } - } -\cs_new_eq:NN \@@_image_include_jpg:n \@@_image_include_png:n -\cs_new:Npn \@@_image_include_bitmap_quote:w #1 " #2 " #3 \q_stop - { " #2 " } -% \end{macrocode} -% \end{macro} -% \end{macro} -% -% \begin{macrocode} -%</dvisvgm> -% \end{macrocode} -% -% \begin{macrocode} -%</initex|package> -% \end{macrocode} -% -% \end{implementation} -% -% \PrintIndex diff --git a/Master/texmf-dist/source/latex/l3kernel/l3drivers-pdf.dtx b/Master/texmf-dist/source/latex/l3kernel/l3drivers-pdf.dtx index 66fa57597e4..50215d5bf8f 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-07} +% \date{Released 2019-05-09} % % \maketitle % @@ -71,13 +71,6 @@ % A very small number of items that belong at the driver level but which % are common to all drivers. % -% \begin{variable}{\l_@@_pdf_tmp_box} -% For fitting destinations. -% \begin{macrocode} -\box_new:N \l_@@_pdf_tmp_box -% \end{macrocode} -% \end{variable} -% % \subsection{\texttt{dvips} driver} % % \begin{macrocode} @@ -1159,13 +1152,13 @@ \cs_new_protected:Npn \driver_pdf_destination_rectangle:nn #1#2 { \group_begin: - \hbox_set:Nn \l_@@_pdf_tmp_box {#2} + \hbox_set:Nn \l_@@_internal_box {#2} \box_move_down:nn - { \box_dp:N \l_@@_pdf_tmp_box } + { \box_dp:N \l_@@_internal_box } { \hbox:n { \@@_postscript:n { driver.save.ll } } } - \box_use:N \l_@@_pdf_tmp_box + \box_use:N \l_@@_internal_box \box_move_up:nn - { \box_ht:N \l_@@_pdf_tmp_box } + { \box_ht:N \l_@@_internal_box } { \hbox:n { \@@_postscript:n { driver.save.ur } } } \@@_pdfmark:n { @@ -1338,16 +1331,16 @@ \cs_new_protected:Npx \driver_pdf_destination_rectangle:nn #1#2 { \group_begin: - \hbox_set:Nn \l_@@_pdf_tmp_box {#2} + \hbox_set:Nn \l_@@_internal_box {#2} \cs_if_exist:NTF \tex_pdfextension:D { \exp_not:N \tex_pdfextension:D dest ~ } { \exp_not:N \tex_pdfdest:D } name {#1} fitr ~ - width \exp_not:N \box_wd:N \l_@@_pdf_tmp_box - height \exp_not:N \box_ht:N \l_@@_pdf_tmp_box - depth \exp_not:N \box_dp:N \l_@@_pdf_tmp_box - \box_use:N \l_@@_pdf_tmp_box + width \exp_not:N \box_wd:N \l_@@_internal_box + height \exp_not:N \box_ht:N \l_@@_internal_box + depth \exp_not:N \box_dp:N \l_@@_internal_box + \box_use:N \l_@@_internal_box \group_end: } % \end{macrocode} @@ -1797,8 +1790,8 @@ \cs_new_protected:Npn \driver_pdf_destination_rectangle:nn #1#2 { \group_begin: - \hbox_set:Nn \l_@@_pdf_tmp_box {#2} - \box_move_down:nn { \box_dp:N \l_@@_pdf_tmp_box } + \hbox_set:Nn \l_@@_internal_box {#2} + \box_move_down:nn { \box_dp:N \l_@@_internal_box } { \hbox:n { @@ -1806,8 +1799,8 @@ \@@_pdf:n { obj ~ @driver_#1_lly ~ @ypos } } } - \box_use:N \l_@@_pdf_tmp_box - \box_move_up:nn { \box_ht:N \l_@@_pdf_tmp_box } + \box_use:N \l_@@_internal_box + \box_move_up:nn { \box_ht:N \l_@@_internal_box } { \hbox:n { diff --git a/Master/texmf-dist/source/latex/l3kernel/l3drivers.dtx b/Master/texmf-dist/source/latex/l3kernel/l3drivers.dtx index 352eb9a149c..24f7ad3eb9b 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-07} +% \date{Released 2019-05-09} % % \maketitle % @@ -463,6 +463,58 @@ % given. % \end{function} % +% \section{Graphics inclusion} +% +% Graphics inclusion support is closely tied to the higher-level \pkg{l3graphics} +% module. This arises as information concerning images (\emph{e.g.}~page +% numbers in multi-page files) is needed to correct cache image data. As +% such, the driver code here assumes the following are defined +% \begin{itemize} +% \item \cs{l_image_decodearray_tl} +% \item \cs{l_image_interpolate_tl} +% \item \cs{l_image_page_tl} +% \item \cs{l_image_pagebox_tl} +% \end{itemize} +% +% Note also that the functions defined will depend on the file types supported +% by the driver. As such, a calling function should typically test for the +% existence of an appropriate function to determine if the image file is +% supported. +% +% \begin{function}[added = 2019-05-07] +% { +% \driver_graphics_getbb_eps:n, +% \driver_graphics_getbb_jpg:n, +% \driver_graphics_getbb_pdf:n, +% \driver_graphics_getbb_png:n +% } +% \begin{syntax} +% \cs{driver_graphics_getbb_pdf:n} \Arg{file} +% \end{syntax} +% These functions load the requested image \meta{file} and obtain the +% bounding box information on the file. They may also cache the image for +% subsequent inclusion: this is driver-dependent. The bounding box data +% will be stored in \cs{l_image_llx_dim}, \cs{l_image_lly_dim}, +% \cs{l_image_urx_dim}, and \cs{l_image_ury_dim} after use of these +% functions. +% \end{function} +% +% \begin{function}[added = 2019-05-07] +% { +% \driver_graphics_include_eps:n, +% \driver_graphics_include_jpg:n, +% \driver_graphics_include_pdf:n, +% \driver_graphics_include_png:n +% } +% \begin{syntax} +% \cs{driver_graphics_include_pdf:n} \Arg{file} +% \end{syntax} +% These functions include the appropriate image type at the current position. +% They should be preceded by use of the matching \texttt{getbb} function to +% set the bounding box correctly; in some drivers, the \texttt{getbb} +% function is also responsible for caching the image for later inclusion. +% \end{function} +% % \section{PDF Features} % % A range of PDF features are exposed by \pdfTeX{} and \LuaTeX{} in direct PDF diff --git a/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx b/Master/texmf-dist/source/latex/l3kernel/l3expan.dtx index 5632b927799..c4afb3010fc 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-07} +% \date{Released 2019-05-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3file.dtx b/Master/texmf-dist/source/latex/l3kernel/l3file.dtx index abbdf458c7a..d6b61507d47 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-07} +% \date{Released 2019-05-09} % % \maketitle % @@ -631,7 +631,7 @@ % \end{function} % % \begin{function}[added = 2017-06-23, updated = 2017-06-26] -% {\file_parse_full_name:nNNN} +% {\file_parse_full_name:nNNN, \file_parse_full_name:VNNN} % \begin{syntax} % \cs{file_parse_full_name:nNNN} \Arg{full name} \meta{dir} \meta{name} \meta{ext} % \end{syntax} @@ -2410,7 +2410,7 @@ \prg_return_false: } { - \exp_args:NV \file_parse_full_name:nNNN \l_@@_full_name_tl + \file_parse_full_name:VNNN \l_@@_full_name_tl \l_@@_dir_str \l_@@_name_str \l_@@_ext_str \str_if_empty:NT \l_@@_ext_str { @@ -2658,7 +2658,7 @@ % \end{macro} % \end{macro} % -% \begin{macro}{\file_parse_full_name:nNNN} +% \begin{macro}{\file_parse_full_name:nNNN, \file_parse_full_name:VNNN} % \begin{macro} % {\@@_parse_full_name_auxi:w, \@@_parse_full_name_split:nNNNTF} % Parsing starts by stripping off any surrounding quotes. Then find @@ -2677,6 +2677,7 @@ \exp_after:wN \@@_parse_full_name_auxi:w \tl_to_str:n { #1 " #1 " } \q_stop #2#3#4 } +\cs_generate_variant:Nn \file_parse_full_name:nNNN { V } \cs_new_protected:Npn \@@_parse_full_name_auxi:w #1 " #2 " #3 \q_stop #4#5#6 { diff --git a/Master/texmf-dist/source/latex/l3kernel/l3final.dtx b/Master/texmf-dist/source/latex/l3kernel/l3final.dtx index b54aa8b18b2..fe877311103 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-07} +% \date{Released 2019-05-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx b/Master/texmf-dist/source/latex/l3kernel/l3flag.dtx index 3e327adb363..d5527a62785 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-07} +% \date{Released 2019-05-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3format.ins b/Master/texmf-dist/source/latex/l3kernel/l3format.ins index facad3048b4..a0ba292e390 100644 --- a/Master/texmf-dist/source/latex/l3kernel/l3format.ins +++ b/Master/texmf-dist/source/latex/l3kernel/l3format.ins @@ -115,65 +115,65 @@ and all files in that bundle must be distributed together. { \file{l3dvipdfmx.ltx} { - \from{l3drivers.dtx} {initex,dvipdfmx} - \from{l3drivers-basics.dtx}{initex,dvipdfmx} - \from{l3drivers-color.dtx} {initex,dvipdfmx} - \from{l3drivers-box.dtx} {initex,dvipdfmx} - \from{l3drivers-draw.dtx} {initex,dvipdfmx} - \from{l3drivers-image.dtx} {initex,dvipdfmx} - \from{l3drivers-pdf.dtx} {initex,dvipdfmx} + \from{l3drivers.dtx} {initex,dvipdfmx} + \from{l3drivers-basics.dtx} {initex,dvipdfmx} + \from{l3drivers-color.dtx} {initex,dvipdfmx} + \from{l3drivers-box.dtx} {initex,dvipdfmx} + \from{l3drivers-draw.dtx} {initex,dvipdfmx} + \from{l3drivers-graphics.dtx}{initex,dvipdfmx} + \from{l3drivers-pdf.dtx} {initex,dvipdfmx} } } \generate { \file{l3dvips.ltx} { - \from{l3drivers.dtx} {initex,dvips} - \from{l3drivers-basics.dtx}{initex,dvips} - \from{l3drivers-color.dtx} {initex,dvips} - \from{l3drivers-box.dtx} {initex,dvips} - \from{l3drivers-draw.dtx} {initex,dvips} - \from{l3drivers-image.dtx} {initex,dvips} - \from{l3drivers-pdf.dtx} {initex,dvips} + \from{l3drivers.dtx} {initex,dvips} + \from{l3drivers-basics.dtx} {initex,dvips} + \from{l3drivers-color.dtx} {initex,dvips} + \from{l3drivers-box.dtx} {initex,dvips} + \from{l3drivers-draw.dtx} {initex,dvips} + \from{l3drivers-graphics.dtx}{initex,dvips} + \from{l3drivers-pdf.dtx} {initex,dvips} } } \generate { \file{l3dvisvgm.ltx} { - \from{l3drivers.dtx} {initex,dvisvgm} - \from{l3drivers-basics.dtx}{initex,dvisvgm} - \from{l3drivers-color.dtx} {initex,dvisvgm} - \from{l3drivers-box.dtx} {initex,dvisvgm} - \from{l3drivers-draw.dtx} {initex,dvisvgm} - \from{l3drivers-image.dtx} {initex,dvisvgm} - \from{l3drivers-pdf.dtx} {initex,dvisvgm} + \from{l3drivers.dtx} {initex,dvisvgm} + \from{l3drivers-basics.dtx} {initex,dvisvgm} + \from{l3drivers-color.dtx} {initex,dvisvgm} + \from{l3drivers-box.dtx} {initex,dvisvgm} + \from{l3drivers-draw.dtx} {initex,dvisvgm} + \from{l3drivers-graphics.dtx}{initex,dvisvgm} + \from{l3drivers-pdf.dtx} {initex,dvisvgm} } } \generate { \file{l3pdfmode.ltx} { - \from{l3drivers.dtx} {initex,pdfmode} - \from{l3drivers-basics.dtx}{initex,pdfmode} - \from{l3drivers-color.dtx} {initex,pdfmode} - \from{l3drivers-box.dtx} {initex,pdfmode} - \from{l3drivers-draw.dtx} {initex,pdfmode} - \from{l3drivers-image.dtx} {initex,pdfmode} - \from{l3drivers-pdf.dtx} {initex,pdfmode} + \from{l3drivers.dtx} {initex,pdfmode} + \from{l3drivers-basics.dtx} {initex,pdfmode} + \from{l3drivers-color.dtx} {initex,pdfmode} + \from{l3drivers-box.dtx} {initex,pdfmode} + \from{l3drivers-draw.dtx} {initex,pdfmode} + \from{l3drivers-graphics.dtx}{initex,pdfmode} + \from{l3drivers-pdf.dtx} {initex,pdfmode} } } \generate { \file{l3xdvipdfmx.ltx} { - \from{l3drivers.dtx} {initex,xdvipdfmx} - \from{l3drivers-basics.dtx}{initex,xdvipdfmx} - \from{l3drivers-color.dtx} {initex,xdvipdfmx} - \from{l3drivers-box.dtx} {initex,xdvipdfmx} - \from{l3drivers-draw.dtx} {initex,xdvipdfmx} - \from{l3drivers-image.dtx} {initex,xdvipdfmx} - \from{l3drivers-pdf.dtx} {initex,xdvipdfmx} + \from{l3drivers.dtx} {initex,xdvipdfmx} + \from{l3drivers-basics.dtx} {initex,xdvipdfmx} + \from{l3drivers-color.dtx} {initex,xdvipdfmx} + \from{l3drivers-box.dtx} {initex,xdvipdfmx} + \from{l3drivers-draw.dtx} {initex,xdvipdfmx} + \from{l3drivers-graphics.dtx}{initex,xdvipdfmx} + \from{l3drivers-pdf.dtx} {initex,xdvipdfmx} } } diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-assign.dtx index 8586b87bae5..1b4e5558e7d 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-07} +% \date{Released 2019-05-09} % \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 2220f1ff961..8eda1c12665 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-07} +% \date{Released 2019-05-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-basics.dtx index 959aaa767b3..c87d4fb4bc2 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-07} +% \date{Released 2019-05-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-convert.dtx index 002949473f9..8ff9a3b7c2d 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-07} +% \date{Released 2019-05-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-expo.dtx index da2fb058fa2..a87bf8b1226 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-07} +% \date{Released 2019-05-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-extended.dtx index f61a75d20e3..30113e4b8cd 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-07} +% \date{Released 2019-05-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-logic.dtx index f45dfdd9c8c..37ee7d9a3cb 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-07} +% \date{Released 2019-05-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-parse.dtx index 35fbef51a79..15227cc22ae 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-07} +% \date{Released 2019-05-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-random.dtx index d3806b650d4..5cf80f99ddb 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-07} +% \date{Released 2019-05-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-round.dtx index 5b2b3f7df19..79c83da24de 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-07} +% \date{Released 2019-05-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp-traps.dtx index d959159d249..43c579ddde7 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-07} +% \date{Released 2019-05-09} % \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 73255fc75ce..2eb21b5137b 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-07} +% \date{Released 2019-05-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fp.dtx index e1b7c97528a..1893a78c128 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-07} +% \date{Released 2019-05-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx b/Master/texmf-dist/source/latex/l3kernel/l3fparray.dtx index 5e4990ac3bc..fa6587de3f6 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-07} +% \date{Released 2019-05-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3int.dtx b/Master/texmf-dist/source/latex/l3kernel/l3int.dtx index 68cef09c400..0eaab0032d0 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-07} +% \date{Released 2019-05-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx b/Master/texmf-dist/source/latex/l3kernel/l3intarray.dtx index 2b92dd7cd22..5e07dbf968e 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-07} +% \date{Released 2019-05-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx b/Master/texmf-dist/source/latex/l3kernel/l3kernel-functions.dtx index 54a67f7190c..b543303a41d 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-07} +% \date{Released 2019-05-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx b/Master/texmf-dist/source/latex/l3kernel/l3keys.dtx index 4a5f702e881..ecb249c825d 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-07} +% \date{Released 2019-05-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx b/Master/texmf-dist/source/latex/l3kernel/l3legacy.dtx index 4042ac496da..3c32583bff1 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-07} +% \date{Released 2019-05-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx b/Master/texmf-dist/source/latex/l3kernel/l3luatex.dtx index 681ad43e66c..293d940191e 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-07} +% \date{Released 2019-05-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx b/Master/texmf-dist/source/latex/l3kernel/l3msg.dtx index 34538000c00..7a6855623b8 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-07} +% \date{Released 2019-05-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3names.dtx b/Master/texmf-dist/source/latex/l3kernel/l3names.dtx index 4b4d6b7eb99..8c9660c12b8 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-07} +% \date{Released 2019-05-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx b/Master/texmf-dist/source/latex/l3kernel/l3prg.dtx index 892be9f7aff..171da06d375 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-07} +% \date{Released 2019-05-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx b/Master/texmf-dist/source/latex/l3kernel/l3prop.dtx index 63c72312ce4..60e155eb59b 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-07} +% \date{Released 2019-05-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx b/Master/texmf-dist/source/latex/l3kernel/l3quark.dtx index 5d8d04ca19b..d5f71ff35c5 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-07} +% \date{Released 2019-05-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx b/Master/texmf-dist/source/latex/l3kernel/l3regex.dtx index a71b26efb50..e6e91a4393a 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-07} +% \date{Released 2019-05-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx b/Master/texmf-dist/source/latex/l3kernel/l3seq.dtx index 4978342acb8..5ff1628798c 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-07} +% \date{Released 2019-05-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx b/Master/texmf-dist/source/latex/l3kernel/l3skip.dtx index 6dbe67aa99f..9951df03fd2 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-07} +% \date{Released 2019-05-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx b/Master/texmf-dist/source/latex/l3kernel/l3sort.dtx index efdd156d27a..ef8921366c2 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-07} +% \date{Released 2019-05-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3str.dtx b/Master/texmf-dist/source/latex/l3kernel/l3str.dtx index dcf37ff0ca9..c1079afa4c6 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-07} +% \date{Released 2019-05-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx b/Master/texmf-dist/source/latex/l3kernel/l3sys.dtx index 1fad7d2b3fe..da6bd0b48b0 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-07} +% \date{Released 2019-05-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx b/Master/texmf-dist/source/latex/l3kernel/l3tl-analysis.dtx index 7986bb083a6..1fda8a3ad23 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-07} +% \date{Released 2019-05-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx b/Master/texmf-dist/source/latex/l3kernel/l3tl.dtx index 029ade7027e..048580b4e3d 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-07} +% \date{Released 2019-05-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3token.dtx b/Master/texmf-dist/source/latex/l3kernel/l3token.dtx index 4ef58f52567..84bed54d9c8 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-07} +% \date{Released 2019-05-09} % % \maketitle % diff --git a/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx b/Master/texmf-dist/source/latex/l3kernel/l3unicode.dtx index 37494fd319a..107ba0369ce 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-07} +% \date{Released 2019-05-09} % % \maketitle % diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex b/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex index 0bd3c4c3f10..cd2f1013847 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-07}% +\def\ExplFileDate{2019-05-09}% \begingroup \def\next{\endgroup}% \expandafter\ifx\csname PackageError\endcsname\relax @@ -11036,7 +11036,7 @@ \prg_return_false: } { - \exp_args:NV \file_parse_full_name:nNNN \l__file_full_name_tl + \file_parse_full_name:VNNN \l__file_full_name_tl \l__file_dir_str \l__file_name_str \l__file_ext_str \str_if_empty:NT \l__file_ext_str { @@ -11210,6 +11210,7 @@ \exp_after:wN \__file_parse_full_name_auxi:w \tl_to_str:n { #1 " #1 " } \q_stop #2#3#4 } +\cs_generate_variant:Nn \file_parse_full_name:nNNN { V } \cs_new_protected:Npn \__file_parse_full_name_auxi:w #1 " #2 " #3 \q_stop #4#5#6 { @@ -26453,6 +26454,27 @@ { \iow_shipout:Nn \c__sys_shell_stream_int {#1} } } \cs_generate_variant:Nn \sys_shell_shipout:n { x } +\cs_new_protected:Npn \ior_shell_open:Nn #1#2 + { + \sys_if_shell:TF + { \exp_args:No \__ior_shell_open:nN { \tl_to_str:n {#2} } #1 } + { \__kernel_msg_error:nn { kernel } { pipe-failed } } + } +\cs_new_protected:Npn \__ior_shell_open:nN #1#2 + { + \tl_if_in:nnTF {#1} { " } + { + \__kernel_msg_error:nnx + { kernel } { quote-in-shell } {#1} + } + { \__kernel_ior_open:Nn #2 { "|#1" } } + } +\__kernel_msg_new:nnnn { kernel } { 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. + } \cs_new:Npn \char_lower_case:N #1 { \__char_change_case:nNN { lower } \char_value_lccode:n #1 } \cs_new:Npn \char_upper_case:N #1 diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex b/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex index a9a82d7acf7..6d8a56abcaa 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-07}% +\def\ExplFileDate{2019-05-09}% \let\ExplLoaderFileDate\ExplFileDate \begingroup \def\tempa{LaTeX2e}% diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3.sty b/Master/texmf-dist/tex/latex/l3kernel/expl3.sty index 677f47de59d..b8aaca40a4c 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-07}% +\def\ExplFileDate{2019-05-09}% \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 bed26918ee0..3bdc8505acb 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def +++ b/Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def @@ -9,7 +9,7 @@ %% l3drivers-color.dtx (with options: `package,dvipdfmx') %% l3drivers-box.dtx (with options: `package,dvipdfmx') %% l3drivers-draw.dtx (with options: `package,dvipdfmx') -%% l3drivers-image.dtx (with options: `package,dvipdfmx') +%% l3drivers-graphics.dtx (with options: `package,dvipdfmx') %% l3drivers-pdf.dtx (with options: `package,dvipdfmx') %% %% Copyright (C) 1990-2019 The LaTeX3 Project @@ -33,6 +33,7 @@ \cs_new_protected:Npn \__driver_literal:n #1 { \__driver_literal:e { \exp_not:n {#1} } } \cs_generate_variant:Nn \__driver_literal:n { x } +\box_new:N \l__driver_internal_box \cs_new_protected:Npn \__driver_literal_pdf:n #1 { \__driver_literal:n { pdf:literal~ #1 } } \cs_generate_variant:Nn \__driver_literal_pdf:n { x } @@ -351,91 +352,98 @@ \__driver_literal:n { pdf:etrans } \__driver_scope_end: } -%% File: l3drivers-image.dtx -\cs_new_eq:NN \__driver_image_getbb_eps:n \image_read_bb:n -\cs_new_protected:Npn \__driver_image_getbb_jpg:n #1 +%% File: l3drivers-graphics.dtx +\AtBeginDocument + { \cs_new_eq:NN \driver_graphics_getbb_eps:n \graphics_read_bb:n } +\cs_new_protected:Npn \driver_graphics_getbb_jpg:n #1 { - \int_zero:N \l_image_page_int - \tl_clear:N \l_image_pagebox_tl - \image_extract_bb:n {#1} + \int_zero:N \l_graphics_page_int + \tl_clear:N \l_graphics_pagebox_tl + \graphics_extract_bb:n {#1} } -\cs_new_eq:NN \__driver_image_getbb_png:n \__driver_image_getbb_jpg:n -\cs_new_protected:Npn \__driver_image_getbb_pdf:n #1 +\cs_new_eq:NN \driver_graphics_getbb_png:n \driver_graphics_getbb_jpg:n +\cs_new_protected:Npn \driver_graphics_getbb_pdf:n #1 { - \tl_clear:N \l_image_decode_tl - \bool_set_false:N \l_image_interpolate_bool - \image_extract_bb:n {#1} + \tl_clear:N \l_graphics_decodearray_tl + \bool_set_false:N \l_graphics_interpolate_bool + \graphics_extract_bb:n {#1} } -\int_new:N \g__driver_image_int -\cs_new_protected:Npn \__driver_image_include_eps:n #1 +\int_new:N \g__driver_graphics_int +\cs_new_protected:Npn \driver_graphics_include_eps:n #1 { - \__driver_literal:n { PSfile = #1 } + \__driver_literal:x + { + PSfile = #1 \c_space_tl + llx = \dim_to_decimal_in_bp:n \l_graphics_llx_dim \c_space_tl + lly = \dim_to_decimal_in_bp:n \l_graphics_lly_dim \c_space_tl + urx = \dim_to_decimal_in_bp:n \l_graphics_urx_dim \c_space_tl + ury = \dim_to_decimal_in_bp:n \l_graphics_ury_dim + } } -\cs_new_protected:Npn \__driver_image_include_jpg:n #1 - { \__driver_image_include_auxi:nn {#1} { image } } -\cs_new_eq:NN \__driver_image_include_png:n \__driver_image_include_jpg:n -\cs_new_protected:Npn \__driver_image_include_pdf:n #1 - { \__driver_image_include_auxi:nn {#1} { epdf } } -\cs_new_protected:Npn \__driver_image_include_auxi:nn #1#2 +\cs_new_protected:Npn \driver_graphics_include_jpg:n #1 + { \__driver_graphics_include_auxi:nn {#1} { image } } +\cs_new_eq:NN \driver_graphics_include_png:n \driver_graphics_include_jpg:n +\cs_new_protected:Npn \driver_graphics_include_pdf:n #1 + { \__driver_graphics_include_auxi:nn {#1} { epdf } } +\cs_new_protected:Npn \__driver_graphics_include_auxi:nn #1#2 { - \__driver_image_include_auxii:xnn + \__driver_graphics_include_auxii:xnn { - \tl_if_empty:NF \l_image_pagebox_tl - { : \l_image_pagebox_tl } - \int_compare:nNnT \l_image_page_int > 1 - { :P \int_use:N \l_image_page_int } - \tl_if_empty:NF \l_image_decode_tl - { :D \l_image_decodearray_tl } - \bool_if:NT \l_image_interpolate_bool + \tl_if_empty:NF \l_graphics_pagebox_tl + { : \l_graphics_pagebox_tl } + \int_compare:nNnT \l_graphics_page_int > 1 + { :P \int_use:N \l_graphics_page_int } + \tl_if_empty:NF \l_graphics_decodearray_tl + { :D \l_graphics_decodearray_tl } + \bool_if:NT \l_graphics_interpolate_bool { :I } } {#1} {#2} } -\cs_new_protected:Npn \__driver_image_include_auxii:nnn #1#2#3 +\cs_new_protected:Npn \__driver_graphics_include_auxii:nnn #1#2#3 { - \int_if_exist:cTF { c__driver_image_ #2#1 _int } + \int_if_exist:cTF { c__driver_graphics_ #2#1 _int } { \__driver_literal:x - { pdf:usexobj~@image \int_use:c { c__driver_image_ #2#1 _int } } + { pdf:usexobj~@image \int_use:c { c__driver_graphics_ #2#1 _int } } } - { \__driver_image_include_auxiii:nn {#2} {#1} {#3} } + { \__driver_graphics_include_auxiii:nnn {#2} {#1} {#3} } } -\cs_generate_variant:Nn \__driver_image_include_auxii:nnn { x } -\cs_new_protected:Npn \__driver_image_include_auxiii:nnn #1#2#3 +\cs_generate_variant:Nn \__driver_graphics_include_auxii:nnn { x } +\cs_new_protected:Npn \__driver_graphics_include_auxiii:nnn #1#2#3 { - \int_gincr:N \g__driver_image_int - \int_const:cn { c__driver_image_ #1#2 _int } { \g__driver_image_int } + \int_gincr:N \g__driver_graphics_int + \int_const:cn { c__driver_graphics_ #1#2 _int } { \g__driver_graphics_int } \__driver_literal:x { pdf:#3~ - @image \int_use:c { c__driver_image_ #1#2 _int } - \int_compare:nNnT \l_image_page_int > 1 - { page ~ \int_use:N \l_image_page_int \c_space_tl } - \tl_if_empty:NF \l_image_pagebox_tl + @image \int_use:c { c__driver_graphics_ #1#2 _int } ~ + \int_compare:nNnT \l_graphics_page_int > 1 + { page ~ \int_use:N \l_graphics_page_int \c_space_tl } + \tl_if_empty:NF \l_graphics_pagebox_tl { - pagebox ~ \l_image_pagebox_tl \c_space_tl + pagebox ~ \l_graphics_pagebox_tl \c_space_tl bbox ~ - \dim_to_decimal_in_bp:n \l_image_llx_dim \c_space_tl - \dim_to_decimal_in_bp:n \l_image_lly_dim \c_space_tl - \dim_to_decimal_in_bp:n \l_image_urx_dim \c_space_tl - \dim_to_decimal_in_bp:n \l_image_ury_dim \c_space_tl + \dim_to_decimal_in_bp:n \l_graphics_llx_dim \c_space_tl + \dim_to_decimal_in_bp:n \l_graphics_lly_dim \c_space_tl + \dim_to_decimal_in_bp:n \l_graphics_urx_dim \c_space_tl + \dim_to_decimal_in_bp:n \l_graphics_ury_dim \c_space_tl } (#1) \bool_lazy_or:nnT - { \l_image_interpolate_bool } - { ! \tl_if_empty_p:N \l_image_decodearray_tl } + { \l_graphics_interpolate_bool } + { ! \tl_if_empty_p:N \l_graphics_decodearray_tl } { << - \tl_if_empty:NF \l_image_decode_tl - { /Decode~[ \l_image_decodearray_tl ] } - \bool_if:NT \l_image_interpolate_bool + \tl_if_empty:NF \l_graphics_decodearray_tl + { /Decode~[ \l_graphics_decodearray_tl ] } + \bool_if:NT \l_graphics_interpolate_bool { /Interpolate~true> } >> } } } %% File: l3drivers-pdf.dtx -\box_new:N \l__driver_pdf_tmp_box \cs_new_protected:Npx \__driver_pdf:n #1 { \__driver_literal:n { pdf: #1 } } \cs_generate_variant:Nn \__driver_pdf:n { x } @@ -575,8 +583,8 @@ \cs_new_protected:Npn \driver_pdf_destination_rectangle:nn #1#2 { \group_begin: - \hbox_set:Nn \l__driver_pdf_tmp_box {#2} - \box_move_down:nn { \box_dp:N \l__driver_pdf_tmp_box } + \hbox_set:Nn \l__driver_internal_box {#2} + \box_move_down:nn { \box_dp:N \l__driver_internal_box } { \hbox:n { @@ -584,8 +592,8 @@ \__driver_pdf:n { obj ~ @driver_#1_lly ~ @ypos } } } - \box_use:N \l__driver_pdf_tmp_box - \box_move_up:nn { \box_ht:N \l__driver_pdf_tmp_box } + \box_use:N \l__driver_internal_box + \box_move_up:nn { \box_ht:N \l__driver_internal_box } { \hbox:n { diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3dvips.def b/Master/texmf-dist/tex/latex/l3kernel/l3dvips.def index ad9d6d9adca..23675e1c0a1 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3dvips.def +++ b/Master/texmf-dist/tex/latex/l3kernel/l3dvips.def @@ -9,7 +9,7 @@ %% l3drivers-color.dtx (with options: `package,dvips') %% l3drivers-box.dtx (with options: `package,dvips') %% l3drivers-draw.dtx (with options: `package,dvips') -%% l3drivers-image.dtx (with options: `package,dvips') +%% l3drivers-graphics.dtx (with options: `package,dvips') %% l3drivers-pdf.dtx (with options: `package,dvips') %% %% Copyright (C) 1990-2019 The LaTeX3 Project @@ -33,6 +33,7 @@ \cs_new_protected:Npn \__driver_literal:n #1 { \__driver_literal:e { \exp_not:n {#1} } } \cs_generate_variant:Nn \__driver_literal:n { x } +\box_new:N \l__driver_internal_box \cs_new_protected:Npn \__driver_literal_postscript:n #1 { \__driver_literal:n { ps:: #1 } } \cs_generate_variant:Nn \__driver_literal_postscript:n { x } @@ -411,12 +412,21 @@ \__driver_draw_literal:n { [begin] } \__driver_draw_literal:n { @beginspecial } } -%% File: l3drivers-image.dtx -\cs_new_eq:NN \__driver_image_getbb_eps:n \image_read_bb:n -\cs_new_protected:Npn \__driver_image_include_eps:n #1 - { \__driver_literal:n { PSfile = #1 } } +%% File: l3drivers-graphics.dtx +\AtBeginDocument + { \cs_new_eq:NN \driver_graphics_getbb_eps:n \graphics_read_bb:n } +\cs_new_protected:Npn \driver_graphics_include_eps:n #1 + { + \__driver_literal:x + { + PSfile = #1 \c_space_tl + llx = \dim_to_decimal_in_bp:n \l_graphics_llx_dim \c_space_tl + lly = \dim_to_decimal_in_bp:n \l_graphics_lly_dim \c_space_tl + urx = \dim_to_decimal_in_bp:n \l_graphics_urx_dim \c_space_tl + ury = \dim_to_decimal_in_bp:n \l_graphics_ury_dim + } + } %% File: l3drivers-pdf.dtx -\box_new:N \l__driver_pdf_tmp_box \cs_new_protected:Npn \__driver_pdfmark:n #1 { \__driver_postscript:n { mark #1 ~ pdfmark } } \cs_generate_variant:Nn \__driver_pdfmark:n { x } @@ -1139,13 +1149,13 @@ \cs_new_protected:Npn \driver_pdf_destination_rectangle:nn #1#2 { \group_begin: - \hbox_set:Nn \l__driver_pdf_tmp_box {#2} + \hbox_set:Nn \l__driver_internal_box {#2} \box_move_down:nn - { \box_dp:N \l__driver_pdf_tmp_box } + { \box_dp:N \l__driver_internal_box } { \hbox:n { \__driver_postscript:n { driver.save.ll } } } - \box_use:N \l__driver_pdf_tmp_box + \box_use:N \l__driver_internal_box \box_move_up:nn - { \box_ht:N \l__driver_pdf_tmp_box } + { \box_ht:N \l__driver_internal_box } { \hbox:n { \__driver_postscript:n { driver.save.ur } } } \__driver_pdfmark:n { diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3dvisvgm.def b/Master/texmf-dist/tex/latex/l3kernel/l3dvisvgm.def index fc22d5d3a8d..fb15c593f01 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3dvisvgm.def +++ b/Master/texmf-dist/tex/latex/l3kernel/l3dvisvgm.def @@ -9,7 +9,7 @@ %% l3drivers-color.dtx (with options: `package,dvisvgm') %% l3drivers-box.dtx (with options: `package,dvisvgm') %% l3drivers-draw.dtx (with options: `package,dvisvgm') -%% l3drivers-image.dtx (with options: `package,dvisvgm') +%% l3drivers-graphics.dtx (with options: `package,dvisvgm') %% l3drivers-pdf.dtx (with options: `package,dvisvgm') %% %% Copyright (C) 1990-2019 The LaTeX3 Project @@ -33,6 +33,7 @@ \cs_new_protected:Npn \__driver_literal:n #1 { \__driver_literal:e { \exp_not:n {#1} } } \cs_generate_variant:Nn \__driver_literal:n { x } +\box_new:N \l__driver_internal_box \cs_new_protected:Npn \__driver_literal_svg:n #1 { \__driver_literal:n { dvisvgm:raw~ #1 { ?nl } } } \cs_generate_variant:Nn \__driver_literal_svg:n { x } @@ -369,7 +370,7 @@ { \__driver_draw_scope:n { stroke-linejoin="round" } } \cs_new_protected:Npn \driver_draw_join_bevel: { \__driver_draw_scope:n { stroke-linejoin="bevel" } } -\cs_new_protected:Npn \driver_draw_color_stroke_cmyk:nnnn #1#2#3#4 +\cs_new_protected:Npn \driver_draw_color_fill_cmyk:nnnn #1#2#3#4 { \use:x { @@ -380,18 +381,18 @@ } } \cs_new_eq:NN \driver_draw_color_stroke_cmyk:nnnn \driver_color_cmyk:nnnn -\cs_new_protected:Npn \driver_draw_color_gray:n #1 +\cs_new_protected:Npn \driver_draw_color_fill_gray:n #1 { \use:x { \__driver_draw_color_gray_aux:n - { \fp_eval:n { 100 * (#3) } } + { \fp_eval:n { 100 * (#1) } } } } \cs_new_protected:Npn \__driver_draw_color_gray_aux:n #1 { \__driver_draw_color_fill:nnn {#1} {#1} {#1} } \cs_new_eq:NN \driver_draw_color_stroke_gray:n \driver_color_gray:n -\cs_new_protected:Npn \driver_draw_color_rgb:nnn #1#2#3 +\cs_new_protected:Npn \driver_draw_color_fill_rgb:nnn #1#2#3 { \use:x { @@ -450,24 +451,26 @@ \__driver_literal_svg:n { </g> } \__driver_scope_end: } -%% File: l3drivers-image.dtx -\cs_new_eq:NN \__driver_image_getbb_png:n \image_extract_bb:n -\cs_new_eq:NN \__driver_image_getbb_jpg:n \image_extract_bb:n -\cs_new_protected:Npn \__driver_image_include_png:n #1 +%% File: l3drivers-graphics.dtx +\AtBeginDocument + { + \cs_new_eq:NN \driver_graphics_getbb_png:n \graphics_extract_bb:n + \cs_new_eq:NN \driver_graphics_getbb_jpg:n \graphics_extract_bb:n + } +\cs_new_protected:Npn \driver_graphics_include_png:n #1 { \__driver_literal:x { dvisvgm:img~ - \dim_to_decimal:n { \l_image_ury_dim } ~ - \dim_to_decimal:n { \l_image_ury_dim } ~ - \__driver_image_include_bitmap_quote:w #1 " #1 " \q_stop + \dim_to_decimal:n { \l_graphics_ury_dim } ~ + \dim_to_decimal:n { \l_graphics_ury_dim } ~ + \__driver_graphics_include_bitmap_quote:w #1 " #1 " \q_stop } } -\cs_new_eq:NN \__driver_image_include_jpg:n \__driver_image_include_png:n -\cs_new:Npn \__driver_image_include_bitmap_quote:w #1 " #2 " #3 \q_stop +\cs_new_eq:NN \driver_graphics_include_jpg:n \driver_graphics_include_png:n +\cs_new:Npn \__driver_graphics_include_bitmap_quote:w #1 " #2 " #3 \q_stop { " #2 " } %% File: l3drivers-pdf.dtx -\box_new:N \l__driver_pdf_tmp_box \cs_new_protected:Npn \driver_pdf_catalog_gput:nn #1#2 { } \cs_new_protected:Npn \driver_pdf_info_gput:nn #1#2 { } \cs_new_protected:Npn \driver_pdf_object_new:nn #1#2 { } diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def b/Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def index 1ebc92eb4bb..25c63471e8f 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def +++ b/Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def @@ -9,7 +9,7 @@ %% l3drivers-color.dtx (with options: `package,pdfmode') %% l3drivers-box.dtx (with options: `package,pdfmode') %% l3drivers-draw.dtx (with options: `package,pdfmode') -%% l3drivers-image.dtx (with options: `package,pdfmode') +%% l3drivers-graphics.dtx (with options: `package,pdfmode') %% l3drivers-pdf.dtx (with options: `package,pdfmode') %% %% Copyright (C) 1990-2019 The LaTeX3 Project @@ -33,6 +33,7 @@ \cs_new_protected:Npn \__driver_literal:n #1 { \__driver_literal:e { \exp_not:n {#1} } } \cs_generate_variant:Nn \__driver_literal:n { x } +\box_new:N \l__driver_internal_box \cs_new_protected:Npx \__driver_literal_pdf:n #1 { \cs_if_exist:NTF \tex_pdfextension:D @@ -352,77 +353,76 @@ \hbox_overlap_right:n { \box_use:N #1 } \__driver_scope_end: } -%% File: l3drivers-image.dtx -\tl_new:N \l__driver_image_attr_tl -\cs_new_protected:Npn \__driver_image_getbb_jpg:n #1 +%% File: l3drivers-graphics.dtx +\tl_new:N \l__driver_graphics_attr_tl +\cs_new_protected:Npn \driver_graphics_getbb_jpg:n #1 { - \int_zero:N \l_image_page_int - \tl_clear:N \l_image_pagebox_tl - \tl_set:Nx \l__driver_image_attr_tl + \int_zero:N \l_graphics_page_int + \tl_clear:N \l_graphics_pagebox_tl + \tl_set:Nx \l__driver_graphics_attr_tl { - \tl_if_empty:NF \l_image_decode_tl - { :D \l_image_decodearray_tl } - \bool_if:NT \l_image_interpolate_bool + \tl_if_empty:NF \l_graphics_decodearray_tl + { :D \l_graphics_decodearray_tl } + \bool_if:NT \l_graphics_interpolate_bool { :I } } - \tl_clear:N \l__driver_image_attr_tl - \__driver_image_getbb_auxi:n {#1} + \tl_clear:N \l__driver_graphics_attr_tl + \__driver_graphics_getbb_auxi:n {#1} } -\cs_new_eq:NN \__driver_image_getbb_png:n \__driver_image_getbb_jpg:n -\cs_new_protected:Npn \__driver_image_getbb_pdf:n #1 +\cs_new_eq:NN \driver_graphics_getbb_png:n \driver_graphics_getbb_jpg:n +\cs_new_protected:Npn \driver_graphics_getbb_pdf:n #1 { - \tl_clear:N \l_image_decode_tl - \bool_set_false:N \l_image_interpolate_bool - \tl_set:Nx \l__driver_image_attr_tl + \tl_clear:N \l_graphics_decodearray_tl + \bool_set_false:N \l_graphics_interpolate_bool + \tl_set:Nx \l__driver_graphics_attr_tl { - : \l_image_pagebox_tl - \int_compare:nNnT \l_image_page_int > 1 - { :P \int_use:N \l_image_page_int } + : \l_graphics_pagebox_tl + \int_compare:nNnT \l_graphics_page_int > 1 + { :P \int_use:N \l_graphics_page_int } } - \__driver_image_getbb_auxi:n {#1} + \__driver_graphics_getbb_auxi:n {#1} } -\cs_new_protected:Npn \__driver_image_getbb_auxi:n #1 +\cs_new_protected:Npn \__driver_graphics_getbb_auxi:n #1 { - \image_bb_restore:xF { #1 \l__driver_image_attr_tl } - { \__driver_image_getbb_auxii:n {#1} } + \graphics_bb_restore:xF { #1 \l__driver_graphics_attr_tl } + { \__driver_graphics_getbb_auxii:n {#1} } } -\cs_new_protected:Npn \__driver_image_getbb_auxii:n #1 +\cs_new_protected:Npn \__driver_graphics_getbb_auxii:n #1 { \tex_immediate:D \tex_pdfximage:D \bool_lazy_or:nnT - { \l_image_interpolate_bool } - { ! \tl_if_empty_p:N \l_image_decodearray_tl } + { \l_graphics_interpolate_bool } + { ! \tl_if_empty_p:N \l_graphics_decodearray_tl } { attr ~ { - \tl_if_empty:NF \l_image_decode_tl - { /Decode~[ \l_image_decodearray_tl ] } - \bool_if:NT \l_image_interpolate_bool + \tl_if_empty:NF \l_graphics_decodearray_tl + { /Decode~[ \l_graphics_decodearray_tl ] } + \bool_if:NT \l_graphics_interpolate_bool { /Interpolate~true } } } - \int_compare:nNnT \l_image_page_int > 0 - { page ~ \int_use:N \l_image_page_int } - \tl_if_empty:NF \l_image_pagebox_tl - { \l_image_pagebox_tl } + \int_compare:nNnT \l_graphics_page_int > 0 + { page ~ \int_use:N \l_graphics_page_int } + \tl_if_empty:NF \l_graphics_pagebox_tl + { \l_graphics_pagebox_tl } {#1} - \hbox_set:Nn \l__driver_tmp_box + \hbox_set:Nn \l__driver_internal_box { \tex_pdfrefximage:D \tex_pdflastximage:D } - \dim_set:Nn \l_image_urx_dim { \box_wd:N \l__driver_tmp_box } - \dim_set:Nn \l_image_ury_dim { \box_ht:N \l__driver_tmp_box } - \int_const:cn { c__driver_image_ #1 \l__driver_image_attr_tl _int } + \dim_set:Nn \l_graphics_urx_dim { \box_wd:N \l__driver_internal_box } + \dim_set:Nn \l_graphics_ury_dim { \box_ht:N \l__driver_internal_box } + \int_const:cn { c__driver_graphics_ #1 \l__driver_graphics_attr_tl _int } { \tex_the:D \tex_pdflastximage:D } - \image_bb_save:x { #1 \l__driver_image_attr_tl } + \graphics_bb_save:x { #1 \l__driver_graphics_attr_tl } } -\cs_new_protected:Npn \__driver_image_include_jpg:n #1 +\cs_new_protected:Npn \driver_graphics_include_jpg:n #1 { \tex_pdfrefximage:D - \int_use:c { c__driver_image_ #1 \l__driver_image_attr_tl _int } + \int_use:c { c__driver_graphics_ #1 \l__driver_graphics_attr_tl _int } } -\cs_new_eq:NN \__driver_image_include_pdf:n \__driver_image_include_jpg:n -\cs_new_eq:NN \__driver_image_include_png:n \__driver_image_include_jpg:n +\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 %% File: l3drivers-pdf.dtx -\box_new:N \l__driver_pdf_tmp_box \cs_new_protected:Npx \driver_pdf_annotation:nnnn #1#2#3#4 { \cs_if_exist:NTF \tex_pdfextension:D @@ -496,16 +496,16 @@ \cs_new_protected:Npx \driver_pdf_destination_rectangle:nn #1#2 { \group_begin: - \hbox_set:Nn \l__driver_pdf_tmp_box {#2} + \hbox_set:Nn \l__driver_internal_box {#2} \cs_if_exist:NTF \tex_pdfextension:D { \exp_not:N \tex_pdfextension:D dest ~ } { \exp_not:N \tex_pdfdest:D } name {#1} fitr ~ - width \exp_not:N \box_wd:N \l__driver_pdf_tmp_box - height \exp_not:N \box_ht:N \l__driver_pdf_tmp_box - depth \exp_not:N \box_dp:N \l__driver_pdf_tmp_box - \box_use:N \l__driver_pdf_tmp_box + width \exp_not:N \box_wd:N \l__driver_internal_box + height \exp_not:N \box_ht:N \l__driver_internal_box + depth \exp_not:N \box_dp:N \l__driver_internal_box + \box_use:N \l__driver_internal_box \group_end: } \cs_new_protected:Npx \driver_pdf_catalog_gput:nn #1#2 diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def b/Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def index 7fc986ec327..111087f7509 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def +++ b/Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def @@ -9,7 +9,7 @@ %% l3drivers-color.dtx (with options: `package,xdvipdfmx') %% l3drivers-box.dtx (with options: `package,xdvipdfmx') %% l3drivers-draw.dtx (with options: `package,xdvipdfmx') -%% l3drivers-image.dtx (with options: `package,xdvipdfmx') +%% l3drivers-graphics.dtx (with options: `package,xdvipdfmx') %% l3drivers-pdf.dtx (with options: `package,xdvipdfmx') %% %% Copyright (C) 1990-2019 The LaTeX3 Project @@ -33,6 +33,7 @@ \cs_new_protected:Npn \__driver_literal:n #1 { \__driver_literal:e { \exp_not:n {#1} } } \cs_generate_variant:Nn \__driver_literal:n { x } +\box_new:N \l__driver_internal_box \cs_new_protected:Npn \__driver_literal_pdf:n #1 { \__driver_literal:n { pdf:literal~ #1 } } \cs_generate_variant:Nn \__driver_literal_pdf:n { x } @@ -351,134 +352,144 @@ \__driver_literal:n { pdf:etrans } \__driver_scope_end: } -%% File: l3drivers-image.dtx -\cs_new_eq:NN \__driver_image_getbb_eps:n \image_read_bb:n -\int_new:N \g__driver_image_int -\cs_new_protected:Npn \__driver_image_include_eps:n #1 +%% File: l3drivers-graphics.dtx +\AtBeginDocument + { \cs_new_eq:NN \driver_graphics_getbb_eps:n \graphics_read_bb:n } +\int_new:N \g__driver_graphics_int +\cs_new_protected:Npn \driver_graphics_include_eps:n #1 { - \__driver_literal:n { PSfile = #1 } + \__driver_literal:x + { + PSfile = #1 \c_space_tl + llx = \dim_to_decimal_in_bp:n \l_graphics_llx_dim \c_space_tl + lly = \dim_to_decimal_in_bp:n \l_graphics_lly_dim \c_space_tl + urx = \dim_to_decimal_in_bp:n \l_graphics_urx_dim \c_space_tl + ury = \dim_to_decimal_in_bp:n \l_graphics_ury_dim + } } -\cs_new_protected:Npn \__driver_image_include_jpg:n #1 - { \__driver_image_include_auxi:nn {#1} { image } } -\cs_new_eq:NN \__driver_image_include_png:n \__driver_image_include_jpg:n -\cs_new_protected:Npn \__driver_image_include_auxi:nn #1#2 +\cs_new_protected:Npn \driver_graphics_include_jpg:n #1 + { \__driver_graphics_include_auxi:nn {#1} { image } } +\cs_new_eq:NN \driver_graphics_include_png:n \driver_graphics_include_jpg:n +\cs_new_protected:Npn \__driver_graphics_include_auxi:nn #1#2 { - \__driver_image_include_auxii:xnn + \__driver_graphics_include_auxii:xnn { - \tl_if_empty:NF \l_image_pagebox_tl - { : \l_image_pagebox_tl } - \int_compare:nNnT \l_image_page_int > 1 - { :P \int_use:N \l_image_page_int } - \tl_if_empty:NF \l_image_decode_tl - { :D \l_image_decodearray_tl } - \bool_if:NT \l_image_interpolate_bool + \tl_if_empty:NF \l_graphics_pagebox_tl + { : \l_graphics_pagebox_tl } + \int_compare:nNnT \l_graphics_page_int > 1 + { :P \int_use:N \l_graphics_page_int } + \tl_if_empty:NF \l_graphics_decodearray_tl + { :D \l_graphics_decodearray_tl } + \bool_if:NT \l_graphics_interpolate_bool { :I } } {#1} {#2} } -\cs_new_protected:Npn \__driver_image_include_auxii:nnn #1#2#3 +\cs_new_protected:Npn \__driver_graphics_include_auxii:nnn #1#2#3 { - \int_if_exist:cTF { c__driver_image_ #2#1 _int } + \int_if_exist:cTF { c__driver_graphics_ #2#1 _int } { \__driver_literal:x - { pdf:usexobj~@image \int_use:c { c__driver_image_ #2#1 _int } } + { pdf:usexobj~@image \int_use:c { c__driver_graphics_ #2#1 _int } } } - { \__driver_image_include_auxiii:nn {#2} {#1} {#3} } + { \__driver_graphics_include_auxiii:nnn {#2} {#1} {#3} } } -\cs_generate_variant:Nn \__driver_image_include_auxii:nnn { x } -\cs_new_protected:Npn \__driver_image_include_auxiii:nnn #1#2#3 +\cs_generate_variant:Nn \__driver_graphics_include_auxii:nnn { x } +\cs_new_protected:Npn \__driver_graphics_include_auxiii:nnn #1#2#3 { - \int_gincr:N \g__driver_image_int - \int_const:cn { c__driver_image_ #1#2 _int } { \g__driver_image_int } + \int_gincr:N \g__driver_graphics_int + \int_const:cn { c__driver_graphics_ #1#2 _int } { \g__driver_graphics_int } \__driver_literal:x { pdf:#3~ - @image \int_use:c { c__driver_image_ #1#2 _int } - \int_compare:nNnT \l_image_page_int > 1 - { page ~ \int_use:N \l_image_page_int \c_space_tl } - \tl_if_empty:NF \l_image_pagebox_tl + @image \int_use:c { c__driver_graphics_ #1#2 _int } ~ + \int_compare:nNnT \l_graphics_page_int > 1 + { page ~ \int_use:N \l_graphics_page_int \c_space_tl } + \tl_if_empty:NF \l_graphics_pagebox_tl { - pagebox ~ \l_image_pagebox_tl \c_space_tl + pagebox ~ \l_graphics_pagebox_tl \c_space_tl bbox ~ - \dim_to_decimal_in_bp:n \l_image_llx_dim \c_space_tl - \dim_to_decimal_in_bp:n \l_image_lly_dim \c_space_tl - \dim_to_decimal_in_bp:n \l_image_urx_dim \c_space_tl - \dim_to_decimal_in_bp:n \l_image_ury_dim \c_space_tl + \dim_to_decimal_in_bp:n \l_graphics_llx_dim \c_space_tl + \dim_to_decimal_in_bp:n \l_graphics_lly_dim \c_space_tl + \dim_to_decimal_in_bp:n \l_graphics_urx_dim \c_space_tl + \dim_to_decimal_in_bp:n \l_graphics_ury_dim \c_space_tl } (#1) \bool_lazy_or:nnT - { \l_image_interpolate_bool } - { ! \tl_if_empty_p:N \l_image_decodearray_tl } + { \l_graphics_interpolate_bool } + { ! \tl_if_empty_p:N \l_graphics_decodearray_tl } { << - \tl_if_empty:NF \l_image_decode_tl - { /Decode~[ \l_image_decodearray_tl ] } - \bool_if:NT \l_image_interpolate_bool + \tl_if_empty:NF \l_graphics_decodearray_tl + { /Decode~[ \l_graphics_decodearray_tl ] } + \bool_if:NT \l_graphics_interpolate_bool { /Interpolate~true> } >> } } } -\cs_new_protected:Npn \__driver_image_getbb_jpg:n #1 +\cs_new_protected:Npn \driver_graphics_getbb_jpg:n #1 { - \int_zero:N \l_image_page_int - \tl_clear:N \l_image_pagebox_tl - \__driver_image_getbb_auxi:nN {#1} \tex_XeTeXpicfile:D + \int_zero:N \l_graphics_page_int + \tl_clear:N \l_graphics_pagebox_tl + \__driver_graphics_getbb_auxi:nN {#1} \tex_XeTeXpicfile:D } -\cs_new_eq:NN \__driver_image_getbb_png:n \__driver_image_getbb_jpg:n -\cs_new_protected:Npn \__driver_image_getbb_pdf:n #1 +\cs_new_eq:NN \driver_graphics_getbb_png:n \driver_graphics_getbb_jpg:n +\cs_new_protected:Npn \driver_graphics_getbb_pdf:n #1 { - \tl_clear:N \l_image_decode_tl - \bool_set_false:N \l_image_interpolate_bool - \__driver_image_getbb_auxi:nN {#1} \tex_XeTeXpdffile:D + \tl_clear:N \l_graphics_decodearray_tl + \bool_set_false:N \l_graphics_interpolate_bool + \__driver_graphics_getbb_auxi:nN {#1} \tex_XeTeXpdffile:D } -\cs_new_protected:Npn \__driver_image_getbb_auxi:nN #1#2 +\cs_new_protected:Npn \__driver_graphics_getbb_auxi:nN #1#2 { - \int_compare:nNnTF \l_image_page_int > 1 - { \__driver_image_getbb_auxii:VnN \l_image_page_int {#1} #2 } - { \__driver_image_getbb_auxiii:nNnn {#1} #2 } + \int_compare:nNnTF \l_graphics_page_int > 1 + { \__driver_graphics_getbb_auxii:VnN \l_graphics_page_int {#1} #2 } + { \__driver_graphics_getbb_auxiii:nNnn {#1} #2 { :P 1 } { page 1 } } } -\cs_new_protected:Npn \__driver_image_getbb_auxii:nnN #1#2#3 - { \__driver_image_getbb_aux:nNnn {#2} #3 { :P #1 } { page #1 } } -\cs_generate_variant:Nn \__driver_image_getbb_auxii:nnN { V } -\cs_new_protected:Npn \__driver_image_getbb_auxiii:nNnn #1#2#3#4 +\cs_new_protected:Npn \__driver_graphics_getbb_auxii:nnN #1#2#3 + { \__driver_graphics_getbb_auxiii:nNnn {#2} #3 { :P #1 } { page #1 } } +\cs_generate_variant:Nn \__driver_graphics_getbb_auxii:nnN { V } +\cs_new_protected:Npn \__driver_graphics_getbb_auxiii:nNnn #1#2#3#4 { - \tl_if_empty:NTF \l_image_pagebox_tl - { \__driver_image_getbb_auxiv:VnNnn \l_image_pagebox_tl } - { \__driver_image_getbb_auxv:nNnn } + \tl_if_empty:NTF \l_graphics_pagebox_tl + { \__driver_graphics_getbb_auxiv:VnNnn \l_graphics_pagebox_tl } + { \__driver_graphics_getbb_auxv:nNnn } {#1} #2 {#3} {#4} } -\cs_new_protected:Npn \__driver_image_getbb_auxiv:nnNnn #1#2#3#4#5 +\cs_new_protected:Npn \__driver_graphics_getbb_auxiv:nnNnn #1#2#3#4#5 { \use:x { - \__driver_image_getbb_auxv:nNnn {#2} #3 { : #1 #4 } - { #5 ~ \__driver_image_getbb_pagebox:w #1 } + \__driver_graphics_getbb_auxv:nNnn {#2} #3 { : #1 #4 } + { #5 ~ \__driver_graphics_getbb_pagebox:w #1 } } } -\cs_generate_variant:Nn \__driver_image_getbb_auxiv:nnNnn { V } -\cs_new_protected:Npn \__driver_image_getbb_auxv:nNnn #1#2#3#4 +\cs_generate_variant:Nn \__driver_graphics_getbb_auxiv:nnNnn { V } +\cs_new_protected:Npn \__driver_graphics_getbb_auxv:nNnn #1#2#3#4 { - \image_bb_restore:nF {#1#3} - { \__driver_image_getbb_auxvi:nNnn {#1} #2 {#3} {#4} } + \graphics_bb_restore:nF {#1#3} + { \__driver_graphics_getbb_auxvi:nNnn {#1} #2 {#3} {#4} } } -\cs_new_protected:Npn \__driver_image_getbb_auxvi:nNnn #1#2#3#4 +\cs_new_protected:Npn \__driver_graphics_getbb_auxvi:nNnn #1#2#3#4 { - \hbox_set:Nn \l__driver_tmp_box { #2 #1 ~ #4 } - \dim_set:Nn \l_image_utx_dim { \box_wd:N \l__driver_tmp_box } - \dim_set:Nn \l_image_ury_dim { \box_ht:N \l__driver_tmp_box } - \image_bb_save:n {#1#3} + \hbox_set:Nn \l__driver_internal_box { #2 #1 ~ #4 } + \dim_set:Nn \l_graphics_urx_dim { \box_wd:N \l__driver_internal_box } + \dim_set:Nn \l_graphics_ury_dim { \box_ht:N \l__driver_internal_box } + \graphics_bb_save:n {#1#3} } -\cs_new:Npn \__driver_image_getbb_pagebox:w #1 box {#1} -\cs_new_protected:Npn \__driver_image_include_pdf:n #1 +\cs_new:Npn \__driver_graphics_getbb_pagebox:w #1 box {#1} +\cs_new_protected:Npn \driver_graphics_include_pdf:n #1 { - \tex_XeTeXpdffile:D "#1" ~ - \int_compare:nNnT \l_image_page_int > 0 - { page~ \int_use:N \l_image_page_int } - \__driver_image_getbb_auxiv:VnNnn \l_image_pagebox_tl + \tex_XeTeXpdffile:D + \__driver_graphics_include_pdf_quote:w #1 "#1" \q_stop \c_space_tl + \int_compare:nNnT \l_graphics_page_int > 0 + { page ~ \int_use:N \l_graphics_page_int \c_space_tl } + \exp_after:wN \__driver_graphics_getbb_pagebox:w \l_graphics_pagebox_tl } +\cs_new:Npn \__driver_graphics_include_pdf_quote:w #1 " #2 " #3 \q_stop + { " #2 " } %% File: l3drivers-pdf.dtx -\box_new:N \l__driver_pdf_tmp_box \cs_new_protected:Npx \__driver_pdf:n #1 { \__driver_literal:n { pdf: #1 } } \cs_generate_variant:Nn \__driver_pdf:n { x } @@ -618,8 +629,8 @@ \cs_new_protected:Npn \driver_pdf_destination_rectangle:nn #1#2 { \group_begin: - \hbox_set:Nn \l__driver_pdf_tmp_box {#2} - \box_move_down:nn { \box_dp:N \l__driver_pdf_tmp_box } + \hbox_set:Nn \l__driver_internal_box {#2} + \box_move_down:nn { \box_dp:N \l__driver_internal_box } { \hbox:n { @@ -627,8 +638,8 @@ \__driver_pdf:n { obj ~ @driver_#1_lly ~ @ypos } } } - \box_use:N \l__driver_pdf_tmp_box - \box_move_up:nn { \box_ht:N \l__driver_pdf_tmp_box } + \box_use:N \l__driver_internal_box + \box_move_up:nn { \box_ht:N \l__driver_internal_box } { \hbox:n { |