[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