[latex3-commits] [l3svn] 06/06: Basic image inclusion drivers (excl. dvisvgm)

noreply at latex-project.org noreply at latex-project.org
Sun May 14 16:58:29 CEST 2017


This is an automated email from the git hooks/post-receive script.

joseph pushed a commit to branch master
in repository l3svn.

commit c133f17dc92c1cf26c19cc90aa3b1a3430a75eea
Author: Joseph Wright <joseph.wright at morningstar2.co.uk>
Date:   Sun May 14 15:50:45 2017 +0100

    Basic image inclusion drivers (excl. dvisvgm)
    
    To get a feel for the requirements, the aim here is to build up
    piece by piece. This commit adds enough code to insert images with
    no scaling/clipping/...
---
 l3kernel/l3drivers.dtx                  |  150 +++++++++++++++++++++++++++++++
 l3kernel/testfiles/m3expl001.luatex.tlg |    7 ++
 l3kernel/testfiles/m3expl001.ptex.tlg   |    9 ++
 l3kernel/testfiles/m3expl001.tlg        |    7 ++
 l3kernel/testfiles/m3expl001.uptex.tlg  |    9 ++
 l3kernel/testfiles/m3expl001.xetex.tlg  |   11 +++
 l3kernel/testfiles/m3expl003.luatex.tlg |    7 ++
 l3kernel/testfiles/m3expl003.ptex.tlg   |    9 ++
 l3kernel/testfiles/m3expl003.tlg        |    7 ++
 l3kernel/testfiles/m3expl003.uptex.tlg  |    9 ++
 l3kernel/testfiles/m3expl003.xetex.tlg  |   11 +++
 11 files changed, 236 insertions(+)

diff --git a/l3kernel/l3drivers.dtx b/l3kernel/l3drivers.dtx
index 4f6feec..5595dd6 100644
--- a/l3kernel/l3drivers.dtx
+++ b/l3kernel/l3drivers.dtx
@@ -690,6 +690,58 @@
 % \end{macro}
 % \end{macro}
 %
