texlive[74759] Master/texmf-dist: l3kernel-dev (26mar25)
commits+karl at tug.org
commits+karl at tug.org
Wed Mar 26 21:04:38 CET 2025
Revision: 74759
https://tug.org/svn/texlive?view=revision&revision=74759
Author: karl
Date: 2025-03-26 21:04:37 +0100 (Wed, 26 Mar 2025)
Log Message:
-----------
l3kernel-dev (26mar25)
Modified Paths:
--------------
trunk/Master/texmf-dist/doc/latex-dev/l3kernel/CHANGELOG.md
trunk/Master/texmf-dist/doc/latex-dev/l3kernel/README.md
trunk/Master/texmf-dist/doc/latex-dev/l3kernel/expl3.pdf
trunk/Master/texmf-dist/doc/latex-dev/l3kernel/interface3.pdf
trunk/Master/texmf-dist/doc/latex-dev/l3kernel/interface3.tex
trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3doc.pdf
trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3docstrip.pdf
trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3news.pdf
trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3news01.pdf
trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3news02.pdf
trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3news03.pdf
trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3news04.pdf
trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3news05.pdf
trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3news06.pdf
trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3news07.pdf
trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3news08.pdf
trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3news09.pdf
trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3news10.pdf
trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3news11.pdf
trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3news12.pdf
trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3prefixes.pdf
trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3styleguide.pdf
trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3styleguide.tex
trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3syntax-changes.pdf
trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3syntax-changes.tex
trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3term-glossary.pdf
trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3term-glossary.tex
trunk/Master/texmf-dist/doc/latex-dev/l3kernel/source3.pdf
trunk/Master/texmf-dist/doc/latex-dev/l3kernel/source3.tex
trunk/Master/texmf-dist/doc/latex-dev/l3kernel/source3body.tex
trunk/Master/texmf-dist/source/latex-dev/l3kernel/expl3.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3.ins
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3basics.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3bitset.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3bootstrap.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3box.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3cctab.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3clist.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3coffins.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3color.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3debug.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3deprecation.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3doc.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3docstrip.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3expan.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3file.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3flag.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-assign.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-aux.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-basics.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-convert.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-expo.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-extended.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-functions.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-logic.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-parse.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-random.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-round.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-symbolic.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-traps.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-trig.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-types.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fparray.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3int.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3intarray.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3kernel-functions.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3keys.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3legacy.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3luatex.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3msg.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3names.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3pdf.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3prg.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3prop.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3quark.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3regex.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3seq.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3skip.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3sort.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3str-convert.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3str.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3sys.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3text-case.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3text-map.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3text-purify.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3text.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3tl-analysis.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3tl-build.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3tl.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3token.dtx
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3unicode.dtx
trunk/Master/texmf-dist/tex/latex-dev/l3kernel/expl3-code.tex
trunk/Master/texmf-dist/tex/latex-dev/l3kernel/expl3-generic.tex
trunk/Master/texmf-dist/tex/latex-dev/l3kernel/expl3.ltx
trunk/Master/texmf-dist/tex/latex-dev/l3kernel/expl3.sty
trunk/Master/texmf-dist/tex/latex-dev/l3kernel/l3debug.def
trunk/Master/texmf-dist/tex/latex-dev/l3kernel/l3doc.cls
Added Paths:
-----------
trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3graphics.dtx
Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/CHANGELOG.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/l3kernel/CHANGELOG.md 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/doc/latex-dev/l3kernel/CHANGELOG.md 2025-03-26 20:04:37 UTC (rev 74759)
@@ -7,6 +7,14 @@
## [Unreleased]
+## [2025-03-26]
+
+### Added
+- Module `l3graphics`, moved from `l3experimental` to stable status
+
+### Fixed
+- Correct scope for `\prg_gset_conditional:Nnn`
+
## [2025-03-10]
### Added
@@ -1865,7 +1873,8 @@
- Step functions have been added for dim variables,
e.g. `\dim_step_inline:nnnn`
-[Unreleased]: https://github.com/latex3/latex3/compare/2025-03-10...HEAD
+[Unreleased]: https://github.com/latex3/latex3/compare/2025-03-26...HEAD
+[2025-03-26]: https://github.com/latex3/latex3/compare/2025-03-10...2025-03-26
[2025-03-10]: https://github.com/latex3/latex3/compare/2025-01-18...2025-03-10
[2025-01-18]: https://github.com/latex3/latex3/compare/2025-01-14...2025-01-18
[2025-01-14]: https://github.com/latex3/latex3/compare/2024-12-25...2025-01-14
Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/README.md
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/l3kernel/README.md 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/doc/latex-dev/l3kernel/README.md 2025-03-26 20:04:37 UTC (rev 74759)
@@ -1,7 +1,7 @@
LaTeX3 Programming Conventions
==============================
-Release 2025-03-10
+Release 2025-03-26
Overview
--------
Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/expl3.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/interface3.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/interface3.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/l3kernel/interface3.tex 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/doc/latex-dev/l3kernel/interface3.tex 2025-03-26 20:04:37 UTC (rev 74759)
@@ -58,7 +58,7 @@
{latex-team at latex-project.org}%
}%
}
-\date{Released 2025-03-10}
+\date{Released 2025-03-26}
\pagenumbering{roman}
\maketitle
Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3doc.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3docstrip.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3news.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3news01.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3news02.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3news03.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3news04.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3news05.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3news06.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3news07.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3news08.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3news09.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3news10.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3news11.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3news12.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3prefixes.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3styleguide.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3styleguide.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3styleguide.tex 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3styleguide.tex 2025-03-26 20:04:37 UTC (rev 74759)
@@ -32,7 +32,7 @@
{latex-team at latex-project.org}%
}%
}
-\date{Released 2025-03-10}
+\date{Released 2025-03-26}
\begin{document}
Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3syntax-changes.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3syntax-changes.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3syntax-changes.tex 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3syntax-changes.tex 2025-03-26 20:04:37 UTC (rev 74759)
@@ -32,7 +32,7 @@
{latex-team at latex-project.org}%
}%
}
-\date{Released 2025-03-10}
+\date{Released 2025-03-26}
\newcommand{\TF}{\textit{(TF)}}
Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3term-glossary.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3term-glossary.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3term-glossary.tex 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/doc/latex-dev/l3kernel/l3term-glossary.tex 2025-03-26 20:04:37 UTC (rev 74759)
@@ -32,7 +32,7 @@
{latex-team at latex-project.org}%
}%
}
-\date{Released 2025-03-10}
+\date{Released 2025-03-26}
\newcommand{\TF}{\textit{(TF)}}
Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/source3.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/source3.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/l3kernel/source3.tex 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/doc/latex-dev/l3kernel/source3.tex 2025-03-26 20:04:37 UTC (rev 74759)
@@ -57,7 +57,7 @@
{latex-team at latex-project.org}%
}%
}
-\date{Released 2025-03-10}
+\date{Released 2025-03-26}
\pagenumbering{roman}
\maketitle
Modified: trunk/Master/texmf-dist/doc/latex-dev/l3kernel/source3body.tex
===================================================================
--- trunk/Master/texmf-dist/doc/latex-dev/l3kernel/source3body.tex 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/doc/latex-dev/l3kernel/source3body.tex 2025-03-26 20:04:37 UTC (rev 74759)
@@ -637,6 +637,7 @@
\DocInput{l3box.dtx}
\DocInput{l3coffins.dtx}
\DocInput{l3color.dtx}
+\DocInput{l3graphics.dtx}
\DocInput{l3pdf.dtx}
% implementation part only
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/expl3.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/expl3.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/expl3.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -24,7 +24,7 @@
%
%<*driver|generic|package|2ekernel>
%</driver|generic|package|2ekernel>
-\def\ExplFileDate{2025-03-10}%
+\def\ExplFileDate{2025-03-26}%
%<*driver>
\documentclass[full]{l3doc}
\usepackage{graphicx}
@@ -51,7 +51,7 @@
% }^^A
% }
%
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
@@ -543,9 +543,8 @@
% documented in \href{interface3.pdf}{interface3.pdf}%^^A
% \footnote{If a primitive offers a functionality not yet in the
% kernel, programmers and users are encouraged to write to the
-% \texttt{LaTeX-L} mailing list
-% (\url{mailto:LATEX-L at listserv.uni-heidelberg.de}) describing
-% their use-case and intended behaviour, so that a possible
+% team describing
+% their use-case and intended behavior, so that a possible
% interface can be discussed. Temporarily, while an interface is
% not provided, programmers may use the procedure described in the
% \href{l3styleguide.pdf}{l3styleguide.pdf}.}.
@@ -896,8 +895,7 @@
% \item Use long, descriptive names for functions and variables,
% and for auxiliary functions use the parent function name plus
% |aux|, |auxi|, |auxii| and so on.
-% \item If in doubt, ask the team via the LaTeX-L list: someone will
-% soon get back to you!
+% \item If in doubt, ask the team: someone will soon get back to you!
% \end{itemize}
%
% \section{Load-time options for \pkg{expl3}}
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3.ins
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3.ins 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3.ins 2025-03-26 20:04:37 UTC (rev 74759)
@@ -105,6 +105,7 @@
\from{l3regex.dtx} {package}
\from{l3box.dtx} {package}
\from{l3color.dtx} {package}
+ \from{l3graphics.dtx} {package}
\from{l3pdf.dtx} {package,tex}
\from{l3coffins.dtx} {package}
\from{l3luatex.dtx} {package,tex}
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3basics.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3basics.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3basics.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
@@ -2014,7 +2014,7 @@
\cs_gset_protected:Npn \prg_set_conditional:Nnn
{ \@@_generate_conditional_count:NNNnn \cs_set:Npn e }
\cs_gset_protected:Npn \prg_gset_conditional:Nnn
- { \@@_generate_conditional_count:NNNnn \cs_set:Npn e }
+ { \@@_generate_conditional_count:NNNnn \cs_gset:Npn e }
\cs_gset_protected:Npn \prg_new_conditional:Nnn
{ \@@_generate_conditional_count:NNNnn \cs_new:Npn e }
\cs_gset_protected:Npn \prg_set_protected_conditional:Nnn
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3bitset.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3bitset.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3bitset.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -42,7 +42,7 @@
% }^^A
% }
%
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3bootstrap.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3bootstrap.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3bootstrap.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3box.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3box.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3box.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3cctab.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3cctab.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3cctab.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3clist.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3clist.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3clist.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3coffins.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3coffins.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3coffins.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3color.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3color.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3color.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3debug.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3debug.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3debug.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
@@ -69,7 +69,7 @@
%
% Standard file identification.
% \begin{macrocode}
-\ProvidesExplFile{l3debug.def}{2025-03-10}{}{L3 Debugging support}
+\ProvidesExplFile{l3debug.def}{2025-03-26}{}{L3 Debugging support}
% \end{macrocode}
%
% \begin{variable}{\s_@@_stop}
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3deprecation.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3deprecation.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3deprecation.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3doc.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3doc.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3doc.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -71,7 +71,7 @@
% This isn't included in the typeset documentation because it's a bit
% ugly:
%<*class>
-\ProvidesExplClass{l3doc}{2025-03-10}{}
+\ProvidesExplClass{l3doc}{2025-03-26}{}
{L3 Experimental documentation class}
%</class>
% \fi
@@ -84,7 +84,7 @@
% require you to do updates, if the class changes.}}
%
% \author{\Team}
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
% \maketitle
% \tableofcontents
%
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3docstrip.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3docstrip.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3docstrip.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -63,7 +63,7 @@
% }^^A
% }
%
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3expan.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3expan.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3expan.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3file.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3file.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3file.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3flag.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3flag.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3flag.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-assign.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-assign.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-assign.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -42,7 +42,7 @@
% {latex-team at latex-project.org}^^A
% }^^A
% }
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
% \maketitle
%
% \begin{documentation}
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-aux.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-aux.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-aux.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-basics.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-basics.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-basics.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -42,7 +42,7 @@
% {latex-team at latex-project.org}^^A
% }^^A
% }
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-convert.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-convert.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-convert.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-expo.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-expo.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-expo.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -42,7 +42,7 @@
% {latex-team at latex-project.org}^^A
% }^^A
% }
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-extended.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-extended.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-extended.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -42,7 +42,7 @@
% {latex-team at latex-project.org}^^A
% }^^A
% }
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-functions.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-functions.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-functions.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -42,7 +42,7 @@
% }^^A
% }
%
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-logic.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-logic.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-logic.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -42,7 +42,7 @@
% {latex-team at latex-project.org}^^A
% }^^A
% }
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-parse.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-parse.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-parse.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -42,7 +42,7 @@
% {latex-team at latex-project.org}^^A
% }^^A
% }
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-random.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-random.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-random.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -42,7 +42,7 @@
% {latex-team at latex-project.org}^^A
% }^^A
% }
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-round.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-round.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-round.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-symbolic.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-symbolic.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-symbolic.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -42,7 +42,7 @@
% }^^A
% }
%
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-traps.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-traps.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-traps.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -42,7 +42,7 @@
% {latex-team at latex-project.org}^^A
% }^^A
% }
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
% \maketitle
%
% \begin{documentation}
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-trig.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-trig.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-trig.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -42,7 +42,7 @@
% {latex-team at latex-project.org}^^A
% }^^A
% }
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-types.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-types.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp-types.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -42,7 +42,7 @@
% }^^A
% }
%
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fp.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -49,7 +49,7 @@
% }^^A
% }
%
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fparray.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fparray.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3fparray.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
Added: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3graphics.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3graphics.dtx (rev 0)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3graphics.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -0,0 +1,786 @@
+% \iffalse meta-comment
+%
+%% File: l3graphics.dtx
+%
+% Copyright (C) 2017-2025 The LaTeX Project
+%
+% It may be distributed and/or modified under the conditions of the
+% LaTeX Project Public License (LPPL), either version 1.3c of this
+% license or (at your option) any later version. The latest version
+% of this license is in the file
+%
+% http://www.latex-project.org/lppl.txt
+%
+% This file is part of the "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]{l3doc}
+\begin{document}
+ \DocInput{\jobname.dtx}
+\end{document}
+%</driver>
+% \fi
+%
+% \title{^^A
+% The \pkg{l3graphics} module\\ Graphics inclusion support^^A
+% }
+%
+% \author{^^A
+% The \LaTeX{} Project\thanks
+% {^^A
+% E-mail:
+% \href{mailto:latex-team at latex-project.org}
+% {latex-team at latex-project.org}^^A
+% }^^A
+% }
+%
+% \date{Released 2025-03-26}
+%
+% \maketitle
+%
+% \begin{documentation}
+%
+% \section{Graphics keys}
+%
+% Inclusion of graphic files requires a range of low-level data be passed to
+% the backend. This is set up using a small number of key--value settings,
+% which are stored in the |graphics| tree.
+%
+% \begin{variable}{decodearray}
+% Array to decode color in bitmap graphic: when non-empty, this should
+% be in the form of one, two or three pairs of real numbers in the range
+% $[0,1]$, separated by spaces.
+% \end{variable}
+%
+% \begin{variable}{draft}
+% Switch to enable draft mode: graphics are read but not included when this is
+% true.
+% \end{variable}
+%
+% \begin{variable}{interpolate}
+% Switch which indicates whether interpolation should be applied to bitmap
+% graphic files.
+% \end{variable}
+%
+% \begin{variable}{page}
+% The page to extract from a multi-page graphic file: used for |.pdf| files
+% which may contain multiple pages.
+% \end{variable}
+%
+% \begin{variable}{pdf-attr}
+% Additional PDF-focussed attributes: available to allow control of
+% extended |.pdf| structures beyond those needed for graphic inclusion.
+% Due to backend restrictions, this key is only functional with direct
+% PDF mode (pdf\TeX{} and Lua\TeX{}).
+% \end{variable}
+%
+% \begin{variable}{pagebox}
+% The nature of the page box setting used to determine the bounding box of
+% material: used for |.pdf| files which feature multiple page box
+% specifications. A choice from |art|, |bleed|, |crop|, |media|, |trim|.
+% The standard setting is |crop|.
+% \end{variable}
+%
+% \begin{variable}{type}
+% The type of graphic file being included: if this key is not set, the
+% \emph{type} is determined from the file extension.
+% \end{variable}
+%
+% \section{Including graphics}
+%
+% \begin{function}[added = 2025-03-14]
+% {\graphics_include:nn, \graphics_include:nV}
+% \begin{syntax}
+% \cs{graphics_include:nn} \Arg{keys} \Arg{file}
+% \end{syntax}
+% Horizontal-mode command which includes the \meta{file} as a graphic
+% at the current location. The file \meta{type} may be given as one of the
+% \meta{keys}, or will otherwise be determined from file extension. The
+% \meta{keys} is used to pass settings as detailed above.
+% \end{function}
+%
+% \begin{variable}[added = 2025-03-14]{\l_graphics_ext_type_prop}
+% Defines mapping between file extensions and file types; where there is
+% no entry for an extension, the type is assumed to be the extension
+% with the leading |.| removed. Entries should be made in lower case, and
+% the key should be an extension including the leading |.|, for example
+% \begin{verbatim}
+% \prop_put:Nnn \l_graphics_ext_type_prop { .ps } { eps }
+% \end{verbatim}
+% \end{variable}
+%
+% \begin{variable}[added = 2025-03-14]{\l_graphics_search_ext_seq}
+% Extensions to use for graphic searching when the given \meta{file} name is not
+% found by \cs{graphics_get_full_name:nN}.
+% \end{variable}
+%
+% \begin{variable}[added = 2025-03-14]{\l_graphics_search_path_seq}
+% Each entry is the path to a directory which should be searched when
+% seeking a graphic file. Each path can be relative or absolute, and should
+% not include the trailing slash. The entries are not expanded when
+% used so may contain active characters but should not feature any
+% variable content. Spaces need not be quoted.
+% \end{variable}
+%
+% \section{Utility functions}
+%
+% \begin{function}[noTF, added = 2025-03-14]{\graphics_get_full_name:nN}
+% \begin{syntax}
+% \cs{graphics_get_full_name:nN} \Arg{file} \meta{tl~var}
+% \cs{graphics_get_full_name:nNTF} \Arg{file} \meta{tl~var} \Arg{true code} \Arg{false code}
+% \end{syntax}
+% Searches for \meta{file} first as given and then using the extensions
+% listed in \cs{l_graphics_search_ext_seq}. The search path used will be
+% the entries of \cs{l_graphics_search_path_seq}. If found, the full file
+% name including any path and extension will be returned in the
+% \meta{tl~var}. In the non-branching version, the \meta{tl var} will be
+% set to \cs{q_no_value} in the case that the graphics is not found.
+% \end{function}
+%
+% \begin{function}[added = 2025-03-14]{\graphics_get_pagecount:nN}
+% \begin{syntax}
+% \cs{graphics_get_pagecount:nn} \Arg{file} \meta{tl~var}
+% \end{syntax}
+% Reads the graphics \meta{file} and extracts the number of pages, which
+% are stored in the \meta{tl~var}.
+% \end{function}
+%
+% \section{Showing and logging included graphics}
+%
+% \begin{function}[added = 2025-03-14]
+% {\graphics_show_list:, \graphics_log_list:}
+% \begin{syntax}
+% \cs{graphics_show_list:}
+% \cs{graphics_log_list:}
+% \end{syntax}
+% These functions list all graphic files loaded in a similar manner to
+% \cs{file_show_list:} and \cs{file_log_list:}. While
+% \cs{graphics_show_list:} displays the list in the terminal,
+% \cs{graphics_log_list:} outputs it to the log file only. In both cases, only
+% graphics loaded by \pkg{l3graphics} are listed.
+% \end{function}
+%
+% \end{documentation}
+%
+% \begin{implementation}
+%
+% \section{\pkg{l3graphics} implementation}
+%
+% \begin{macrocode}
+%<*package>
+% \end{macrocode}
+%
+% \begin{macrocode}
+%<@@=graphics>
+% \end{macrocode}
+%
+% Transitional support.
+% \begin{macrocode}
+\cs_if_exist:NT \@expl at finalise@setup@@@@
+ {
+ \tl_gput_right:Nn \@expl at finalise@setup@@@@
+ { \declare at file@substitution { l3graphics.sty } { null.tex } }
+ }
+% \end{macrocode}
+%
+% \begin{variable}{\l_@@_internal_dim, \l_@@_internal_ior, \l_@@_internal_tl}
+% Scratch space.
+% \begin{macrocode}
+\dim_new:N \l_@@_internal_dim
+\ior_new:N \l_@@_internal_ior
+\tl_new:N \l_@@_internal_tl
+% \end{macrocode}
+% \end{variable}
+%
+% \begin{variable}{\s_@@_stop}
+% Internal scan marks.
+% \begin{macrocode}
+\scan_new:N \s_@@_stop
+% \end{macrocode}
+% \end{variable}
+%
+% \subsection{Graphics keys}
+%
+% \begin{macro}
+% {
+% \l_@@_decodearray_str ,
+% \l__@@_draft_bool ,
+% \l_@@_interpolate_bool ,
+% \l_@@_page_int ,
+% \l_@@_pagebox_tl ,
+% \l_@@_pdf_str ,
+% \l_@@_type_str
+% }
+% Keys which control features of graphics. The standard value of |pagebox|
+% set up here should match the default for the backends themselves: in
+% the absence of any other setting the |crop| should be used. Note that
+% the variable \cs{l_@@_pagebox_str} can be empty internally, as backends
+% which do not support |pagebox| are set up to clear it entirely. The
+% store for |pagebox| is a |tl| as that makes extracting the data
+% easier for some backends.
+% \begin{macrocode}
+\tl_new:N \l_@@_pagebox_tl
+\keys_define:nn { graphics }
+ {
+ decodearray .str_set:N =
+ \l_@@_decodearray_str ,
+ draft .bool_set:N =
+ \l_@@_draft_bool ,
+ interpolate .bool_set:N =
+ \l_@@_interpolate_bool ,
+ pagebox .choices:nn =
+ { art , bleed , crop , media , trim }
+ {
+ \tl_set:Ne \l_@@_pagebox_tl
+ { \l_keys_choice_tl box }
+ } ,
+ pagebox .initial:n =
+ crop ,
+ page .int_set:N =
+ \l_@@_page_int ,
+ pdf-attr .str_set:N =
+ \l_@@_pdf_str ,
+ type . str_set:N =
+ \l_@@_type_str
+ }
+% \end{macrocode}
+% \end{macro}
+%
+% \subsection{Obtaining bounding box data}
+%
+% \begin{variable}
+% {
+% \l_@@_llx_dim , \l_@@_lly_dim,
+% \l_@@_urx_dim , \l_@@_ury_dim
+% }
+% Storage for the return of bounding box.
+% \begin{macrocode}
+\dim_new:N \l_@@_llx_dim
+\dim_new:N \l_@@_lly_dim
+\dim_new:N \l_@@_urx_dim
+\dim_new:N \l_@@_ury_dim
+% \end{macrocode}
+% \end{variable}
+%
+% \begin{macro}{\@@_bb_save:n, \@@_bb_save:e}
+% \begin{macro}{\@@_bb_restore:nF, \@@_bb_restore:eF}
+% Caching graphic bounding boxes is sensible, and these functions are needed both
+% here and for drive-specific work. So they are made available as documented
+% functions. To save on registers, the \enquote{origin} is only saved if it is
+% not at zero.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_bb_save:n #1
+ {
+ \dim_if_exist:cTF { c_@@_ #1 _urx_dim }
+ { \msg_error:nnn { graphic } { bb-already-cached } {#1} }
+ {
+ \dim_compare:nNnF \l_@@_llx_dim = { 0pt }
+ { \dim_const:cn { c_@@_ #1 _llx_dim } { \l_@@_llx_dim } }
+ \dim_compare:nNnF \l_@@_lly_dim = { 0pt }
+ { \dim_const:cn { c_@@_ #1 _lly_dim } { \l_@@_lly_dim } }
+ \dim_const:cn { c_@@_ #1 _urx_dim } { \l_@@_urx_dim }
+ \dim_const:cn { c_@@_ #1 _ury_dim } { \l_@@_ury_dim }
+ }
+ }
+\cs_generate_variant:Nn \@@_bb_save:n { e }
+\cs_new_protected:Npn \@@_bb_restore:nF #1#2
+ {
+ \dim_if_exist:cTF { c_@@_ #1 _urx_dim }
+ {
+ \dim_set_eq:Nc \l_@@_urx_dim { c_@@_ #1 _urx_dim }
+ \dim_set_eq:Nc \l_@@_ury_dim { c_@@_ #1 _ury_dim }
+ \dim_if_exist:cTF { c_@@_ #1 _llx_dim }
+ { \dim_set_eq:Nc \l_@@_llx_dim { c_@@_ #1 _llx_dim } }
+ { \dim_zero:N \l_@@_llx_dim }
+ \dim_if_exist:cTF { c_@@_ #1 _lly_dim }
+ { \dim_set_eq:Nc \l_@@_lly_dim { c_@@_ #1 _lly_dim } }
+ { \dim_zero:N \l_@@_lly_dim }
+ }
+ {#2}
+ }
+\cs_generate_variant:Nn \@@_bb_restore:nF { e }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\@@_extract_bb:n, \@@_read_bb:n}
+% \begin{macro}{\@@_extract_bb_auix:nn, \@@_extract_bb_auix:Vn}
+% \begin{macro}{\@@_extract_bb_auxii:nnn}
+% \begin{macro}{\@@_extract_bb_auxiii:nnnn, \@@_extract_bb_auxiii:Vnnn}
+% \begin{macro}{\@@_extract_bb_auxiv:nnn}
+% \begin{macro}{\@@_read_bb_auxi:nnnn, \@@_read_bb_auxii:Vnnn}
+% \begin{macro}
+% {
+% \@@_read_bb_auxii:w ,
+% \@@_read_bb_auxiv:w ,
+% \@@_read_bb_auxv:w
+% }
+% Extracting the bounding box from an |.eps| or |.bb| file is done by
+% reading each line and searching for the marker text |%%BoundingBox:|.
+% The data is read as a string with a mapping over
+% the lines: as there is a colon involved, a little bit of work is needed to
+% get the matching correct. The same approach covers cases where the bounding
+% box has to be calculated by |extractbb|, with just the initial phase
+% different.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_extract_bb:n #1
+ {
+ \int_compare:nNnTF \l_@@_page_int > 0
+ { \@@_extract_bb_auxi:Vn \l_@@_page_int {#1} }
+ { \@@_extract_bb_auxii:nnn {#1} { } { } }
+ }
+\cs_new_protected:Npn \@@_extract_bb_auxi:nn #1#2
+ { \@@_extract_bb_auxii:nnn {#2} { :P #1 } { -p~#1~ } }
+\cs_generate_variant:Nn \@@_extract_bb_auxi:nn { Vn }
+\cs_new_protected:Npn \@@_extract_bb_auxii:nnn #1#2#3
+ {
+ \tl_if_empty:NTF \l_@@_pagebox_tl
+ { \@@_extract_bb_auxiv:nnn }
+ { \@@_extract_bb_auxiii:Vnnn \l_@@_pagebox_tl }
+ {#1} {#2} {#3}
+ }
+\cs_new_protected:Npn \@@_extract_bb_auxiii:nnnn #1#2#3#4
+ { \@@_extract_bb_auxiv:nnn {#2} { : #1 #3 } { #4 -B~#1~ } }
+\cs_generate_variant:Nn \@@_extract_bb_auxiii:nnnn { V }
+\cs_new_protected:Npn \@@_extract_bb_auxiv:nnn #1#2#3
+ {
+ \@@_read_bb_auxi:nnnn {#1} {#2}
+ { \ior_shell_open:Nn \l_@@_internal_ior { extractbb~#3-O~#1 } }
+ { pipe-failed }
+ }
+\cs_new_protected:Npn \@@_read_bb:n #1
+ {
+ \@@_read_bb_auxi:nnnn {#1} { }
+ { \ior_open:Nn \l_@@_internal_ior {#1} }
+ { graphic-not-found }
+ }
+% \end{macrocode}
+% Before any real searching, a check to see if there are cached values
+% available. The name of each graphic will be unique and so it's sensible to
+% store the bounding box data in \TeX{}: this avoids multiple file operations.
+% As bounding boxes here start away from the lower-left origin, we need to
+% store all four values (contrast with for example the \texttt{pdfmode}
+% driver). Here |#2| is a potential page identifier: used to allow caching of
+% individual pages in a multi-page document. Caching is applied to the
+% upper-right position in all cases, but as the lower-left will often be
+% $(0,0)$ it is only cached if required.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_read_bb_auxi:nnnn #1#2#3#4
+ {
+ \@@_bb_restore:nF {#1#2}
+ { \@@_read_bb_auxii:nnnn {#3} {#4} {#1} {#2} }
+ }
+\cs_new_protected:Npe \@@_read_bb_auxii:nnnn #1#2#3#4
+ {
+ #1
+ \exp_not:N \ior_if_eof:NTF \exp_not:N \l_@@_internal_ior
+ { \msg_error:nnn { graphics } {#2} {#3} }
+ {
+ \ior_str_map_inline:Nn \exp_not:N \l_@@_internal_ior
+ {
+ \exp_not:N \@@_read_bb_auxiii:w
+ ##1 ~ \c_colon_str \s_@@_stop
+ }
+ \@@_bb_save:n {#3#4}
+ }
+ \ior_close:N \exp_not:N \l_@@_internal_ior
+ }
+\use:e
+ {
+ \cs_new_protected:Npn \exp_not:N \@@_read_bb_auxiii:w
+ #1 \c_colon_str #2 \s_@@_stop
+ {
+ \exp_not:N \str_if_eq:nnT
+ { \c_percent_str \c_percent_str BoundingBox }
+ {#1}
+ { \exp_not:N \@@_read_bb_auxiv:w #2 ( ) \s_@@_stop }
+ }
+ }
+% \end{macrocode}
+% If the bounding box is |atend|, just ignore the current one and keep going.
+% Otherwise, we need to allow for tabs and multiple spaces (as the line has
+% been read as a string). The easiest way to deal with that is to scan the
+% tokens: at this stage the line fragment should be just numbers and
+% whitespace. \TeX{} will then tidy up for us, with just a leading space to
+% worry about: that is taken out by the |\use:n| here.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_read_bb_auxiv:w #1 ( #2 ) #3 \s_@@_stop
+ {
+ \str_if_eq:nnF {#2} { atend }
+ {
+ \tl_set_rescan:Nne \l_@@_internal_tl
+ {
+ \char_set_catcode_space:n { 9 }
+ \char_set_catcode_space:n { 32 }
+ }
+ { \use:n #1 }
+ \exp_after:wN \@@_read_bb_auxv:w \l_@@_internal_tl \s_@@_stop
+ }
+ }
+% \end{macrocode}
+% A trailing space was deliberately added earlier so we know that the final
+% data point is terminated by a space.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_read_bb_auxv:w #1~#2~#3~#4~#5 \s_@@_stop
+ {
+ \dim_set:Nn \l_@@_llx_dim { #1 bp }
+ \dim_set:Nn \l_@@_lly_dim { #2 bp }
+ \dim_set:Nn \l_@@_urx_dim { #3 bp }
+ \dim_set:Nn \l_@@_ury_dim { #4 bp }
+ \ior_map_break:
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{variable}{\l_@@_final_name_str, \l_@@_full_name_str}
+% The full name is as you'd expect the name including path and extension.
+% The final name here reflects any conversions carried out by the backend,
+% for example if an |.eps| is converted to |.pdf|.
+% \begin{macrocode}
+\str_new:N \l_@@_final_name_str
+\str_new:N \l_@@_full_name_str
+% \end{macrocode}
+% \end{variable}
+%
+% \begin{variable}{\l_@@_internal_box}
+% \begin{macrocode}
+\box_new:N \l_@@_internal_box
+% \end{macrocode}
+% \end{variable}
+%
+% \begin{variable}{\l_@@_dir_str \l_@@_name_str \l_@@_ext_str}
+% \begin{macrocode}
+\str_new:N \l_@@_dir_str
+\str_new:N \l_@@_name_str
+\str_new:N \l_@@_ext_str
+% \end{macrocode}
+% \end{variable}
+%
+% \begin{variable}{\l_graphics_search_path_seq}
+% \begin{macrocode}
+\seq_new:N \l_graphics_search_path_seq
+% \end{macrocode}
+% \end{variable}
+%
+% \begin{variable}{\l_graphics_search_ext_seq}
+% Used to specify fall-back extensions: actually set on a per-backend basis.
+% \begin{macrocode}
+\seq_new:N \l_graphics_search_ext_seq
+% \end{macrocode}
+% \end{variable}
+%
+% \begin{variable}{\l_graphics_ext_type_prop}
+% Mapping between extensions and types for non-standard mappings
+% \begin{macrocode}
+\prop_new:N \l_graphics_ext_type_prop
+\prop_put:Nnn \l_graphics_ext_type_prop { .ps } { eps }
+% \end{macrocode}
+% \end{variable}
+%
+% \begin{variable}{\g_@@_record_seq}
+% A list of graphic files used.
+% \begin{macrocode}
+\seq_new:N \g_@@_record_seq
+% \end{macrocode}
+% \end{variable}
+%
+% \begin{macro}{\graphics_include:nn, \graphics_include:nV}
+% \begin{macro}{\@@_include_search:n}
+% \begin{macro}{\@@_include:}
+% \begin{macro}
+% {
+% \@@_include_auxi:n, \@@_include_auxi:e, \@@_include_auxii:n,
+% \@@_include_auxiii:n, \@@_include_auxiv:n
+% }
+% Actually including an graphic is relatively straight-forward: most of the
+% work is done by the backend. We only have to deal with making sure the
+% box has no apparent depth. Where the first given name is not found, we
+% search based on extension only if the \meta{type} was not given. The one
+% wrinkle is that we may have found a \texttt{.tex} file matching the file
+% name stem: that's not what we want, so we have to filter out.
+% \begin{macrocode}
+\cs_new_protected:Npn \graphics_include:nn #1#2
+ {
+ \group_begin:
+ \keys_set:nn { graphics } {#1}
+ \seq_set_eq:NN \l_file_search_path_seq \l_graphics_search_path_seq
+ \file_get_full_name:nNTF {#2} \l_@@_full_name_str
+ {
+ \str_if_eq:eeTF { \l_@@_full_name_str } { #2 .tex }
+ { \msg_error:nnn { graphics } { graphic-not-found } {#2} }
+ { \@@_include: }
+ }
+ { \msg_error:nnn { graphics } { graphic-not-found } {#2} }
+ \group_end:
+ }
+\cs_generate_variant:Nn \graphics_include:nn { nV }
+\cs_new_protected:Npn \@@_include:
+ {
+ \str_if_empty:NTF \l_@@_type_str
+ {
+ \file_parse_full_name:VNNN \l_@@_full_name_str
+ \l_@@_dir_str \l_@@_name_str \l_@@_ext_str
+ \@@_include_auxi:e
+ {
+ \exp_args:Ne \str_tail:n
+ { \str_casefold:V \l_@@_ext_str }
+ }
+ }
+ { \@@_include_auxi:e { \l_@@_type_str } }
+ }
+\cs_new_protected:Npn \@@_include_auxi:n #1
+ {
+ \prop_get:NnNF \l_graphics_ext_type_prop { .#1 } \l_@@_internal_tl
+ { \tl_set:Nn \l_@@_internal_tl {#1} }
+ \exp_args:NV \@@_include_auxii:n \l_@@_internal_tl
+ }
+\cs_generate_variant:Nn \@@_include_auxi:n { e }
+\cs_new_protected:Npn \@@_include_auxii:n #1
+ {
+ \mode_leave_vertical:
+ \cs_if_exist:cTF { @@_backend_include_ #1 :n }
+ {
+ \tl_set_eq:NN \l_@@_final_name_str \l_@@_full_name_str
+ \str_set:Ne \l_@@_full_name_str
+ { \exp_args:NV \__kernel_file_name_quote:n \l_@@_full_name_str }
+ \exp_args:NnV \use:c { @@_backend_getbb_ #1 :n }
+ \l_@@_full_name_str
+ \seq_gput_right:NV \g_@@_record_seq \l_@@_final_name_str
+ \clist_if_exist:NT \@filelist
+ { \exp_args:NV \@addtofilelist \l_@@_final_name_str }
+ \bool_if:NTF \l_@@_draft_bool
+ { \@@_include_auxiii:n }
+ { \@@_include_auxiv:n }
+ {#1}
+ }
+ { \msg_error:nnn { graphics } { unsupported-graphic-type } {#1} }
+ }
+\cs_new_protected:Npn \@@_include_auxiii:n #1
+ {
+ \hbox_to_wd:nn { \l_@@_urx_dim - \l_@@_llx_dim }
+ {
+ \tex_vrule:D
+ \tex_hss:D
+ \vbox_to_ht:nn
+ { \l_@@_ury_dim - \l_@@_lly_dim }
+ {
+ \tex_hrule:D width
+ \dim_eval:n { \l_@@_urx_dim - \l_@@_llx_dim }
+ \tex_vss:D
+ \hbox_to_wd:nn
+ { \l_@@_urx_dim - \l_@@_llx_dim }
+ {
+ \ttfamily
+ \tex_hss:D \l_@@_full_name_str \tex_hss:D
+ }
+ \tex_vss:D
+ \tex_hrule:D
+ }
+ \tex_hss:D
+ \tex_vrule:D
+ }
+ }
+\cs_new_protected:Npn \@@_include_auxiv:n #1
+ {
+ \hbox_set:Nn \l_@@_internal_box
+ {
+ \exp_args:NnV \use:c { @@_backend_include_ #1 :n }
+ \l_@@_full_name_str
+ }
+ \box_set_dp:Nn \l_@@_internal_box { 0pt }
+ \box_set_ht:Nn \l_@@_internal_box
+ { \l_@@_ury_dim - \l_@@_lly_dim }
+ \box_set_wd:Nn \l_@@_internal_box
+ { \l_@@_urx_dim - \l_@@_llx_dim }
+ \box_use_drop:N \l_@@_internal_box
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\graphics_show_list:, \graphics_log_list:, \@@_list:N}
+% \begin{macro}[EXP]{\@@_list_aux:n}
+% A function to list all graphic files used.
+% \begin{macrocode}
+\cs_new_protected:Npn \graphics_show_list: { \@@_list:N \msg_show:nneeee }
+\cs_new_protected:Npn \graphics_log_list: { \@@_list:N \msg_log:nneeee }
+\cs_new_protected:Npn \@@_list:N #1
+ {
+ \seq_remove_duplicates:N \g_@@_record_seq
+ #1 { kernel } { file-list }
+ { \seq_map_function:NN \g_@@_record_seq \@@_list_aux:n }
+ { } { } { }
+ }
+\cs_new:Npn \@@_list_aux:n #1 { \iow_newline: #1 }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Utility functions}
+%
+% \begin{macro}{\graphics_get_full_name:nN}
+% \begin{macro}[TF]{\graphics_get_full_name:nN}
+% \begin{macro}{\@@_get_full_name:n}
+% As well as searching by path, etc., there is a need here to check that
+% we do not trip over |foo.bar| if |.bar| is not a known extension for
+% the current backend.
+% \begin{macrocode}
+\cs_new_protected:Npn \graphics_get_full_name:nN #1#2
+ {
+ \graphics_get_full_name:nNF {#1} #2
+ { \tl_set:Nn #2 { \q_no_value } }
+ }
+\prg_new_protected_conditional:Npnn \graphics_get_full_name:nN #1#2
+ { T , F , TF }
+ {
+ \group_begin:
+ \seq_set_eq:NN \l_file_search_path_seq \l_graphics_search_path_seq
+ \file_get_full_name:nNTF {#1} \l_@@_full_name_str
+ {
+ \str_if_eq:eeTF { \l_@@_full_name_str } { #1 .tex }
+ { \@@_get_full_name:n {#1} }
+ {
+ \file_parse_full_name:VNNN \l_@@_full_name_str
+ \l_@@_dir_str \l_@@_name_str \l_@@_ext_str
+ \seq_map_inline:Nn \l_graphics_search_ext_seq
+ {
+ \str_if_eq:nVT {##1} \l_@@_ext_str
+ { \seq_map_break:n { \use_none:nn } }
+ }
+ \@@_get_full_name:n {#1}
+ }
+ }
+ { \@@_get_full_name:n {#1} }
+ \exp_args:NNNV \group_end:
+ \tl_set:Nn #2 \l_@@_full_name_str
+ \tl_if_empty:NTF #2
+ { \prg_return_false: }
+ { \prg_return_true: }
+ }
+\cs_new_protected:Npn \@@_get_full_name:n #1
+ {
+ \str_clear:N \l_@@_full_name_str
+ \seq_map_inline:Nn \l_graphics_search_ext_seq
+ {
+ \file_get_full_name:nNT { #1 ##1 } \l_@@_full_name_str
+ { \seq_map_break:n { \use_none:nn } }
+ }
+ \use:n
+ { \str_clear:N \l_@@_full_name_str }
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}{\graphics_get_pagecount:nN}
+% \begin{macro}{\@@_get_pagecount:n}
+% \begin{macro}{\@@_get_pagecount:nw}
+% A generic function to read the number of pages in a graphic file. This is
+% used by all of the backend where there is not a dedicated primitive. The
+% plan is essentially the same as reading the bounding box. To avoid multiple
+% calls, the value is cached either here or in the backend.
+% \begin{macrocode}
+\cs_new_protected:Npn \graphics_get_pagecount:nN #1#2
+ {
+ \group_begin:
+ \seq_set_eq:NN \l_file_search_path_seq \l_graphics_search_path_seq
+ \file_get_full_name:nNTF {#1} \l_@@_full_name_str
+ {
+ \int_if_exist:cF { c_@@_ \l_@@_full_name_str _pages_int }
+ {
+ \exp_args:NV \@@_backend_get_pagecount:n
+ \l_@@_full_name_str
+ }
+ \tl_set:Nv #2 { c_@@_ \l_@@_full_name_str _pages_int }
+ }
+ {
+ \tl_set:Nn #2 { 0 }
+ \msg_error:nnn { graphics } { graphic-not-found } {#1}
+ }
+ \exp_args:NNNV \group_end:
+ \tl_set:Nn #2 #2
+ }
+\cs_new_protected:Npe \@@_get_pagecount:n #1
+ {
+ \exp_not:N \ior_shell_open:Nn \exp_not:N \l_@@_internal_ior
+ { extractbb~-O~#1 }
+ \exp_not:N \ior_if_eof:NTF \exp_not:N \l_@@_internal_ior
+ { \msg_error:nnn { graphics } { pipe-failed } }
+ {
+ \ior_str_map_inline:Nn \exp_not:N \l_@@_internal_ior
+ {
+ \exp_not:N \@@_get_pagecount:nw {#1}
+ ##1 ~ \c_colon_str \c_colon_str \s_@@_stop
+ }
+ \exp_not:N \int_if_exist:cF { c_@@_ #1 _pages_int }
+ { \int_const:cn { c_@@_ #1 _pages_int } { 1 } }
+ }
+ \ior_close:N \exp_not:N \l_@@_internal_ior
+ }
+\use:e
+ {
+ \cs_new_protected:Npn \exp_not:N \@@_get_pagecount:nw
+ #1#2 \c_colon_str #3 \c_colon_str #4 \s_@@_stop
+ {
+ \exp_not:N \str_if_eq:nnT
+ { \c_percent_str \c_percent_str Pages }
+ {#2}
+ {
+ \int_const:cn { c_@@_ #1 _pages_int } {#3}
+ \exp_not:N \ior_map_break:
+ }
+ }
+ }
+% \end{macrocode}
+% \end{macro}
+% \end{macro}
+% \end{macro}
+%
+% \subsection{Messages}
+%
+% \begin{macrocode}
+\msg_new:nnnn { graphics } { graphic-not-found }
+ { Image~file~'#1'~not~found. }
+ {
+ LaTeX~tried~to~open~graphic~file~'#1',~
+ but~the~file~could~not~be~read.
+ }
+\msg_new:nnnn { graphics } { pipe-failed }
+ { Cannot~run~piped~system~commands. }
+ {
+ LaTeX~tried~to~call~a~system~process~but~this~was~not~possible.\\
+ Try~the~"--shell-escape"~(or~"--enable-pipes")~option.
+ }
+\msg_new:nnnn { graphics } { unsupported-graphic-type }
+ { Image~type~'#1'~not~supported~by~current~driver. }
+ {
+ LaTeX~was~asked~to~include~an~graphic~of~type~'#1',~
+ but~this~is~not~supported~by~the~current~driver~(production~route).
+ }
+% \end{macrocode}
+%
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+%
+% \end{implementation}
+%
+% \PrintIndex
Property changes on: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3graphics.dtx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3int.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3int.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3int.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3intarray.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3intarray.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3intarray.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3kernel-functions.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3kernel-functions.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3kernel-functions.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3keys.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3keys.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3keys.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3legacy.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3legacy.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3legacy.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3luatex.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3luatex.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3luatex.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3msg.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3msg.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3msg.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3names.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3names.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3names.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3pdf.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3pdf.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3pdf.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3prg.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3prg.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3prg.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3prop.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3prop.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3prop.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3quark.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3quark.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3quark.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3regex.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3regex.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3regex.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3seq.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3seq.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3seq.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3skip.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3skip.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3skip.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3sort.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3sort.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3sort.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3str-convert.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3str-convert.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3str-convert.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3str.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3str.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3str.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3sys.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3sys.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3sys.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3text-case.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3text-case.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3text-case.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3text-map.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3text-map.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3text-map.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3text-purify.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3text-purify.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3text-purify.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3text.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3text.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3text.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3tl-analysis.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3tl-analysis.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3tl-analysis.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -44,7 +44,7 @@
% }^^A
% }
%
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3tl-build.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3tl-build.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3tl-build.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3tl.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3tl.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3tl.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3token.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3token.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3token.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3unicode.dtx
===================================================================
--- trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3unicode.dtx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/source/latex-dev/l3kernel/l3unicode.dtx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2025-03-10}
+% \date{Released 2025-03-26}
%
% \maketitle
%
Modified: trunk/Master/texmf-dist/tex/latex-dev/l3kernel/expl3-code.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/l3kernel/expl3-code.tex 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/tex/latex-dev/l3kernel/expl3-code.tex 2025-03-26 20:04:37 UTC (rev 74759)
@@ -51,6 +51,7 @@
%% l3regex.dtx (with options: `package')
%% l3box.dtx (with options: `package')
%% l3color.dtx (with options: `package')
+%% l3graphics.dtx (with options: `package')
%% l3pdf.dtx (with options: `package,tex')
%% l3coffins.dtx (with options: `package')
%% l3luatex.dtx (with options: `package,tex')
@@ -75,7 +76,7 @@
%% and all files in that bundle must be distributed together.
%%
%% File: expl3.dtx
-\def\ExplFileDate{2025-03-10}%
+\def\ExplFileDate{2025-03-26}%
\begingroup
\def\next{\endgroup}%
\expandafter\ifx\csname PackageError\endcsname\relax
@@ -1673,7 +1674,7 @@
\cs_gset_protected:Npn \prg_set_conditional:Nnn
{ \__prg_generate_conditional_count:NNNnn \cs_set:Npn e }
\cs_gset_protected:Npn \prg_gset_conditional:Nnn
- { \__prg_generate_conditional_count:NNNnn \cs_set:Npn e }
+ { \__prg_generate_conditional_count:NNNnn \cs_gset:Npn e }
\cs_gset_protected:Npn \prg_new_conditional:Nnn
{ \__prg_generate_conditional_count:NNNnn \cs_new:Npn e }
\cs_gset_protected:Npn \prg_set_protected_conditional:Nnn
@@ -32136,6 +32137,385 @@
{ is~undefined. }
{ has~the~properties: #2 }
}
+%% File: l3graphics.dtx
+\cs_if_exist:NT \@expl at finalise@setup@@
+ {
+ \tl_gput_right:Nn \@expl at finalise@setup@@
+ { \declare at file@substitution { l3graphics.sty } { null.tex } }
+ }
+\dim_new:N \l__graphics_internal_dim
+\ior_new:N \l__graphics_internal_ior
+\tl_new:N \l__graphics_internal_tl
+\scan_new:N \s__graphics_stop
+\tl_new:N \l__graphics_pagebox_tl
+\keys_define:nn { graphics }
+ {
+ decodearray .str_set:N =
+ \l__graphics_decodearray_str ,
+ draft .bool_set:N =
+ \l__graphics_draft_bool ,
+ interpolate .bool_set:N =
+ \l__graphics_interpolate_bool ,
+ pagebox .choices:nn =
+ { art , bleed , crop , media , trim }
+ {
+ \tl_set:Ne \l__graphics_pagebox_tl
+ { \l_keys_choice_tl box }
+ } ,
+ pagebox .initial:n =
+ crop ,
+ page .int_set:N =
+ \l__graphics_page_int ,
+ pdf-attr .str_set:N =
+ \l__graphics_pdf_str ,
+ type . str_set:N =
+ \l__graphics_type_str
+ }
+\dim_new:N \l__graphics_llx_dim
+\dim_new:N \l__graphics_lly_dim
+\dim_new:N \l__graphics_urx_dim
+\dim_new:N \l__graphics_ury_dim
+\cs_new_protected:Npn \__graphics_bb_save:n #1
+ {
+ \dim_if_exist:cTF { c__graphics_ #1 _urx_dim }
+ { \msg_error:nnn { graphic } { bb-already-cached } {#1} }
+ {
+ \dim_compare:nNnF \l__graphics_llx_dim = { 0pt }
+ { \dim_const:cn { c__graphics_ #1 _llx_dim } { \l__graphics_llx_dim } }
+ \dim_compare:nNnF \l__graphics_lly_dim = { 0pt }
+ { \dim_const:cn { c__graphics_ #1 _lly_dim } { \l__graphics_lly_dim } }
+ \dim_const:cn { c__graphics_ #1 _urx_dim } { \l__graphics_urx_dim }
+ \dim_const:cn { c__graphics_ #1 _ury_dim } { \l__graphics_ury_dim }
+ }
+ }
+\cs_generate_variant:Nn \__graphics_bb_save:n { e }
+\cs_new_protected:Npn \__graphics_bb_restore:nF #1#2
+ {
+ \dim_if_exist:cTF { c__graphics_ #1 _urx_dim }
+ {
+ \dim_set_eq:Nc \l__graphics_urx_dim { c__graphics_ #1 _urx_dim }
+ \dim_set_eq:Nc \l__graphics_ury_dim { c__graphics_ #1 _ury_dim }
+ \dim_if_exist:cTF { c__graphics_ #1 _llx_dim }
+ { \dim_set_eq:Nc \l__graphics_llx_dim { c__graphics_ #1 _llx_dim } }
+ { \dim_zero:N \l__graphics_llx_dim }
+ \dim_if_exist:cTF { c__graphics_ #1 _lly_dim }
+ { \dim_set_eq:Nc \l__graphics_lly_dim { c__graphics_ #1 _lly_dim } }
+ { \dim_zero:N \l__graphics_lly_dim }
+ }
+ {#2}
+ }
+\cs_generate_variant:Nn \__graphics_bb_restore:nF { e }
+\cs_new_protected:Npn \__graphics_extract_bb:n #1
+ {
+ \int_compare:nNnTF \l__graphics_page_int > 0
+ { \__graphics_extract_bb_auxi:Vn \l__graphics_page_int {#1} }
+ { \__graphics_extract_bb_auxii:nnn {#1} { } { } }
+ }
+\cs_new_protected:Npn \__graphics_extract_bb_auxi:nn #1#2
+ { \__graphics_extract_bb_auxii:nnn {#2} { :P #1 } { -p~#1~ } }
+\cs_generate_variant:Nn \__graphics_extract_bb_auxi:nn { Vn }
+\cs_new_protected:Npn \__graphics_extract_bb_auxii:nnn #1#2#3
+ {
+ \tl_if_empty:NTF \l__graphics_pagebox_tl
+ { \__graphics_extract_bb_auxiv:nnn }
+ { \__graphics_extract_bb_auxiii:Vnnn \l__graphics_pagebox_tl }
+ {#1} {#2} {#3}
+ }
+\cs_new_protected:Npn \__graphics_extract_bb_auxiii:nnnn #1#2#3#4
+ { \__graphics_extract_bb_auxiv:nnn {#2} { : #1 #3 } { #4 -B~#1~ } }
+\cs_generate_variant:Nn \__graphics_extract_bb_auxiii:nnnn { V }
+\cs_new_protected:Npn \__graphics_extract_bb_auxiv:nnn #1#2#3
+ {
+ \__graphics_read_bb_auxi:nnnn {#1} {#2}
+ { \ior_shell_open:Nn \l__graphics_internal_ior { extractbb~#3-O~#1 } }
+ { pipe-failed }
+ }
+\cs_new_protected:Npn \__graphics_read_bb:n #1
+ {
+ \__graphics_read_bb_auxi:nnnn {#1} { }
+ { \ior_open:Nn \l__graphics_internal_ior {#1} }
+ { graphic-not-found }
+ }
+\cs_new_protected:Npn \__graphics_read_bb_auxi:nnnn #1#2#3#4
+ {
+ \__graphics_bb_restore:nF {#1#2}
+ { \__graphics_read_bb_auxii:nnnn {#3} {#4} {#1} {#2} }
+ }
+\cs_new_protected:Npe \__graphics_read_bb_auxii:nnnn #1#2#3#4
+ {
+ #1
+ \exp_not:N \ior_if_eof:NTF \exp_not:N \l__graphics_internal_ior
+ { \msg_error:nnn { graphics } {#2} {#3} }
+ {
+ \ior_str_map_inline:Nn \exp_not:N \l__graphics_internal_ior
+ {
+ \exp_not:N \__graphics_read_bb_auxiii:w
+ ##1 ~ \c_colon_str \s__graphics_stop
+ }
+ \__graphics_bb_save:n {#3#4}
+ }
+ \ior_close:N \exp_not:N \l__graphics_internal_ior
+ }
+\use:e
+ {
+ \cs_new_protected:Npn \exp_not:N \__graphics_read_bb_auxiii:w
+ #1 \c_colon_str #2 \s__graphics_stop
+ {
+ \exp_not:N \str_if_eq:nnT
+ { \c_percent_str \c_percent_str BoundingBox }
+ {#1}
+ { \exp_not:N \__graphics_read_bb_auxiv:w #2 ( ) \s__graphics_stop }
+ }
+ }
+\cs_new_protected:Npn \__graphics_read_bb_auxiv:w #1 ( #2 ) #3 \s__graphics_stop
+ {
+ \str_if_eq:nnF {#2} { atend }
+ {
+ \tl_set_rescan:Nne \l__graphics_internal_tl
+ {
+ \char_set_catcode_space:n { 9 }
+ \char_set_catcode_space:n { 32 }
+ }
+ { \use:n #1 }
+ \exp_after:wN \__graphics_read_bb_auxv:w \l__graphics_internal_tl \s__graphics_stop
+ }
+ }
+\cs_new_protected:Npn \__graphics_read_bb_auxv:w #1~#2~#3~#4~#5 \s__graphics_stop
+ {
+ \dim_set:Nn \l__graphics_llx_dim { #1 bp }
+ \dim_set:Nn \l__graphics_lly_dim { #2 bp }
+ \dim_set:Nn \l__graphics_urx_dim { #3 bp }
+ \dim_set:Nn \l__graphics_ury_dim { #4 bp }
+ \ior_map_break:
+ }
+\str_new:N \l__graphics_final_name_str
+\str_new:N \l__graphics_full_name_str
+\box_new:N \l__graphics_internal_box
+\str_new:N \l__graphics_dir_str
+\str_new:N \l__graphics_name_str
+\str_new:N \l__graphics_ext_str
+\seq_new:N \l_graphics_search_path_seq
+\seq_new:N \l_graphics_search_ext_seq
+\prop_new:N \l_graphics_ext_type_prop
+\prop_put:Nnn \l_graphics_ext_type_prop { .ps } { eps }
+\seq_new:N \g__graphics_record_seq
+\cs_new_protected:Npn \graphics_include:nn #1#2
+ {
+ \group_begin:
+ \keys_set:nn { graphics } {#1}
+ \seq_set_eq:NN \l_file_search_path_seq \l_graphics_search_path_seq
+ \file_get_full_name:nNTF {#2} \l__graphics_full_name_str
+ {
+ \str_if_eq:eeTF { \l__graphics_full_name_str } { #2 .tex }
+ { \msg_error:nnn { graphics } { graphic-not-found } {#2} }
+ { \__graphics_include: }
+ }
+ { \msg_error:nnn { graphics } { graphic-not-found } {#2} }
+ \group_end:
+ }
+\cs_generate_variant:Nn \graphics_include:nn { nV }
+\cs_new_protected:Npn \__graphics_include:
+ {
+ \str_if_empty:NTF \l__graphics_type_str
+ {
+ \file_parse_full_name:VNNN \l__graphics_full_name_str
+ \l__graphics_dir_str \l__graphics_name_str \l__graphics_ext_str
+ \__graphics_include_auxi:e
+ {
+ \exp_args:Ne \str_tail:n
+ { \str_casefold:V \l__graphics_ext_str }
+ }
+ }
+ { \__graphics_include_auxi:e { \l__graphics_type_str } }
+ }
+\cs_new_protected:Npn \__graphics_include_auxi:n #1
+ {
+ \prop_get:NnNF \l_graphics_ext_type_prop { .#1 } \l__graphics_internal_tl
+ { \tl_set:Nn \l__graphics_internal_tl {#1} }
+ \exp_args:NV \__graphics_include_auxii:n \l__graphics_internal_tl
+ }
+\cs_generate_variant:Nn \__graphics_include_auxi:n { e }
+\cs_new_protected:Npn \__graphics_include_auxii:n #1
+ {
+ \mode_leave_vertical:
+ \cs_if_exist:cTF { __graphics_backend_include_ #1 :n }
+ {
+ \tl_set_eq:NN \l__graphics_final_name_str \l__graphics_full_name_str
+ \str_set:Ne \l__graphics_full_name_str
+ { \exp_args:NV \__kernel_file_name_quote:n \l__graphics_full_name_str }
+ \exp_args:NnV \use:c { __graphics_backend_getbb_ #1 :n }
+ \l__graphics_full_name_str
+ \seq_gput_right:NV \g__graphics_record_seq \l__graphics_final_name_str
+ \clist_if_exist:NT \@filelist
+ { \exp_args:NV \@addtofilelist \l__graphics_final_name_str }
+ \bool_if:NTF \l__graphics_draft_bool
+ { \__graphics_include_auxiii:n }
+ { \__graphics_include_auxiv:n }
+ {#1}
+ }
+ { \msg_error:nnn { graphics } { unsupported-graphic-type } {#1} }
+ }
+\cs_new_protected:Npn \__graphics_include_auxiii:n #1
+ {
+ \hbox_to_wd:nn { \l__graphics_urx_dim - \l__graphics_llx_dim }
+ {
+ \tex_vrule:D
+ \tex_hss:D
+ \vbox_to_ht:nn
+ { \l__graphics_ury_dim - \l__graphics_lly_dim }
+ {
+ \tex_hrule:D width
+ \dim_eval:n { \l__graphics_urx_dim - \l__graphics_llx_dim }
+ \tex_vss:D
+ \hbox_to_wd:nn
+ { \l__graphics_urx_dim - \l__graphics_llx_dim }
+ {
+ \ttfamily
+ \tex_hss:D \l__graphics_full_name_str \tex_hss:D
+ }
+ \tex_vss:D
+ \tex_hrule:D
+ }
+ \tex_hss:D
+ \tex_vrule:D
+ }
+ }
+\cs_new_protected:Npn \__graphics_include_auxiv:n #1
+ {
+ \hbox_set:Nn \l__graphics_internal_box
+ {
+ \exp_args:NnV \use:c { __graphics_backend_include_ #1 :n }
+ \l__graphics_full_name_str
+ }
+ \box_set_dp:Nn \l__graphics_internal_box { 0pt }
+ \box_set_ht:Nn \l__graphics_internal_box
+ { \l__graphics_ury_dim - \l__graphics_lly_dim }
+ \box_set_wd:Nn \l__graphics_internal_box
+ { \l__graphics_urx_dim - \l__graphics_llx_dim }
+ \box_use_drop:N \l__graphics_internal_box
+ }
+\cs_new_protected:Npn \graphics_show_list: { \__graphics_list:N \msg_show:nneeee }
+\cs_new_protected:Npn \graphics_log_list: { \__graphics_list:N \msg_log:nneeee }
+\cs_new_protected:Npn \__graphics_list:N #1
+ {
+ \seq_remove_duplicates:N \g__graphics_record_seq
+ #1 { kernel } { file-list }
+ { \seq_map_function:NN \g__graphics_record_seq \__graphics_list_aux:n }
+ { } { } { }
+ }
+\cs_new:Npn \__graphics_list_aux:n #1 { \iow_newline: #1 }
+\cs_new_protected:Npn \graphics_get_full_name:nN #1#2
+ {
+ \graphics_get_full_name:nNF {#1} #2
+ { \tl_set:Nn #2 { \q_no_value } }
+ }
+\prg_new_protected_conditional:Npnn \graphics_get_full_name:nN #1#2
+ { T , F , TF }
+ {
+ \group_begin:
+ \seq_set_eq:NN \l_file_search_path_seq \l_graphics_search_path_seq
+ \file_get_full_name:nNTF {#1} \l__graphics_full_name_str
+ {
+ \str_if_eq:eeTF { \l__graphics_full_name_str } { #1 .tex }
+ { \__graphics_get_full_name:n {#1} }
+ {
+ \file_parse_full_name:VNNN \l__graphics_full_name_str
+ \l__graphics_dir_str \l__graphics_name_str \l__graphics_ext_str
+ \seq_map_inline:Nn \l_graphics_search_ext_seq
+ {
+ \str_if_eq:nVT {##1} \l__graphics_ext_str
+ { \seq_map_break:n { \use_none:nn } }
+ }
+ \__graphics_get_full_name:n {#1}
+ }
+ }
+ { \__graphics_get_full_name:n {#1} }
+ \exp_args:NNNV \group_end:
+ \tl_set:Nn #2 \l__graphics_full_name_str
+ \tl_if_empty:NTF #2
+ { \prg_return_false: }
+ { \prg_return_true: }
+ }
+\cs_new_protected:Npn \__graphics_get_full_name:n #1
+ {
+ \str_clear:N \l__graphics_full_name_str
+ \seq_map_inline:Nn \l_graphics_search_ext_seq
+ {
+ \file_get_full_name:nNT { #1 ##1 } \l__graphics_full_name_str
+ { \seq_map_break:n { \use_none:nn } }
+ }
+ \use:n
+ { \str_clear:N \l__graphics_full_name_str }
+ }
+\cs_new_protected:Npn \graphics_get_pagecount:nN #1#2
+ {
+ \group_begin:
+ \seq_set_eq:NN \l_file_search_path_seq \l_graphics_search_path_seq
+ \file_get_full_name:nNTF {#1} \l__graphics_full_name_str
+ {
+ \int_if_exist:cF { c__graphics_ \l__graphics_full_name_str _pages_int }
+ {
+ \exp_args:NV \__graphics_backend_get_pagecount:n
+ \l__graphics_full_name_str
+ }
+ \tl_set:Nv #2 { c__graphics_ \l__graphics_full_name_str _pages_int }
+ }
+ {
+ \tl_set:Nn #2 { 0 }
+ \msg_error:nnn { graphics } { graphic-not-found } {#1}
+ }
+ \exp_args:NNNV \group_end:
+ \tl_set:Nn #2 #2
+ }
+\cs_new_protected:Npe \__graphics_get_pagecount:n #1
+ {
+ \exp_not:N \ior_shell_open:Nn \exp_not:N \l__graphics_internal_ior
+ { extractbb~-O~#1 }
+ \exp_not:N \ior_if_eof:NTF \exp_not:N \l__graphics_internal_ior
+ { \msg_error:nnn { graphics } { pipe-failed } }
+ {
+ \ior_str_map_inline:Nn \exp_not:N \l__graphics_internal_ior
+ {
+ \exp_not:N \__graphics_get_pagecount:nw {#1}
+ ##1 ~ \c_colon_str \c_colon_str \s__graphics_stop
+ }
+ \exp_not:N \int_if_exist:cF { c__graphics_ #1 _pages_int }
+ { \int_const:cn { c__graphics_ #1 _pages_int } { 1 } }
+ }
+ \ior_close:N \exp_not:N \l__graphics_internal_ior
+ }
+\use:e
+ {
+ \cs_new_protected:Npn \exp_not:N \__graphics_get_pagecount:nw
+ #1#2 \c_colon_str #3 \c_colon_str #4 \s__graphics_stop
+ {
+ \exp_not:N \str_if_eq:nnT
+ { \c_percent_str \c_percent_str Pages }
+ {#2}
+ {
+ \int_const:cn { c__graphics_ #1 _pages_int } {#3}
+ \exp_not:N \ior_map_break:
+ }
+ }
+ }
+\msg_new:nnnn { graphics } { graphic-not-found }
+ { Image~file~'#1'~not~found. }
+ {
+ LaTeX~tried~to~open~graphic~file~'#1',~
+ but~the~file~could~not~be~read.
+ }
+\msg_new:nnnn { graphics } { pipe-failed }
+ { Cannot~run~piped~system~commands. }
+ {
+ LaTeX~tried~to~call~a~system~process~but~this~was~not~possible.\\
+ Try~the~"--shell-escape"~(or~"--enable-pipes")~option.
+ }
+\msg_new:nnnn { graphics } { unsupported-graphic-type }
+ { Image~type~'#1'~not~supported~by~current~driver. }
+ {
+ LaTeX~was~asked~to~include~an~graphic~of~type~'#1',~
+ but~this~is~not~supported~by~the~current~driver~(production~route).
+ }
%% File: l3pdf.dtx
\scan_new:N \s__pdf_stop
\bool_new:N \g__pdf_init_bool
Modified: trunk/Master/texmf-dist/tex/latex-dev/l3kernel/expl3-generic.tex
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/l3kernel/expl3-generic.tex 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/tex/latex-dev/l3kernel/expl3-generic.tex 2025-03-26 20:04:37 UTC (rev 74759)
@@ -19,7 +19,7 @@
%% and all files in that bundle must be distributed together.
%%
%% File: expl3.dtx
-\def\ExplFileDate{2025-03-10}%
+\def\ExplFileDate{2025-03-26}%
\let\ExplLoaderFileDate\ExplFileDate
\begingroup
\catcode`\_=11
Modified: trunk/Master/texmf-dist/tex/latex-dev/l3kernel/expl3.ltx
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/l3kernel/expl3.ltx 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/tex/latex-dev/l3kernel/expl3.ltx 2025-03-26 20:04:37 UTC (rev 74759)
@@ -19,7 +19,7 @@
%% and all files in that bundle must be distributed together.
%%
%% File: expl3.dtx
-\def\ExplFileDate{2025-03-10}%
+\def\ExplFileDate{2025-03-26}%
\let\ExplLoaderFileDate\ExplFileDate
\begingroup
\catcode`\_=11
Modified: trunk/Master/texmf-dist/tex/latex-dev/l3kernel/expl3.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/l3kernel/expl3.sty 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/tex/latex-dev/l3kernel/expl3.sty 2025-03-26 20:04:37 UTC (rev 74759)
@@ -19,7 +19,7 @@
%% and all files in that bundle must be distributed together.
%%
%% File: expl3.dtx
-\def\ExplFileDate{2025-03-10}%
+\def\ExplFileDate{2025-03-26}%
\let\ExplLoaderFileDate\ExplFileDate
\ProvidesPackage{expl3}
[%
Modified: trunk/Master/texmf-dist/tex/latex-dev/l3kernel/l3debug.def
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/l3kernel/l3debug.def 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/tex/latex-dev/l3kernel/l3debug.def 2025-03-26 20:04:37 UTC (rev 74759)
@@ -19,7 +19,7 @@
%% and all files in that bundle must be distributed together.
%%
%% File: l3debug.dtx
-\ProvidesExplFile{l3debug.def}{2025-03-10}{}{L3 Debugging support}
+\ProvidesExplFile{l3debug.def}{2025-03-26}{}{L3 Debugging support}
\scan_new:N \s__debug_stop
\cs_new:Npn \__debug_use_i_delimit_by_s_stop:nw #1 #2 \s__debug_stop {#1}
\quark_new:N \q__debug_recursion_tail
Modified: trunk/Master/texmf-dist/tex/latex-dev/l3kernel/l3doc.cls
===================================================================
--- trunk/Master/texmf-dist/tex/latex-dev/l3kernel/l3doc.cls 2025-03-26 20:04:02 UTC (rev 74758)
+++ trunk/Master/texmf-dist/tex/latex-dev/l3kernel/l3doc.cls 2025-03-26 20:04:37 UTC (rev 74759)
@@ -20,7 +20,7 @@
%%
%% File: l3doc.dtx
\RequirePackage{calc}
-\ProvidesExplClass{l3doc}{2025-03-10}{}
+\ProvidesExplClass{l3doc}{2025-03-26}{}
{L3 Experimental documentation class}
\clist_new:N \g_docinput_clist
\seq_new:N \g_doc_functions_seq
More information about the tex-live-commits
mailing list.