diff options
author | Karl Berry <karl@freefriends.org> | 2021-02-23 22:38:24 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2021-02-23 22:38:24 +0000 |
commit | 96be5ed7ba5ce4406ca538c4b0d18edeec9d7aab (patch) | |
tree | f903bef02645eac80be0107658487813b3ebc6a7 /Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-pdftex.def | |
parent | 7389bb9fb813a0f5e8654431dacfcb81d1f116e4 (diff) |
pdfmanagement-testphase (23feb21)
git-svn-id: svn://tug.org/texlive/trunk@57862 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-pdftex.def')
-rw-r--r-- | Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-pdftex.def | 406 |
1 files changed, 406 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-pdftex.def b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-pdftex.def new file mode 100644 index 00000000000..40ce682e041 --- /dev/null +++ b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-pdftex.def @@ -0,0 +1,406 @@ +%% +%% This is file `l3backend-testphase-pdftex.def', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% l3backend-testphase.dtx (with options: `drivers,pdftex') +%% +%% Copyright (C) 2019-2021 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 "LaTeX PDF management testphase bundle" (The Work in LPPL) +%% and all files in that bundle must be distributed together. +%% +%% File: l3backend-testphase.dtx +\ProvidesExplFile + {l3backend-testphase-pdftex.def}{2021-02-22}{} + {LaTeX~PDF~management~testphase~bundle~backend~support: PDF output (pdfTeX)} +\RequirePackage{l3ref-tmp} +\cs_generate_variant:Nn \ref_label:nn {en} +\cs_generate_variant:Nn \ref_value:nn {en} +\cs_new_protected:Npn \__pdf_backend_ref_label:nn #1 #2 + { + \@bsphack + \ref_label:nn{#1}{abspage} + \@esphack + } +\cs_new:Npn \__pdf_backend_ref_value:nn #1 #2 + { + \ref_value:nn{#1}{#2} + } +\cs_generate_variant:Nn \__pdf_backend_ref_label:nn {en} +\cs_generate_variant:Nn \__pdf_backend_ref_value:nn {en} +\prop_new:N \g__pdf_tmpa_prop +\tl_new:N \l__pdf_tmpa_tl +\box_new:N \l__pdf_backend_tmpa_box +\int_new:N \g__pdf_backend_resourceid_int +\int_new:N \g__pdf_backend_name_int +\int_new:N \g__pdf_backend_page_int +\tl_gput_right:Nn \@kernel@after@enddocument@afterlastpage + { + \g__kernel_pdfmanagement_end_run_code_tl + } +\tl_if_exist:NTF \@kernel@after@shipout@background + { + \g@addto@macro \@kernel@before@shipout@background{\relax} + \g@addto@macro \@kernel@after@shipout@background + { + \g__kernel_pdfmanagement_thispage_shipout_code_tl + } + \tl_gput_left:Nn\@kernel@after@shipout@lastpage + { + \g__kernel_pdfmanagement_lastpage_shipout_code_tl + } + } + { + \hook_gput_code:nnn{shipout/background}{pdf} + { + \g__kernel_pdfmanagement_thispage_shipout_code_tl + } + \hook_gput_code:nnn {shipout/lastpage} {pdf} + { + \g__kernel_pdfmanagement_lastpage_shipout_code_tl + } + } + +\cs_new_protected:Npn \__pdf_backend_Pages_primitive:n #1 + { + \tex_global:D \tex_pdfpagesattr:D { #1 } + } + %the primitive + \cs_new_protected:Npn \__pdf_backend_Page_primitive:n #1 + { + \tex_global:D \tex_pdfpageattr:D { #1 } + } + \cs_new_protected:Npn \__pdf_backend_Page_gput:nn #1 #2 %key,value + { + \pdfdict_gput:nnn {g__pdf_Core/Page}{ #1 }{ #2 } + } +\cs_new_protected:Npn \__pdf_backend_Page_gremove:n #1 + { + \pdfdict_gremove:nn {g__pdf_Core/Page}{ #1 } + } +\cs_new_protected:Npn \__pdf_backend_ThisPage_gput:nn #1 #2 + { + %we need to know the page the resource should be added too. + \int_gincr:N\g__pdf_backend_resourceid_int + %\zref@labelbylist {l3pdf\int_use:N\g__pdf_backend_resourceid_int} {l3pdf} + %\ref_label:en{l3pdf\int_use:N\g__pdf_backend_resourceid_int}{abspage} + \__pdf_backend_ref_label:en { l3pdf\int_use:N\g__pdf_backend_resourceid_int }{abspage} + \tl_set:Nx \l__pdf_tmpa_tl + { + %\zref@extractdefault + \__pdf_backend_ref_value:en {l3pdf\int_use:N\g__pdf_backend_resourceid_int}{abspage} + } + \pdfdict_if_exist:nF { g__pdf_Core/backend_Page\l__pdf_tmpa_tl} + { + \pdfdict_new:n { g__pdf_Core/backend_Page\l__pdf_tmpa_tl} + } + %backend_Page has no handler. + \pdfdict_gput:nnn {g__pdf_Core/backend_Page\l__pdf_tmpa_tl}{ #1 }{ #2 } + } +\cs_new_protected:Npn \__pdf_backend_ThisPage_gpush:n #1 + { + \prop_gset_eq:Nc \g__pdf_tmpa_prop { \__kernel_pdfdict_name:n { g__pdf_Core/Page } } + \prop_if_exist:cT { \__kernel_pdfdict_name:n { g__pdf_Core/backend_Page#1 } } + { + \prop_map_inline:cn { \__kernel_pdfdict_name:n { g__pdf_Core/backend_Page#1 } } + { + \prop_gput:Nnn \g__pdf_tmpa_prop { ##1 }{ ##2 } + } + } + \exp_args:Nx \__pdf_backend_Page_primitive:n + { + \prop_map_function:NN \g__pdf_tmpa_prop \pdfdict_item:ne + } + } +\clist_const:Nn \c__pdf_backend_PageResources_clist + { + ExtGState, + ColorSpace, + Pattern, + Shading, + } + %create the backend objects: +\clist_map_inline:Nn \c__pdf_backend_PageResources_clist + { + \__pdf_backend_object_new:nn {Page/Resources/#1} {dict} + \cs_if_exist:NT \tex_directlua:D + { + \tex_directlua:D + { + ltx.__pdf.object["Page/Resources/#1"] + = + "\__pdf_backend_object_ref:n{Page/Resources/#1}" + } + } + } + \cs_new_protected:Npn \__pdf_backend_PageResources_gput:nnn #1 #2 #3 + { + \pdfdict_gput:nnn {g__pdf_Core/Page/Resources/#1} { #2 }{ #3 } + } +\cs_new_protected:Npn \__pdf_backend_PageResources_obj_gpush: + { + \clist_map_inline:Nn \c__pdf_backend_PageResources_clist + { + \prop_if_empty:cF + { \__kernel_pdfdict_name:n { g__pdf_Core/Page/Resources/##1} } + { + \__pdf_backend_object_write:nx + { Page/Resources/##1 } + { \pdfdict_use:n { g__pdf_Core/Page/Resources/##1} } + } + } + } +\bool_new:N \l__pdf_backend_xform_bool + +\cs_set_protected:Npn \__pdf_backend_bdcobject:nn #1 #2 % #1 eg. Span, #2: object name + { + \int_gincr:N \g__pdf_backend_name_int + \exp_args:Nx\__kernel_backend_literal_page:n + { /#1 ~ /l3pdf\int_use:N\g__pdf_backend_name_int\c_space_tl BDC } + % code to set the property .... + \int_gincr:N\g__pdf_backend_resourceid_int + \bool_if:NTF \l__pdf_backend_xform_bool + { + \exp_args:Nnxx\pdfdict_gput:nnn %no handler needed + { g__pdf_Core/Xform/Resources/Properties } + { l3pdf\int_use:N\g__pdf_backend_resourceid_int } + { \__pdf_backend_object_ref:n { #2 } } + } + { + %\zref@labelbylist + \__pdf_backend_ref_label:en{l3pdf\int_use:N\g__pdf_backend_resourceid_int}{abspage} + \tl_set:Nx \l__pdf_tmpa_tl + { + %\zref@extractdefault + %\ref_value:en{l3pdf\int_use:N\g__pdf_backend_resourceid_int}{abspage} + \__pdf_backend_ref_value:en{l3pdf\int_use:N\g__pdf_backend_resourceid_int}{abspage} + } + \pdfdict_if_exist:nF { g__pdf_Core/backend_Page\l__pdf_tmpa_tl/Resources/Properties } + { + \pdfdict_new:n { g__pdf_Core/backend_Page\l__pdf_tmpa_tl/Resources/Properties } + } + \exp_args:Nnxx\pdfdict_gput:nnn + { g__pdf_Core/backend_Page\l__pdf_tmpa_tl/Resources/Properties } + { l3pdf\int_use:N\g__pdf_backend_resourceid_int } + { \__pdf_backend_object_ref:n{#2} } + } + } +\cs_set_protected:Npn \__pdf_backend_bdcobject:n #1% #1 eg. Span + { + \int_gincr:N \g__pdf_backend_name_int + \exp_args:Nx\__kernel_backend_literal_page:n + { /#1 ~ /l3pdf\int_use:N\g__pdf_backend_name_int\c_space_tl BDC } + % code to set the property .... + \int_gincr:N\g__pdf_backend_resourceid_int + \bool_if:NTF \l__pdf_backend_xform_bool + { + \exp_args:Nnxx\pdfdict_gput:nnn + { g__pdf_Core/Xform/Resources/Properties } + { l3pdf\int_use:N\g__pdf_backend_resourceid_int } + { \__pdf_backend_object_last: } + } + { + %\zref@labelbylist + %\ref_label:en{l3pdf\int_use:N\g__pdf_backend_resourceid_int}{abspage} + \__pdf_backend_ref_label:en{l3pdf\int_use:N\g__pdf_backend_resourceid_int}{abspage} + \tl_set:Nx \l__pdf_tmpa_tl + { + %\zref@extractdefault + % \ref_value:en{l3pdf\int_use:N\g__pdf_backend_resourceid_int}{abspage} + \__pdf_backend_ref_value:en{l3pdf\int_use:N\g__pdf_backend_resourceid_int}{abspage} + } + \pdfdict_if_exist:nF { g__pdf_Core/backend_Page\l__pdf_tmpa_tl/Resources/Properties } + { + \pdfdict_new:n { g__pdf_Core/backend_Page\l__pdf_tmpa_tl/Resources/Properties } + } + \exp_args:Nnxx\pdfdict_gput:nnn + { g__pdf_Core/backend_Page\l__pdf_tmpa_tl/Resources/Properties } + { l3pdf\int_use:N\g__pdf_backend_resourceid_int } + { \__pdf_backend_object_last: } + %\pdfdict_show:n { g_backend_Page\l__pdf_tmpa_tl/Resources/Properties } + } + } +\cs_set_protected:Npn \__pdf_backend_bmc:n #1 + { + \__kernel_backend_literal_page:n { /#1~BMC } + } +\cs_set_protected:Npn \__pdf_backend_bdc_contobj:nn #1 #2 + { + \pdf_object_unnamed_write:nn { dict } { #2 } + \__pdf_backend_bdcobject:n { #1 } + } +\cs_set_protected:Npn \__pdf_backend_bdc_contstream:nn #1 #2 + { + \__kernel_backend_literal_page:n { /#1~<<#2>>~BDC } + } +\cs_set_protected:Npn \__pdf_backend_bdc:nn #1 #2 + { + \bool_if:NTF \g__pdfmanagement_active_bool + {\cs_gset_eq:NN \__pdf_backend_bdc:nn \__pdf_backend_bdc_contobj:nn} + {\cs_gset_eq:NN \__pdf_backend_bdc:nn \__pdf_backend_bdc_contstream:nn} + \__pdf_backend_bdc:nn {#1}{#2} + } +\cs_set_protected:Npn \__pdf_backend_emc: + { + \__kernel_backend_literal_page:n { EMC } + } + +\cs_new:Npn \__pdf_backend_PageResources_gpush_aux:n #1 %#1 ExtGState etc + { + \prop_if_empty:cF + { \__kernel_pdfdict_name:n { g__pdf_Core/Page/Resources/#1} } + { + \pdfdict_item:ne { #1 }{ \pdf_object_ref:n {Page/Resources/#1}} + } + } + +\cs_new_protected:Npn \__pdf_backend_PageResources_gpush:n #1 + { + \exp_args:NNx \tex_global:D \tex_pdfpageresources:D + { + \prop_if_exist:cT + { \__kernel_pdfdict_name:n { g__pdf_Core/backend_Page#1/Resources/Properties } } + { + /Properties~ + << + \prop_map_function:cN + { \__kernel_pdfdict_name:n { g__pdf_Core/backend_Page#1/Resources/Properties } } + \pdfdict_item:ne + >> + } + %% add ExtGState etc + \clist_map_function:NN + \c__pdf_backend_PageResources_clist + \__pdf_backend_PageResources_gpush_aux:n + } + } + +\cs_new_protected:Npn \__pdf_backend_NamesEmbeddedFiles_gpush:n #1 %array content + { + \pdf_object_unnamed_write:nn {dict} {/Names [#1] } + \tex_pdfnames:D {/EmbeddedFiles~\pdf_object_ref_last:} + } + + +\int_new:N \g__pdf_backend_EmbeddedFiles_int +\cs_new:Npn \__pdf_backend_EmbeddedFiles_name: + { + ( + l3ef + \int_compare:nNnT {\g__pdf_backend_EmbeddedFiles_int} < {10} + {0} + \int_compare:nNnT {\g__pdf_backend_EmbeddedFiles_int} < {100} + {0} + \int_compare:nNnT {\g__pdf_backend_EmbeddedFiles_int} < {1000} + {0} + \int_use:N \g__pdf_backend_EmbeddedFiles_int + ) + } +\seq_new:N \g__pdf_backend_EmbeddedFiles_seq +\prop_new:N \g__pdf_backend_EmbeddedFiles_named_prop +\cs_new_protected:Npn \__pdf_backend_NamesEmbeddedFiles_add:n #1 + %#1 object ref + { + \int_gincr:N \g__pdf_backend_EmbeddedFiles_int + \prop_gput:Nnx \g__pdf_backend_EmbeddedFiles_named_prop + { #1 } + { \__pdf_backend_EmbeddedFiles_name: } + \seq_gput_right:Nx \g__pdf_backend_EmbeddedFiles_seq + { \__pdf_backend_EmbeddedFiles_name: \c_space_tl #1 } + } + +\cs_new_protected:Npn \__pdf_backend_xform_new:nnnn #1 #2 #3 #4 + { + \hbox_set:Nn \l__pdf_backend_tmpa_box + { + \bool_set_true:N \l__pdf_backend_xform_bool + \prop_gclear:c {\__kernel_pdfdict_name:n { g__pdf_Core/Xform/Resources/Properties }} + #4 + } + %store the dimensions + \tl_const:cx + { c__pdf_backend_xform_wd_ \tl_to_str:n {#1} _tl } + { \tex_the:D \box_wd:N \l__pdf_backend_tmpa_box } + \tl_const:cx + { c__pdf_backend_xform_ht_ \tl_to_str:n {#1} _tl } + { \tex_the:D \box_ht:N \l__pdf_backend_tmpa_box } + \tl_const:cx + { c__pdf_backend_xform_dp_ \tl_to_str:n {#1} _tl } + { \tex_the:D \box_dp:N \l__pdf_backend_tmpa_box } + %% do we need to test if #2 and #3 are empty?? + \tex_immediate:D \tex_pdfxform:D + ~ attr ~ { #2 } + %% which other resources should be default? Is an argument actually needed? + ~ resources ~ + { + #3 + \int_compare:nNnT + { \prop_count:c { \__kernel_pdfdict_name:n { g__pdf_Core/Xform/Resources/Properties } } } + > + { 0 } + { + /Properties~ + << + \pdfdict_use:n { g__pdf_Core/Xform/Resources/Properties } + >> + } + + \prop_if_empty:cF + { \__kernel_pdfdict_name:n { g__pdf_Core/Page/Resources/ExtGState } } + { + /ExtGState~ \pdf_object_ref:n { Page/Resources/ExtGState } + } + \prop_if_empty:cF + { \__kernel_pdfdict_name:n { g__pdf_Core/Page/Resources/Pattern } } + { + /Pattern~ \pdf_object_ref:n { Page/Resources/Pattern } + } + \prop_if_empty:cF + { \__kernel_pdfdict_name:n { g__pdf_Core/Page/Resources/Shading } } + { + /Shading~ \pdf_object_ref:n { Page/Resources/Shading } + } + \prop_if_empty:cF + { \__kernel_pdfdict_name:n { g__pdf_Core/Page/Resources/ColorSpace } } + { + /ColorSpace~ \pdf_object_ref:n { Page/Resources/ColorSpace } + } + } + \l__pdf_backend_tmpa_box + \int_const:cn + { c__pdf_backend_xform_ \tl_to_str:n {#1} _int } + { \tex_pdflastxform:D } + } + +\cs_new_protected:Npn \__pdf_backend_xform_use:n #1 + { + \tex_pdfrefxform:D + \int_use:c { c__pdf_backend_xform_ \tl_to_str:n {#1} _int } + \scan_stop: + } + +\cs_new:Npn \__pdf_backend_xform_ref:n #1 + { + \int_use:c { c__pdf_backend_xform_ \tl_to_str:n {#1} _int } ~ 0 ~ R + } +%% all +\prg_new_conditional:Npnn \__pdf_backend_xform_if_exist:n #1 { p , T , F , TF } + { + \int_if_exist:cTF { c__pdf_backend_xform_ \tl_to_str:n {#1} _int } + { \prg_return_true: } + { \prg_return_false:} + } +\prg_new_eq_conditional:NNn \pdfxform_if_exist:n\__pdf_backend_xform_if_exist:n + { TF , T , F , p } +%% +%% +%% End of file `l3backend-testphase-pdftex.def'. |