[latex3-commits] [l3svn] branch master updated: Rs-add "pagebox" support in l3image
noreply at latex-project.org
noreply at latex-project.org
Thu Jun 1 21:49:40 CEST 2017
This is an automated email from the git hooks/post-receive script.
joseph pushed a commit to branch master
in repository l3svn.
The following commit(s) were added to refs/heads/master by this push:
new dd385a7 Rs-add "pagebox" support in l3image
dd385a7 is described below
commit dd385a70e63781adfd7a2ec025d712c2a763d538
Author: Joseph Wright <joseph.wright at morningstar2.co.uk>
Date: Thu Jun 1 21:47:02 2017 +0200
Rs-add "pagebox" support in l3image
As raised on GitHub for the 2e driver set, there are applications
which produce various pagebox specs. Support is not complex, so
is re-introduced here. Note that the "cropbox" option is the standard
but is always given explicitly for PDF images (as this avoids any
binary variation in what is selected).
---
l3kernel/l3drivers.dtx | 40 +++++++++++++++++++++++++++++--
l3kernel/testfiles/m3expl001.xetex.tlg | 4 ++++
l3kernel/testfiles/m3expl003.xetex.tlg | 4 ++++
l3trial/l3image/l3image.dtx | 41 +++++++++++++++++++++++++++++---
4 files changed, 84 insertions(+), 5 deletions(-)
diff --git a/l3kernel/l3drivers.dtx b/l3kernel/l3drivers.dtx
index 68bb90e..5e70195 100644
--- a/l3kernel/l3drivers.dtx
+++ b/l3kernel/l3drivers.dtx
@@ -720,11 +720,13 @@
\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
{
\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
@@ -735,6 +737,7 @@
{
\int_compare:nNnT \l__image_page_int > 0
{ :P \int_use:N \l__image_page_int }
+ : \l__image_pagebox_tl
}
\@@_image_getbb_auxi:n {#1}
}
@@ -760,6 +763,8 @@
{ attr ~ { /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__image_tmp_box
{ \pdftex_pdfrefximage:D \pdftex_pdflastximage:D }
@@ -947,6 +952,7 @@
\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
@@ -995,6 +1001,8 @@
{
\@@_image_include_auxii:xnn
{
+ \tl_if_empty:NF \l__image_pagebox_tl
+ { : \l__image_pagebox_tl }
\int_compare:nNnT \l__image_page_int > 0
{ :P \int_use:N \l__image_page_int }
\bool_if:NT \l__image_interpolate_bool
@@ -1022,6 +1030,8 @@
@image \int_use:c { c__image_ #1#2 _int }
\int_compare:nNnT \l__image_page_int > 0
{ 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 }
(#1)
\bool_if:NT \l__image_interpolate_bool
{ <</Interpolate~true>> }
@@ -1085,8 +1095,14 @@
% \begin{macro}[aux]{\@@_image_getbb_auxi:nN}
% \begin{macro}[aux]{\@@_image_getbb_auxii:nnN, \@@_image_getbb_auxii:VnN}
% \begin{macro}[aux]{\@@_image_getbb_auxiii:nNnn}
+% \begin{macro}[aux]{\@@_image_getbb_auxiv:nnNnn, \@@_image_getbb_auxiv:VnNnn}
+% \begin{macro}[aux]{\@@_image_getbb_auxv:nNnn, \@@_image_getbb_auxv:nNnn}
+% \begin{macro}[aux, 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 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
{
@@ -1103,10 +1119,26 @@
{ \@@_image_getbb_auxiii:nNnn {#1} #2 }
}
\cs_new_protected:Npn \@@_image_getbb_auxii:nnN #1#2#3
- { \@@_image_getbb_auxiii:nNnn {#2} #3 { :P #1 } { page #1 } }
+ { \@@_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
+ {
\dim_if_exist:cTF { c__image_ #1#3 _ht_dim }
{
\dim_set_eq:Nc \l__image_ht_dim { c__image_ #1#3 _ht_dim }
@@ -1124,11 +1156,15 @@
\dim_const:cn { c__image_ #1#3 _wd_dim }
{ \l__image_wd_dim }
}
+\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{macrocode}
%</xdvipdfmx>
diff --git a/l3kernel/testfiles/m3expl001.xetex.tlg b/l3kernel/testfiles/m3expl001.xetex.tlg
index 66a524e..54ea8e7 100644
--- a/l3kernel/testfiles/m3expl001.xetex.tlg
+++ b/l3kernel/testfiles/m3expl001.xetex.tlg
@@ -5644,7 +5644,11 @@ Defining \__driver_image_getbb_auxi:nN on line ...
Defining \__driver_image_getbb_auxii:nnN on line ...
Defining \__driver_image_getbb_auxii:VnN on line ...
Defining \__driver_image_getbb_auxiii:nNnn on line ...
+Defining \__driver_image_getbb_auxiv:nnNnn on line ...
+Defining \__driver_image_getbb_auxiv:VnNnn on line ...
+Defining \__driver_image_getbb_auxv:nNnn on line ...
Defining \__driver_image_getbb_auxvi:nNnn on line ...
+Defining \__driver_image_getbb_pagebox:w on line ...
Defining \__driver_draw_literal:n on line ...
Defining \__driver_draw_literal:x on line ...
Defining \__driver_draw_begin: on line ...
diff --git a/l3kernel/testfiles/m3expl003.xetex.tlg b/l3kernel/testfiles/m3expl003.xetex.tlg
index 9b5162b..20e55f1 100644
--- a/l3kernel/testfiles/m3expl003.xetex.tlg
+++ b/l3kernel/testfiles/m3expl003.xetex.tlg
@@ -5645,7 +5645,11 @@ Defining \__driver_image_getbb_auxi:nN on line ...
Defining \__driver_image_getbb_auxii:nnN on line ...
Defining \__driver_image_getbb_auxii:VnN on line ...
Defining \__driver_image_getbb_auxiii:nNnn on line ...
+Defining \__driver_image_getbb_auxiv:nnNnn on line ...
+Defining \__driver_image_getbb_auxiv:VnNnn on line ...
+Defining \__driver_image_getbb_auxv:nNnn on line ...
Defining \__driver_image_getbb_auxvi:nNnn on line ...
+Defining \__driver_image_getbb_pagebox:w on line ...
Defining \__driver_draw_literal:n on line ...
Defining \__driver_draw_literal:x on line ...
Defining \__driver_draw_begin: on line ...
diff --git a/l3trial/l3image/l3image.dtx b/l3trial/l3image/l3image.dtx
index 26bbaee..899a5d7 100644
--- a/l3trial/l3image/l3image.dtx
+++ b/l3trial/l3image/l3image.dtx
@@ -62,6 +62,13 @@
% PDF file as an image. This key will be ignored for non-PDF images.
% \end{variable}
%
+% \begin{variable}{pagebox}
+% The page box setting used when determining the bounding box of an image:
+% used for |.pdf| images which may present multiple page boxes. Valid
+% settings are |artbox|, |bleedbox|, |cropbox| (the standard setting),
+% |mediabox| and |trimbox|.
+% \end{variable}
+%
% \subsection{Internal functions}
%
% Inclusion of image files requires a range of low-level data be passed to
@@ -78,6 +85,12 @@
% which may contain multiple pages.
% \end{variable}
%
+% \begin{variable}{\l__image_pagebox_tl}
+% The nature of the page box setting used to determine the bounding box of
+% material: used for |.pdf| files which feature multiple page box
+% specifications.
+% \end{variable}
+%
% \begin{variable}{\l__image_ht_dim, \l__image_wd_dim}
% Dimensions holding the height and width of the image file.
% These values may be extracted/read from the image files themselves
@@ -164,13 +177,21 @@
%
% \subsection{Image feature support}
%
-% \begin{macro}[int]{\l__image_interpolate_bool, \l__image_page_int}
-% Keys which control features of images.
+% \begin{macro}[int]
+% {\l__image_interpolate_bool, \l__image_page_int, \l__image_pagebox_tl}
+% Keys which control features of images. The standard value of |[pagebox|
+% set up here should match the default for the drivers themselves: in
+% the absence of any other setting the |cropbox| should be used.
% \begin{macrocode}
+\tl_new:N \l__image_pagebox_tl
\keys_define:nn { image }
{
interpolate .bool_set:N = \l__image_interpolate_bool ,
- page .int_set:N = \l__image_page_int
+ page .int_set:N = \l__image_page_int ,
+ pagebox .choices:nn =
+ { artbox , bleedbox , cropbox , mediabox , trimbox }
+ { \tl_set:Nn \l__image_pagebox_tl {#1} },
+ pagebox .initial:n = cropbox
}
% \end{macrocode}
% \end{macro}
@@ -188,6 +209,8 @@
% \begin{macro}[int]{\__image_extract_bb:n, \__image_read_bb:n}
% \begin{macro}[aux]{\@@_extract_bb_auix:nn, \@@_extract_bb_auix:Vn}
% \begin{macro}[aux]{\@@_extract_bb_auxii:nnn}
+% \begin{macro}[aux]{\@@_extract_bb_auxiii:nnnn, \@@_extract_bb_auxiii:Vnnn}
+% \begin{macro}[aux]{\@@_extract_bb_auxiv:nnn}
% \begin{macro}[aux]{\@@_read_bb_auxi:nnnn, \@@_read_bb_auxii:Vnnn}
% \begin{macro}[aux]
% {
@@ -214,6 +237,16 @@
\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__image_pagebox_tl
+ { \@@_extract_bb_auxiv:nnn }
+ { \@@_extract_bb_auxiii:Vnnn \l__image_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}
{ \tex_openin:D \l_@@_tmp_ior = "|extractbb~#3-O~#1" }
{ pipe-failed }
@@ -306,6 +339,8 @@
% \end{macro}
% \end{macro}
% \end{macro}
+% \end{macro}
+% \end{macro}
%
% \subsection{Messages}
%
--
To stop receiving notification emails like this one, please contact
the administrator of this repository.
More information about the latex3-commits
mailing list