+% \subsection{Images}
+%
+% \begin{macro}[int]
+%   {\@@_image_getbb_jpg:n, \@@_image_getbb_pdf:n, \@@_image_getbb_png:n}
+% \begin{macro}[aux]{\@@_image_getbb_jpg_aux:n}
+%   Getting the bounding box here requires us to box up the image and
+%   measure it.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_image_getbb_jpg:n #1
+  {
+    \int_if_exist:cTF { c__image_ #1 _int }
+      {
+        \dim_set_eq:Nc \l__image_urx_dim { c__image_ #1 _urx__dim }
+        \dim_set_eq:Nc \l__image_ury_dim { c__image_ #1 _ury__dim }
+      }
+      { \@@_image_getbb_jpg_aux:n {#1} }
+  }
+\cs_new_protected:Npn \@@_image_getbb_jpg_aux:n #1
+  {
+    \tex_immediate:D \pdftex_pdfximage:D {#1}
+    \hbox_set:Nn \l__image_tmp_box
+      { \pdftex_pdfrefximage:D \pdftex_pdflastximage:D }
+    \int_const:cn { c__image_ #1 _int }
+      { \tex_the:D \pdftex_pdflastximage:D }
+    \dim_set:Nn \l__image_urx_dim { \box_wd:N \l__image_tmp_box }
+    \dim_set:Nn \l__image_ury_dim { \box_ht:N \l__image_tmp_box }
+    \dim_const:cn { c__image_ #1 _urx__dim }
+      { \l__image_urx_dim }
+    \dim_const:cn { c__image_ #1 _ury__dim }
+      { \l__image_ury_dim }
+  }
+\cs_new_eq:NN \@@_image_getbb_pdf:n \@@_image_getbb_jpg:n
+\cs_new_eq:NN \@@_image_getbb_png:n \@@_image_getbb_jpg:n
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
+% \begin{macro}[int]
+%   {\@@_image_include_jpg:n, \@@_image_include_pdf:n, \@@_image_include_png:n}
+%   Images are already loaded for the measurement part of the code, so
+%   inclusion is straight-forward.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_image_include_jpg:n #1
+  {
+    \pdftex_pdfrefximage:D
+      \int_use:c { c__image_ #1 _int }
+  }
+\cs_new_eq:NN \@@_image_include_pdf:n \@@_image_include_jpg:n
+\cs_new_eq:NN \@@_image_include_png:n \@@_image_include_jpg:n
+%    \end{macrocode}
+% \end{macro}
+%
 %    \begin{macrocode}
 %</pdfmode>
 %    \end{macrocode}
@@ -830,6 +882,48 @@
 % \end{macro}
 % \end{macro}
 %
+% \subsection{Images}
+%
+% \begin{macro}[int]
+%   {
+%     \@@_image_getbb_eps:n, \@@_image_getbb_jpg:n,
+%     \@@_image_getbb_pdf:n, \@@_image_getbb_png:n
+%   }
+%   Simply use the generic functions: only for \texttt{dvipdfmx} in the
+%   extraction cases.
+%    \begin{macrocode}
+\cs_new_eq:NN \@@_image_getbb_eps:n \__image_read_bb:n
+%<*dvipdfmx>
+\cs_new_eq:NN \@@_image_getbb_jpg:n \__image_extract_bb:n
+\cs_new_eq:NN \@@_image_getbb_pdf:n \__image_extract_bb:n
+\cs_new_eq:NN \@@_image_getbb_png:n \__image_extract_bb:n
+%</dvipdfmx>
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[int]
+%   {
+%     \@@_image_include_eps:n, \@@_image_include_jpg:n,
+%     \@@_image_include_pdf:n, \@@_image_include_png:n
+%   }
+%  \begin{macro}[aux]{\@@_image_include_aux:nn}
+%  The special syntax depends on the file type.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_image_include_eps:n #1
+  {
+    \tex_special:D { PSfile = #1 }
+  }
+\cs_new_protected:Npn \@@_image_include_jpg:n #1
+  { \@@_image_include_aux:nn {#1} { image } }
+\cs_new_eq:NN \@@_image_include_png:n \@@_image_include_png:n
+\cs_new_protected:Npn \@@_image_include_pdf:n #1
+  { \@@_image_include_aux:nn {#1} { epdf } }
+\cs_new_protected:Npn \@@_image_include_aux:nn #1#2
+  { \tex_special:D { pdf:#2~(#1) } }
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
 %    \begin{macrocode}
 %</dvipdfmx|xdvipdfmx>
 %    \end{macrocode}
@@ -867,6 +961,42 @@
 % \end{macro}
 % \end{macro}
 %
+% \subsection{Images}
+%
+% \begin{macro}[int]
+%   {\@@_image_getbb_jpg:n, \@@_image_getbb_pdf:n, \@@_image_getbb_png:n}
+% \begin{macro}[aux]{\@@_image_getbb_auxi:nN, \@@_image_getbb_auxi:nN}
+%   For \texttt{xdvipdfmx}, there are two primitives that allow us to obtain
+%   the bounding box without needing \texttt{extractbb}.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_image_getbb_jpg:n #1
+  { \@@_image_getbb_aux:nN {#1} \xetex_picfile:D }
+\cs_new_eq:NN \@@_image_getbb_png:n \@@_image_getbb_jpg:n
+\cs_new_protected:Npn \@@_image_getbb_pdf:n #1
+  { \@@_image_getbb_aux:nN {#1} \xetex_pdffile:D }
+\cs_new_protected:Npn \@@_image_getbb_auxi:nN #1#2
+  {
+    \dim_if_exist:cTF { c__image_ #1 _urx_dim }
+      {
+        \dim_set_eq:Nc \l__image_urx_dim { c__image_ #1 _urx__dim }
+        \dim_set_eq:Nc \l__image_ury_dim { c__image_ #1 _ury__dim }
+      }
+      { \@@_image_getbb_auxii:nN {#1} #2 }
+  }
+\cs_new_protected:Npn \@@_image_getbb_auxii:nN #1#2
+  {
+    \hbox_set:Nn \l__image_tmp_box { #2 #1 ~ }
+    \dim_set:Nn \l__image_urx_dim { \box_wd:N \l__image_tmp_box }
+    \dim_set:Nn \l__image_ury_dim { \box_ht:N \l__image_tmp_box }
+    \dim_const:cn { c__image_ #1 _urx__dim }
+      { \l__image_urx_dim }
+    \dim_const:cn { c__image_ #1 _ury__dim }
+      { \l__image_ury_dim }
+  }
+%    \end{macrocode}
+% \end{macro}
+% \end{macro}
+%
 %    \begin{macrocode}
 %</xdvipdfmx>
 %    \end{macrocode}
@@ -1372,6 +1502,26 @@
 % \end{macro}
 % \end{macro}
 %
+% \subsection{Images}
+%
+% \begin{macro}[int]{\@@_image_getbb_eps:n}
+%   Simply use the generic function.
+%    \begin{macrocode}
+\cs_new_eq:NN \@@_image_getbb_eps:n \__image_read_bb:n
+%    \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}[int]{\@@_image_include_eps:n}
+%  The special syntax is relatively clear here: remember we need PostScript
+%  sizes here.
+%    \begin{macrocode}
+\cs_new_protected:Npn \@@_image_include_eps:n #1
+  {
+    \tex_special:D { PSfile = #1 }
+  }
+%    \end{macrocode}
+% \end{macro}
+%
 % \subsection{Drawing}
 %
 % \begin{macro}[aux]{\@@_draw_literal:n, \@@_draw_literal:x}
diff --git a/l3kernel/testfiles/m3expl001.luatex.tlg b/l3kernel/testfiles/m3expl001.luatex.tlg
index f252112..f33615a 100644
--- a/l3kernel/testfiles/m3expl001.luatex.tlg
+++ b/l3kernel/testfiles/m3expl001.luatex.tlg
@@ -5060,6 +5060,13 @@ Defining \l__driver_color_stack_int on line ...
 \l__driver_color_stack_int=\count147
 Defining \__driver_color_ensure_current: on line ...
 Defining \__driver_color_reset: on line ...
+Defining \__driver_image_getbb_jpg:n on line ...
+Defining \__driver_image_getbb_jpg_aux:n on line ...
+Defining \__driver_image_getbb_pdf:n on line ...
+Defining \__driver_image_getbb_png:n on line ...
+Defining \__driver_image_include_jpg:n on line ...
+Defining \__driver_image_include_pdf:n on line ...
+Defining \__driver_image_include_png:n 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/m3expl001.ptex.tlg b/l3kernel/testfiles/m3expl001.ptex.tlg
index 680d6f6..8fe2577 100644
--- a/l3kernel/testfiles/m3expl001.ptex.tlg
+++ b/l3kernel/testfiles/m3expl001.ptex.tlg
@@ -5018,6 +5018,15 @@ Defining \__driver_box_use_scale:Nnn on line ...
 Defining \l__driver_color_current_tl on line ...
 Defining \__driver_color_ensure_current: on line ...
 Defining \__driver_color_reset: on line ...
+Defining \__driver_image_getbb_eps:n on line ...
+Defining \__driver_image_getbb_jpg:n on line ...
+Defining \__driver_image_getbb_pdf:n on line ...
+Defining \__driver_image_getbb_png:n on line ...
+Defining \__driver_image_include_eps:n on line ...
+Defining \__driver_image_include_jpg:n on line ...
+Defining \__driver_image_include_png:n on line ...
+Defining \__driver_image_include_pdf:n on line ...
+Defining \__driver_image_include_aux:nn 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/m3expl001.tlg b/l3kernel/testfiles/m3expl001.tlg
index 5f55d5d..7f0d7d3 100644
--- a/l3kernel/testfiles/m3expl001.tlg
+++ b/l3kernel/testfiles/m3expl001.tlg
@@ -5249,6 +5249,13 @@ Defining \l__driver_color_stack_int on line ...
 \l__driver_color_stack_int=\count147
 Defining \__driver_color_ensure_current: on line ...
 Defining \__driver_color_reset: on line ...
+Defining \__driver_image_getbb_jpg:n on line ...
+Defining \__driver_image_getbb_jpg_aux:n on line ...
+Defining \__driver_image_getbb_pdf:n on line ...
+Defining \__driver_image_getbb_png:n on line ...
+Defining \__driver_image_include_jpg:n on line ...
+Defining \__driver_image_include_pdf:n on line ...
+Defining \__driver_image_include_png:n 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/m3expl001.uptex.tlg b/l3kernel/testfiles/m3expl001.uptex.tlg
index 0931547..462440b 100644
--- a/l3kernel/testfiles/m3expl001.uptex.tlg
+++ b/l3kernel/testfiles/m3expl001.uptex.tlg
@@ -5219,6 +5219,15 @@ Defining \__driver_box_use_scale:Nnn on line ...
 Defining \l__driver_color_current_tl on line ...
 Defining \__driver_color_ensure_current: on line ...
 Defining \__driver_color_reset: on line ...
+Defining \__driver_image_getbb_eps:n on line ...
+Defining \__driver_image_getbb_jpg:n on line ...
+Defining \__driver_image_getbb_pdf:n on line ...
+Defining \__driver_image_getbb_png:n on line ...
+Defining \__driver_image_include_eps:n on line ...
+Defining \__driver_image_include_jpg:n on line ...
+Defining \__driver_image_include_png:n on line ...
+Defining \__driver_image_include_pdf:n on line ...
+Defining \__driver_image_include_aux:nn 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/m3expl001.xetex.tlg b/l3kernel/testfiles/m3expl001.xetex.tlg
index 3d33a52..b6d72c5 100644
--- a/l3kernel/testfiles/m3expl001.xetex.tlg
+++ b/l3kernel/testfiles/m3expl001.xetex.tlg
@@ -5028,6 +5028,17 @@ Defining \__driver_box_use_scale:Nnn on line ...
 Defining \l__driver_color_current_tl on line ...
 Defining \__driver_color_ensure_current: on line ...
 Defining \__driver_color_reset: on line ...
+Defining \__driver_image_getbb_eps:n on line ...
+Defining \__driver_image_include_eps:n on line ...
+Defining \__driver_image_include_jpg:n on line ...
+Defining \__driver_image_include_png:n on line ...
+Defining \__driver_image_include_pdf:n on line ...
+Defining \__driver_image_include_aux:nn on line ...
+Defining \__driver_image_getbb_jpg:n on line ...
+Defining \__driver_image_getbb_png:n on line ...
+Defining \__driver_image_getbb_pdf:n on line ...
+Defining \__driver_image_getbb_auxi:nN on line ...
+Defining \__driver_image_getbb_auxii:nN 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.luatex.tlg b/l3kernel/testfiles/m3expl003.luatex.tlg
index cda7fbb..6d4dc9e 100644
--- a/l3kernel/testfiles/m3expl003.luatex.tlg
+++ b/l3kernel/testfiles/m3expl003.luatex.tlg
@@ -5061,6 +5061,13 @@ Defining \l__driver_color_stack_int on line ...
 \l__driver_color_stack_int=\count147
 Defining \__driver_color_ensure_current: on line ...
 Defining \__driver_color_reset: on line ...
+Defining \__driver_image_getbb_jpg:n on line ...
+Defining \__driver_image_getbb_jpg_aux:n on line ...
+Defining \__driver_image_getbb_pdf:n on line ...
+Defining \__driver_image_getbb_png:n on line ...
+Defining \__driver_image_include_jpg:n on line ...
+Defining \__driver_image_include_pdf:n on line ...
+Defining \__driver_image_include_png:n 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.ptex.tlg b/l3kernel/testfiles/m3expl003.ptex.tlg
index 44778ab..f3fe7f0 100644
--- a/l3kernel/testfiles/m3expl003.ptex.tlg
+++ b/l3kernel/testfiles/m3expl003.ptex.tlg
@@ -5019,6 +5019,15 @@ Defining \__driver_box_use_scale:Nnn on line ...
 Defining \l__driver_color_current_tl on line ...
 Defining \__driver_color_ensure_current: on line ...
 Defining \__driver_color_reset: on line ...
+Defining \__driver_image_getbb_eps:n on line ...
+Defining \__driver_image_getbb_jpg:n on line ...
+Defining \__driver_image_getbb_pdf:n on line ...
+Defining \__driver_image_getbb_png:n on line ...
+Defining \__driver_image_include_eps:n on line ...
+Defining \__driver_image_include_jpg:n on line ...
+Defining \__driver_image_include_png:n on line ...
+Defining \__driver_image_include_pdf:n on line ...
+Defining \__driver_image_include_aux:nn 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.tlg b/l3kernel/testfiles/m3expl003.tlg
index d52cae6..fc59d02 100644
--- a/l3kernel/testfiles/m3expl003.tlg
+++ b/l3kernel/testfiles/m3expl003.tlg
@@ -5250,6 +5250,13 @@ Defining \l__driver_color_stack_int on line ...
 \l__driver_color_stack_int=\count147
 Defining \__driver_color_ensure_current: on line ...
 Defining \__driver_color_reset: on line ...
+Defining \__driver_image_getbb_jpg:n on line ...
+Defining \__driver_image_getbb_jpg_aux:n on line ...
+Defining \__driver_image_getbb_pdf:n on line ...
+Defining \__driver_image_getbb_png:n on line ...
+Defining \__driver_image_include_jpg:n on line ...
+Defining \__driver_image_include_pdf:n on line ...
+Defining \__driver_image_include_png:n 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.uptex.tlg b/l3kernel/testfiles/m3expl003.uptex.tlg
index 89e91bb..3bf051c 100644
--- a/l3kernel/testfiles/m3expl003.uptex.tlg
+++ b/l3kernel/testfiles/m3expl003.uptex.tlg
@@ -5220,6 +5220,15 @@ Defining \__driver_box_use_scale:Nnn on line ...
 Defining \l__driver_color_current_tl on line ...
 Defining \__driver_color_ensure_current: on line ...
 Defining \__driver_color_reset: on line ...
+Defining \__driver_image_getbb_eps:n on line ...
+Defining \__driver_image_getbb_jpg:n on line ...
+Defining \__driver_image_getbb_pdf:n on line ...
+Defining \__driver_image_getbb_png:n on line ...
+Defining \__driver_image_include_eps:n on line ...
+Defining \__driver_image_include_jpg:n on line ...
+Defining \__driver_image_include_png:n on line ...
+Defining \__driver_image_include_pdf:n on line ...
+Defining \__driver_image_include_aux:nn 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 5fcc183..67f5ac2 100644
--- a/l3kernel/testfiles/m3expl003.xetex.tlg
+++ b/l3kernel/testfiles/m3expl003.xetex.tlg
@@ -5029,6 +5029,17 @@ Defining \__driver_box_use_scale:Nnn on line ...
 Defining \l__driver_color_current_tl on line ...
 Defining \__driver_color_ensure_current: on line ...
 Defining \__driver_color_reset: on line ...
+Defining \__driver_image_getbb_eps:n on line ...
+Defining \__driver_image_include_eps:n on line ...
+Defining \__driver_image_include_jpg:n on line ...
+Defining \__driver_image_include_png:n on line ...
+Defining \__driver_image_include_pdf:n on line ...
+Defining \__driver_image_include_aux:nn on line ...
+Defining \__driver_image_getbb_jpg:n on line ...
+Defining \__driver_image_getbb_png:n on line ...
+Defining \__driver_image_getbb_pdf:n on line ...
+Defining \__driver_image_getbb_auxi:nN on line ...
+Defining \__driver_image_getbb_auxii:nN on line ...
 Defining \__driver_draw_literal:n on line ...
 Defining \__driver_draw_literal:x on line ...
 Defining \__driver_draw_begin: on line ...

-- 
To stop receiving notification emails like this one, please contact
the administrator of this repository.


More information about the latex3-commits mailing list