From 4de7376b42147ed2246d7320e079bdebd84d9503 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Thu, 2 May 2019 22:51:31 +0000 Subject: l3kernel (22apr19) git-svn-id: svn://tug.org/texlive/trunk@50950 c570f23f-e606-0410-a88d-b1316a301751 --- .../texmf-dist/tex/latex/l3kernel/expl3-code.tex | 2 +- .../tex/latex/l3kernel/expl3-generic.tex | 2 +- Master/texmf-dist/tex/latex/l3kernel/expl3.lua | 2 +- Master/texmf-dist/tex/latex/l3kernel/expl3.sty | 2 +- .../texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def | 383 +++++++----- Master/texmf-dist/tex/latex/l3kernel/l3dvips.def | 666 +++++++++++++++++++-- Master/texmf-dist/tex/latex/l3kernel/l3dvisvgm.def | 80 ++- Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def | 438 +++++++++----- .../texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def | 469 +++++++++------ 9 files changed, 1486 insertions(+), 558 deletions(-) (limited to 'Master/texmf-dist/tex/latex') diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex b/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex index 715c3637b3d..0710918dfaf 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex +++ b/Master/texmf-dist/tex/latex/l3kernel/expl3-code.tex @@ -63,7 +63,7 @@ %% and all files in that bundle must be distributed together. %% %% File: expl3.dtx -\def\ExplFileDate{2019-04-06}% +\def\ExplFileDate{2019-04-21}% \begingroup \def\next{\endgroup}% \expandafter\ifx\csname PackageError\endcsname\relax diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex b/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex index 2865a66e848..81c56d71765 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex +++ b/Master/texmf-dist/tex/latex/l3kernel/expl3-generic.tex @@ -19,7 +19,7 @@ %% and all files in that bundle must be distributed together. %% %% File: expl3.dtx -\def\ExplFileDate{2019-04-06}% +\def\ExplFileDate{2019-04-21}% \let\ExplLoaderFileDate\ExplFileDate \begingroup \def\tempa{LaTeX2e}% diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3.lua b/Master/texmf-dist/tex/latex/l3kernel/expl3.lua index 06b3edd8384..48b4a266506 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/expl3.lua +++ b/Master/texmf-dist/tex/latex/l3kernel/expl3.lua @@ -6,7 +6,7 @@ -- -- l3luatex.dtx (with options: `package,lua') -- --- Copyright (C) 1990-2017 The LaTeX3 Project +-- Copyright (C) 1990-2019 The LaTeX3 Project -- -- It may be distributed and/or modified under the conditions of -- the LaTeX Project Public License (LPPL), either version 1.3c of diff --git a/Master/texmf-dist/tex/latex/l3kernel/expl3.sty b/Master/texmf-dist/tex/latex/l3kernel/expl3.sty index 4a7c73d8299..d084dafa2fe 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/expl3.sty +++ b/Master/texmf-dist/tex/latex/l3kernel/expl3.sty @@ -19,7 +19,7 @@ %% and all files in that bundle must be distributed together. %% %% File: expl3.dtx -\def\ExplFileDate{2019-04-06}% +\def\ExplFileDate{2019-04-21}% \let\ExplLoaderFileDate\ExplFileDate \ProvidesPackage{expl3} [% diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def b/Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def index 95b580d4e66..7071cac3a1f 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def +++ b/Master/texmf-dist/tex/latex/l3kernel/l3dvipdfmx.def @@ -5,6 +5,12 @@ %% The original source files were: %% %% l3drivers.dtx (with options: `package,dvipdfmx') +%% l3drivers-basics.dtx (with options: `package,dvipdfmx') +%% l3drivers-color.dtx (with options: `package,dvipdfmx') +%% l3drivers-box.dtx (with options: `package,dvipdfmx') +%% l3drivers-draw.dtx (with options: `package,dvipdfmx') +%% l3drivers-image.dtx (with options: `package,dvipdfmx') +%% l3drivers-pdf.dtx (with options: `package,dvipdfmx') %% %% Copyright (C) 1990-2019 The LaTeX3 Project %% @@ -19,6 +25,7 @@ %% and all files in that bundle must be distributed together. %% %% File: l3drivers.dtx +%% File: l3drivers-basics.dtx \ProvidesExplFile {l3dvipdfmx.def}{2019-04-06}{} {L3 Experimental driver: dvipdfmx} @@ -26,6 +33,14 @@ \cs_new_protected:Npn \__driver_literal:n #1 { \__driver_literal:e { \exp_not:n {#1} } } \cs_generate_variant:Nn \__driver_literal:n { x } +\cs_new_protected:Npn \__driver_literal_pdf:n #1 + { \__driver_literal:n { pdf:literal~ #1 } } +\cs_generate_variant:Nn \__driver_literal_pdf:n { x } +\cs_new_protected:Npn \__driver_scope_begin: + { \__driver_literal:n { x:gsave } } +\cs_new_protected:Npn \__driver_scope_end: + { \__driver_literal:n { x:grestore } } +%% File: l3drivers-color.dtx \cs_new_protected:Npn \driver_color_pickup:N #1 { } \AtBeginDocument { @@ -77,13 +92,7 @@ \cs_generate_variant:Nn \__driver_color_select:n { x } \cs_new_protected:Npn \__driver_color_reset: { \__driver_literal:n { color~pop } } -\cs_new_protected:Npn \__driver_literal_pdf:n #1 - { \__driver_literal:n { pdf:literal~ #1 } } -\cs_generate_variant:Nn \__driver_literal_pdf:n { x } -\cs_new_protected:Npn \__driver_scope_begin: - { \__driver_literal:n { x:gsave } } -\cs_new_protected:Npn \__driver_scope_end: - { \__driver_literal:n { x:grestore } } +%% File: l3drivers-box.dtx \cs_new_protected:Npn \driver_box_use_clip:N #1 { \__driver_scope_begin: @@ -126,141 +135,7 @@ \hbox_overlap_right:n { \box_use:N #1 } \__driver_scope_end: } -\cs_new_eq:NN \__driver_image_getbb_eps:n \image_read_bb:n -\cs_new_protected:Npn \__driver_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 \__driver_image_getbb_png:n \__driver_image_getbb_jpg:n -\cs_new_protected:Npn \__driver_image_getbb_pdf:n #1 - { - \tl_clear:N \l_image_decode_tl - \bool_set_false:N \l_image_interpolate_bool - \image_extract_bb:n {#1} - } -\int_new:N \g__driver_image_int -\cs_new_protected:Npn \__driver_image_include_eps:n #1 - { - \__driver_literal:n { PSfile = #1 } - } -\cs_new_protected:Npn \__driver_image_include_jpg:n #1 - { \__driver_image_include_auxi:nn {#1} { image } } -\cs_new_eq:NN \__driver_image_include_png:n \__driver_image_include_jpg:n -\cs_new_protected:Npn \__driver_image_include_pdf:n #1 - { \__driver_image_include_auxi:nn {#1} { epdf } } -\cs_new_protected:Npn \__driver_image_include_auxi:nn #1#2 - { - \__driver_image_include_auxii:xnn - { - \tl_if_empty:NF \l_image_pagebox_tl - { : \l_image_pagebox_tl } - \int_compare:nNnT \l_image_page_int > 1 - { :P \int_use:N \l_image_page_int } - \tl_if_empty:NF \l_image_decode_tl - { :D \l_image_decodearray_tl } - \bool_if:NT \l_image_interpolate_bool - { :I } - } - {#1} {#2} - } -\cs_new_protected:Npn \__driver_image_include_auxii:nnn #1#2#3 - { - \int_if_exist:cTF { c__driver_image_ #2#1 _int } - { - \__driver_literal:x - { pdf:usexobj~@image \int_use:c { c__driver_image_ #2#1 _int } } - } - { \__driver_image_include_auxiii:nn {#2} {#1} {#3} } - } -\cs_generate_variant:Nn \__driver_image_include_auxii:nnn { x } -\cs_new_protected:Npn \__driver_image_include_auxiii:nnn #1#2#3 - { - \int_gincr:N \g__driver_image_int - \int_const:cn { c__driver_image_ #1#2 _int } { \g__driver_image_int } - \__driver_literal:x - { - pdf:#3~ - @image \int_use:c { c__driver_image_ #1#2 _int } - \int_compare:nNnT \l_image_page_int > 1 - { 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 - bbox ~ - \dim_to_decimal_in_bp:n \l_image_llx_dim \c_space_tl - \dim_to_decimal_in_bp:n \l_image_lly_dim \c_space_tl - \dim_to_decimal_in_bp:n \l_image_urx_dim \c_space_tl - \dim_to_decimal_in_bp:n \l_image_ury_dim \c_space_tl - } - (#1) - \bool_lazy_or:nnT - { \l_image_interpolate_bool } - { ! \tl_if_empty_p:N \l_image_decodearray_tl } - { - << - \tl_if_empty:NF \l_image_decode_tl - { /Decode~[ \l_image_decodearray_tl ] } - \bool_if:NT \l_image_interpolate_bool - { /Interpolate~true> } - >> - } - } - } -\int_new:N \g__driver_pdf_object_int -\prop_new:N \g__driver_pdf_object_prop -\cs_new_protected:Npn \driver_pdf_object_new:nn #1#2 - { - \int_gincr:N \g__driver_pdf_object_int - \int_const:cn - { g__driver_pdf_object_ \tl_to_str:n {#1} _int } - { \g__driver_pdf_object_int } - \prop_gput:Nnn \g__driver_pdf_object_prop {#1} {#2} - } -\cs_new:Npn \driver_pdf_object_ref:n #1 - { @l3obj \int_use:c { g__driver_pdf_object_ \tl_to_str:n {#1} _int } } -\cs_new_protected:Npn \driver_pdf_object_write:nn #1#2 - { - \exp_args:Nx \__driver_pdf_object_write:nnn - { \prop_item:Nn \g__driver_pdf_object_prop {#1} } {#1} {#2} - } -\cs_new_protected:Npn \__driver_pdf_object_write:nnn #1#2#3 - { \use:c { __driver_pdf_object_write_ #1 :nn } {#2} {#3} } -\cs_new_protected:Npn \__driver_pdf_object_write_array:nn #1#2 - { - \__driver_literal:x - { - pdf:obj ~ \driver_pdf_object_ref:n {#1} ~ - [ ~ \exp_not:n {#2} ~ ] - } - } -\cs_new_protected:Npn \__driver_pdf_object_write_dict:nn #1#2 - { - \__driver_literal:x - { - pdf:obj ~ \driver_pdf_object_ref:n {#1} ~ - << ~ \exp_not:n {#2} ~ >> - } - } -\cs_new_protected:Npn \__driver_pdf_object_write_fstream:nn #1#2 - { \__driver_pdf_object_write_stream:nnnn { f } {#1} #2 } -\cs_new_protected:Npn \__driver_pdf_object_write_stream:nn #1#2 - { \__driver_pdf_object_write_stream:nnnn { } {#1} #2 } -\cs_new_protected:Npn \__driver_pdf_object_write_stream:nnnn #1#2#3#4 - { - \__driver_literal:x - { - pdf: #1 stream ~ \driver_pdf_object_ref:n {#2} ~ - ( \exp_not:n {#4} ) ~ << \exp_not:n {#3} >> - - } - } -\cs_new_protected:Npn \driver_pdf_compresslevel:n #1 - { \__driver_literal:x { dvipdfmx:config~z~ \int_eval:n {#1} } } -\cs_new_protected:Npn \driver_pdf_objects_enable: { } -\cs_new_protected:Npn \driver_pdf_objects_disable: - { \__driver_literal:n { dvipdfmx:config~C~0x40 } } +%% File: l3drivers-draw.dtx \cs_new_eq:NN \__driver_draw_literal:n \__driver_literal_pdf:n \cs_generate_variant:Nn \__driver_draw_literal:n { x } \cs_new_protected:Npn \driver_draw_begin: @@ -476,6 +351,230 @@ \__driver_literal:n { pdf:etrans } \__driver_scope_end: } +%% File: l3drivers-image.dtx +\cs_new_eq:NN \__driver_image_getbb_eps:n \image_read_bb:n +\cs_new_protected:Npn \__driver_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 \__driver_image_getbb_png:n \__driver_image_getbb_jpg:n +\cs_new_protected:Npn \__driver_image_getbb_pdf:n #1 + { + \tl_clear:N \l_image_decode_tl + \bool_set_false:N \l_image_interpolate_bool + \image_extract_bb:n {#1} + } +\int_new:N \g__driver_image_int +\cs_new_protected:Npn \__driver_image_include_eps:n #1 + { + \__driver_literal:n { PSfile = #1 } + } +\cs_new_protected:Npn \__driver_image_include_jpg:n #1 + { \__driver_image_include_auxi:nn {#1} { image } } +\cs_new_eq:NN \__driver_image_include_png:n \__driver_image_include_jpg:n +\cs_new_protected:Npn \__driver_image_include_pdf:n #1 + { \__driver_image_include_auxi:nn {#1} { epdf } } +\cs_new_protected:Npn \__driver_image_include_auxi:nn #1#2 + { + \__driver_image_include_auxii:xnn + { + \tl_if_empty:NF \l_image_pagebox_tl + { : \l_image_pagebox_tl } + \int_compare:nNnT \l_image_page_int > 1 + { :P \int_use:N \l_image_page_int } + \tl_if_empty:NF \l_image_decode_tl + { :D \l_image_decodearray_tl } + \bool_if:NT \l_image_interpolate_bool + { :I } + } + {#1} {#2} + } +\cs_new_protected:Npn \__driver_image_include_auxii:nnn #1#2#3 + { + \int_if_exist:cTF { c__driver_image_ #2#1 _int } + { + \__driver_literal:x + { pdf:usexobj~@image \int_use:c { c__driver_image_ #2#1 _int } } + } + { \__driver_image_include_auxiii:nn {#2} {#1} {#3} } + } +\cs_generate_variant:Nn \__driver_image_include_auxii:nnn { x } +\cs_new_protected:Npn \__driver_image_include_auxiii:nnn #1#2#3 + { + \int_gincr:N \g__driver_image_int + \int_const:cn { c__driver_image_ #1#2 _int } { \g__driver_image_int } + \__driver_literal:x + { + pdf:#3~ + @image \int_use:c { c__driver_image_ #1#2 _int } + \int_compare:nNnT \l_image_page_int > 1 + { 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 + bbox ~ + \dim_to_decimal_in_bp:n \l_image_llx_dim \c_space_tl + \dim_to_decimal_in_bp:n \l_image_lly_dim \c_space_tl + \dim_to_decimal_in_bp:n \l_image_urx_dim \c_space_tl + \dim_to_decimal_in_bp:n \l_image_ury_dim \c_space_tl + } + (#1) + \bool_lazy_or:nnT + { \l_image_interpolate_bool } + { ! \tl_if_empty_p:N \l_image_decodearray_tl } + { + << + \tl_if_empty:NF \l_image_decode_tl + { /Decode~[ \l_image_decodearray_tl ] } + \bool_if:NT \l_image_interpolate_bool + { /Interpolate~true> } + >> + } + } + } +%% File: l3drivers-pdf.dtx +\tl_const:Nn \c__driver_pdf_AR_fix_tl + { /Ff ~ 65537 /FT /Btn /Subtype /Widget } +\cs_new_protected:Npx \__driver_pdf:n #1 + { \__driver_literal:n { pdf: #1 } } +\cs_generate_variant:Nn \__driver_pdf:n { x } +\int_new:N \g__driver_pdf_object_int +\prop_new:N \g__driver_pdf_object_prop +\cs_new_protected:Npn \driver_pdf_object_new:nn #1#2 + { + \int_gincr:N \g__driver_pdf_object_int + \int_const:cn + { g__driver_pdf_object_ \tl_to_str:n {#1} _int } + { \g__driver_pdf_object_int } + \prop_gput:Nnn \g__driver_pdf_object_prop {#1} {#2} + } +\cs_new:Npn \driver_pdf_object_ref:n #1 + { @driver.obj \int_use:c { g__driver_pdf_object_ \tl_to_str:n {#1} _int } } +\cs_new_protected:Npn \driver_pdf_object_write:nn #1#2 + { + \exp_args:Nx \__driver_pdf_object_write:nnn + { \prop_item:Nn \g__driver_pdf_object_prop {#1} } {#1} {#2} + } +\cs_new_protected:Npn \__driver_pdf_object_write:nnn #1#2#3 + { \use:c { __driver_pdf_object_write_ #1 :nn } {#2} {#3} } +\cs_new_protected:Npn \__driver_pdf_object_write_array:nn #1#2 + { + \__driver_pdf:x + { + obj ~ \driver_pdf_object_ref:n {#1} ~ + [ ~ \exp_not:n {#2} ~ ] + } + } +\cs_new_protected:Npn \__driver_pdf_object_write_dict:nn #1#2 + { + \__driver_pdf:x + { + obj ~ \driver_pdf_object_ref:n {#1} ~ + << ~ \exp_not:n {#2} ~ >> + } + } +\cs_new_protected:Npn \__driver_pdf_object_write_fstream:nn #1#2 + { \__driver_pdf_object_write_stream:nnnn { f } {#1} #2 } +\cs_new_protected:Npn \__driver_pdf_object_write_stream:nn #1#2 + { \__driver_pdf_object_write_stream:nnnn { } {#1} #2 } +\cs_new_protected:Npn \__driver_pdf_object_write_stream:nnnn #1#2#3#4 + { + \__driver_pdf:x + { + #1 stream ~ \driver_pdf_object_ref:n {#2} ~ + ( \exp_not:n {#4} ) ~ << \exp_not:n {#3} >> + + } + } +\bool_new:N \g__driver_landscape_bool +\AtBeginDocument + { + \cs_if_exist:NT \landscape + { + \tl_put_right:Nn \landscape + { \bool_gset_true:N \g__driver_landscape_bool } + \tl_put_left:Nn \endlandscape + { \bool_gset_false:N \g__driver_landscape_bool } + } + } +\cs_new_protected:Npx \__driver_pdf_AR_fix: + { + \__driver_pdf:n + { + ann ~ width ~ 3pt ~ height ~ 3pt ~ depth ~ 0pt + << \c__driver_pdf_AR_fix_tl >> + } + } +\int_new:N \g__driver_pdf_annotation_int +\cs_new_protected:Npn \driver_pdf_annotation:nnnn #1#2#3#4 + { + \bool_if:NTF \g__driver_landscape_bool + { + \box_move_up:nn {#2} + { + \vbox:n + { + \__driver_pdf_annotation:nnnn + { #2 + #3 } {#1} { 0pt } {#4} + } + } + } + { \__driver_pdf_annotation:nnnn {#1} {#2} {#3} {#4} } + } +\cs_new_protected:Npn \__driver_pdf_annotation:nnnn #1#2#3#4 + { + \__driver_pdf_AR_fix: + \int_gincr:N \g__driver_pdf_object_int + \int_gset_eq:NN \g__driver_pdf_annotation_int \g__driver_pdf_object_int + \__driver_pdf:x + { + ann ~ @driver.obj \int_use:N \g__driver_pdf_object_int \c_space_tl + width ~ \dim_eval:n {#1} ~ + height ~ \dim_eval:n {#2} ~ + depth ~ \dim_eval:n {#3} ~ + << #4 >> + } + } +\cs_new_protected:Npn \driver_pdf_link_begin_goto:nnw #1#2 + { \__driver_pdf_link_begin:n { #1 /A << /S /GoTo /D ( #2 ) >> } } +\cs_new_protected:Npn \driver_pdf_link_begin_user:nnw #1#2 + { \__driver_pdf_link_begin:n {#1#2} } +\cs_new_protected:Npn \__driver_pdf_link_begin:n #1 + { + \__driver_pdf_AR_fix: + \__driver_pdf:n + { + bann + << + /Type /Annot + /Subtype /Link + #1 + >> + } + } +\cs_new_protected:Npn \driver_pdf_link_end: + { \__driver_pdf:n { eann } } +\cs_new:Npn \driver_pdf_link_last: { } +\cs_new_protected:Npn \driver_pdf_link_margin:n #1 { } +\cs_new_protected:Npn \driver_pdf_compresslevel:n #1 + { \__driver_literal:x { dvipdfmx:config~z~ \int_eval:n {#1} } } +\cs_new_protected:Npn \driver_pdf_objects_enable: { } +\cs_new_protected:Npn \driver_pdf_objects_disable: + { \__driver_literal:n { dvipdfmx:config~C~0x40 } } +\cs_new_protected:Npn \driver_pdf_version_major:n #1 + { + \cs_gset:Npx \driver_pdf_version_major: { \int_eval:n {#1} } + \__driver_literal:x { pdf:majorversion \driver_pdf_version_major: } + } +\cs_new_protected:Npn \driver_pdf_version_minor:n #1 + { + \cs_gset:Npx \driver_pdf_version_minor: { \int_eval:n {#1} } + \__driver_literal:x { pdf:minorversion \driver_pdf_version_minor: } + } +\cs_new:Npn \driver_pdf_version_major: { 1 } +\cs_new:Npn \driver_pdf_version_minor: { 5 } %% %% %% End of file `l3dvipdfmx.def'. diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3dvips.def b/Master/texmf-dist/tex/latex/l3kernel/l3dvips.def index db72b671eff..bc9cdcd2874 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3dvips.def +++ b/Master/texmf-dist/tex/latex/l3kernel/l3dvips.def @@ -5,6 +5,12 @@ %% The original source files were: %% %% l3drivers.dtx (with options: `package,dvips') +%% l3drivers-basics.dtx (with options: `package,dvips') +%% l3drivers-color.dtx (with options: `package,dvips') +%% l3drivers-box.dtx (with options: `package,dvips') +%% l3drivers-draw.dtx (with options: `package,dvips') +%% l3drivers-image.dtx (with options: `package,dvips') +%% l3drivers-pdf.dtx (with options: `package,dvips') %% %% Copyright (C) 1990-2019 The LaTeX3 Project %% @@ -19,6 +25,7 @@ %% and all files in that bundle must be distributed together. %% %% File: l3drivers.dtx +%% File: l3drivers-basics.dtx \ProvidesExplFile {l3dvips.def}{2019-04-06}{} {L3 Experimental driver: dvips} @@ -26,6 +33,30 @@ \cs_new_protected:Npn \__driver_literal:n #1 { \__driver_literal:e { \exp_not:n {#1} } } \cs_generate_variant:Nn \__driver_literal:n { x } +\cs_new_protected:Npn \__driver_literal_postscript:n #1 + { \__driver_literal:n { ps:: #1 } } +\cs_generate_variant:Nn \__driver_literal_postscript:n { x } +\cs_new_protected:Npn \__driver_postscript:n #1 + { \__driver_literal:n { ps: SDict ~ begin ~ #1 ~ end } } +\cs_generate_variant:Nn \__driver_postscript:n { x } +\cs_new_protected:Npn \__driver_postscript_header:n #1 + { \__driver_literal:n { ! #1 } } +\cs_new_protected:Npn \__driver_align_currentpoint_begin: + { + \__driver_literal:n { ps::[begin] } + \__driver_literal_postscript:n { currentpoint } + \__driver_literal_postscript:n { currentpoint~translate } + } +\cs_new_protected:Npn \__driver_align_currentpoint_end: + { + \__driver_literal_postscript:n { neg~exch~neg~exch~translate } + \__driver_literal:n { ps::[end] } + } +\cs_new_protected:Npn \__driver_scope_begin: + { \__driver_literal:n { ps:gsave } } +\cs_new_protected:Npn \__driver_scope_end: + { \__driver_literal:n { ps:grestore } } +%% File: l3drivers-color.dtx \cs_new_protected:Npn \driver_color_pickup:N #1 { } \AtBeginDocument { @@ -72,30 +103,13 @@ \cs_new_protected:Npn \__driver_color_select:n #1 { \__driver_literal:n { color~push~ #1 } - \__driver_literal_postscript:n { /l3fc~{ }~def } + \__driver_postscript:n { /driver.fc~{ }~def } \group_insert_after:N \__driver_color_reset: } \cs_generate_variant:Nn \__driver_color_select:n { x } \cs_new_protected:Npn \__driver_color_reset: { \__driver_literal:n { color~pop } } -\cs_new_protected:Npn \__driver_literal_postscript:n #1 - { \__driver_literal:n { ps:: #1 } } -\cs_generate_variant:Nn \__driver_literal_postscript:n { x } -\cs_new_protected:Npn \__driver_align_currentpoint_begin: - { - \__driver_literal:n { ps::[begin] } - \__driver_literal_postscript:n { currentpoint } - \__driver_literal_postscript:n { currentpoint~translate } - } -\cs_new_protected:Npn \__driver_align_currentpoint_end: - { - \__driver_literal_postscript:n { neg~exch~neg~exch~translate } - \__driver_literal:n { ps::[end] } - } -\cs_new_protected:Npn \__driver_scope_begin: - { \__driver_literal:n { ps:gsave } } -\cs_new_protected:Npn \__driver_scope_end: - { \__driver_literal:n { ps:grestore } } +%% File: l3drivers-box.dtx \cs_new_protected:Npn \driver_box_use_clip:N #1 { \__driver_scope_begin: @@ -149,16 +163,14 @@ \hbox_overlap_right:n { \box_use:N #1 } \__driver_scope_end: } -\cs_new_eq:NN \__driver_image_getbb_eps:n \image_read_bb:n -\cs_new_protected:Npn \__driver_image_include_eps:n #1 - { \__driver_literal:n { PSfile = #1 } } +%% File: l3drivers-draw.dtx \cs_new_eq:NN \__driver_draw_literal:n \__driver_literal_postscript:n \cs_generate_variant:Nn \__driver_draw_literal:n { x } \cs_new_protected:Npn \driver_draw_begin: { \__driver_literal:n { ps::[begin] } \__driver_draw_literal:n { @beginspecial } - \__driver_draw_literal:n { /l3fc~{ }~def } + \__driver_darw_literal:n { SDict ~ begin ~ /driver.fc ~ { } ~ def ~ end } } \cs_new_protected:Npn \driver_draw_end: { @@ -233,7 +245,7 @@ \cs_new_protected:Npn \driver_draw_fill: { \__driver_draw_literal:n { gsave } - \__driver_draw_literal:n { l3fc } + \__driver_draw_literal:n { driver.fc } \__driver_draw_literal:x { \bool_if:NT \g__driver_draw_eor_bool { eo } @@ -254,7 +266,7 @@ \cs_new_protected:Npn \driver_draw_fillstroke: { \__driver_draw_literal:n { gsave } - \__driver_draw_literal:n { l3fc } + \__driver_draw_literal:n { driver.fc } \__driver_draw_literal:x { \bool_if:NT \g__driver_draw_eor_bool { eo } @@ -354,7 +366,7 @@ { rgb ~ \fp_eval:n {#1} ~ \fp_eval:n {#2} ~ \fp_eval:n {#3} } } \cs_new_protected:Npn \__driver_draw_color_fill:n #1 - { \__driver_draw_literal:n { /l3fc ~ { #1 } ~ def } } + { \__driver_postscript:n { SDict ~ begin ~ /driver.fc ~ { #1 } ~ def ~ end } } \cs_generate_variant:Nn \__driver_draw_color_fill:n { x } \cs_new_protected:Npn \__driver_draw_color_stroke:n #1 { @@ -394,6 +406,13 @@ \__driver_draw_literal:n { [begin] } \__driver_draw_literal:n { @beginspecial } } +%% File: l3drivers-image.dtx +\cs_new_eq:NN \__driver_image_getbb_eps:n \image_read_bb:n +\cs_new_protected:Npn \__driver_image_include_eps:n #1 + { \__driver_literal:n { PSfile = #1 } } +%% File: l3drivers-pdf.dtx +\tl_const:Nn \c__driver_pdf_AR_fix_tl + { /Ff ~ 65537 /FT /Btn /Subtype /Widget } \int_new:N \g__driver_pdf_object_int \prop_new:N \g__driver_pdf_object_prop \cs_new_protected:Npn \driver_pdf_object_new:nn #1#2 @@ -405,12 +424,12 @@ \prop_gput:Nnn \g__driver_pdf_object_prop {#1} {#2} } \cs_new:Npn \driver_pdf_object_ref:n #1 - { { l3obj \int_use:c { g__driver_pdf_object_ \tl_to_str:n {#1} _int } } } + { { driver.obj \int_use:c { g__driver_pdf_object_ \tl_to_str:n {#1} _int } } } \cs_new_protected:Npn \driver_pdf_object_write:nn #1#2 { - \__driver_literal_postscript:x + \__driver_postscript:x { - mark ~ /_objdef ~ \driver_pdf_object_ref:n {#1} ~ + mark /_objdef ~ \driver_pdf_object_ref:n {#1} /type \str_case_e:nn { \prop_item:Nn \g__driver_pdf_object_prop {#1} } @@ -428,18 +447,18 @@ } \cs_new_protected:Npn \__driver_pdf_object_write_array:nn #1#2 { - \__driver_literal_postscript:x + \__driver_postscript:x { - mark ~ \driver_pdf_object_ref:n {#1} ~ + mark ~ \driver_pdf_object_ref:n {#1} [ ~ \exp_not:n {#2} ~ ] ~ /PUTINTERVAL ~ pdfmark } } \cs_new_protected:Npn \__driver_pdf_object_write_dict:nn #1#2 { - \__driver_literal_postscript:x + \__driver_postscript:x { - mark ~ \driver_pdf_object_ref:n {#1} ~ - << ~ \exp_not:n {#2} ~ >> ~ /PUT ~ pdfmark + mark ~ \driver_pdf_object_ref:n {#1} + << \exp_not:n {#2} >> /PUT ~ pdfmark } } \cs_new_protected:Npn \__driver_pdf_object_write_stream:nn #1#2 @@ -451,16 +470,587 @@ } \cs_new_protected:Npn \__driver_pdf_object_write_stream:nnn #1#2#3 { - \__driver_literal_postscript:n + \__driver_postscript:n + { + [nobreak] + mark ~ #1 ~ ( #3 ) /PUT ~ pdfmark ~ + mark ~ #1 ~ << #2 >> /PUT ~ pdfmark + } + } +\__driver_postscript_header:n + { + true ~ setglobal ~ + /driver.globaldict ~ 4 ~ dict ~ def ~ + false ~ setglobal + } +\__driver_postscript_header:n + { + /driver.cvs { 65534 ~ string ~ cvs } def + /driver.pt.dvi { 72.27 ~ div ~ Resolution ~ mul } def + /driver.rect.ht { dup ~ 1 ~ get ~ neg ~ exch ~ 3 ~ get ~ add } def + } +\__driver_postscript_header:n + { + /driver.linkmargin { 1 ~ driver.pt.dvi } def + /driver.linkdp.pad { 0 } def + /driver.linkht.pad { 0 } def + } +\__driver_postscript_header:n + { + /driver.annotation.border + { /Rect [ driver.llx ~ driver.lly ~ driver.urx ~ driver.ury ] } def + /driver.annotation.ll + { + currentpoint + /driver.lly ~ exch ~ def + /driver.llx ~ exch ~ def + } + def + /driver.annotation.ur + { + currentpoint + /driver.ury ~ exch ~ def + /driver.urx ~ exch ~ def + } + def + /driver.link.ll + { + currentpoint ~ + driver.linkmargin ~ add ~ + driver.linkdp.pad ~ add + /driver.lly ~ exch ~ def ~ + driver.linkmargin ~ sub + /driver.llx ~ exch ~ def + } + def + /driver.link.ur + { + currentpoint ~ + driver.linkmargin ~ sub ~ + driver.linkht.pad ~ sub + /driver.ury ~ exch ~ def ~ + driver.linkmargin ~ add + /driver.urx ~ exch ~ def + } + def + } +\__driver_postscript_header:n + { + /driver.bordertracking ~ false ~ def + /driver.bordertracking.begin + { + SDict ~ /driver.bordertracking ~ true ~ put ~ + SDict ~ /driver.leftboundary ~ undef ~ + SDict ~ /driver.rightboundary ~ undef ~ + /a ~ where + { + /a + { + currentpoint ~ pop ~ + SDict /driver.rightboundary ~ known ~ dup + { + SDict /driver.rightboundary ~ get ~ 2 ~ index ~ lt + { not } + if + } + if + { pop } + { SDict ~ exch /driver.rightboundary ~ exch ~ put } + ifelse ~ + moveto ~ + currentpoint ~ pop ~ + SDict /driver.leftboundary ~ known ~ dup + { + SDict /driver.leftboundary ~ get ~ 2 ~ index ~ gt + { not } + if + } + if + { pop } + { SDict ~ exch /driver.leftboundary ~ exch ~ put } + ifelse + } + put + } + if + } + def + /driver.bordertracking.end + { + /a ~ where { /a { moveto } put } if + /x ~ where { /x { 0 ~ exch ~ rmoveto } put } if ~ + SDict /driver.leftboundary ~ known + { driver.outerbox ~ 0 ~ driver.leftboundary ~ put } + if ~ + SDict /driver.rightboundary ~ known + { driver.outerbox ~ 2 ~ driver.rightboundary ~ put } + if ~ + SDict /driver.bordertracking ~ false ~ put + } + def + /driver.bordertracking.endpage + { + driver.bordertracking + { + driver.bordertracking.end ~ + true ~ setglobal ~ + driver.globaldict + /driver.brokenlink.rect [ driver.outerbox ~ aload ~ pop ] put ~ + driver.globaldict + /driver.brokenlink.skip ~ driver.baselineskip ~ put ~ + driver.globaldict + /driver.brokenlink.dict ~ + driver.link.dict ~ driver.cvs ~ put ~ + false ~ setglobal ~ + mark ~ driver.link.dict ~ cvx ~ exec ~ /Rect + [ + driver.llx ~ + driver.lly ~ + driver.outerbox ~ 2 ~ get ~ driver.linkmargin ~ add ~ + currentpoint ~ exch ~ pop ~ + driver.outerbox ~ driver.rect.ht ~ sub ~ driver.linkmargin ~ sub + ] + /ANN ~ driver.pdfmark + } + if + } + def + /driver.bordertracking.continue + { + /driver.link.dict ~ driver.globaldict + /driver.brokenlink.dict ~ get ~ def + /driver.outerbox ~ driver.globaldict + /driver.brokenlink.rect ~ get ~ def + /driver.baselineskip ~ driver.globaldict + /driver.brokenlink.skip ~ get ~ def ~ + driver.globaldict ~ dup ~ dup + /driver.brokenlink.dict ~ undef + /driver.brokenlink.skip ~ undef + /driver.brokenlink.rect ~ undef ~ + currentpoint + /driver.originy ~ exch ~ def + /driver.originx ~ exch ~ def + /a ~ where + { + /a + { + moveto ~ + SDict ~ + begin ~ + currentpoint ~ driver.originy ~ ne ~ exch ~ + driver.originx ~ ne ~ or + { + driver.link.ll + /driver.lly ~ + driver.lly ~ driver.outerbox ~ 1 ~ get ~ sub ~ def ~ + driver.bordertracking.begin + } + if ~ + end + } + put + } + if + /x ~ where + { + /x + { + 0 ~ exch ~ rmoveto ~ + SDict~ + begin ~ + currentpoint ~ + driver.originy ~ ne ~ exch ~ driver.originx ~ ne ~ or + { + driver.link.ll + /driver.lly ~ + driver.lly ~ driver.outerbox ~ 1 ~ get ~ sub ~ def ~ + driver.bordertracking.begin + } + if ~ + end + } + put + } + if + } + def + } +\__driver_postscript_header:n + { + /driver.breaklink + { + pop ~ + counttomark ~ 2 ~ mod ~ 0 ~ eq + { + counttomark /driver.count ~ exch ~ def + { + driver.count ~ 0 ~ eq { exit } if ~ + counttomark ~ 2 ~ roll ~ + 1 ~ index ~ /Rect ~ eq + { + dup ~ 4 ~ array ~ copy ~ + dup ~ dup ~ + 1 ~ get ~ + driver.outerbox ~ driver.rect.ht ~ + driver.linkmargin ~ 2 ~ mul ~ add ~ sub ~ + 3 ~ exch ~ put ~ + dup ~ + driver.outerbox ~ 2 ~ get ~ + driver.linkmargin ~ add ~ + 2 ~ exch ~ put ~ + dup ~ dup ~ + 3 ~ get ~ + driver.outerbox ~ driver.rect.ht ~ + driver.linkmargin ~ 2 ~ mul ~ add ~ add ~ + 1 ~ exch ~ put + /driver.currentrect ~ exch ~ def ~ + driver.breaklink.write + { + driver.currentrect ~ + dup ~ + driver.outerbox ~ 0 ~ get ~ + driver.linkmargin ~ sub ~ + 0 ~ exch ~ put ~ + dup ~ + driver.outerbox ~ 2 ~ get ~ + driver.linkmargin ~ add ~ + 2 ~ exch ~ put ~ + dup ~ dup ~ + 1 ~ get ~ + driver.baselineskip ~ add ~ + 1 ~ exch ~ put ~ + dup ~ dup ~ + 3 ~ get ~ + driver.baselineskip ~ add ~ + 3 ~ exch ~ put ~ + /driver.currentrect ~ exch ~ def ~ + driver.breaklink.write + } + 1 ~ index ~ 3 ~ get ~ + driver.linkmargin ~ 2 ~ mul ~ add ~ + driver.outerbox ~ driver.rect.ht ~ add ~ + 2 ~ index ~ 1 ~ get ~ sub ~ + driver.baselineskip ~ div ~ round ~ cvi ~ 1 ~ sub ~ + exch ~ + repeat ~ + driver.currentrect ~ + dup ~ + driver.outerbox ~ 0 ~ get ~ + driver.linkmargin ~ sub ~ + 0 ~ exch ~ put ~ + dup ~ dup ~ + 1 ~ get ~ + driver.baselineskip ~ add ~ + 1 ~ exch ~ put ~ + dup ~ dup ~ + 3 ~ get ~ + driver.baselineskip ~ add ~ + 3 ~ exch ~ put ~ + dup ~ 2 ~ index ~ 2 ~ get ~ 2 ~ exch ~ put + /driver.currentrect ~ exch ~ def ~ + driver.breaklink.write ~ + SDict /driver.pdfmark.good ~ false ~ put ~ + exit + } + { driver.count ~ 2 ~ sub /driver.count ~ exch ~ def } + ifelse + } + loop + } + if + /ANN + } + def + /driver.breaklink.write + { + counttomark ~ 1 ~ add ~ copy ~ + pop ~ driver.currentrect + /ANN ~ pdfmark + } + def + } +\__driver_postscript_header:n + { + /driver.pdfmark + { + SDict /driver.pdfmark.good ~ true ~ put ~ + dup /ANN ~ eq + { + driver.pdfmark.store ~ + driver.pdfmark.dict ~ + begin ~ + Subtype /Link ~ eq ~ + currentdict /Rect ~ known ~ and ~ + SDict /driver.outerbox ~ known ~ and ~ + SDict /driver.baselineskip ~ known ~ and ~ + { + Rect ~ 3 ~ get ~ + driver.linkmargin ~ 2 ~ mul ~ add ~ + driver.outerbox ~ driver.rect.ht ~ add ~ + Rect ~ 1 ~ get ~ sub ~ + driver.baselineskip ~ div ~ round ~ cvi ~ 0 ~ gt + { driver.breaklink } + { driver.pdfmark.obj } + ifelse + } + { driver.pdfmark.obj } + ifelse ~ + end ~ + SDict /driver.outerbox ~ undef ~ + SDict /driver.baselineskip ~ undef ~ + currentdict /driver.pdfmark.dict ~ undef ~ + } + if ~ + driver.pdfmark.good + { pdfmark } + { cleartomark } + ifelse + } + def + /driver.pdfmark.store + { + /driver.pdfmark.dict ~ 65534 ~ dict ~ def ~ + counttomark ~ 1 ~ add ~ copy ~ + pop + { + dup ~ mark ~ eq + { + pop ~ + exit + } + { + driver.pdfmark.dict ~ + begin ~ def ~ end + } + ifelse + } + loop + } + def + /driver.pdfmark.obj + { /_objdef ~ exch ~ driver.link.obj ~ exch } def + } +\box_new:N \l__driver_pdf_content_box +\box_new:N \l__driver_pdf_model_box +\int_new:N \g__driver_pdf_annotation_int +\cs_new_protected:Npn \driver_pdf_annotation:nnnn #1#2#3#4 + { + \__driver_pdf_annotation:nnnn {#1} {#2} {#3} {#4} + \int_gincr:N \g__driver_pdf_object_int + \int_gset_eq:NN \g__driver_pdf_annotation_int \g__driver_pdf_object_int + \__driver_postscript:x + { + mark + /_objdef { driver.obj \int_use:N \g__driver_pdf_object_int } + driver.annotation.border ~ + #4 ~ + /ANN ~ pdfmark + } + } +\cs_new_protected:Npn \__driver_pdf_annotation:nnnn #1#2#3#4 + { + \box_move_down:nn {#3} + { \hbox:n { \__driver_postscript:n { driver.annotation.ll } } } + \hbox:n {#4} + \box_move_up:nn {#2} + { + \hbox:n + { + \tex_kern:D \dim_eval:n {#1} \scan_stop: + \__driver_postscript:n { driver.annotation.ur } + } + } + \int_gincr:N \g__driver_pdf_object_int + \int_gset_eq:NN \g__driver_pdf_annotation_int \g__driver_pdf_object_int + \__driver_postscript:x + { + mark + /_objdef { driver.obj \int_use:N \g__driver_pdf_object_int } + driver.annotation.border ~ + \c__driver_pdf_AR_fix_tl + /ANN ~ pdfmark + } + } +\cs_new:Npn \driver_pdf_annotation_last: + { { driver.obj \int_use:N \g__driver_pdf_annotation_int } } +\int_new:N \g__driver_pdf_link_int +\tl_new:N \g__driver_pdf_link_dict_tl +\int_new:N \g__driver_pdf_link_sf_int +\bool_new:N \g__driver_pdf_link_math_bool +\bool_new:N \g__driver_pdf_link_bool +\cs_new_protected:Npn \driver_pdf_link_begin_goto:nnw #1#2 + { \__driver_pdf_link_begin:nw { #1 /A << /S /GoTo /D ( #2 ) >> } } +\cs_new_protected:Npn \driver_pdf_link_begin_user:nnw #1#2 + { \__driver_pdf_link_begin:nw {#1#2} } +\cs_new_protected:Npn \__driver_pdf_link_begin:nw #1 + { + \bool_if:NF \g__driver_pdf_link_bool + { \__driver_pdf_link_begin_aux:nw {#1} } + } +\cs_new_protected:Npn \__driver_pdf_link_begin_aux:nw #1 + { + \bool_gset_true:N \g__driver_pdf_link_bool + \__driver_pdf_annotation:nnnn { 3pt } { 3pt } { 0pt } { } + \__driver_postscript:n + { /driver.link.dict ( /Subtype /Link #1 ) def } + \int_gincr:N \g__driver_pdf_object_int + \int_gset_eq:NN \g__driver_pdf_link_int \g__driver_pdf_object_int + \__driver_postscript:x + { + /driver.link.obj + { + { driver.obj \int_use:N \g__driver_pdf_link_int \c_space_tl driver.cvs } + } + def + } + \tl_gset:Nn \g__driver_pdf_link_dict_tl {#1} + \__driver_pdf_link_sf_save: + \mode_if_math:TF + { \bool_gset_true:N \g__driver_pdf_link_math_bool } + { \bool_gset_false:N \g__driver_pdf_link_math_bool } + \hbox_set:Nw \l__driver_pdf_content_box + \__driver_pdf_link_sf_restore: + \bool_if:NT \g__driver_pdf_link_math_bool + { \c_math_toggle_token } + } +\cs_new_protected:Npn \driver_pdf_link_end: + { + \bool_if:NT \g__driver_pdf_link_bool + { \__driver_pdf_link_end: } + } +\cs_new_protected:Npn \__driver_pdf_link_end: + { + \bool_if:NT \g__driver_pdf_link_math_bool + { \c_math_toggle_token } + \__driver_pdf_link_sf_save: + \hbox_set_end: + \__driver_pdf_link_minima: + \hbox_set:Nn \l__driver_pdf_model_box { Gg } + \exp_args:Nx \__driver_driver_link_outerbox:n + { + \int_if_odd:nTF { \value { page } } + { \oddsidemargin } + { \evensidemargin } + } + \box_move_down:nn { \box_dp:N \l__driver_pdf_content_box } + { \hbox:n { \__driver_postscript:n { driver.link.ll } } } + \__driver_postscript:n { driver.bordertracking.begin } + \hbox_unpack:N \l__driver_pdf_content_box + \__driver_postscript:n { driver.bordertracking.end } + \box_move_up:nn { \box_ht:N \l__driver_pdf_content_box } + { + \hbox:n + { \__driver_postscript:n { driver.link.ur } } + } + \__driver_postscript:x + { + mark + \g__driver_pdf_link_dict_tl /Subtype /Link ~ + driver.annotation.border + /ANN ~ driver.pdfmark + } + \__driver_pdf_link_sf_restore: + \bool_gset_false:N \g__driver_pdf_link_bool + } +\cs_new_protected:Npn \__driver_pdf_link_minima: + { + \hbox_set:Nn \l__driver_pdf_model_box { Gg } + \__driver_postscript:x + { + /driver.linkdp.pad ~ + \dim_to_decimal:n + { + \dim_max:nn + { + \box_dp:N \l__driver_pdf_model_box + - \box_dp:N \l__driver_pdf_content_box + } + { 0pt } + } ~ + driver.pt.dvi ~ def + /driver.linkht.pad ~ + \dim_to_decimal:n + { + \dim_max:nn + { + \box_ht:N \l__driver_pdf_model_box + - \box_ht:N \l__driver_pdf_content_box + } + { 0pt } + } ~ + driver.pt.dvi ~ def + } + } +\cs_new_protected:Npn \__driver_driver_link_outerbox:n #1 + { + \__driver_postscript:x + { + /driver.outerbox + [ + \dim_to_decimal:n {#1} ~ + \dim_to_decimal:n { -\box_dp:N \l__driver_pdf_model_box } ~ + \dim_to_decimal:n { #1 + \textwidth } ~ + \dim_to_decimal:n { \box_ht:N \l__driver_pdf_model_box } + ] + [ exch { driver.pt.dvi } forall ] def + /driver.baselineskip ~ + \dim_to_decimal:n { \tex_baselineskip:D } ~ dup ~ 0 ~ gt + { driver.pt.dvi ~ def } + { pop ~ pop } + ifelse + } + } +\cs_new_protected:Npn \__driver_pdf_link_sf_save: + { + \int_gset:Nn \g__driver_pdf_link_sf_int + { + \mode_if_horizontal:TF + { \tex_spacefactor:D } + { 0 } + } + } +\cs_new_protected:Npn \__driver_pdf_link_sf_restore: + { + \mode_if_horizontal:T + { + \int_compare:nNnT \g__driver_pdf_link_sf_int > { 0 } + { \int_set_eq:NN \tex_spacefactor:D \g__driver_pdf_link_sf_int } + } + } +\tl_gput_left:Nn \@startcolumn + { + \__driver_postscript:n + { + driver.globaldict /driver.brokenlink.rect ~ known + { driver.bordertracking.continue } + if + } + } +\tl_gput_left:Nn \@makecol + { + \vbox_set:Nn \@cclv + { + \vbox_unpack_drop:N \@cclv + \__driver_postscript:n + { driver.bordertracking.endpage } + } + } +\cs_new:Npn \driver_pdf_link_last: + { { driver.obj \int_use:N \g__driver_pdf_link_int } } +\cs_new_protected:Npn \driver_pdf_link_margin:n #1 + { + \__driver_postscript:x { - [nobreak] ~ - mark ~ #1 ~ ( #3 ) ~ /PUT ~ pdfmark ~ - mark ~ #1 ~ << #2 >> ~ /PUT ~ pdfmark + /driver.linkmargin { \dim_to_decimal:n {#1} ~ driver.pt.dvi } def } } \cs_new_protected:Npn \driver_pdf_compresslevel:n #1 { } \cs_new_protected:Npn \driver_pdf_objects_enable: { } \cs_new_protected:Npn \driver_pdf_objects_disable: { } +\cs_new_protected:Npn \driver_pdf_version_major_gset:n #1 { } +\cs_new_protected:Npn \driver_pdf_version_minor_gset:n #1 { } +\cs_new:Npn \driver_pdf_version_major: { -1 } +\cs_new:Npn \driver_pdf_version_minor: { -1 } %% %% %% End of file `l3dvips.def'. diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3dvisvgm.def b/Master/texmf-dist/tex/latex/l3kernel/l3dvisvgm.def index 010d500238d..8594ca95919 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3dvisvgm.def +++ b/Master/texmf-dist/tex/latex/l3kernel/l3dvisvgm.def @@ -5,6 +5,12 @@ %% The original source files were: %% %% l3drivers.dtx (with options: `package,dvisvgm') +%% l3drivers-basics.dtx (with options: `package,dvisvgm') +%% l3drivers-color.dtx (with options: `package,dvisvgm') +%% l3drivers-box.dtx (with options: `package,dvisvgm') +%% l3drivers-draw.dtx (with options: `package,dvisvgm') +%% l3drivers-image.dtx (with options: `package,dvisvgm') +%% l3drivers-pdf.dtx (with options: `package,dvisvgm') %% %% Copyright (C) 1990-2019 The LaTeX3 Project %% @@ -19,6 +25,7 @@ %% and all files in that bundle must be distributed together. %% %% File: l3drivers.dtx +%% File: l3drivers-basics.dtx \ProvidesExplFile {l3dvisvgm.def}{2019-04-06}{} {L3 Experimental driver: dvisvgm} @@ -26,6 +33,17 @@ \cs_new_protected:Npn \__driver_literal:n #1 { \__driver_literal:e { \exp_not:n {#1} } } \cs_generate_variant:Nn \__driver_literal:n { x } +\cs_new_protected:Npn \__driver_literal_svg:n #1 + { \__driver_literal:n { dvisvgm:raw~ #1 { ?nl } } } +\cs_generate_variant:Nn \__driver_literal_svg:n { x } +\cs_new_protected:Npn \__driver_scope_begin: + { \__driver_literal_svg:n { } } +\cs_new_protected:Npn \__driver_scope_end: + { \__driver_literal_svg:n { } } +\cs_new_protected:Npn \__driver_scope_begin:n #1 + { \__driver_literal_svg:n { } } +\cs_generate_variant:Nn \__driver_scope_begin:n { x } +%% File: l3drivers-color.dtx \cs_new_protected:Npn \driver_color_pickup:N #1 { } \AtBeginDocument { @@ -77,16 +95,7 @@ \cs_generate_variant:Nn \__driver_color_select:n { x } \cs_new_protected:Npn \__driver_color_reset: { \__driver_literal:n { color~pop } } -\cs_new_protected:Npn \__driver_literal_svg:n #1 - { \__driver_literal:n { dvisvgm:raw~ #1 { ?nl } } } -\cs_generate_variant:Nn \__driver_literal_svg:n { x } -\cs_new_protected:Npn \__driver_scope_begin: - { \__driver_literal_svg:n { } } -\cs_new_protected:Npn \__driver_scope_end: - { \__driver_literal_svg:n { } } -\cs_new_protected:Npn \__driver_scope_begin:n #1 - { \__driver_literal_svg:n { } } -\cs_generate_variant:Nn \__driver_scope_begin:n { x } +%% File: l3drivers-box.dtx \cs_new_protected:Npn \driver_box_use_clip:N #1 { \int_gincr:N \g__driver_clip_path_int @@ -171,27 +180,7 @@ \hbox_overlap_right:n { \box_use:N #1 } \__driver_scope_end: } -\cs_new_eq:NN \__driver_image_getbb_png:n \image_extract_bb:n -\cs_new_eq:NN \__driver_image_getbb_jpg:n \image_extract_bb:n -\cs_new_protected:Npn \__driver_image_include_png:n #1 - { - \__driver_literal:x - { - dvisvgm:img~ - \dim_to_decimal:n { \l_image_ury_dim } ~ - \dim_to_decimal:n { \l_image_ury_dim } ~ - \__driver_image_include_bitmap_quote:w #1 " " \q_stop - } - } -\cs_new_eq:NN \__driver_image_include_jpg:n \__driver_image_include_png:n -\cs_new:Npn \__driver_image_include_bitmap_quote:w #1 " #2 " #3 \q_stop - { #1#2 } -\cs_new_protected:Npn \driver_pdf_object_new:n #1 { } -\cs_new:Npn \driver_pdf_object_ref:n #1 { } -\cs_new_protected:Npn \driver_pdf_object_write:nn #1#2 { } -\cs_new_protected:Npn \driver_pdf_compresslevel:n #1 { } -\cs_new_protected:Npn \driver_pdf_objects_enable: { } -\cs_new_protected:Npn \driver_pdf_objects_disable: { } +%% File: l3drivers-draw.dtx \cs_new_eq:NN \__driver_draw_literal:n \__driver_literal_svg:n \cs_generate_variant:Nn \__driver_draw_literal:n { x } \cs_new_protected:Npn \driver_draw_begin: @@ -461,6 +450,35 @@ \__driver_literal_svg:n { } \__driver_scope_end: } +%% File: l3drivers-image.dtx +\cs_new_eq:NN \__driver_image_getbb_png:n \image_extract_bb:n +\cs_new_eq:NN \__driver_image_getbb_jpg:n \image_extract_bb:n +\cs_new_protected:Npn \__driver_image_include_png:n #1 + { + \__driver_literal:x + { + dvisvgm:img~ + \dim_to_decimal:n { \l_image_ury_dim } ~ + \dim_to_decimal:n { \l_image_ury_dim } ~ + \__driver_image_include_bitmap_quote:w #1 " #1 " \q_stop + } + } +\cs_new_eq:NN \__driver_image_include_jpg:n \__driver_image_include_png:n +\cs_new:Npn \__driver_image_include_bitmap_quote:w #1 " #2 " #3 \q_stop + { " #2 " } +%% File: l3drivers-pdf.dtx +\tl_const:Nn \c__driver_pdf_AR_fix_tl + { /Ff ~ 65537 /FT /Btn /Subtype /Widget } +\cs_new_protected:Npn \driver_pdf_object_new:nn #1#2 { } +\cs_new:Npn \driver_pdf_object_ref:n #1 { } +\cs_new_protected:Npn \driver_pdf_object_write:nn #1#2 { } +\cs_new_protected:Npn \driver_pdf_compresslevel:n #1 { } +\cs_new_protected:Npn \driver_pdf_objects_enable: { } +\cs_new_protected:Npn \driver_pdf_objects_disable: { } +\cs_new_protected:Npn \driver_pdf_version_major_gset:n #1 { } +\cs_new_protected:Npn \driver_pdf_version_minor_gset:n #1 { } +\cs_new:Npn \driver_pdf_version_major: { -1 } +\cs_new:Npn \driver_pdf_version_minor: { -1 } %% %% %% End of file `l3dvisvgm.def'. diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def b/Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def index 8ce7bcf5e52..1f1d6f61676 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def +++ b/Master/texmf-dist/tex/latex/l3kernel/l3pdfmode.def @@ -5,6 +5,12 @@ %% The original source files were: %% %% l3drivers.dtx (with options: `package,pdfmode') +%% l3drivers-basics.dtx (with options: `package,pdfmode') +%% l3drivers-color.dtx (with options: `package,pdfmode') +%% l3drivers-box.dtx (with options: `package,pdfmode') +%% l3drivers-draw.dtx (with options: `package,pdfmode') +%% l3drivers-image.dtx (with options: `package,pdfmode') +%% l3drivers-pdf.dtx (with options: `package,pdfmode') %% %% Copyright (C) 1990-2019 The LaTeX3 Project %% @@ -19,6 +25,7 @@ %% and all files in that bundle must be distributed together. %% %% File: l3drivers.dtx +%% File: l3drivers-basics.dtx \ProvidesExplFile {l3pdfmode.def}{2019-04-06}{} {L3 Experimental driver: PDF mode} @@ -26,6 +33,35 @@ \cs_new_protected:Npn \__driver_literal:n #1 { \__driver_literal:e { \exp_not:n {#1} } } \cs_generate_variant:Nn \__driver_literal:n { x } +\cs_new_protected:Npx \__driver_literal_pdf:n #1 + { + \cs_if_exist:NTF \tex_pdfextension:D + { \tex_pdfextension:D literal } + { \tex_pdfliteral:D } + { \exp_not:N \exp_not:n {#1} } + } +\cs_generate_variant:Nn \__driver_literal_pdf:n { x } +\cs_new_protected:Npx \__driver_scope_begin: + { + \cs_if_exist:NTF \tex_pdfextension:D + { \tex_pdfextension:D save \scan_stop: } + { \tex_pdfsave:D } + } +\cs_new_protected:Npx \__driver_scope_end: + { + \cs_if_exist:NTF \tex_pdfextension:D + { \tex_pdfextension:D restore \scan_stop: } + { \tex_pdfrestore:D } + } +\cs_new_protected:Npx \__driver_matrix:n #1 + { + \cs_if_exist:NTF \tex_pdfextension:D + { \tex_pdfextension:D setmatrix } + { \tex_pdfsetmatrix:D } + { \exp_not:N \exp_not:n {#1} } + } +\cs_generate_variant:Nn \__driver_matrix:n { x } +%% File: l3drivers-color.dtx \cs_new_protected:Npn \driver_color_pickup:N #1 { } \AtBeginDocument { @@ -113,34 +149,7 @@ { \tex_pdfcolorstack:D } \exp_not:N \l__driver_color_stack_int pop \scan_stop: } -\cs_new_protected:Npx \__driver_literal_pdf:n #1 - { - \cs_if_exist:NTF \tex_pdfextension:D - { \tex_pdfextension:D literal } - { \tex_pdfliteral:D } - { \exp_not:N \exp_not:n {#1} } - } -\cs_generate_variant:Nn \__driver_literal_pdf:n { x } -\cs_new_protected:Npx \__driver_scope_begin: - { - \cs_if_exist:NTF \tex_pdfextension:D - { \tex_pdfextension:D save \scan_stop: } - { \tex_pdfsave:D } - } -\cs_new_protected:Npx \__driver_scope_end: - { - \cs_if_exist:NTF \tex_pdfextension:D - { \tex_pdfextension:D restore \scan_stop: } - { \tex_pdfrestore:D } - } -\cs_new_protected:Npx \__driver_matrix:n #1 - { - \cs_if_exist:NTF \tex_pdfextension:D - { \tex_pdfextension:D setmatrix } - { \tex_pdfsetmatrix:D } - { \exp_not:N \exp_not:n {#1} } - } -\cs_generate_variant:Nn \__driver_matrix:n { x } +%% File: l3drivers-box.dtx \cs_new_protected:Npn \driver_box_use_clip:N #1 { \__driver_scope_begin: @@ -196,6 +205,154 @@ \hbox_overlap_right:n { \box_use:N #1 } \__driver_scope_end: } +%% File: l3drivers-draw.dtx +\cs_new_eq:NN \__driver_draw_literal:n \__driver_literal_pdf:n +\cs_generate_variant:Nn \__driver_draw_literal:n { x } +\cs_new_protected:Npn \driver_draw_begin: + { \driver_draw_scope_begin: } +\cs_new_protected:Npn \driver_draw_end: + { \driver_draw_scope_end: } +\cs_new_eq:NN \driver_draw_scope_begin: \__driver_scope_begin: +\cs_new_eq:NN \driver_draw_scope_end: \__driver_scope_end: +\cs_new_protected:Npn \driver_draw_moveto:nn #1#2 + { + \__driver_draw_literal:x + { \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~ m } + } +\cs_new_protected:Npn \driver_draw_lineto:nn #1#2 + { + \__driver_draw_literal:x + { \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~ l } + } +\cs_new_protected:Npn \driver_draw_curveto:nnnnnn #1#2#3#4#5#6 + { + \__driver_draw_literal:x + { + \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~ + \dim_to_decimal_in_bp:n {#3} ~ \dim_to_decimal_in_bp:n {#4} ~ + \dim_to_decimal_in_bp:n {#5} ~ \dim_to_decimal_in_bp:n {#6} ~ + c + } + } +\cs_new_protected:Npn \driver_draw_rectangle:nnnn #1#2#3#4 + { + \__driver_draw_literal:x + { + \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~ + \dim_to_decimal_in_bp:n {#3} ~ \dim_to_decimal_in_bp:n {#4} ~ + re + } + } +\cs_new_protected:Npn \driver_draw_evenodd_rule: + { \bool_gset_true:N \g__driver_draw_eor_bool } +\cs_new_protected:Npn \driver_draw_nonzero_rule: + { \bool_gset_false:N \g__driver_draw_eor_bool } +\bool_new:N \g__driver_draw_eor_bool +\cs_new_protected:Npn \driver_draw_closepath: + { \__driver_draw_literal:n { h } } +\cs_new_protected:Npn \driver_draw_stroke: + { \__driver_draw_literal:n { S } } +\cs_new_protected:Npn \driver_draw_closestroke: + { \__driver_draw_literal:n { s } } +\cs_new_protected:Npn \driver_draw_fill: + { + \__driver_draw_literal:x + { f \bool_if:NT \g__driver_draw_eor_bool * } + } +\cs_new_protected:Npn \driver_draw_fillstroke: + { + \__driver_draw_literal:x + { B \bool_if:NT \g__driver_draw_eor_bool * } + } +\cs_new_protected:Npn \driver_draw_clip: + { + \__driver_draw_literal:x + { W \bool_if:NT \g__driver_draw_eor_bool * } + } +\cs_new_protected:Npn \driver_draw_discardpath: + { \__driver_draw_literal:n { n } } +\cs_new_protected:Npn \driver_draw_dash_pattern:nn #1#2 + { + \__driver_draw_literal:x + { + [ + \exp_args:Nf \use:n + { \clist_map_function:nN {#1} \__driver_draw_dash:n } + ] ~ + \dim_to_decimal_in_bp:n {#2} ~ d + } + } +\cs_new:Npn \__driver_draw_dash:n #1 + { ~ \dim_to_decimal_in_bp:n {#1} } +\cs_new_protected:Npn \driver_draw_linewidth:n #1 + { + \__driver_draw_literal:x + { \dim_to_decimal_in_bp:n {#1} ~ w } + } +\cs_new_protected:Npn \driver_draw_miterlimit:n #1 + { \__driver_draw_literal:x { \fp_eval:n {#1} ~ M } } +\cs_new_protected:Npn \driver_draw_cap_butt: + { \__driver_draw_literal:n { 0 ~ J } } +\cs_new_protected:Npn \driver_draw_cap_round: + { \__driver_draw_literal:n { 1 ~ J } } +\cs_new_protected:Npn \driver_draw_cap_rectangle: + { \__driver_draw_literal:n { 2 ~ J } } +\cs_new_protected:Npn \driver_draw_join_miter: + { \__driver_draw_literal:n { 0 ~ j } } +\cs_new_protected:Npn \driver_draw_join_round: + { \__driver_draw_literal:n { 1 ~ j } } +\cs_new_protected:Npn \driver_draw_join_bevel: + { \__driver_draw_literal:n { 2 ~ j } } +\cs_new_protected:Npn \driver_draw_color_fill_cmyk:nnnn #1#2#3#4 + { + \__driver_color_fill_select:x + { + \fp_eval:n {#1} ~ \fp_eval:n {#2} ~ + \fp_eval:n {#3} ~ \fp_eval:n {#4} ~ + k + } + } +\cs_new_protected:Npn \driver_draw_color_stroke_cmyk:nnnn #1#2#3#4 + { + \__driver_color_select:x + { + \fp_eval:n {#1} ~ \fp_eval:n {#2} ~ + \fp_eval:n {#3} ~ \fp_eval:n {#4} ~ + k + } + } +\cs_new_protected:Npn \driver_draw_color_fill_gray:n #1 + { \__driver_color_fill_select:x { \fp_eval:n {#1} ~ g } } +\cs_new_protected:Npn \driver_draw_color_stroke_gray:n #1 + { \__driver_color_select:x { \fp_eval:n {#1} ~ G } } +\cs_new_protected:Npn \driver_draw_color_fill_rgb:nnn #1#2#3 + { + \__driver_color_fill_select:x + { \fp_eval:n {#1} ~ \fp_eval:n {#2} ~ \fp_eval:n {#3} ~ rg } + } +\cs_new_protected:Npn \driver_draw_color_stroke_rgb:nnn #1#2#3 + { + \__driver_color_select:x + { \fp_eval:n {#1} ~ \fp_eval:n {#2} ~ \fp_eval:n {#3} ~ RG } + } +\cs_new_eq:NN \__driver_color_fill_select:n \__driver_color_select:n +\cs_generate_variant:Nn \__driver_color_fill_select:n { x } +\cs_new_protected:Npn \driver_draw_cm:nnnn #1#2#3#4 + { + \__driver_matrix:x + { + \fp_eval:n {#1} ~ \fp_eval:n {#2} ~ + \fp_eval:n {#3} ~ \fp_eval:n {#4} + } + } +\cs_new_protected:Npn \driver_draw_box_use:Nnnnn #1#2#3#4#5 + { + \__driver_scope_begin: + \driver_draw_cm:nnnn {#2} {#3} {#4} {#5} + \hbox_overlap_right:n { \box_use:N #1 } + \__driver_scope_end: + } +%% File: l3drivers-image.dtx \tl_new:N \l__driver_image_attr_tl \cs_new_protected:Npn \__driver_image_getbb_jpg:n #1 { @@ -264,6 +421,70 @@ } \cs_new_eq:NN \__driver_image_include_pdf:n \__driver_image_include_jpg:n \cs_new_eq:NN \__driver_image_include_png:n \__driver_image_include_jpg:n +%% File: l3drivers-pdf.dtx +\tl_const:Nn \c__driver_pdf_AR_fix_tl + { /Ff ~ 65537 /FT /Btn /Subtype /Widget } +\cs_new_protected:Npx \__driver_pdf_AR_fix: + { + \cs_if_exist:NTF \tex_pdfextension:D + { \tex_pdfextension:D annot ~ } + { \tex_pdfannot:D } + width ~ 3pt ~ height ~ 3pt ~ depth ~ 0pt + { \c__driver_pdf_AR_fix_tl } + } +\cs_new_protected:Npx \driver_pdf_annotation:nnnn #1#2#3#4 + { + \__driver_pdf_AR_fix: + \cs_if_exist:NTF \tex_pdfextension:D + { \tex_pdfextension:D annot ~ } + { \tex_pdfannot:D } + width ~ \exp_not:N \dim_eval:n {#1} ~ + height ~ \exp_not:N \dim_eval:n {#2} ~ + depth ~ \exp_not:N \dim_eval:n {#3} ~ + {#4} + } +\cs_new:Npx \driver_pdf_annotation_last: + { + \exp_not:N \tex_the:D + \cs_if_exist:NTF \tex_pdffeedback:D + { \exp_not:N \tex_pdffeedback:D annot ~ } + { \exp_not:N \tex_pdflastannot:D } + 0 ~ R + } +\cs_new_protected:Npn \driver_pdf_link_begin_goto:nnw #1#2 + { \__driver_pdf_link_begin:nnnw {#1} { goto~name } {#2} } +\cs_new_protected:Npn \driver_pdf_link_begin_user:nnw #1#2 + { \__driver_pdf_link_begin:nnnw {#1} { user } { /Subtype /Link #2 } } +\cs_new_protected:Npx \__driver_pdf_link_begin:nnnw #1#2#3 + { + \__driver_pdf_AR_fix: + \cs_if_exist:NTF \tex_pdfextension:D + { \tex_pdfextension:D startlink ~ } + { \tex_pdfstartlink:D } + attr {#1} + #2 {#3} + } +\cs_new_protected:Npx \driver_pdf_link_end: + { + \cs_if_exist:NTF \tex_pdfextension:D + { \tex_pdfextension:D endlink \scan_stop: } + { \tex_pdfendlink:D } + } +\cs_new:Npx \driver_pdf_link_last: + { + \exp_not:N \tex_the:D + \cs_if_exist:NTF \tex_pdffeedback:D + { \exp_not:N \tex_pdffeedback:D lastlink \scan_stop: } + { \exp_not:N \tex_pdflastlink:D } + ~ 0 ~ R + } +\cs_new_protected:Npx \driver_pdf_link_margin:n #1 + { + \cs_if_exist:NTF \tex_pdfvariable:D + { \exp_not:N \tex_pdfvariable:D linkmargin } + { \exp_not:N \tex_pdflinkmargin:D } + \exp_not:N \dim_eval:n {#1} \scan_stop: + } \prop_new:N \g__driver_pdf_object_prop \group_begin: \cs_set_protected:Npn \__driver_tmp:w #1#2 @@ -337,151 +558,52 @@ { \tex_pdfvariable:D objcompresslevel } #1 \scan_stop: } -\cs_new_eq:NN \__driver_draw_literal:n \__driver_literal_pdf:n -\cs_generate_variant:Nn \__driver_draw_literal:n { x } -\cs_new_protected:Npn \driver_draw_begin: - { \driver_draw_scope_begin: } -\cs_new_protected:Npn \driver_draw_end: - { \driver_draw_scope_end: } -\cs_new_eq:NN \driver_draw_scope_begin: \__driver_scope_begin: -\cs_new_eq:NN \driver_draw_scope_end: \__driver_scope_end: -\cs_new_protected:Npn \driver_draw_moveto:nn #1#2 - { - \__driver_draw_literal:x - { \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~ m } - } -\cs_new_protected:Npn \driver_draw_lineto:nn #1#2 - { - \__driver_draw_literal:x - { \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~ l } - } -\cs_new_protected:Npn \driver_draw_curveto:nnnnnn #1#2#3#4#5#6 +\cs_new_protected:Npx \driver_pdf_version_major_gset:n #1 { - \__driver_draw_literal:x + \cs_if_exist:NTF \tex_pdfvariable:D { - \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~ - \dim_to_decimal_in_bp:n {#3} ~ \dim_to_decimal_in_bp:n {#4} ~ - \dim_to_decimal_in_bp:n {#5} ~ \dim_to_decimal_in_bp:n {#6} ~ - c + \int_compare:nNnT \tex_luatexversion:D > { 106 } + { + \exp_not:N \tex_global:D \tex_pdfvariable:D majorversion + \exp_not:N \int_eval:n {#1} \scan_stop: + } } - } -\cs_new_protected:Npn \driver_draw_rectangle:nnnn #1#2#3#4 - { - \__driver_draw_literal:x { - \dim_to_decimal_in_bp:n {#1} ~ \dim_to_decimal_in_bp:n {#2} ~ - \dim_to_decimal_in_bp:n {#3} ~ \dim_to_decimal_in_bp:n {#4} ~ - re - } - } -\cs_new_protected:Npn \driver_draw_evenodd_rule: - { \bool_gset_true:N \g__driver_draw_eor_bool } -\cs_new_protected:Npn \driver_draw_nonzero_rule: - { \bool_gset_false:N \g__driver_draw_eor_bool } -\bool_new:N \g__driver_draw_eor_bool -\cs_new_protected:Npn \driver_draw_closepath: - { \__driver_draw_literal:n { h } } -\cs_new_protected:Npn \driver_draw_stroke: - { \__driver_draw_literal:n { S } } -\cs_new_protected:Npn \driver_draw_closestroke: - { \__driver_draw_literal:n { s } } -\cs_new_protected:Npn \driver_draw_fill: - { - \__driver_draw_literal:x - { f \bool_if:NT \g__driver_draw_eor_bool * } - } -\cs_new_protected:Npn \driver_draw_fillstroke: - { - \__driver_draw_literal:x - { B \bool_if:NT \g__driver_draw_eor_bool * } - } -\cs_new_protected:Npn \driver_draw_clip: - { - \__driver_draw_literal:x - { W \bool_if:NT \g__driver_draw_eor_bool * } - } -\cs_new_protected:Npn \driver_draw_discardpath: - { \__driver_draw_literal:n { n } } -\cs_new_protected:Npn \driver_draw_dash_pattern:nn #1#2 - { - \__driver_draw_literal:x - { - [ - \exp_args:Nf \use:n - { \clist_map_function:nN {#1} \__driver_draw_dash:n } - ] ~ - \dim_to_decimal_in_bp:n {#2} ~ d + \cs_if_exist:NT \tex_pdfmajorversion:D + { + \exp_not:N \tex_global:D \tex_pdfmajorversion:D + \exp_not:N \int_eval:n {#1} \scan_stop: + } } } -\cs_new:Npn \__driver_draw_dash:n #1 - { ~ \dim_to_decimal_in_bp:n {#1} } -\cs_new_protected:Npn \driver_draw_linewidth:n #1 +\cs_new_protected:Npx \driver_pdf_version_minor_gset:n #1 { - \__driver_draw_literal:x - { \dim_to_decimal_in_bp:n {#1} ~ w } + \exp_not:N \tex_global:D + \cs_if_exist:NTF \tex_pdfminorversion:D + { \exp_not:N \tex_pdfminorversion:D } + { \tex_pdfvariable:D minorversion } + \exp_not:N \int_eval:n {#1} \scan_stop: } -\cs_new_protected:Npn \driver_draw_miterlimit:n #1 - { \__driver_draw_literal:x { \fp_eval:n {#1} ~ M } } -\cs_new_protected:Npn \driver_draw_cap_butt: - { \__driver_draw_literal:n { 0 ~ J } } -\cs_new_protected:Npn \driver_draw_cap_round: - { \__driver_draw_literal:n { 1 ~ J } } -\cs_new_protected:Npn \driver_draw_cap_rectangle: - { \__driver_draw_literal:n { 2 ~ J } } -\cs_new_protected:Npn \driver_draw_join_miter: - { \__driver_draw_literal:n { 0 ~ j } } -\cs_new_protected:Npn \driver_draw_join_round: - { \__driver_draw_literal:n { 1 ~ j } } -\cs_new_protected:Npn \driver_draw_join_bevel: - { \__driver_draw_literal:n { 2 ~ j } } -\cs_new_protected:Npn \driver_draw_color_fill_cmyk:nnnn #1#2#3#4 +\cs_new:Npx \driver_pdf_version_major: { - \__driver_color_fill_select:x + \cs_if_exist:NTF \tex_pdfvariable:D { - \fp_eval:n {#1} ~ \fp_eval:n {#2} ~ - \fp_eval:n {#3} ~ \fp_eval:n {#4} ~ - k + \int_compare:nNnTF \tex_luatexversion:D > { 106 } + { \exp_not:N \tex_the:D \tex_pdfvariable:D majorversion } + { 1 } } - } -\cs_new_protected:Npn \driver_draw_color_stroke_cmyk:nnnn #1#2#3#4 - { - \__driver_color_select:x { - \fp_eval:n {#1} ~ \fp_eval:n {#2} ~ - \fp_eval:n {#3} ~ \fp_eval:n {#4} ~ - k + \cs_if_exist:NTF \tex_pdfmajorversion:D + { \exp_not:N \tex_the:D \tex_pdfmajorversion:D } + { 1 } } } -\cs_new_protected:Npn \driver_draw_color_fill_gray:n #1 - { \__driver_color_fill_select:x { \fp_eval:n {#1} ~ g } } -\cs_new_protected:Npn \driver_draw_color_stroke_gray:n #1 - { \__driver_color_select:x { \fp_eval:n {#1} ~ G } } -\cs_new_protected:Npn \driver_draw_color_fill_rgb:nnn #1#2#3 +\cs_new:Npx \driver_pdf_version_minor: { - \__driver_color_fill_select:x - { \fp_eval:n {#1} ~ \fp_eval:n {#2} ~ \fp_eval:n {#3} ~ rg } - } -\cs_new_protected:Npn \driver_draw_color_stroke_rgb:nnn #1#2#3 - { - \__driver_color_select:x - { \fp_eval:n {#1} ~ \fp_eval:n {#2} ~ \fp_eval:n {#3} ~ RG } - } -\cs_new_eq:NN \__driver_color_fill_select:n \__driver_color_select:n -\cs_generate_variant:Nn \__driver_color_fill_select:n { x } -\cs_new_protected:Npn \driver_draw_cm:nnnn #1#2#3#4 - { - \__driver_matrix:x - { - \fp_eval:n {#1} ~ \fp_eval:n {#2} ~ - \fp_eval:n {#3} ~ \fp_eval:n {#4} - } - } -\cs_new_protected:Npn \driver_draw_box_use:Nnnnn #1#2#3#4#5 - { - \__driver_scope_begin: - \driver_draw_cm:nnnn {#2} {#3} {#4} {#5} - \hbox_overlap_right:n { \box_use:N #1 } - \__driver_scope_end: + \exp_not:N \tex_the:D + \cs_if_exist:NTF \tex_pdfminorversion:D + { \exp_not:N \tex_pdfminorversion:D } + { \tex_pdfvariable:D minorversion } } %% %% diff --git a/Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def b/Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def index 069f8ff0696..17fd5e7aff5 100644 --- a/Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def +++ b/Master/texmf-dist/tex/latex/l3kernel/l3xdvipdfmx.def @@ -5,6 +5,12 @@ %% The original source files were: %% %% l3drivers.dtx (with options: `package,xdvipdfmx') +%% l3drivers-basics.dtx (with options: `package,xdvipdfmx') +%% l3drivers-color.dtx (with options: `package,xdvipdfmx') +%% l3drivers-box.dtx (with options: `package,xdvipdfmx') +%% l3drivers-draw.dtx (with options: `package,xdvipdfmx') +%% l3drivers-image.dtx (with options: `package,xdvipdfmx') +%% l3drivers-pdf.dtx (with options: `package,xdvipdfmx') %% %% Copyright (C) 1990-2019 The LaTeX3 Project %% @@ -19,6 +25,7 @@ %% and all files in that bundle must be distributed together. %% %% File: l3drivers.dtx +%% File: l3drivers-basics.dtx \ProvidesExplFile {l3xdvipdfmx.def}{2019-04-06}{} {L3 Experimental driver: xdvipdfmx} @@ -26,6 +33,14 @@ \cs_new_protected:Npn \__driver_literal:n #1 { \__driver_literal:e { \exp_not:n {#1} } } \cs_generate_variant:Nn \__driver_literal:n { x } +\cs_new_protected:Npn \__driver_literal_pdf:n #1 + { \__driver_literal:n { pdf:literal~ #1 } } +\cs_generate_variant:Nn \__driver_literal_pdf:n { x } +\cs_new_protected:Npn \__driver_scope_begin: + { \__driver_literal:n { x:gsave } } +\cs_new_protected:Npn \__driver_scope_end: + { \__driver_literal:n { x:grestore } } +%% File: l3drivers-color.dtx \cs_new_protected:Npn \driver_color_pickup:N #1 { } \AtBeginDocument { @@ -77,13 +92,7 @@ \cs_generate_variant:Nn \__driver_color_select:n { x } \cs_new_protected:Npn \__driver_color_reset: { \__driver_literal:n { color~pop } } -\cs_new_protected:Npn \__driver_literal_pdf:n #1 - { \__driver_literal:n { pdf:literal~ #1 } } -\cs_generate_variant:Nn \__driver_literal_pdf:n { x } -\cs_new_protected:Npn \__driver_scope_begin: - { \__driver_literal:n { x:gsave } } -\cs_new_protected:Npn \__driver_scope_end: - { \__driver_literal:n { x:grestore } } +%% File: l3drivers-box.dtx \cs_new_protected:Npn \driver_box_use_clip:N #1 { \__driver_scope_begin: @@ -126,184 +135,7 @@ \hbox_overlap_right:n { \box_use:N #1 } \__driver_scope_end: } -\cs_new_eq:NN \__driver_image_getbb_eps:n \image_read_bb:n -\int_new:N \g__driver_image_int -\cs_new_protected:Npn \__driver_image_include_eps:n #1 - { - \__driver_literal:n { PSfile = #1 } - } -\cs_new_protected:Npn \__driver_image_include_jpg:n #1 - { \__driver_image_include_auxi:nn {#1} { image } } -\cs_new_eq:NN \__driver_image_include_png:n \__driver_image_include_jpg:n -\cs_new_protected:Npn \__driver_image_include_auxi:nn #1#2 - { - \__driver_image_include_auxii:xnn - { - \tl_if_empty:NF \l_image_pagebox_tl - { : \l_image_pagebox_tl } - \int_compare:nNnT \l_image_page_int > 1 - { :P \int_use:N \l_image_page_int } - \tl_if_empty:NF \l_image_decode_tl - { :D \l_image_decodearray_tl } - \bool_if:NT \l_image_interpolate_bool - { :I } - } - {#1} {#2} - } -\cs_new_protected:Npn \__driver_image_include_auxii:nnn #1#2#3 - { - \int_if_exist:cTF { c__driver_image_ #2#1 _int } - { - \__driver_literal:x - { pdf:usexobj~@image \int_use:c { c__driver_image_ #2#1 _int } } - } - { \__driver_image_include_auxiii:nn {#2} {#1} {#3} } - } -\cs_generate_variant:Nn \__driver_image_include_auxii:nnn { x } -\cs_new_protected:Npn \__driver_image_include_auxiii:nnn #1#2#3 - { - \int_gincr:N \g__driver_image_int - \int_const:cn { c__driver_image_ #1#2 _int } { \g__driver_image_int } - \__driver_literal:x - { - pdf:#3~ - @image \int_use:c { c__driver_image_ #1#2 _int } - \int_compare:nNnT \l_image_page_int > 1 - { 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 - bbox ~ - \dim_to_decimal_in_bp:n \l_image_llx_dim \c_space_tl - \dim_to_decimal_in_bp:n \l_image_lly_dim \c_space_tl - \dim_to_decimal_in_bp:n \l_image_urx_dim \c_space_tl - \dim_to_decimal_in_bp:n \l_image_ury_dim \c_space_tl - } - (#1) - \bool_lazy_or:nnT - { \l_image_interpolate_bool } - { ! \tl_if_empty_p:N \l_image_decodearray_tl } - { - << - \tl_if_empty:NF \l_image_decode_tl - { /Decode~[ \l_image_decodearray_tl ] } - \bool_if:NT \l_image_interpolate_bool - { /Interpolate~true> } - >> - } - } - } -\int_new:N \g__driver_pdf_object_int -\prop_new:N \g__driver_pdf_object_prop -\cs_new_protected:Npn \driver_pdf_object_new:nn #1#2 - { - \int_gincr:N \g__driver_pdf_object_int - \int_const:cn - { g__driver_pdf_object_ \tl_to_str:n {#1} _int } - { \g__driver_pdf_object_int } - \prop_gput:Nnn \g__driver_pdf_object_prop {#1} {#2} - } -\cs_new:Npn \driver_pdf_object_ref:n #1 - { @l3obj \int_use:c { g__driver_pdf_object_ \tl_to_str:n {#1} _int } } -\cs_new_protected:Npn \driver_pdf_object_write:nn #1#2 - { - \exp_args:Nx \__driver_pdf_object_write:nnn - { \prop_item:Nn \g__driver_pdf_object_prop {#1} } {#1} {#2} - } -\cs_new_protected:Npn \__driver_pdf_object_write:nnn #1#2#3 - { \use:c { __driver_pdf_object_write_ #1 :nn } {#2} {#3} } -\cs_new_protected:Npn \__driver_pdf_object_write_array:nn #1#2 - { - \__driver_literal:x - { - pdf:obj ~ \driver_pdf_object_ref:n {#1} ~ - [ ~ \exp_not:n {#2} ~ ] - } - } -\cs_new_protected:Npn \__driver_pdf_object_write_dict:nn #1#2 - { - \__driver_literal:x - { - pdf:obj ~ \driver_pdf_object_ref:n {#1} ~ - << ~ \exp_not:n {#2} ~ >> - } - } -\cs_new_protected:Npn \__driver_pdf_object_write_fstream:nn #1#2 - { \__driver_pdf_object_write_stream:nnnn { f } {#1} #2 } -\cs_new_protected:Npn \__driver_pdf_object_write_stream:nn #1#2 - { \__driver_pdf_object_write_stream:nnnn { } {#1} #2 } -\cs_new_protected:Npn \__driver_pdf_object_write_stream:nnnn #1#2#3#4 - { - \__driver_literal:x - { - pdf: #1 stream ~ \driver_pdf_object_ref:n {#2} ~ - ( \exp_not:n {#4} ) ~ << \exp_not:n {#3} >> - - } - } -\cs_new_protected:Npn \driver_pdf_compresslevel:n #1 - { \__driver_literal:x { dvipdfmx:config~z~ \int_eval:n {#1} } } -\cs_new_protected:Npn \driver_pdf_objects_enable: { } -\cs_new_protected:Npn \driver_pdf_objects_disable: - { \__driver_literal:n { dvipdfmx:config~C~0x40 } } -\cs_new_protected:Npn \__driver_image_getbb_jpg:n #1 - { - \int_zero:N \l_image_page_int - \tl_clear:N \l_image_pagebox_tl - \__driver_image_getbb_auxi:nN {#1} \tex_XeTeXpicfile:D - } -\cs_new_eq:NN \__driver_image_getbb_png:n \__driver_image_getbb_jpg:n -\cs_new_protected:Npn \__driver_image_getbb_pdf:n #1 - { - \tl_clear:N \l_image_decode_tl - \bool_set_false:N \l_image_interpolate_bool - \__driver_image_getbb_auxi:nN {#1} \tex_XeTeXpdffile:D - } -\cs_new_protected:Npn \__driver_image_getbb_auxi:nN #1#2 - { - \int_compare:nNnTF \l_image_page_int > 1 - { \__driver_image_getbb_auxii:VnN \l_image_page_int {#1} #2 } - { \__driver_image_getbb_auxiii:nNnn {#1} #2 } - } -\cs_new_protected:Npn \__driver_image_getbb_auxii:nnN #1#2#3 - { \__driver_image_getbb_aux:nNnn {#2} #3 { :P #1 } { page #1 } } -\cs_generate_variant:Nn \__driver_image_getbb_auxii:nnN { V } -\cs_new_protected:Npn \__driver_image_getbb_auxiii:nNnn #1#2#3#4 - { - \tl_if_empty:NTF \l_image_pagebox_tl - { \__driver_image_getbb_auxiv:VnNnn \l_image_pagebox_tl } - { \__driver_image_getbb_auxv:nNnn } - {#1} #2 {#3} {#4} - } -\cs_new_protected:Npn \__driver_image_getbb_auxiv:nnNnn #1#2#3#4#5 - { - \use:x - { - \__driver_image_getbb_auxv:nNnn {#2} #3 { : #1 #4 } - { #5 ~ \__driver_image_getbb_pagebox:w #1 } - } - } -\cs_generate_variant:Nn \__driver_image_getbb_auxiv:nnNnn { V } -\cs_new_protected:Npn \__driver_image_getbb_auxv:nNnn #1#2#3#4 - { - \image_bb_restore:nF {#1#3} - { \__driver_image_getbb_auxvi:nNnn {#1} #2 {#3} {#4} } - } -\cs_new_protected:Npn \__driver_image_getbb_auxvi:nNnn #1#2#3#4 - { - \hbox_set:Nn \l__driver_tmp_box { #2 #1 ~ #4 } - \dim_set:Nn \l_image_utx_dim { \box_wd:N \l__driver_tmp_box } - \dim_set:Nn \l_image_ury_dim { \box_ht:N \l__driver_tmp_box } - \image_bb_save:n {#1#3} - } -\cs_new:Npn \__driver_image_getbb_pagebox:w #1 box {#1} -\cs_new_protected:Npn \__driver_image_include_pdf:n #1 - { - \tex_XeTeXpdffile:D "#1" ~ - \int_compare:nNnT \l_image_page_int > 0 - { page~ \int_use:N \l_image_page_int } - \__driver_image_getbb_auxiv:VnNnn \l_image_pagebox_tl - } +%% File: l3drivers-draw.dtx \cs_new_eq:NN \__driver_draw_literal:n \__driver_literal_pdf:n \cs_generate_variant:Nn \__driver_draw_literal:n { x } \cs_new_protected:Npn \driver_draw_begin: @@ -519,6 +351,273 @@ \__driver_literal:n { pdf:etrans } \__driver_scope_end: } +%% File: l3drivers-image.dtx +\cs_new_eq:NN \__driver_image_getbb_eps:n \image_read_bb:n +\int_new:N \g__driver_image_int +\cs_new_protected:Npn \__driver_image_include_eps:n #1 + { + \__driver_literal:n { PSfile = #1 } + } +\cs_new_protected:Npn \__driver_image_include_jpg:n #1 + { \__driver_image_include_auxi:nn {#1} { image } } +\cs_new_eq:NN \__driver_image_include_png:n \__driver_image_include_jpg:n +\cs_new_protected:Npn \__driver_image_include_auxi:nn #1#2 + { + \__driver_image_include_auxii:xnn + { + \tl_if_empty:NF \l_image_pagebox_tl + { : \l_image_pagebox_tl } + \int_compare:nNnT \l_image_page_int > 1 + { :P \int_use:N \l_image_page_int } + \tl_if_empty:NF \l_image_decode_tl + { :D \l_image_decodearray_tl } + \bool_if:NT \l_image_interpolate_bool + { :I } + } + {#1} {#2} + } +\cs_new_protected:Npn \__driver_image_include_auxii:nnn #1#2#3 + { + \int_if_exist:cTF { c__driver_image_ #2#1 _int } + { + \__driver_literal:x + { pdf:usexobj~@image \int_use:c { c__driver_image_ #2#1 _int } } + } + { \__driver_image_include_auxiii:nn {#2} {#1} {#3} } + } +\cs_generate_variant:Nn \__driver_image_include_auxii:nnn { x } +\cs_new_protected:Npn \__driver_image_include_auxiii:nnn #1#2#3 + { + \int_gincr:N \g__driver_image_int + \int_const:cn { c__driver_image_ #1#2 _int } { \g__driver_image_int } + \__driver_literal:x + { + pdf:#3~ + @image \int_use:c { c__driver_image_ #1#2 _int } + \int_compare:nNnT \l_image_page_int > 1 + { 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 + bbox ~ + \dim_to_decimal_in_bp:n \l_image_llx_dim \c_space_tl + \dim_to_decimal_in_bp:n \l_image_lly_dim \c_space_tl + \dim_to_decimal_in_bp:n \l_image_urx_dim \c_space_tl + \dim_to_decimal_in_bp:n \l_image_ury_dim \c_space_tl + } + (#1) + \bool_lazy_or:nnT + { \l_image_interpolate_bool } + { ! \tl_if_empty_p:N \l_image_decodearray_tl } + { + << + \tl_if_empty:NF \l_image_decode_tl + { /Decode~[ \l_image_decodearray_tl ] } + \bool_if:NT \l_image_interpolate_bool + { /Interpolate~true> } + >> + } + } + } +\cs_new_protected:Npn \__driver_image_getbb_jpg:n #1 + { + \int_zero:N \l_image_page_int + \tl_clear:N \l_image_pagebox_tl + \__driver_image_getbb_auxi:nN {#1} \tex_XeTeXpicfile:D + } +\cs_new_eq:NN \__driver_image_getbb_png:n \__driver_image_getbb_jpg:n +\cs_new_protected:Npn \__driver_image_getbb_pdf:n #1 + { + \tl_clear:N \l_image_decode_tl + \bool_set_false:N \l_image_interpolate_bool + \__driver_image_getbb_auxi:nN {#1} \tex_XeTeXpdffile:D + } +\cs_new_protected:Npn \__driver_image_getbb_auxi:nN #1#2 + { + \int_compare:nNnTF \l_image_page_int > 1 + { \__driver_image_getbb_auxii:VnN \l_image_page_int {#1} #2 } + { \__driver_image_getbb_auxiii:nNnn {#1} #2 } + } +\cs_new_protected:Npn \__driver_image_getbb_auxii:nnN #1#2#3 + { \__driver_image_getbb_aux:nNnn {#2} #3 { :P #1 } { page #1 } } +\cs_generate_variant:Nn \__driver_image_getbb_auxii:nnN { V } +\cs_new_protected:Npn \__driver_image_getbb_auxiii:nNnn #1#2#3#4 + { + \tl_if_empty:NTF \l_image_pagebox_tl + { \__driver_image_getbb_auxiv:VnNnn \l_image_pagebox_tl } + { \__driver_image_getbb_auxv:nNnn } + {#1} #2 {#3} {#4} + } +\cs_new_protected:Npn \__driver_image_getbb_auxiv:nnNnn #1#2#3#4#5 + { + \use:x + { + \__driver_image_getbb_auxv:nNnn {#2} #3 { : #1 #4 } + { #5 ~ \__driver_image_getbb_pagebox:w #1 } + } + } +\cs_generate_variant:Nn \__driver_image_getbb_auxiv:nnNnn { V } +\cs_new_protected:Npn \__driver_image_getbb_auxv:nNnn #1#2#3#4 + { + \image_bb_restore:nF {#1#3} + { \__driver_image_getbb_auxvi:nNnn {#1} #2 {#3} {#4} } + } +\cs_new_protected:Npn \__driver_image_getbb_auxvi:nNnn #1#2#3#4 + { + \hbox_set:Nn \l__driver_tmp_box { #2 #1 ~ #4 } + \dim_set:Nn \l_image_utx_dim { \box_wd:N \l__driver_tmp_box } + \dim_set:Nn \l_image_ury_dim { \box_ht:N \l__driver_tmp_box } + \image_bb_save:n {#1#3} + } +\cs_new:Npn \__driver_image_getbb_pagebox:w #1 box {#1} +\cs_new_protected:Npn \__driver_image_include_pdf:n #1 + { + \tex_XeTeXpdffile:D "#1" ~ + \int_compare:nNnT \l_image_page_int > 0 + { page~ \int_use:N \l_image_page_int } + \__driver_image_getbb_auxiv:VnNnn \l_image_pagebox_tl + } +%% File: l3drivers-pdf.dtx +\tl_const:Nn \c__driver_pdf_AR_fix_tl + { /Ff ~ 65537 /FT /Btn /Subtype /Widget } +\cs_new_protected:Npx \__driver_pdf:n #1 + { \__driver_literal:n { pdf: #1 } } +\cs_generate_variant:Nn \__driver_pdf:n { x } +\int_new:N \g__driver_pdf_object_int +\prop_new:N \g__driver_pdf_object_prop +\cs_new_protected:Npn \driver_pdf_object_new:nn #1#2 + { + \int_gincr:N \g__driver_pdf_object_int + \int_const:cn + { g__driver_pdf_object_ \tl_to_str:n {#1} _int } + { \g__driver_pdf_object_int } + \prop_gput:Nnn \g__driver_pdf_object_prop {#1} {#2} + } +\cs_new:Npn \driver_pdf_object_ref:n #1 + { @driver.obj \int_use:c { g__driver_pdf_object_ \tl_to_str:n {#1} _int } } +\cs_new_protected:Npn \driver_pdf_object_write:nn #1#2 + { + \exp_args:Nx \__driver_pdf_object_write:nnn + { \prop_item:Nn \g__driver_pdf_object_prop {#1} } {#1} {#2} + } +\cs_new_protected:Npn \__driver_pdf_object_write:nnn #1#2#3 + { \use:c { __driver_pdf_object_write_ #1 :nn } {#2} {#3} } +\cs_new_protected:Npn \__driver_pdf_object_write_array:nn #1#2 + { + \__driver_pdf:x + { + obj ~ \driver_pdf_object_ref:n {#1} ~ + [ ~ \exp_not:n {#2} ~ ] + } + } +\cs_new_protected:Npn \__driver_pdf_object_write_dict:nn #1#2 + { + \__driver_pdf:x + { + obj ~ \driver_pdf_object_ref:n {#1} ~ + << ~ \exp_not:n {#2} ~ >> + } + } +\cs_new_protected:Npn \__driver_pdf_object_write_fstream:nn #1#2 + { \__driver_pdf_object_write_stream:nnnn { f } {#1} #2 } +\cs_new_protected:Npn \__driver_pdf_object_write_stream:nn #1#2 + { \__driver_pdf_object_write_stream:nnnn { } {#1} #2 } +\cs_new_protected:Npn \__driver_pdf_object_write_stream:nnnn #1#2#3#4 + { + \__driver_pdf:x + { + #1 stream ~ \driver_pdf_object_ref:n {#2} ~ + ( \exp_not:n {#4} ) ~ << \exp_not:n {#3} >> + + } + } +\bool_new:N \g__driver_landscape_bool +\AtBeginDocument + { + \cs_if_exist:NT \landscape + { + \tl_put_right:Nn \landscape + { \bool_gset_true:N \g__driver_landscape_bool } + \tl_put_left:Nn \endlandscape + { \bool_gset_false:N \g__driver_landscape_bool } + } + } +\cs_new_protected:Npx \__driver_pdf_AR_fix: + { + \__driver_pdf:n + { + ann ~ width ~ 3pt ~ height ~ 3pt ~ depth ~ 0pt + << \c__driver_pdf_AR_fix_tl >> + } + } +\int_new:N \g__driver_pdf_annotation_int +\cs_new_protected:Npn \driver_pdf_annotation:nnnn #1#2#3#4 + { + \bool_if:NTF \g__driver_landscape_bool + { + \box_move_up:nn {#2} + { + \vbox:n + { + \__driver_pdf_annotation:nnnn + { #2 + #3 } {#1} { 0pt } {#4} + } + } + } + { \__driver_pdf_annotation:nnnn {#1} {#2} {#3} {#4} } + } +\cs_new_protected:Npn \__driver_pdf_annotation:nnnn #1#2#3#4 + { + \__driver_pdf_AR_fix: + \int_gincr:N \g__driver_pdf_object_int + \int_gset_eq:NN \g__driver_pdf_annotation_int \g__driver_pdf_object_int + \__driver_pdf:x + { + ann ~ @driver.obj \int_use:N \g__driver_pdf_object_int \c_space_tl + width ~ \dim_eval:n {#1} ~ + height ~ \dim_eval:n {#2} ~ + depth ~ \dim_eval:n {#3} ~ + << #4 >> + } + } +\cs_new_protected:Npn \driver_pdf_link_begin_goto:nnw #1#2 + { \__driver_pdf_link_begin:n { #1 /A << /S /GoTo /D ( #2 ) >> } } +\cs_new_protected:Npn \driver_pdf_link_begin_user:nnw #1#2 + { \__driver_pdf_link_begin:n {#1#2} } +\cs_new_protected:Npn \__driver_pdf_link_begin:n #1 + { + \__driver_pdf_AR_fix: + \__driver_pdf:n + { + bann + << + /Type /Annot + /Subtype /Link + #1 + >> + } + } +\cs_new_protected:Npn \driver_pdf_link_end: + { \__driver_pdf:n { eann } } +\cs_new:Npn \driver_pdf_link_last: { } +\cs_new_protected:Npn \driver_pdf_link_margin:n #1 { } +\cs_new_protected:Npn \driver_pdf_compresslevel:n #1 + { \__driver_literal:x { dvipdfmx:config~z~ \int_eval:n {#1} } } +\cs_new_protected:Npn \driver_pdf_objects_enable: { } +\cs_new_protected:Npn \driver_pdf_objects_disable: + { \__driver_literal:n { dvipdfmx:config~C~0x40 } } +\cs_new_protected:Npn \driver_pdf_version_major:n #1 + { + \cs_gset:Npx \driver_pdf_version_major: { \int_eval:n {#1} } + \__driver_literal:x { pdf:majorversion \driver_pdf_version_major: } + } +\cs_new_protected:Npn \driver_pdf_version_minor:n #1 + { + \cs_gset:Npx \driver_pdf_version_minor: { \int_eval:n {#1} } + \__driver_literal:x { pdf:minorversion \driver_pdf_version_minor: } + } +\cs_new:Npn \driver_pdf_version_major: { 1 } +\cs_new:Npn \driver_pdf_version_minor: { 5 } %% %% %% End of file `l3xdvipdfmx.def'. -- cgit v1.2.3