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.dtx931
1 files changed, 0 insertions, 931 deletions
diff --git a/macros/latex/contrib/l3backend/l3backend-graphics.dtx b/macros/latex/contrib/l3backend/l3backend-graphics.dtx
deleted file mode 100644
index 9360bffd2e..0000000000
--- a/macros/latex/contrib/l3backend/l3backend-graphics.dtx
+++ /dev/null
@@ -1,931 +0,0 @@
-% \iffalse meta-comment
-%
-%% File: l3backend-graphics.dtx
-%
-% Copyright (C) 2019-2024 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
-%
-% https://www.latex-project.org/lppl.txt
-%
-% This file is part of the "l3backend 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,kernel]{l3doc}
-\begin{document}
- \DocInput{\jobname.dtx}
-\end{document}
-%</driver>
-% \fi
-%
-% \title{^^A
-% The \pkg{l3backend-graphics} module\\ Backend graphics support^^A
-% }
-%
-% \author{^^A
-% The \LaTeX{} Project\thanks
-% {^^A
-% E-mail:
-% \href{mailto:latex-team@latex-project.org}
-% {latex-team@latex-project.org}^^A
-% }^^A
-% }
-%
-% \date{Released 2024-03-14}
-%
-% \maketitle
-%
-% \begin{documentation}
-%
-% \end{documentation}
-%
-% \begin{implementation}
-%
-% \section{\pkg{l3backend-graphics} implementation}
-%
-% \begin{macrocode}
-%<*package>
-%<@@=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
- { package / l3graphics / after }
- { backend }
- {#1}
- }
- {#1}
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \subsection{\texttt{dvips} backend}
-%
-% \begin{macrocode}
-%<*dvips>
-% \end{macrocode}
-%
-% \begin{variable}[no-user-doc]{\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}
-\@@_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, \@@_backend_include_ps:n}
-% The special syntax is relatively clear here: remember we need PostScript
-% sizes here.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_include_eps:n #1
- {
- \__kernel_backend_literal:e
- {
- PSfile = #1 \c_space_tl
- 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}
-%
-% \begin{macrocode}
-%</dvips>
-% \end{macrocode}
-%
-% \subsection{\LuaTeX{} and \pdfTeX{} backends}
-%
-% \begin{macrocode}
-%<*luatex|pdftex>
-% \end{macrocode}
-%
-% \begin{variable}[no-user-doc]{\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 }
- }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{variable}{\l_@@_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
-% occurs as the graphic dictionary approach means they are read as part of
-% the bounding box operation. As such, it is easier to track additional
-% attributes using a dedicated |tl| rather than build up the same data
-% twice.
-% \begin{macrocode}
-\tl_new:N \l_@@_attr_tl
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}
-% {
-% \@@_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_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
-% to do in terms of auxiliaries. The key here is to notice that we need
-% two forms of the attributes: a \enquote{short} set to allow us to
-% track for caching, and the full form to pass to the primitive.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_getbb_jpg:n #1
- {
- \int_zero:N \l_@@_page_int
- \tl_clear:N \l_@@_pagebox_tl
- \tl_set:Ne \l_@@_attr_tl
- {
- \tl_if_empty:NF \l_@@_decodearray_str
- { :D \l_@@_decodearray_str }
- \bool_if:NT \l_@@_interpolate_bool
- { :I }
- \str_if_empty:NF \l_@@_pdf_str
- { :X \l_@@_pdf_str }
- }
- \@@_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_@@_decodearray_str
- \bool_set_false:N \l_@@_interpolate_bool
- \tl_set:Ne \l_@@_attr_tl
- {
- : \l_@@_pagebox_tl
- \int_compare:nNnT \l_@@_page_int > 1
- { :P \int_use:N \l_@@_page_int }
- \str_if_empty:NF \l_@@_pdf_str
- { :X \l_@@_pdf_str }
- }
- \@@_backend_getbb_auxi:n {#1}
- }
-\cs_new_protected:Npn \@@_backend_getbb_auxi:n #1
- {
- \@@_bb_restore:eF { #1 \l_@@_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. 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_@@_attr_tl _int }
- { \tex_the:D \tex_pdflastximage:D }
- \@@_bb_save:e { #1 \l_@@_attr_tl }
- }
-\cs_new_protected:Npn \@@_backend_getbb_auxiii:n #1
- {
- \tex_immediate:D \tex_pdfximage:D
- \bool_lazy_any:nT
- {
- { \l_@@_interpolate_bool }
- { ! \tl_if_empty_p:N \l_@@_decodearray_str }
- { ! \str_if_empty_p:N \l_@@_pdf_str }
- }
- {
- attr ~
- {
- \tl_if_empty:NF \l_@@_decodearray_str
- { /Decode~[ \l_@@_decodearray_str ] }
- \bool_if:NT \l_@@_interpolate_bool
- { /Interpolate~true }
- \l_@@_pdf_str
- }
- }
- \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_@@_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_jpeg:n ,
-% \@@_backend_include_pdf:n ,
-% \@@_backend_include_png:n
-% }
-% Images are already loaded for the measurement part of the code, so
-% inclusion is straight-forward, with only any attributes to worry about. The
-% latter carry through from determination of the bounding box.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_include_jpg:n #1
- {
- \tex_pdfrefximage:D
- \int_use:c { c_@@_ #1 \l_@@_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}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_getbb_eps:n, \@@_backend_getbb_ps:n}
-% \begin{macro}{\@@_backend_getbb_eps:nm}
-% \begin{macro}{\@@_backend_include_eps:n, \@@_backend_include_ps:n}
-% \begin{variable}
-% {\l_@@_backend_dir_str, \l_@@_backend_name_str, \l_@@_backend_ext_str}
-% EPS graphics may be included in \LuaTeX{}/pdfTeX{} by conversion to
-% PDF: this requires restricted shell escape. Modelled on the \pkg{epstopdf}
-% \LaTeXe{} package, but simplified, conversion takes place here if we have
-% shell access.
-% \begin{macrocode}
-\sys_if_shell:T
- {
- \str_new:N \l_@@_backend_dir_str
- \str_new:N \l_@@_backend_name_str
- \str_new:N \l_@@_backend_ext_str
- \cs_new_protected:Npn \@@_backend_getbb_eps:n #1
- {
- \file_parse_full_name:nNNN {#1}
- \l_@@_backend_dir_str
- \l_@@_backend_name_str
- \l_@@_backend_ext_str
- \exp_args:Ne \@@_backend_getbb_eps:nn
- {
- \exp_args:Ne \__kernel_file_name_quote:n
- {
- \l_@@_backend_name_str
- - \str_tail:N \l_@@_backend_ext_str
- -converted-to.pdf
- }
- }
- {#1}
- }
- \cs_new_eq:NN \@@_backend_getbb_ps:n \@@_backend_getbb_eps:n
- \cs_new_protected:Npn \@@_backend_getbb_eps:nn #1#2
- {
- \file_compare_timestamp:nNnT {#2} > {#1}
- {
- \sys_shell_now:n
- { repstopdf ~ #2 ~ #1 }
- }
- \tl_set:Nn \l_@@_final_name_str {#1}
- \@@_backend_getbb_pdf:n {#1}
- }
- \cs_new_protected:Npn \@@_backend_include_eps:n #1
- {
- \file_parse_full_name:nNNN {#1}
- \l_@@_backend_dir_str \l_@@_backend_name_str \l_@@_backend_ext_str
- \exp_args:Ne \@@_backend_include_pdf:n
- {
- \exp_args:Ne \__kernel_file_name_quote:n
- {
- \l_@@_backend_name_str
- - \str_tail:N \l_@@_backend_ext_str
- -converted-to.pdf
- }
- }
- }
- \cs_new_eq:NN \@@_backend_include_ps:n \@@_backend_include_eps:n
- }
-% \end{macrocode}
-% \end{variable}
-% \end{macro}
-% \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_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}
-%
-% \subsection{\texttt{dvipdfmx} backend}
-%
-% \begin{macrocode}
-%<*dvipdfmx|xetex>
-% \end{macrocode}
-%
-% \begin{variable}[no-user-doc]{\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_ps: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}
-\@@_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_@@_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_@@_decodearray_str
- \bool_set_false:N \l_@@_interpolate_bool
- \@@_extract_bb:n {#1}
- }
-%</dvipdfmx>
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{variable}{\g_@@_track_int}
-% Used to track the object number associated with each graphic.
-% \begin{macrocode}
-\int_new:N \g_@@_track_int
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}
-% {
-% \@@_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:enn}
-% \begin{macro}{\@@_backend_include_auxiii:nnn}
-% The special syntax depends on the file type. There is a difference in
-% how PDF graphics are best handled between |dvipdfmx| and \XeTeX{}: for
-% the latter it is better to use the primitive route. The relevant code for
-% that is included later in this file.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_include_eps:n #1
- {
- \__kernel_backend_literal:e
- {
- PSfile = #1 \c_space_tl
- 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 } }
-%</dvipdfmx>
-% \end{macrocode}
-% Graphic inclusion is set up to use the fact that each image is stored in
-% the PDF as an XObject. This means that we can include repeated images
-% only once and refer to them. To allow that, track the nature of each
-% image: much the same as for the direct PDF mode case.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_include_auxi:nn #1#2
- {
- \@@_backend_include_auxii:enn
- {
- \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_@@_ #2#1 _int }
- {
- \__kernel_backend_literal:e
- { pdf:usexobj~@graphic \int_use:c { c_@@_ #2#1 _int } }
- }
- { \@@_backend_include_auxiii:nnn {#2} {#1} {#3} }
- }
-\cs_generate_variant:Nn \@@_backend_include_auxii:nnn { e }
-% \end{macrocode}
-% Inclusion using the specials is relatively straight-forward, but there
-% is one wrinkle. To get the |pagebox| correct for PDF graphics in all cases,
-% it is necessary to provide both that information and the |bbox| argument:
-% odd things happen otherwise!
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_include_auxiii:nnn #1#2#3
- {
- \int_gincr:N \g_@@_track_int
- \int_const:cn { c_@@_ #1#2 _int } { \g_@@_track_int }
- \__kernel_backend_literal:e
- {
- pdf:#3~
- @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_@@_pagebox_tl \c_space_tl
- bbox ~
- \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_@@_interpolate_bool }
- { ! \tl_if_empty_p:N \l_@@_decodearray_str }
- {
- <<
- \tl_if_empty:NF \l_@@_decodearray_str
- { /Decode~[ \l_@@_decodearray_str ] }
- \bool_if:NT \l_@@_interpolate_bool
- { /Interpolate~true }
- >>
- }
- }
- }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \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}
-%
-% \subsection{\XeTeX{} backend}
-%
-% \begin{macrocode}
-%<*xetex>
-% \end{macrocode}
-%
-% \begin{macro}
-% {
-% \@@_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}
-% \begin{macro}{\@@_backend_getbb_auxiii:nNnn}
-% \begin{macro}{\@@_backend_getbb_auxiv:nnNnn, \@@_backend_getbb_auxiv:VnNnn}
-% \begin{macro}{\@@_backend_getbb_auxv:nNnn, \@@_backend_getbb_auxv:nNnn}
-% \begin{macro}[EXP]{\@@_backend_getbb_pagebox:w}
-% For \XeTeX{}, there are two primitives that allow us to obtain
-% 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 \@@_backend_getbb_jpg:n #1
- {
- \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_@@_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_@@_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
- { \@@_backend_getbb_auxiii:nNnn {#2} #3 { :P #1 } { page #1 } }
-\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_@@_pagebox_tl
- { \@@_backend_getbb_auxiv:VnNnn \l_@@_pagebox_tl }
- { \@@_backend_getbb_auxv:nNnn }
- {#1} #2 {#3} {#4}
- }
-\cs_new_protected:Npn \@@_backend_getbb_auxiv:nnNnn #1#2#3#4#5
- {
- \use:e
- {
- \@@_backend_getbb_auxv:nNnn {#2} #3 { : #1 #4 }
- {
- #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
- {
- \@@_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_@@_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}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_include_pdf:n}
-% 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
-% stage that there must be some valid setting for \cs{l_@@_pagebox_tl}.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_include_pdf:n #1
- {
- \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
- }
-% \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}
-%</xetex>
-% \end{macrocode}
-%
-% \subsection{\texttt{dvisvgm} backend}
-%
-% \begin{macrocode}
-%<*dvisvgm>
-% \end{macrocode}
-%
-% \begin{variable}[no-user-doc]{\l_graphics_search_ext_seq}
-% \begin{macrocode}
-\@@_backend_loaded:n
- {
- \seq_set_from_clist:Nn
- \l_graphics_search_ext_seq
- { .svg , .pdf , .eps , .ps , .png , .jpg , .jpeg }
- }
-% \end{macrocode}
-% \end{variable}
-%
-% \begin{macro}{\@@_backend_getbb_svg:n}
-% \begin{macro}{\@@_backend_getbb_svg_auxi:nNn}
-% \begin{macro}{\@@_backend_getbb_svg_auxii:w}
-% \begin{macro}
-% {
-% \@@_backend_getbb_svg_auxiii:Nw ,
-% \@@_backend_getbb_svg_auxiv:Nw ,
-% \@@_backend_getbb_svg_auxv:Nw
-% }
-% \begin{macro}{\@@_backend_getbb_svg_auxvi:Nn}
-% \begin{macro}{\@@_backend_getbb_svg_auxvii:w}
-% This is relatively similar to reading bounding boxes for |.eps| files. Life
-% is though made more tricky as we cannot pick a single line for the data. So
-% we have to loop until we collect up both height and width. To do that, we
-% can use a marker value. We also have to allow for the default units of the
-% lengths: they are big points and may be omitted.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_getbb_svg:n #1
- {
- \@@_bb_restore:nF {#1}
- {
- \ior_open:Nn \l_@@_internal_ior {#1}
- \ior_if_eof:NTF \l_@@_internal_ior
- { \msg_error:nnn { graphics } { graphic-not-found } {#1} }
- {
- \dim_zero:N \l_@@_llx_dim
- \dim_zero:N \l_@@_lly_dim
- \dim_set:Nn \l_@@_urx_dim { -\c_max_dim }
- \dim_set:Nn \l_@@_ury_dim { -\c_max_dim }
- \ior_str_map_inline:Nn \l_@@_internal_ior
- {
- \dim_compare:nNnT \l_@@_urx_dim = { -\c_max_dim }
- {
- \@@_backend_getbb_svg_auxi:nNn
- { width } \l_@@_urx_dim {##1}
- }
- \dim_compare:nNnT \l_@@_ury_dim = { -\c_max_dim }
- {
- \@@_backend_getbb_svg_auxi:nNn
- { height } \l_@@_ury_dim {##1}
- }
- \bool_lazy_and:nnF
- { \dim_compare_p:nNn \l_@@_urx_dim = { -\c_max_dim } }
- { \dim_compare_p:nNn \l_@@_ury_dim = { -\c_max_dim } }
- { \ior_map_break: }
- }
- \@@_bb_save:n {#1}
- }
- \ior_close:N \l_@@_internal_ior
- }
- }
-\cs_new_protected:Npn \@@_backend_getbb_svg_auxi:nNn #1#2#3
- {
- \use:e
- {
- \cs_set_protected:Npn \@@_backend_getbb_svg_auxii:w
- ##1 \tl_to_str:n {#1} = ##2 \tl_to_str:n {#1} = ##3
- \s_@@_stop
- }
- {
- \tl_if_blank:nF {##2}
- {
- \peek_remove_spaces:n
- {
- \peek_meaning:NTF ' % '
- { \@@_backend_getbb_svg_auxiii:Nw #2 }
- {
- \peek_meaning:NTF " % "
- { \@@_backend_getbb_svg_auxiv:Nw #2 }
- { \@@_backend_getbb_svg_auxv:Nw #2 }
- }
- }
- ##2 \s_@@_stop
- }
- }
- \use:e
- {
- \@@_backend_getbb_svg_auxii:w #3
- \tl_to_str:n {#1} = \tl_to_str:n {#1} =
- \s_@@_stop
- }
- }
-\cs_new_protected:Npn \@@_backend_getbb_svg_auxii:w { }
-\cs_new_protected:Npn \@@_backend_getbb_svg_auxiii:Nw #1 ' #2 ' #3 \s_@@_stop
- { \@@_backend_getbb_svg_auxvi:Nn #1 {#2} }
-\cs_new_protected:Npn \@@_backend_getbb_svg_auxiv:Nw #1 " #2 " #3 \s_@@_stop
- { \@@_backend_getbb_svg_auxvi:Nn #1 {#2} }
-\cs_new_protected:Npn \@@_backend_getbb_svg_auxv:Nw #1 #2 ~ #3 \s_@@_stop
- { \@@_backend_getbb_svg_auxvi:Nn #1 {#2} }
-\cs_new_protected:Npn \@@_backend_getbb_svg_auxvi:Nn #1#2
- {
- \tex_afterassignment:D \@@_backend_getbb_svg_auxvii:w
- \l_@@_internal_dim #2 bp \scan_stop:
- \dim_set_eq:NN #1 \l_@@_internal_dim
- }
-\cs_new_protected:Npn \@@_backend_getbb_svg_auxvii:w #1 \scan_stop: { }
-% \end{macrocode}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-% \end{macro}
-%
-% \begin{macro}{\@@_backend_getbb_eps:n, \@@_backend_getbb_ps:n}
-% Simply use the generic function.
-% \begin{macrocode}
-\@@_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_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_@@_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}
-%
-% \begin{macro}{\@@_backend_getbb_pdf:n}
-% Same as for \texttt{dvipdfmx}: use the generic function
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_getbb_pdf:n #1
- {
- \tl_clear:N \l_@@_decodearray_str
- \bool_set_false:N \l_@@_interpolate_bool
- \@@_extract_bb:n {#1}
- }
-% \end{macrocode}
-% \end{macro}
-%
-% \begin{macro}
-% {
-% \@@_backend_include_eps:n ,
-% \@@_backend_include_ps:n ,
-% \@@_backend_include_pdf:n
-% }
-% \begin{macro}{\@@_backend_include:nn}
-% The special syntax is relatively clear here: remember we need PostScript
-% 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} }
-\cs_new_eq:NN \@@_backend_include_ps:n \@@_backend_include_eps:n
-\cs_new_protected:Npn \@@_backend_include_pdf:n #1
- { \@@_backend_include:nn { pdffile } {#1} }
-\cs_new_protected:Npn \@@_backend_include:nn #1#2
- {
- \__kernel_backend_literal:e
- {
- #1 = #2 \c_space_tl
- 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_svg:n ,
-% \@@_backend_include_png:n ,
-% \@@_backend_include_jpg:n ,
-% \@@_backend_include_jpeg:n
-% }
-% \begin{macro}{\@@_backend_include_dequote:w}
-% The backend here has built-in support for basic graphic inclusion (see
-% \texttt{dvisvgm.def} for a more complex approach, needed if clipping,
-% \emph{etc.}, is covered at the graphic backend level). We have to deal
-% with the fact that the image reference point is at the \emph{top}, so
-% there is a need for a vertical shift to put it in the right place.
-% The other issue is that |#1| must be quote-corrected. The
-% \texttt{dvisvgm:img} operation quotes the file name, but if it is already
-% quoted (contains spaces) then we have an issue: we simply strip off any
-% quotes as a result.
-% \begin{macrocode}
-\cs_new_protected:Npn \@@_backend_include_svg:n #1
- {
- \box_move_up:nn { \l_@@_ury_dim }
- {
- \hbox:n
- {
- \__kernel_backend_literal:e
- {
- dvisvgm:img~
- \dim_to_decimal:n { \l_@@_urx_dim } ~
- \dim_to_decimal:n { \l_@@_ury_dim } ~
- \@@_backend_include_dequote:w #1 " #1 " \s_@@_stop
- }
- }
- }
- }
-\cs_new_eq:NN \@@_backend_include_png:n \@@_backend_include_svg:n
-\cs_new_eq:NN \@@_backend_include_jpeg:n \@@_backend_include_svg:n
-\cs_new_eq:NN \@@_backend_include_jpg:n \@@_backend_include_svg:n
-\cs_new:Npn \@@_backend_include_dequote:w #1 " #2 " #3 \s_@@_stop
- {#2}
-% \end{macrocode}
-% \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}
-%
-% \begin{macrocode}
-%</package>
-% \end{macrocode}
-%
-% \end{implementation}
-%
-% \PrintIndex