summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/l3backend/l3backend-graphics.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/l3backend/l3backend-graphics.dtx')
-rw-r--r--macros/latex/contrib/l3backend/l3backend-graphics.dtx412
1 files changed, 285 insertions, 127 deletions
diff --git a/macros/latex/contrib/l3backend/l3backend-graphics.dtx b/macros/latex/contrib/l3backend/l3backend-graphics.dtx
index 37122b9a74..1bd6a7e336 100644
--- a/macros/latex/contrib/l3backend/l3backend-graphics.dtx
+++ b/macros/latex/contrib/l3backend/l3backend-graphics.dtx
@@ -43,7 +43,7 @@
% }^^A
% }
%
-% \date{Released 2022-02-07}
+% \date{Released 2022-04-10}
%
% \maketitle
%
@@ -60,20 +60,48 @@
%<@@=graphics>
% \end{macrocode}
%
+% \begin{macro}{\@@_backend_loaded:n}
+% To deal with file load ordering. Plain users are on their own.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_backend_loaded:n #1
+ {
+ \cs_if_exist:NTF \hook_gput_code:nnn
+ {
+ \hook_gput_code:nnn
+ { file / l3graphics.sty / after }
+ { backend }
+ {#1}
+ }
+ {#1}
+ }
+% \end{macrocode}
+% \end{macro}
+%
% \subsection{\texttt{dvips} backend}
%
% \begin{macrocode}
%<*dvips>
% \end{macrocode}
%
-% \begin{macro}{\@@_backend_getbb_eps:n}
+% \begin{variable}{\l_graphics_search_ext_seq}
+% \begin{macrocode}
+\@@_backend_loaded:n
+ { \seq_set_from_clist:Nn \l_graphics_search_ext_seq { .eps , .ps } }
+% \end{macrocode}
+% \end{variable}
+%
+% \begin{macro}{\@@_backend_getbb_eps:n, \@@_backend_getbb_ps:n}
% Simply use the generic function.
% \begin{macrocode}
-\cs_new_eq:NN \@@_backend_getbb_eps:n \graphics_read_bb:n
+\@@_backend_loaded:n
+ {
+ \cs_new_eq:NN \@@_backend_getbb_eps:n \@@_read_bb:n
+ \cs_new_eq:NN \@@_backend_getbb_ps:n \@@_read_bb:n
+ }
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\@@_backend_include_eps:n}
+% \begin{macro}{\@@_backend_include_eps:n, \@@_backend_include_ps:n}
% The special syntax is relatively clear here: remember we need PostScript
% sizes here.
% \begin{macrocode}
@@ -82,12 +110,20 @@
\__kernel_backend_literal:x
{
PSfile = #1 \c_space_tl
- llx = \dim_to_decimal_in_bp:n \l_graphics_llx_dim \c_space_tl
- lly = \dim_to_decimal_in_bp:n \l_graphics_lly_dim \c_space_tl
- urx = \dim_to_decimal_in_bp:n \l_graphics_urx_dim \c_space_tl
- ury = \dim_to_decimal_in_bp:n \l_graphics_ury_dim
+ llx = \dim_to_decimal_in_bp:n \l_@@_llx_dim \c_space_tl
+ lly = \dim_to_decimal_in_bp:n \l_@@_lly_dim \c_space_tl
+ urx = \dim_to_decimal_in_bp:n \l_@@_urx_dim \c_space_tl
+ ury = \dim_to_decimal_in_bp:n \l_@@_ury_dim
}
}
+\cs_new_eq:NN \@@_backend_include_ps:n \@@_backend_include_eps:n
+% \end{macrocode}
+% \end{macro}
+%
+% \begin{macro}{\@@_backend_get_pagecount:n}
+% \begin{macrocode}
+\@@_backend_loaded:n
+ { \cs_new_eq:NN \@@_backend_get_pagecount:n \@@_get_pagecount:n }
% \end{macrocode}
% \end{macro}
%
@@ -101,6 +137,17 @@
%<*luatex|pdftex>
% \end{macrocode}
%
+% \begin{variable}{\l_graphics_search_ext_seq}
+% \begin{macrocode}
+\@@_backend_loaded:n
+ {
+ \seq_set_from_clist:Nn
+ \l_graphics_search_ext_seq
+ { .pdf , .eps , .png , .jpg , .jpeg }
+ }
+% \end{macrocode}
+% \end{variable}
+%
% \begin{variable}{\l_@@_graphics_attr_tl}
% In PDF mode, additional attributes of an graphic (such as page number) are
% needed both to obtain the bounding box and when inserting the graphic: this
@@ -115,12 +162,18 @@
%
% \begin{macro}
% {
-% \@@_backend_getbb_jpg:n,
-% \@@_backend_getbb_pdf:n,
+% \@@_backend_getbb_jpg:n ,
+% \@@_backend_getbb_jpeg:n ,
+% \@@_backend_getbb_pdf:n ,
% \@@_backend_getbb_png:n
% }
% \begin{macro}
-% {\@@_backend_getbb_auxi:n, \@@_backend_getbb_auxii:n}
+% {
+% \@@_backend_getbb_auxi:n ,
+% \@@_backend_getbb_auxii:n ,
+% \@@_backend_getbb_auxiii:n
+% }
+% \begin{macro}[EXP]{\@@_backend_dequote:w}
% Getting the bounding box here requires us to box up the graphic and
% measure it. To deal with the difference in feature support in bitmap
% and vector graphics but keeping the common parts, there is a little work
@@ -130,78 +183,88 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_backend_getbb_jpg:n #1
{
- \int_zero:N \l_graphics_page_int
- \tl_clear:N \l_graphics_pagebox_tl
+ \int_zero:N \l_@@_page_int
+ \tl_clear:N \l_@@_pagebox_tl
\tl_set:Nx \l_@@_graphics_attr_tl
{
- \tl_if_empty:NF \l_graphics_decodearray_tl
- { :D \l_graphics_decodearray_tl }
- \bool_if:NT \l_graphics_interpolate_bool
+ \tl_if_empty:NF \l_@@_decodearray_str
+ { :D \l_@@_decodearray_str }
+ \bool_if:NT \l_@@_interpolate_bool
{ :I }
}
\tl_clear:N \l_@@_graphics_attr_tl
\@@_backend_getbb_auxi:n {#1}
}
+\cs_new_eq:NN \@@_backend_getbb_jpeg:n \@@_backend_getbb_jpg:n
\cs_new_eq:NN \@@_backend_getbb_png:n \@@_backend_getbb_jpg:n
\cs_new_protected:Npn \@@_backend_getbb_pdf:n #1
{
- \tl_clear:N \l_graphics_decodearray_tl
- \bool_set_false:N \l_graphics_interpolate_bool
+ \tl_clear:N \l_@@_decodearray_str
+ \bool_set_false:N \l_@@_interpolate_bool
\tl_set:Nx \l_@@_graphics_attr_tl
{
- : \l_graphics_pagebox_tl
- \int_compare:nNnT \l_graphics_page_int > 1
- { :P \int_use:N \l_graphics_page_int }
+ : \l_@@_pagebox_tl
+ \int_compare:nNnT \l_@@_page_int > 1
+ { :P \int_use:N \l_@@_page_int }
}
\@@_backend_getbb_auxi:n {#1}
}
\cs_new_protected:Npn \@@_backend_getbb_auxi:n #1
{
- \graphics_bb_restore:xF { #1 \l_@@_graphics_attr_tl }
+ \@@_bb_restore:xF { #1 \l_@@_graphics_attr_tl }
{ \@@_backend_getbb_auxii:n {#1} }
}
% \end{macrocode}
% Measuring the graphic is done by boxing up: for PDF graphics we could
% use |\tex_pdfximagebbox:D|, but if doesn't work for other types.
% As the box always starts at $(0,0)$ there is no need to worry about
-% the lower-left position.
+% the lower-left position. Quotes need to be \emph{removed} as \LuaTeX{}
+% does not like them here.
% \begin{macrocode}
\cs_new_protected:Npn \@@_backend_getbb_auxii:n #1
{
+ \exp_args:Ne \@@_backend_getbb_auxiii:n
+ { \@@_backend_dequote:w #1 " #1 " \s_@@_stop }
+ \int_const:cn { c_@@_ #1 \l_@@_graphics_attr_tl _int }
+ { \tex_the:D \tex_pdflastximage:D }
+ \@@_bb_save:x { #1 \l_@@_graphics_attr_tl }
+ }
+\cs_new_protected:Npn \@@_backend_getbb_auxiii:n #1
+ {
\tex_immediate:D \tex_pdfximage:D
\bool_lazy_or:nnT
- { \l_graphics_interpolate_bool }
- { ! \tl_if_empty_p:N \l_graphics_decodearray_tl }
+ { \l_@@_interpolate_bool }
+ { ! \tl_if_empty_p:N \l_@@_decodearray_str }
{
attr ~
{
- \tl_if_empty:NF \l_graphics_decodearray_tl
- { /Decode~[ \l_graphics_decodearray_tl ] }
- \bool_if:NT \l_graphics_interpolate_bool
+ \tl_if_empty:NF \l_@@_decodearray_str
+ { /Decode~[ \l_@@_decodearray_str ] }
+ \bool_if:NT \l_@@_interpolate_bool
{ /Interpolate~true }
}
}
- \int_compare:nNnT \l_graphics_page_int > 0
- { page ~ \int_use:N \l_graphics_page_int }
- \tl_if_empty:NF \l_graphics_pagebox_tl
- { \l_graphics_pagebox_tl }
+ \int_compare:nNnT \l_@@_page_int > 0
+ { page ~ \int_use:N \l_@@_page_int }
+ \tl_if_empty:NF \l_@@_pagebox_tl
+ { \l_@@_pagebox_tl }
{#1}
\hbox_set:Nn \l_@@_internal_box
{ \tex_pdfrefximage:D \tex_pdflastximage:D }
- \dim_set:Nn \l_graphics_urx_dim { \box_wd:N \l_@@_internal_box }
- \dim_set:Nn \l_graphics_ury_dim { \box_ht:N \l_@@_internal_box }
- \int_const:cn { c_@@_graphics_ #1 \l_@@_graphics_attr_tl _int }
- { \tex_the:D \tex_pdflastximage:D }
- \graphics_bb_save:x { #1 \l_@@_graphics_attr_tl }
+ \dim_set:Nn \l_@@_urx_dim { \box_wd:N \l_@@_internal_box }
+ \dim_set:Nn \l_@@_ury_dim { \box_ht:N \l_@@_internal_box }
}
+\cs_new:Npn \@@_backend_dequote:w #1 " #2 " #3 \s_@@_stop {#2}
% \end{macrocode}
% \end{macro}
% \end{macro}
+% \end{macro}
%
% \begin{macro}
% {
-% \@@_backend_include_jpg:n,
-% \@@_backend_include_pdf:n,
+% \@@_backend_include_jpg:n ,
+% \@@_backend_include_jpeg:n ,
+% \@@_backend_include_pdf:n ,
% \@@_backend_include_png:n
% }
% Images are already loaded for the measurement part of the code, so
@@ -211,8 +274,9 @@
\cs_new_protected:Npn \@@_backend_include_jpg:n #1
{
\tex_pdfrefximage:D
- \int_use:c { c_@@_graphics_ #1 \l_@@_graphics_attr_tl _int }
+ \int_use:c { c_@@_ #1 \l_@@_graphics_attr_tl _int }
}
+\cs_new_eq:NN \@@_backend_include_jpeg:n \@@_backend_include_jpg:n
\cs_new_eq:NN \@@_backend_include_pdf:n \@@_backend_include_jpg:n
\cs_new_eq:NN \@@_backend_include_png:n \@@_backend_include_jpg:n
% \end{macrocode}
@@ -241,8 +305,12 @@
\l_@@_backend_ext_str
\exp_args:Nx \@@_backend_getbb_eps:nn
{
- \l_@@_backend_name_str - \str_tail:N \l_@@_backend_ext_str
- -converted-to.pdf
+ \exp_args:Ne \__kernel_file_name_quote:n
+ {
+ \l_@@_backend_name_str
+ - \str_tail:N \l_@@_backend_ext_str
+ -converted-to.pdf
+ }
}
{#1}
}
@@ -253,7 +321,7 @@
\sys_shell_now:n
{ repstopdf ~ #2 ~ #1 }
}
- \tl_set:Nn \l_graphics_name_tl {#1}
+ \tl_set:Nn \l_@@_final_name_str {#1}
\@@_backend_getbb_pdf:n {#1}
}
\cs_new_protected:Npn \@@_backend_include_eps:n #1
@@ -262,8 +330,12 @@
\l_@@_backend_dir_str \l_@@_backend_name_str \l_@@_backend_ext_str
\exp_args:Nx \@@_backend_include_pdf:n
{
- \l_@@_backend_name_str - \str_tail:N \l_@@_backend_ext_str
- -converted-to.pdf
+ \exp_args:Ne \__kernel_file_name_quote:n
+ {
+ \l_@@_backend_name_str
+ - \str_tail:N \l_@@_backend_ext_str
+ -converted-to.pdf
+ }
}
}
}
@@ -273,6 +345,18 @@
% \end{macro}
% \end{macro}
%
+% \begin{macro}{\@@_backend_get_pagecount:n}
+% Simply load and store.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_backend_get_pagecount:n #1
+ {
+ \tex_immediate:D \tex_pdfximage:D {#1}
+ \int_const:cn { c_@@_ #1 _pages_int }
+ { \int_use:N \tex_pdflastximagepages:D }
+ }
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macrocode}
%</luatex|pdftex>
% \end{macrocode}
@@ -283,28 +367,46 @@
%<*dvipdfmx|xetex>
% \end{macrocode}
%
+% \begin{variable}{\l_graphics_search_ext_seq}
+% \begin{macrocode}
+\@@_backend_loaded:n
+ {
+ \seq_set_from_clist:Nn \l_graphics_search_ext_seq
+ { .pdf , .eps , .ps , .png , .jpg ., jpeg , .bmp }
+ }
+% \end{macrocode}
+% \end{variable}
+%
% \begin{macro}
% {
-% \@@_backend_getbb_eps:n, \@@_backend_getbb_jpg:n,
-% \@@_backend_getbb_pdf:n, \@@_backend_getbb_png:n
+% \@@_backend_getbb_eps:n ,
+% \@@_backend_getbb_jpg:n , \@@_backend_getbb_jpeg:n ,
+% \@@_backend_getbb_pdf:n , \@@_backend_getbb_png:n ,
+% \@@_backend_getbb_bmp:n
% }
% Simply use the generic functions: only for \texttt{dvipdfmx} in the
% extraction cases.
% \begin{macrocode}
-\cs_new_eq:NN \@@_backend_getbb_eps:n \graphics_read_bb:n
+\@@_backend_loaded:n
+ {
+ \cs_new_eq:NN \@@_backend_getbb_eps:n \@@_read_bb:n
+ \cs_new_eq:NN \@@_backend_getbb_ps:n \@@_read_bb:n
+ }
%<*dvipdfmx>
\cs_new_protected:Npn \@@_backend_getbb_jpg:n #1
{
- \int_zero:N \l_graphics_page_int
- \tl_clear:N \l_graphics_pagebox_tl
- \graphics_extract_bb:n {#1}
+ \int_zero:N \l_@@_page_int
+ \tl_clear:N \l_@@_pagebox_tl
+ \@@_extract_bb:n {#1}
}
+\cs_new_eq:NN \@@_backend_getbb_jpeg:n \@@_backend_getbb_jpg:n
\cs_new_eq:NN \@@_backend_getbb_png:n \@@_backend_getbb_jpg:n
+\cs_new_eq:NN \@@_backend_getbb_bmp:n \@@_backend_getbb_jpg:n
\cs_new_protected:Npn \@@_backend_getbb_pdf:n #1
{
- \tl_clear:N \l_graphics_decodearray_tl
- \bool_set_false:N \l_graphics_interpolate_bool
- \graphics_extract_bb:n {#1}
+ \tl_clear:N \l_@@_decodearray_str
+ \bool_set_false:N \l_@@_interpolate_bool
+ \@@_extract_bb:n {#1}
}
%</dvipdfmx>
% \end{macrocode}
@@ -319,8 +421,10 @@
%
% \begin{macro}
% {
-% \@@_backend_include_eps:n, \@@_backend_include_jpg:n,
-% \@@_backend_include_pdf:n, \@@_backend_include_png:n
+% \@@_backend_include_eps:n , \@@_backend_include_ps:n ,
+% \@@_backend_include_jpg:n , \@@_backend_include_jpseg:n ,
+% \@@_backend_include_pdf:n , \@@_backend_include_png:n ,
+% \@@_backend_include_bmp:n ,
% }
% \begin{macro}{\@@_backend_include_auxi:nn}
% \begin{macro}{\@@_backend_include_auxii:nnn, \@@_backend_include_auxii:xnn}
@@ -335,15 +439,18 @@
\__kernel_backend_literal:x
{
PSfile = #1 \c_space_tl
- llx = \dim_to_decimal_in_bp:n \l_graphics_llx_dim \c_space_tl
- lly = \dim_to_decimal_in_bp:n \l_graphics_lly_dim \c_space_tl
- urx = \dim_to_decimal_in_bp:n \l_graphics_urx_dim \c_space_tl
- ury = \dim_to_decimal_in_bp:n \l_graphics_ury_dim
+ llx = \dim_to_decimal_in_bp:n \l_@@_llx_dim \c_space_tl
+ lly = \dim_to_decimal_in_bp:n \l_@@_lly_dim \c_space_tl
+ urx = \dim_to_decimal_in_bp:n \l_@@_urx_dim \c_space_tl
+ ury = \dim_to_decimal_in_bp:n \l_@@_ury_dim
}
}
+\cs_new_eq:NN \@@_backend_include_ps:n \@@_backend_include_eps:n
\cs_new_protected:Npn \@@_backend_include_jpg:n #1
{ \@@_backend_include_auxi:nn {#1} { image } }
+\cs_new_eq:NN \@@_backend_include_jpeg:n \@@_backend_include_jpg:n
\cs_new_eq:NN \@@_backend_include_png:n \@@_backend_include_jpg:n
+\cs_new_eq:NN \@@_backend_include_bmp:n \@@_backend_include_jpg:n
%<*dvipdfmx>
\cs_new_protected:Npn \@@_backend_include_pdf:n #1
{ \@@_backend_include_auxi:nn {#1} { epdf } }
@@ -358,23 +465,23 @@
{
\@@_backend_include_auxii:xnn
{
- \tl_if_empty:NF \l_graphics_pagebox_tl
- { : \l_graphics_pagebox_tl }
- \int_compare:nNnT \l_graphics_page_int > 1
- { :P \int_use:N \l_graphics_page_int }
- \tl_if_empty:NF \l_graphics_decodearray_tl
- { :D \l_graphics_decodearray_tl }
- \bool_if:NT \l_graphics_interpolate_bool
+ \tl_if_empty:NF \l_@@_pagebox_tl
+ { : \l_@@_pagebox_tl }
+ \int_compare:nNnT \l_@@_page_int > 1
+ { :P \int_use:N \l_@@_page_int }
+ \tl_if_empty:NF \l_@@_decodearray_str
+ { :D \l_@@_decodearray_str }
+ \bool_if:NT \l_@@_interpolate_bool
{ :I }
}
{#1} {#2}
}
\cs_new_protected:Npn \@@_backend_include_auxii:nnn #1#2#3
{
- \int_if_exist:cTF { c_@@_graphics_ #2#1 _int }
+ \int_if_exist:cTF { c_@@_ #2#1 _int }
{
\__kernel_backend_literal:x
- { pdf:usexobj~@graphic \int_use:c { c_@@_graphics_ #2#1 _int } }
+ { pdf:usexobj~@graphic \int_use:c { c_@@_ #2#1 _int } }
}
{ \@@_backend_include_auxiii:nnn {#2} {#1} {#3} }
}
@@ -388,31 +495,31 @@
\cs_new_protected:Npn \@@_backend_include_auxiii:nnn #1#2#3
{
\int_gincr:N \g_@@_track_int
- \int_const:cn { c_@@_graphics_ #1#2 _int } { \g_@@_track_int }
+ \int_const:cn { c_@@_ #1#2 _int } { \g_@@_track_int }
\__kernel_backend_literal:x
{
pdf:#3~
- @graphic \int_use:c { c_@@_graphics_ #1#2 _int } ~
- \int_compare:nNnT \l_graphics_page_int > 1
- { page ~ \int_use:N \l_graphics_page_int \c_space_tl }
- \tl_if_empty:NF \l_graphics_pagebox_tl
+ @graphic \int_use:c { c_@@_ #1#2 _int } ~
+ \int_compare:nNnT \l_@@_page_int > 1
+ { page ~ \int_use:N \l_@@_page_int \c_space_tl }
+ \tl_if_empty:NF \l_@@_pagebox_tl
{
- pagebox ~ \l_graphics_pagebox_tl \c_space_tl
+ pagebox ~ \l_@@_pagebox_tl \c_space_tl
bbox ~
- \dim_to_decimal_in_bp:n \l_graphics_llx_dim \c_space_tl
- \dim_to_decimal_in_bp:n \l_graphics_lly_dim \c_space_tl
- \dim_to_decimal_in_bp:n \l_graphics_urx_dim \c_space_tl
- \dim_to_decimal_in_bp:n \l_graphics_ury_dim \c_space_tl
+ \dim_to_decimal_in_bp:n \l_@@_llx_dim \c_space_tl
+ \dim_to_decimal_in_bp:n \l_@@_lly_dim \c_space_tl
+ \dim_to_decimal_in_bp:n \l_@@_urx_dim \c_space_tl
+ \dim_to_decimal_in_bp:n \l_@@_ury_dim \c_space_tl
}
(#1)
\bool_lazy_or:nnT
- { \l_graphics_interpolate_bool }
- { ! \tl_if_empty_p:N \l_graphics_decodearray_tl }
+ { \l_@@_interpolate_bool }
+ { ! \tl_if_empty_p:N \l_@@_decodearray_str }
{
<<
- \tl_if_empty:NF \l_graphics_decodearray_tl
- { /Decode~[ \l_graphics_decodearray_tl ] }
- \bool_if:NT \l_graphics_interpolate_bool
+ \tl_if_empty:NF \l_@@_decodearray_str
+ { /Decode~[ \l_@@_decodearray_str ] }
+ \bool_if:NT \l_@@_interpolate_bool
{ /Interpolate~true> }
>>
}
@@ -424,6 +531,15 @@
% \end{macro}
% \end{macro}
%
+% \begin{macro}{\@@_backend_get_pagecount:n}
+% \begin{macrocode}
+%<*dvipdfmx>
+\@@_backend_loaded:n
+ { \cs_new_eq:NN \@@_backend_get_pagecount:n \@@_get_pagecount:n }
+%</dvipdfmx>
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macrocode}
%</dvipdfmx|xetex>
% \end{macrocode}
@@ -434,13 +550,13 @@
%<*xetex>
% \end{macrocode}
%
-% \subsubsection{Images}
-%
% \begin{macro}
% {
-% \@@_backend_getbb_jpg:n,
-% \@@_backend_getbb_pdf:n,
-% \@@_backend_getbb_png:n
+% \@@_backend_getbb_jpg:n ,
+% \@@_backend_getbb_jpeg:n ,
+% \@@_backend_getbb_pdf:n ,
+% \@@_backend_getbb_png:n ,
+% \@@_backend_getbb_bmp:n
% }
% \begin{macro}{\@@_backend_getbb_auxi:nN}
% \begin{macro}{\@@_backend_getbb_auxii:nnN, \@@_backend_getbb_auxii:VnN}
@@ -456,21 +572,23 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_backend_getbb_jpg:n #1
{
- \int_zero:N \l_graphics_page_int
- \tl_clear:N \l_graphics_pagebox_tl
+ \int_zero:N \l_@@_page_int
+ \tl_clear:N \l_@@_pagebox_tl
\@@_backend_getbb_auxi:nN {#1} \tex_XeTeXpicfile:D
}
+\cs_new_eq:NN \@@_backend_getbb_jpeg:n \@@_backend_getbb_jpg:n
\cs_new_eq:NN \@@_backend_getbb_png:n \@@_backend_getbb_jpg:n
+\cs_new_eq:NN \@@_backend_getbb_bmp:n \@@_backend_getbb_jpg:n
\cs_new_protected:Npn \@@_backend_getbb_pdf:n #1
{
- \tl_clear:N \l_graphics_decodearray_tl
- \bool_set_false:N \l_graphics_interpolate_bool
+ \tl_clear:N \l_@@_decodearray_str
+ \bool_set_false:N \l_@@_interpolate_bool
\@@_backend_getbb_auxi:nN {#1} \tex_XeTeXpdffile:D
}
\cs_new_protected:Npn \@@_backend_getbb_auxi:nN #1#2
{
- \int_compare:nNnTF \l_graphics_page_int > 1
- { \@@_backend_getbb_auxii:VnN \l_graphics_page_int {#1} #2 }
+ \int_compare:nNnTF \l_@@_page_int > 1
+ { \@@_backend_getbb_auxii:VnN \l_@@_page_int {#1} #2 }
{ \@@_backend_getbb_auxiii:nNnn {#1} #2 { :P 1 } { page 1 } }
}
\cs_new_protected:Npn \@@_backend_getbb_auxii:nnN #1#2#3
@@ -478,8 +596,8 @@
\cs_generate_variant:Nn \@@_backend_getbb_auxii:nnN { V }
\cs_new_protected:Npn \@@_backend_getbb_auxiii:nNnn #1#2#3#4
{
- \tl_if_empty:NTF \l_graphics_pagebox_tl
- { \@@_backend_getbb_auxiv:VnNnn \l_graphics_pagebox_tl }
+ \tl_if_empty:NTF \l_@@_pagebox_tl
+ { \@@_backend_getbb_auxiv:VnNnn \l_@@_pagebox_tl }
{ \@@_backend_getbb_auxv:nNnn }
{#1} #2 {#3} {#4}
}
@@ -488,21 +606,25 @@
\use:x
{
\@@_backend_getbb_auxv:nNnn {#2} #3 { : #1 #4 }
- { #5 ~ \@@_backend_getbb_pagebox:w #1 }
+ {
+ #5
+ \tl_if_blank:nF {#1}
+ { \c_space_tl \@@_backend_getbb_pagebox:w #1 }
+ }
}
}
\cs_generate_variant:Nn \@@_backend_getbb_auxiv:nnNnn { V }
\cs_new_protected:Npn \@@_backend_getbb_auxv:nNnn #1#2#3#4
{
- \graphics_bb_restore:nF {#1#3}
+ \@@_bb_restore:nF {#1#3}
{ \@@_backend_getbb_auxvi:nNnn {#1} #2 {#3} {#4} }
}
\cs_new_protected:Npn \@@_backend_getbb_auxvi:nNnn #1#2#3#4
{
\hbox_set:Nn \l_@@_internal_box { #2 #1 ~ #4 }
- \dim_set:Nn \l_graphics_urx_dim { \box_wd:N \l_@@_internal_box }
- \dim_set:Nn \l_graphics_ury_dim { \box_ht:N \l_@@_internal_box }
- \graphics_bb_save:n {#1#3}
+ \dim_set:Nn \l_@@_urx_dim { \box_wd:N \l_@@_internal_box }
+ \dim_set:Nn \l_@@_ury_dim { \box_ht:N \l_@@_internal_box }
+ \@@_bb_save:n {#1#3}
}
\cs_new:Npn \@@_backend_getbb_pagebox:w #1 box {#1}
% \end{macrocode}
@@ -515,7 +637,6 @@
% \end{macro}
%
% \begin{macro}{\@@_backend_include_pdf:n}
-% \begin{macro}{\@@_backend_include_bitmap_quote:w}
% For PDF graphics, properly supporting the |pagebox| concept in \XeTeX{}
% is best done using the |\tex_XeTeXpdffile:D| primitive. The syntax here
% is the same as for the graphic measurement part, although we know at this
@@ -523,16 +644,27 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_backend_include_pdf:n #1
{
- \tex_XeTeXpdffile:D
- \@@_backend_include_pdf_quote:w #1 "#1" \s_@@_stop \c_space_tl
- \int_compare:nNnT \l_graphics_page_int > 0
- { page ~ \int_use:N \l_graphics_page_int \c_space_tl }
- \exp_after:wN \@@_backend_getbb_pagebox:w \l_graphics_pagebox_tl
+ \tex_XeTeXpdffile:D #1 ~
+ \int_compare:nNnT \l_@@_page_int > 0
+ { page ~ \int_use:N \l_@@_page_int \c_space_tl }
+ \exp_after:wN \@@_backend_getbb_pagebox:w \l_@@_pagebox_tl
}
-\cs_new:Npn \@@_backend_include_pdf_quote:w #1 " #2 " #3 \s_@@_stop
- { " #2 " }
% \end{macrocode}
% \end{macro}
+%
+% \begin{macro}{\@@_backend_get_pagecount:n}
+% Very little to do here other than cover the case of a non-PDF file.
+% \begin{macrocode}
+\cs_new_protected:Npn \@@_backend_get_pagecount:n #1
+ {
+ \int_const:cn { c_@@_ #1 _pages_int }
+ {
+ \int_max:nn
+ { \int_use:N \tex_XeTeXpdfpagecount:D #1 ~ }
+ { 1 }
+ }
+ }
+% \end{macrocode}
% \end{macro}
%
% \begin{macrocode}
@@ -545,22 +677,35 @@
%<*dvisvgm>
% \end{macrocode}
%
+% \begin{variable}{\l_graphics_search_ext_seq}
+% \begin{macrocode}
+\@@_backend_loaded:n
+ {
+ \seq_set_from_clist:Nn
+ \l_graphics_search_ext_seq
+ { .pdf , .eps , .png , .jpg , .jpeg }
+ }
+% \end{macrocode}
+% \end{variable}
+%
% \begin{macro}{\@@_backend_getbb_eps:n}
% Simply use the generic function.
% \begin{macrocode}
-\cs_new_eq:NN \@@_backend_getbb_eps:n \graphics_read_bb:n
+\@@_backend_loaded:n
+ { \cs_new_eq:NN \@@_backend_getbb_eps:n \@@_read_bb:n }
% \end{macrocode}
% \end{macro}
%
-% \begin{macro}{\@@_backend_getbb_png:n, \@@_backend_getbb_jpg:n}
+% \begin{macro}{\@@_backend_getbb_png:n, \@@_backend_getbb_jpg:n, \@@_backend_getbb_jpeg:n}
% These can be included by extracting the bounding box data.
% \begin{macrocode}
\cs_new_protected:Npn \@@_backend_getbb_jpg:n #1
{
- \int_zero:N \l_graphics_page_int
- \tl_clear:N \l_graphics_pagebox_tl
- \graphics_extract_bb:n {#1}
+ \int_zero:N \l_@@_page_int
+ \tl_clear:N \l_@@_pagebox_tl
+ \@@_extract_bb:n {#1}
}
+\cs_new_eq:NN \@@_backend_getbb_jpeg:n \@@_backend_getbb_jpg:n
\cs_new_eq:NN \@@_backend_getbb_png:n \@@_backend_getbb_jpg:n
% \end{macrocode}
% \end{macro}
@@ -570,9 +715,9 @@
% \begin{macrocode}
\cs_new_protected:Npn \@@_backend_getbb_pdf:n #1
{
- \tl_clear:N \l_graphics_decodearray_tl
- \bool_set_false:N \l_graphics_interpolate_bool
- \graphics_extract_bb:n {#1}
+ \tl_clear:N \l_@@_decodearray_str
+ \bool_set_false:N \l_@@_interpolate_bool
+ \@@_extract_bb:n {#1}
}
% \end{macrocode}
% \end{macro}
@@ -583,25 +728,30 @@
% sizes here. (This is the same as the \texttt{dvips} code.)
% \begin{macrocode}
\cs_new_protected:Npn \@@_backend_include_eps:n #1
- { @@_backend_include:nn { PSfile } {#1} }
+ { \@@_backend_include:nn { PSfile } {#1} }
\cs_new_protected:Npn \@@_backend_include_pdf:n #1
- { @@_backend_include:nn { pdffile } {#1} }
+ { \@@_backend_include:nn { pdffile } {#1} }
\cs_new_protected:Npn \@@_backend_include:nn #1#2
{
\__kernel_backend_literal:x
{
#1 = #2 \c_space_tl
- llx = \dim_to_decimal_in_bp:n \l_graphics_llx_dim \c_space_tl
- lly = \dim_to_decimal_in_bp:n \l_graphics_lly_dim \c_space_tl
- urx = \dim_to_decimal_in_bp:n \l_graphics_urx_dim \c_space_tl
- ury = \dim_to_decimal_in_bp:n \l_graphics_ury_dim
+ llx = \dim_to_decimal_in_bp:n \l_@@_llx_dim \c_space_tl
+ lly = \dim_to_decimal_in_bp:n \l_@@_lly_dim \c_space_tl
+ urx = \dim_to_decimal_in_bp:n \l_@@_urx_dim \c_space_tl
+ ury = \dim_to_decimal_in_bp:n \l_@@_ury_dim
}
}
% \end{macrocode}
% \end{macro}
% \end{macro}
%
-% \begin{macro}{\@@_backend_include_png:n, \@@_backend_include_jpg:n}
+% \begin{macro}
+% {
+% \@@_backend_include_png:n ,
+% \@@_backend_include_jpg:n ,
+% \@@_backend_include_jpeg:n
+% }
% \begin{macro}{\@@_backend_include_bitmap_quote:w}
% The backend here has built-in support for basic graphic inclusion (see
% \texttt{dvisvgm.def} for a more complex approach, needed if clipping,
@@ -615,11 +765,12 @@
\__kernel_backend_literal:x
{
dvisvgm:img~
- \dim_to_decimal:n { \l_graphics_ury_dim } ~
- \dim_to_decimal:n { \l_graphics_ury_dim } ~
+ \dim_to_decimal:n { \l_@@_ury_dim } ~
+ \dim_to_decimal:n { \l_@@_ury_dim } ~
\@@_backend_include_bitmap_quote:w #1 " #1 " \s_@@_stop
}
}
+\cs_new_eq:NN \@@_backend_include_jpeg:n \@@_backend_include_png:n
\cs_new_eq:NN \@@_backend_include_jpg:n \@@_backend_include_png:n
\cs_new:Npn \@@_backend_include_bitmap_quote:w #1 " #2 " #3 \s_@@_stop
{ " #2 " }
@@ -627,6 +778,13 @@
% \end{macro}
% \end{macro}
%
+% \begin{macro}{\@@_backend_get_pagecount:n}
+% \begin{macrocode}
+\@@_backend_loaded:n
+ { \cs_new_eq:NN \@@_backend_get_pagecount:n \@@_get_pagecount:n }
+% \end{macrocode}
+% \end{macro}
+%
% \begin{macrocode}
%</dvisvgm>
% \end{macrocode}