diff options
author | Karl Berry <karl@freefriends.org> | 2021-02-24 23:39:33 +0000 |
---|---|---|
committer | Karl Berry <karl@freefriends.org> | 2021-02-24 23:39:33 +0000 |
commit | af6523eabc8ad027567831103afe0cb2ff123671 (patch) | |
tree | e7fe820424436f04bd056a4e81646120ba4ef73d /Master/texmf-dist/doc/latex | |
parent | 6db38b426042bc6fece00e3af99df6c2c9bc670b (diff) |
pdfmanagement-testphase runtime files
git-svn-id: svn://tug.org/texlive/trunk@57885 c570f23f-e606-0410-a88d-b1316a301751
Diffstat (limited to 'Master/texmf-dist/doc/latex')
-rw-r--r-- | Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3backend-testphase.lua | 143 | ||||
-rw-r--r-- | Master/texmf-dist/doc/latex/pdfmanagement-testphase/pdfmanagement-testphase.ltx | 1940 |
2 files changed, 0 insertions, 2083 deletions
diff --git a/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3backend-testphase.lua b/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3backend-testphase.lua deleted file mode 100644 index f6ae9306076..00000000000 --- a/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3backend-testphase.lua +++ /dev/null @@ -1,143 +0,0 @@ --- --- This is file `l3backend-testphase.lua', --- generated with the docstrip utility. --- --- The original source files were: --- --- l3backend-testphase.dtx (with options: `lua') --- --- 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 - - - -ltx= ltx or {} -ltx.__pdf = ltx.__pdf or {} -ltx.__pdf.Page = ltx.__pdf.Page or {} -ltx.__pdf.Page.dflt = ltx.__pdf.Page.dflt or {} -ltx.__pdf.Page.Resources = ltx.__pdf.Resources or {} -ltx.__pdf.Page.Resources.Properties = ltx.__pdf.Page.Resources.Properties or {} -ltx.__pdf.Page.Resources.List={"ExtGState","ColorSpace","Pattern","Shading"} -ltx.__pdf.object = ltx.__pdf.object or {} - -ltx.pdf= ltx.pdf or {} -- for "public" functions - -local __pdf = ltx.__pdf -local pdf = pdf - -local function __pdf_backend_Page_gput (name,value) - __pdf.Page.dflt[name]=value -end - -local function __pdf_backend_Page_gremove (name) - __pdf.Page.dflt[name]=nil -end - -local function __pdf_backend_Page_gclear () - __pdf.Page.dflt={} -end - -local function __pdf_backend_ThisPage_gput (page,name,value) - __pdf.Page[page] = __pdf.Page[page] or {} - __pdf.Page[page][name]=value -end - -local function __pdf_backend_ThisPage_gpush (page) - local token="" - local t = {} - local tkeys= {} - for name,value in pairs(__pdf.Page.dflt) do - t[name]=value - end - if __pdf.Page[page] then - for name,value in pairs(__pdf.Page[page]) do - t[name] = value - end - end - -- sort the table to get reliable test files. - for name,value in pairs(t) do - table.insert(tkeys,name) - end - table.sort(tkeys) - for _,name in ipairs(tkeys) do - token = token .. "/"..name.." "..t[name] - end - return token -end - -function ltx.__pdf.backend_ThisPage_gput (page,name,value) -- tex.count["g_shipout_readonly_int"] - __pdf_backend_ThisPage_gput (page,name,value) -end - -function ltx.__pdf.backend_ThisPage_gpush (page) - pdf.setpageattributes(__pdf_backend_ThisPage_gpush (page)) -end - -function ltx.__pdf.backend_Page_gput (name,value) - __pdf_backend_Page_gput (name,value) -end - -function ltx.__pdf.backend_Page_gremove (name) - __pdf_backend_Page_gremove (name) -end - -function ltx.__pdf.backend_Page_gclear () - __pdf_backend_Page_gclear () -end - -local Properties = ltx.__pdf.Page.Resources.Properties -local ResourceList= ltx.__pdf.Page.Resources.List -local function __pdf_backend_PageResources_gpush (page) - local token="" - if Properties[page] then --- we sort the table, so that the pdf test works - local t = {} - for name,value in pairs (Properties[page]) do - table.insert (t,name) - end - table.sort (t) - for _,name in ipairs(t) do - token = token .. "/"..name.." ".. Properties[page][name] - end - token = "/Properties <<"..token..">>" - end - for i,name in ipairs(ResourceList) do - if ltx.__pdf.Page.Resources[name] then - token = token .. "/"..name.." "..ltx.pdf.object_ref("Page/Resources/"..name) - end - end - return token -end - --- the function is public, as I probably need it in tagpdf too ... -function ltx.pdf.Page_Resources_Properties_gput (page,name,value) -- tex.count["g_shipout_readonly_int"] - Properties[page] = Properties[page] or {} - Properties[page][name]=value - pdf.setpageresources(__pdf_backend_PageResources_gpush (page)) -end - -function ltx.pdf.Page_Resources_gpush(page) - pdf.setpageresources(__pdf_backend_PageResources_gpush (page)) -end - -function ltx.pdf.object_ref (objname) - if ltx.__pdf.object[objname] then - local ref= ltx.__pdf.object[objname] - return ref - else - return "false" - end -end --- --- End of File `l3backend-testphase.lua'. diff --git a/Master/texmf-dist/doc/latex/pdfmanagement-testphase/pdfmanagement-testphase.ltx b/Master/texmf-dist/doc/latex/pdfmanagement-testphase/pdfmanagement-testphase.ltx deleted file mode 100644 index 66293c0401e..00000000000 --- a/Master/texmf-dist/doc/latex/pdfmanagement-testphase/pdfmanagement-testphase.ltx +++ /dev/null @@ -1,1940 +0,0 @@ -%% -%% This is file `pdfmanagement-testphase.ltx', -%% generated with the docstrip utility. -%% -%% The original source files were: -%% -%% pdfmanagement-testphase.dtx (with options: `header') -%% l3pdfdict.dtx (with options: `package') -%% l3pdfmanagement.dtx (with options: `package') -%% ltdocinit.dtx (with options: `package') -%% l3pdfannot.dtx (with options: `package') -%% l3pdfxform.dtx (with options: `package') -%% l3pdfmeta.dtx (with options: `package') -%% l3pdftools.dtx (with options: `package') -%% l3pdffile.dtx (with options: `package') -%% -%% 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: pdfmanagement-testphase.dtx -\ProvidesExplFile - {pdfmanagement-testphase.ltx}{2021-02-22}{0.95a} - {PDF~management~code~(testphase)} -%% File: l3pdfdict.dtx -\cs_new:Npn \__pdfdict_get_type:n #1 - { - \str_case_e:nn { \str_head:n{#1} } - { - {g}{global} - {l}{local} - } - } -\msg_new:nnn { pdfdict } { show-dict } - { %#1: name of the dictionary - %#2: expanded content - %#3: type - The~#3~dictionary~'#1'~ - \tl_if_empty:nTF {#2} - { is~empty \\>~ . } - { contains~the~pairs~(without~outer~braces): #2 . } - } -\msg_new:nnn { pdfdict } { unknown-dict } - { - The~dictionary~'#1'~is~unknown. - } -\msg_new:nnn { pdfdict } { dict-already-defined } - { - The~#2~dictionary~'#1'~is~already~defined. - } -\msg_new:nnn { pdfdict } { empty-value } - { The~value~#1~for~#2~is~blank~and~will~be~ignored } - -\msg_new:nnn { pdfdict } { invalid-name } - { Name~'#1'~is~not~valid\\ - Names~of~dictionaries~should~start~with~'g_'~or~'l_' } - - -\seq_new:N \g__pdfdict_lnames_seq -\seq_new:N \g__pdfdict_gnames_seq -\cs_new:Npn \__pdfdict_name:n #1 % #1 dictionary name - { - \str_head:n{#1}__pdfdict_/#1_prop - } -\cs_set_eq:NN \__kernel_pdfdict_name:n \__pdfdict_name:n - -\cs_new_protected:Npn \__pdfdict_new:n #1 - { - \__pdfdict_if_exist:nTF { #1 } - { - \msg_error:nnxx - { pdfdict } - { dict-already-defined } - { \tl_to_str:n {#1} } - { \__pdfdict_get_type:n{#1} } - } - { - \str_case_e:nnF { \str_head:n{#1} } - { - {g} - { - \prop_new:c { \__pdfdict_name:n { #1 } } - \seq_gput_right:cn {g__pdfdict_gnames_seq} { #1 } - } - {l} - { - \prop_new:c { \__pdfdict_name:n { #1 } } - \seq_gput_right:cn {g__pdfdict_lnames_seq} { #1 } - } - } - { - \msg_error:nnx{pdfdict}{invalid-name}{\tl_to_str:n{#1}} - } - } - } - -\cs_set_eq:NN \pdfdict_new:n \__pdfdict_new:n -\cs_new_protected:Npn \__pdfdict_set_eq:nn #1 #2 - { - \__pdfdict_if_exist:nTF { #2 } - { - \__pdfdict_if_exist:nF { #1 } - { - \__pdfdict_new:n { #1 } - } - \prop_set_eq:cc { \__pdfdict_name:n {#1} }{ \__pdfdict_name:n {#2} } - } - { - \msg_error:nnn { pdfdict } { unknown-dict } { #1 } - } - } - -\cs_set_eq:NN \pdfdict_set_eq:nn \__pdfdict_set_eq:nn - -\cs_new_protected:Npn \__pdfdict_gset_eq:nn #1 #2 - { - \__pdfdict_if_exist:nTF { #2 } - { - \__pdfdict_if_exist:nF { #1 } - { - \__pdfdict_new:n { #1 } - } - \prop_gset_eq:cc { \__pdfdict_name:n {#1} }{ \__pdfdict_name:n {#2} } - } - { - \msg_error:nnn { pdfdict } { unknown-dict } { #1 } - } - } - -\cs_set_eq:NN \pdfdict_gset_eq:nn \__pdfdict_gset_eq:nn -\prg_new_conditional:Npnn \__pdfdict_if_exist:n #1 { p , T , F , TF } - { - \prop_if_exist:cTF - { \__pdfdict_name:n { #1 } } - { \prg_return_true: } - { \prg_return_false: } - } -\prg_set_eq_conditional:NNn - \pdfdict_if_exist:n \__pdfdict_if_exist:n { p , T , F , TF } -\prg_new_conditional:Npnn \__pdfdict_if_empty:n #1 { p , T , F , TF } - { - \prop_if_empty:cTF - { \__pdfdict_name:n { #1 } } - { \prg_return_true: } - { \prg_return_false: } - } - -\prg_set_eq_conditional:NNn - \pdfdict_if_empty:n \__pdfdict_if_empty:n { p , T , F , TF } -\cs_new_protected:Npn \__pdfdict_put:nnn #1 #2 #3 %#1 (local) dict, #2 name, #3 value - { - \tl_if_blank:nTF { #3 } - { - \msg_warning:nnnn { pdfdict }{ empty-value }{ #2 } { #1 } - } - { - \__pdfdict_if_exist:nTF { #1 } - { - \exp_args:Nnx \prop_put:cnn - { \__pdfdict_name:n { #1 } }{ \str_convert_pdfname:n { #2 } } { #3 } - } - { - \msg_error:nnn { pdfdict } { unknown-dict } { #1 } - } - } - } - -\cs_set_eq:NN \pdfdict_put:nnn \__pdfdict_put:nnn -\cs_generate_variant:Nn \pdfdict_put:nnn {nnx,nno} - -\cs_new_protected:Npn \__pdfdict_gput:nnn #1 #2 #3 %#1 global dict, #2 name, #3 value - { - \tl_if_empty:nTF { #3 } - { - \msg_warning:nnnn { pdfdict }{ empty-value }{ #2 } { #1 } - } - { - \__pdfdict_if_exist:nTF { #1 } - { - \exp_args:Nnx \prop_gput:cnn - { \__pdfdict_name:n { #1 } }{ \str_convert_pdfname:n { #2 } } { #3 } - } - { - \msg_error:nnn { pdfdict } { unknown-dict } { #1 } - } - } - } - -\cs_set_eq:NN \pdfdict_gput:nnn \__pdfdict_gput:nnn -\cs_generate_variant:Nn \pdfdict_gput:nnn {nnx,nno} -\cs_new_protected:Npn \__pdfdict_get:nnN #1 #2 #3 %dict,key,macro - { - \__pdfdict_if_exist:nTF { #1 } - { - \exp_args:Nnx \prop_get:cnN - { \__pdfdict_name:n { #1 } } - { \str_convert_pdfname:n { #2 } } #3 - } - { - \msg_error:nnn { pdfdict } { unknown-dict } { #1 } - } - } - -\cs_set_eq:NN \pdfdict_get:nnN \__pdfdict_get:nnN -\cs_new_protected:Npn \__pdfdict_remove:nn #1 #2 %dict,name - { - \__pdfdict_if_exist:nTF { #1 } - { - \exp_args:Nnx \prop_remove:cn - { \__pdfdict_name:n { #1 } }{ \str_convert_pdfname:n { #2 } } - } - { - \msg_error:nnn { pdfdict } { unknown-dict } { #1 } - } - } -\cs_set_eq:NN \pdfdict_remove:nn \__pdfdict_remove:nn - -\cs_new_protected:Npn \__pdfdict_gremove:nn #1 #2 %dict,name - { - \__pdfdict_if_exist:nTF { #1 } - { - \exp_args:Nnx \prop_gremove:cn - { \__pdfdict_name:n { #1 } }{ \str_convert_pdfname:n { #2 } } - } - { - \msg_error:nnn { pdfdict } { unknown-dict } { #1 } - } - } - -\cs_set_eq:NN \pdfdict_gremove:nn \__pdfdict_gremove:nn -\cs_new_protected:Npn \__pdfdict_show:Nn #1#2 %#1 message command, #2 dict - { - \prop_if_exist:cTF { \__pdfdict_name:n { #2 } } - { - #1 - { pdfdict } - { show-dict } - { \tl_to_str:n {#2} } - { \prop_map_function:cN {\__pdfdict_name:n { #2 }} \msg_show_item:nn } - { \__pdfdict_get_type:n{#2} } - { } - } - { - #1 { pdfdict } { unknown-dict } { #2 } {}{}{} - } - } -\cs_new_protected:Npn \pdfdict_show:n #1 - { - \__pdfdict_show:Nn \msg_show:nnxxxx {#1} - } -\cs_new:Npn \__pdfdict_item:nn #1 #2 %#1 name, #2 value - { - \tl_if_blank:nF {#2} { /#1~#2~ } - } -\cs_generate_variant:Nn \__pdfdict_item:nn {ne} -\cs_set_eq:NN \pdfdict_item:nn \__pdfdict_item:nn -\cs_generate_variant:Nn \pdfdict_item:nn {ne} -\cs_new:Npn \__pdfdict_use:n #1 %#1 dict - { - \prop_map_function:cN { \__pdfdict_name:n { #1 } } \__pdfdict_item:ne - } - -\cs_set_eq:NN \pdfdict_use:n \__pdfdict_use:n -%% File: l3pdfmanagement.dtx - -\msg_new:nnn { pdfmanagement } { unknown-dict } - { The~PDF~management~resource~'#1'~is~unknown. } - -\msg_new:nnn { pdfmanagement } { empty-value } - { The~value~for~#1~is~empty~and~will~be~ignored } - -\msg_new:nnn { pdfmanagement } { no-removal } - { It~is~not~possible~to~remove~values~from~'#1'.} - -\msg_new:nnn { pdfmanagement } { no-show } - { It~is~not~possible~to~show~the~content~of~'#1'.} - -\msg_new:nnn { pdfmanagement } { show-dict } - { - The~PDF~resource~'#1'~ - \tl_if_empty:nTF {#2} - { is~empty \\>~ . } - { contains~the~pairs~(without~outer~braces): #2 . } - } -\msg_new:nnn { pdfmanagement } { dict-already-defined } - { - The~path~'#1'~is~already~defined. - } -\msg_new:nnn { pdfmanagement } { inactive } - { - The~PDF~resources~management~is~not~active\\ - command~'#1'~ignored. - } -\bool_new:N \g__pdfmanagement_active_bool -\prg_new_conditional:Npnn \__pdfmanagement_if_active: { p , T , F , TF } - { - \bool_if:NTF \g__pdfmanagement_active_bool - { \prg_return_true: } - { \prg_return_false: } - } -\prg_set_eq_conditional:NNn - \pdfmanagement_if_active: \__pdfmanagement_if_active: { p , T , F , TF } - -\hook_new:n {pdfmanagement/add} -\cs_new_protected:Npn \pdfmanagement_add:nnn #1 #2 #3 - { - \__pdfmanagement_if_active:TF - { - \pdfdict_if_exist:nTF { g__pdf_Core/#1 } - { - \hook_gput_code:nnn - {pdfmanagement/add} - {pdfmanagement} - { - \__pdfmanagement_handler_gput:nnn { #1 }{ #2 }{ #3 } - } - } - { - \msg_error:nnn{pdfmanagement}{unknown-dict}{#1} - } - } - { - \msg_warning:nnx {pdfmanagement}{inactive} - {\tl_to_str:n {\pdfmanagement_add:nnn}} - } - } - -\cs_generate_variant:Nn \pdfmanagement_add:nnn {nnx,nxx} -\tl_new:N \g__kernel_pdfmanagement_thispage_shipout_code_tl -\tl_new:N \g__kernel_pdfmanagement_lastpage_shipout_code_tl -\tl_new:N \g__kernel_pdfmanagement_end_run_code_tl -\tl_gset:Nn \g__kernel_pdfmanagement_thispage_shipout_code_tl - { - \bool_if:NT \g__pdfmanagement_active_bool - { - \exp_args:NV \__pdf_backend_ThisPage_gpush:n { \g_shipout_readonly_int } - \exp_args:NV \__pdf_backend_PageResources_gpush:n { \g_shipout_readonly_int } - } - } - -\tl_gset:Nn \g__kernel_pdfmanagement_lastpage_shipout_code_tl - { - \bool_if:NT \g__pdfmanagement_active_bool - { - \__pdf_backend_PageResources_obj_gpush: %ExtGState etc - } - } - -\tl_gset:Nn \g__kernel_pdfmanagement_end_run_code_tl - { - \bool_if:NT \g__pdfmanagement_active_bool - { - \__pdfmanagement_Pages_gpush: %pagesattr - \__pdfmanagement_Info_gpush: %pdfinfo - \__pdfmanagement_Catalog_gpush: - } - } - - - -\cs_new_protected:Npn \__pdfmanagement_handler_gput:nnn #1 #2 #3 %#1 dict, #2 name, #3 value - { - \tl_if_empty:nTF { #3 } - { - \msg_none:nnn { pdfmanagement }{ empty-value }{ /#1/#2 } - } - { - \pdfdict_if_exist:nTF { g__pdf_Core/#1 } - { - \cs_if_exist:cTF - { __pdfmanagement_handler/#1/?_gput:nn } %general, name independant handler - { \use:c {__pdfmanagement_handler/#1/?_gput:nn} {#2} {#3} } - { - \cs_if_exist:cTF - { __pdfmanagement_handler/#1/#2_gput:n } - { \use:c {__pdfmanagement_handler/#1/#2_gput:n} {#3} } %special handler - { - \exp_args:Nnx - \prop_gput:cnn - { \__kernel_pdfdict_name:n { g__pdf_Core/#1 } } - { \str_convert_pdfname:n { #2 } } - { #3 } - } - } - } - { - \msg_error:nnn { pdfmanagement } { unknown-dict } { #1 } - } - } - } - -\cs_generate_variant:Nn \__pdfmanagement_handler_gput:nnn {nxx} - -\cs_new_protected:Npn \__pdfmanagement_get:nnN #1 #2 #3 %path,key,macro - { - \exp_args:Nnx - \prop_get:cnN - { \__kernel_pdfdict_name:n { g__pdf_Core/#1 } } - { \str_convert_pdfname:n {#2} } #3 - } - -\cs_new_protected:Npn \__pdfmanagement_handler_gremove:nn #1 #2 %path,key - { - \pdfdict_if_exist:nTF { g__pdf_Core/#1 } - { - \cs_if_exist:cTF - { __pdfmanagement_handler/#1/?_gremove:n } %general, name independant handler - { \use:c {__pdfmanagement_handler/#1/?_gremove:n} {#2} } - { - \cs_if_exist:cTF - { __pdfmanagement_handler/#1/#2_gremove: } - { \use:c {__pdfmanagement_handler/#1/#2_gremove:} } %special handler - { - \exp_args:Nnx - \prop_gremove:cn - { \__kernel_pdfdict_name:n { g__pdf_Core/#1 } } - { \str_convert_pdfname:n {#2} } - } - } - } - { - \msg_error:nnn { pdfmanagement } { unknown-dict } { #1 } - } - } - -\cs_new_protected:Npn \__pdfmanagement_gremove:nn #1 #2 %path,key - { - \pdfdict_if_exist:nTF { g__pdf_Core/#1 } - { - \exp_args:Nnx - \prop_gremove:cn - { \__kernel_pdfdict_name:n { g__pdf_Core/#1 } } - { \str_convert_pdfname:n{#2} } - } - { - \msg_error:nnn { pdfmanagement } { unknown-dict } { #1 } - } - } - -\cs_new_protected:Npn \__pdfmanagement_show:Nn #1#2 - { - \cs_if_exist:cTF - { __pdfmanagement_handler/#2/?_show: } %general, name independant handler - { \use:c {__pdfmanagement_handler/#2/?_show:} } - { - \prop_if_exist:cTF { \__kernel_pdfdict_name:n { g__pdf_Core/#2 } } - { - #1 - { pdfmanagement } { show-dict } - { \tl_to_str:n {#2} } - { - \prop_map_function:cN - {\__kernel_pdfdict_name:n { g__pdf_Core/#2 }} - \msg_show_item:nn - } - { } { } - } - { - #1 { pdfmanagement } { unknown-dict } {#2}{}{}{} - } - } - } - -\cs_new_protected:Npn \__pdfmanagement_show:n #1 %path - { - \prop_show:c { \__kernel_pdfdict_name:n { g__pdf_Core/#1 } } - } -\cs_new_protected:Npn \pdfmanagement_show:n #1 - { - \__pdfmanagement_show:Nn \msg_show:nnxxxx {#1} - } -\cs_new_protected:Npn \pdfmanagement_remove:nn #1 #2 - { - \pdfdict_if_exist:nTF { g__pdf_Core/#1 } - { - \__pdfmanagement_handler_gremove:nn { #1 }{ #2 } - } - { - \msg_error:nnn{pdfmanagement}{unknown-dict}{#1} - } - } -\cs_new_protected:Npn \pdfmanagement_get:nnN #1 #2 #3 - { - \pdfdict_if_exist:nTF { g__pdf_Core/#1 } - { - \__pdfmanagement_get:nnN { #1 }{ #2 } #3 - } - { - \msg_error:nnn{pdfmanagement}{unknown-dict}{#1} - } - } -\pdfdict_new:n { g__pdf_Core/Info} -\cs_new_protected:Npn \__pdfmanagement_Info_gpush: - { - \prop_map_function:cN - { \__kernel_pdfdict_name:n { g__pdf_Core/Info} } - \__pdf_backend_info_gput:nn - \prop_gclear:c { \__kernel_pdfdict_name:n { g__pdf_Core/Info} } - } -\pdfdict_new:n { g__pdf_Core/Pages} -\cs_new_protected:Npn \__pdfmanagement_Pages_gpush: - { - \exp_args:Nx \__pdf_backend_Pages_primitive:n - { - \pdfdict_use:n { g__pdf_Core/Pages} - } - } - -\pdfdict_new:n { g__pdf_Core/Page } -\pdfdict_new:n { g__pdf_Core/ThisPage } - -\cs_new_protected:cpn { __pdfmanagement_handler/Page/?_gput:nn } #1 #2 - { - \__pdf_backend_Page_gput:nn { #1 }{ #2 } - } -\cs_new_protected:cpn { __pdfmanagement_handler/Page/?_gremove:n } #1 - { - \__pdf_backend_Page_gremove:n { #1 } - } - -\cs_new_protected:cpn { __pdfmanagement_handler/ThisPage/?_gput:nn } #1 #2 - { - \prop_gput:cnn { \__kernel_pdfdict_name:n { g__pdf_Core/ThisPage } }{ #1 } { #2 } - \bool_if:NT \g__pdfmanagement_active_bool - { - \__pdf_backend_ThisPage_gput:nn { #1 }{ #2 } - } - } - -\cs_new_protected:cpn { __pdfmanagement_handler/ThisPage/?_gremove:n } #1 - { - \msg_warning:nnn { pdfmanagement } { no-removal }{ThisPage} - } - -\cs_new_protected:cpn { __pdfmanagement_handler/ThisPage/?_show: } - { - \msg_warning:nnn { pdfmanagement } { no-show }{ThisPage} - } - -\clist_const:Nn \c__pdfmanagement_PageResources_clist - { - ExtGState, - ColorSpace, - Pattern, - Shading, - } - -\clist_map_inline:Nn \c__pdfmanagement_PageResources_clist - { - \pdfdict_new:n { g__pdf_Core/Page/Resources/#1} - } -\cs_new_protected:cpn { __pdfmanagement_handler/Page/Resources/ExtGState/?_gput:nn } #1 #2 - { - \__pdf_backend_PageResources_gput:nnn {ExtGState} { #1 }{ #2 } - } - -\cs_new_protected:cpn { __pdfmanagement_handler/Page/Resources/ColorSpace/?_gput:nn } #1 #2 - { - \__pdf_backend_PageResources_gput:nnn {ColorSpace} { #1 }{ #2 } - } - -\cs_new_protected:cpn { __pdfmanagement_handler/Page/Resources/Shading/?_gput:nn } #1 #2 - { - \__pdf_backend_PageResources_gput:nnn {Shading} { #1 }{ #2 } - } - -\cs_new_protected:cpn { __pdfmanagement_handler/Page/Resources/Pattern/?_gput:nn } #1 #2 - { - \__pdf_backend_PageResources_gput:nnn {Pattern} { #1 }{ #2 } - } -\pdfdict_new:n { g__pdf_Core/Catalog} - -\clist_const:Nn \c__pdfmanagement_Catalog_toplevel_clist - { - Collection, - DPartRoot, - Lang, - Legal, - Metadata, - NeedsRendering, - OCProperties/D, - OpenAction, - PageLabels, - PageLayout, - PageMode, - Perms, - PieceInfo, - SpiderInfo, - StructTreeRoot, - Threads, - URI, - Version - } - -\clist_const:Nn \c__pdfmanagement_Catalog_sub_clist - { - AA, - AcroForm, - AcroForm/DR, - AcroForm/DR/Font, - MarkInfo, - ViewerPreferences, - OCProperties - } - -\clist_map_inline:Nn \c__pdfmanagement_Catalog_sub_clist - { - \pdfdict_new:n { g__pdf_Core/Catalog/#1} - } - -\clist_const:Nn \c__pdfmanagement_Catalog_seq_clist - { - AF, - OCProperties/OCGs, - OCProperties/Configs, - OutputIntents, - Requirements, - AcroForm/Fields, - AcroForm/CO - } - -\clist_map_inline:Nn \c__pdfmanagement_Catalog_seq_clist - { - \seq_new:c { g__pdfmanagement_/Catalog/#1_seq } % new name later - \cs_new_protected:cpn { __pdfmanagement_handler/Catalog/#1_gput:n } ##1 - { - \seq_gput_right:cn { g__pdfmanagement_/Catalog/#1_seq } { ##1 } - } - } - -\cs_new_protected:cpn { __pdfmanagement_handler/Catalog/OCProperties/D_gput:n } #1 - { - \seq_gput_left:cn - { g__pdfmanagement_/Catalog/OCProperties/Configs_seq } - { #1 } - } -\cs_new_protected:Npn \__pdfmanagement_Catalog_gpush: - { - \use:c { __pdfmanagement_/Catalog/AA_gpush: } - \use:c { __pdfmanagement_/Catalog/AcroForm_gpush: } - \use:c { __pdfmanagement_/Catalog/AF_gpush: } - \use:c { __pdfmanagement_/Catalog/MarkInfo_gpush: } - \pdfmeta_standard_verify:nT {Catalog_no_OCProperties} - { - \use:c { __pdfmanagement_/Catalog/OCProperties_gpush: } - } - \use:c { __pdfmanagement_/Catalog/OutputIntents_gpush: } - \use:c { __pdfmanagement_/Catalog/Requirements_gpush: } - \use:c { __pdfmanagement_/Catalog/ViewerPreferences_gpush: } - % output the single values: - \prop_map_function:cN - { \__kernel_pdfdict_name:n { g__pdf_Core/Catalog} } - \__pdf_backend_catalog_gput:nn - % output names tree: - \use:c { __pdfmanagement_/Catalog/Names/EmbeddedFiles_gpush: } - } -\cs_new_protected:cpn { __pdfmanagement_/Catalog/AA_gpush: } - { - \prop_if_empty:cF - { \__kernel_pdfdict_name:n { g__pdf_Core/Catalog/AA } } - { - \__pdf_backend_object_new:nn { g__pdfmanagement_/Catalog/AA_obj } { dict } - \__pdf_backend_object_write:nx - { g__pdfmanagement_/Catalog/AA_obj } - { \pdfdict_use:n { g__pdf_Core/Catalog/AA } } - \exp_args:Nnx - \__pdf_backend_catalog_gput:nn - {AA} - { - \__pdf_backend_object_ref:n { g__pdfmanagement_/Catalog/AA_obj } - } - } - } -\cs_new_protected:cpn { __pdfmanagement_/Catalog/AcroForm_gpush: } - { - \seq_if_empty:cF { g__pdfmanagement_/Catalog/AcroForm/Fields_seq } - { - \__pdf_backend_object_new:nn { g__pdfmanagement_/Catalog/AcroForm/Fields_obj } { array } - \__pdf_backend_object_write:nx - { g__pdfmanagement_/Catalog/AcroForm/Fields_obj } - { \seq_use:cn { g__pdfmanagement_/Catalog/AcroForm/Fields_seq } {~} } - \exp_args:Nnnx - \prop_gput:cnn %we have to use \prop here to avoid the handler ... - { \__kernel_pdfdict_name:n { g__pdf_Core/Catalog/AcroForm } } - { Fields } - { \__pdf_backend_object_ref:n { g__pdfmanagement_/Catalog/AcroForm/Fields_obj } } - } - \seq_if_empty:cF { g__pdfmanagement_/Catalog/AcroForm/CO_seq } - { - \__pdf_backend_object_new:nn { g__pdfmanagement_/Catalog/AcroForm/CO_obj } { array } - \exp_args:Nnx - \__pdf_backend_object_write:nn - { g__pdfmanagement_/Catalog/AcroForm/CO_obj } - { \seq_use:cn { g__pdfmanagement_/Catalog/AcroForm/CO_seq } {~} } - \exp_args:Nnnx - \prop_gput:cnn %we have to use \prop here to avoid the handler ... - { \__kernel_pdfdict_name:n { g__pdf_Core/Catalog/AcroForm } } - { CO } - { \__pdf_backend_object_ref:n { g__pdfmanagement_/Catalog/AcroForm/CO_obj } } - } - \prop_if_empty:cF { \__kernel_pdfdict_name:n { g__pdf_Core/Catalog/AcroForm/DR/Font}} - { - \__pdf_backend_object_new:nn { g__pdfmanagement_/Catalog/AcroForm/DR/Font_obj } {dict} - \exp_args:Nnx - \__pdf_backend_object_write:nn - { g__pdfmanagement_/Catalog/AcroForm/DR/Font_obj } - { \pdfdict_use:n { g__pdf_Core/Catalog/AcroForm/DR/Font } } - \exp_args:Nnnx - \prop_gput:cnn %we have to use \prop here to avoid the handler ... - { \__kernel_pdfdict_name:n { g__pdf_Core/Catalog/AcroForm/DR } } - { Font } - { \__pdf_backend_object_ref:n { g__pdfmanagement_/Catalog/AcroForm/DR/Font_obj } } - } - \prop_if_empty:cF { \__kernel_pdfdict_name:n { g__pdf_Core/Catalog/AcroForm/DR}} - { - \__pdf_backend_object_new:nn { g__pdfmanagement_/Catalog/AcroForm/DR_obj } {dict} - \exp_args:Nnx - \__pdf_backend_object_write:nn - { g__pdfmanagement_/Catalog/AcroForm/DR_obj } - { \pdfdict_use:n { g__pdf_Core/Catalog/AcroForm/DR } } - \exp_args:Nnnx - \prop_gput:cnn %we have to use \prop here to avoid the handler ... - { \__kernel_pdfdict_name:n { g__pdf_Core/Catalog/AcroForm } } - { DR } - { \__pdf_backend_object_ref:n { g__pdfmanagement_/Catalog/AcroForm/DR_obj } } - } - \prop_if_empty:cF { \__kernel_pdfdict_name:n { g__pdf_Core/Catalog/AcroForm} } - { - \__pdf_backend_object_new:nn { g__pdfmanagement_/Catalog/AcroForm_obj } {dict} - \exp_args:Nnx - \__pdf_backend_object_write:nn - { g__pdfmanagement_/Catalog/AcroForm_obj } - { \pdfdict_use:n { g__pdf_Core/Catalog/AcroForm } } - \exp_args:Nnnx - \__pdfmanagement_handler_gput:nnn - { Catalog } - { AcroForm } - { \__pdf_backend_object_ref:n { g__pdfmanagement_/Catalog/AcroForm_obj } } - } - } - -\cs_new_protected:cpn { __pdfmanagement_/Catalog/AF_gpush: } - { - \seq_if_empty:cF - { g__pdfmanagement_/Catalog/AF_seq } - { - \__pdf_backend_object_new:nn { g__pdfmanagement_/Catalog/AF_obj } { array } - \exp_args:Nnx - \__pdf_backend_object_write:nn - { g__pdfmanagement_/Catalog/AF_obj } - { \seq_use:cn { g__pdfmanagement_/Catalog/AF_seq } {~} } - \exp_args:Nnx - \__pdf_backend_catalog_gput:nn - {AF} - { - \__pdf_backend_object_ref:n {g__pdfmanagement_/Catalog/AF_obj} - } - } - } -\cs_new_protected:cpn { __pdfmanagement_/Catalog/MarkInfo_gpush: } - { - \prop_if_empty:cF - { \__kernel_pdfdict_name:n { g__pdf_Core/Catalog/MarkInfo } } - { - \__pdf_backend_object_new:nn { g__pdfmanagement_/Catalog/MarkInfo_obj } { dict } - \exp_args:Nnx - \__pdf_backend_object_write:nn - { g__pdfmanagement_/Catalog/MarkInfo_obj } - { \pdfdict_use:n { g__pdf_Core/Catalog/MarkInfo } } - \exp_args:Nnx - \__pdf_backend_catalog_gput:nn - {MarkInfo} - { - \__pdf_backend_object_ref:n {g__pdfmanagement_/Catalog/MarkInfo_obj} - } - } - } -\cs_new_protected:cpn { __pdfmanagement_/Catalog/OCProperties_gpush: } - { - \int_compare:nNnT - { - ( \seq_count:c { g__pdfmanagement_/Catalog/OCProperties/OCGs_seq } )* - ( \seq_count:c { g__pdfmanagement_/Catalog/OCProperties/Configs_seq } ) - } - > - { 0 } - { - \__pdf_backend_object_new:nn { g__pdfmanagement_/Catalog/OCProperties_obj } { dict } - \seq_gpop_left:cN { g__pdfmanagement_/Catalog/OCProperties/Configs_seq} \l_tmpa_tl - \exp_args:Nnx - \__pdf_backend_object_write:nn {g__pdfmanagement_/Catalog/OCProperties_obj} - { - /OCGs~[ \seq_use:cn { g__pdfmanagement_/Catalog/OCProperties/OCGs_seq } {~} ] - /D~\l_tmpa_tl~ - \seq_if_empty:cF { g__pdfmanagement_/Catalog/OCProperties/Configs_seq } - { - /Configs~ - [ \seq_use:cn { g__pdfmanagement_/Catalog/OCProperties/Configs_seq} {~} ] - } - } - \exp_args:Nnx - \__pdf_backend_catalog_gput:nn - { OCProperties } - { \__pdf_backend_object_ref:n {g__pdfmanagement_/Catalog/OCProperties_obj} } - } - } -\cs_new_protected:cpn { __pdfmanagement_/Catalog/OutputIntents_gpush: } - { - \seq_if_empty:cF - { g__pdfmanagement_/Catalog/OutputIntents_seq } - { - \__pdf_backend_object_new:nn { g__pdfmanagement_/Catalog/OutputIntents_obj } { array } - \exp_args:Nnx - \__pdf_backend_object_write:nn - { g__pdfmanagement_/Catalog/OutputIntents_obj } - { \seq_use:cn { g__pdfmanagement_/Catalog/OutputIntents_seq } {~} } - \exp_args:Nnx - \__pdf_backend_catalog_gput:nn - {OutputIntents} - { - \__pdf_backend_object_ref:n {g__pdfmanagement_/Catalog/OutputIntents_obj} - } - } - } -\cs_new_protected:cpn { __pdfmanagement_/Catalog/Requirements_gpush: } - { - \seq_if_empty:cF - { g__pdfmanagement_/Catalog/Requirements_seq } - { - \__pdf_backend_object_new:nn { g__pdfmanagement_/Catalog/Requirements_obj } { array } - \exp_args:Nnx - \__pdf_backend_object_write:nn - { g__pdfmanagement_/Catalog/Requirements_obj } - { \seq_use:cn { g__pdfmanagement_/Catalog/Requirements_seq } {~} } - \exp_args:Nnx - \__pdf_backend_catalog_gput:nn - {Requirements} - { - \__pdf_backend_object_ref:n { g__pdfmanagement_/Catalog/Requirements_obj } - } - } - } -\cs_new_protected:cpn { __pdfmanagement_/Catalog/ViewerPreferences_gpush: } - { - \prop_if_empty:cF - { \__kernel_pdfdict_name:n { g__pdf_Core/Catalog/ViewerPreferences } } - { - \__pdf_backend_object_new:nn { g__pdfmanagement_/Catalog/ViewerPreferences_obj } { dict } - \exp_args:Nnx - \__pdf_backend_object_write:nn - { g__pdfmanagement_/Catalog/ViewerPreferences_obj } - { \pdfdict_use:n { g__pdf_Core/Catalog/ViewerPreferences } } - \exp_args:Nnx - \__pdf_backend_catalog_gput:nn - {ViewerPreferences} - { - \__pdf_backend_object_ref:n {g__pdfmanagement_/Catalog/ViewerPreferences_obj} - } - } - } -\pdfdict_new:n { g__pdf_Core/Catalog/Names } - -\cs_new_protected:cpn { __pdfmanagement_handler/Catalog/Names/EmbeddedFiles_gput:n } #1 - { - \__pdf_backend_NamesEmbeddedFiles_add:n { #1 } - } -\cs_new_protected:cpn { __pdfmanagement_/Catalog/Names/EmbeddedFiles_gpush: } - { - \seq_if_empty:NF \g__pdf_backend_EmbeddedFiles_seq - { - \exp_args:Nx \__pdf_backend_NamesEmbeddedFiles_gpush:n - { - \seq_use:Nn \g__pdf_backend_EmbeddedFiles_seq {~} - } - } - } -\cs_new_protected:cpn {__pdfmanagement_handler/Catalog/?_show:} - { - \iow_term:x - { - \iow_newline: - The~Catalog~contains~in~the~top~level~the~single~value~entries - \prop_map_function:cN - {\__kernel_pdfdict_name:n { g__pdf_Core/Catalog }} - \msg_show_item:nn - } - \clist_map_inline:Nn \c__pdfmanagement_Catalog_seq_clist - { - \seq_if_empty:cF { g__pdfmanagement_/Catalog/##1_seq } - { - \iow_term:x - { - The~'##1'~array~contains~the~entries - \seq_map_function:cN { g__pdfmanagement_/Catalog/##1_seq } \msg_show_item:n - } - } - } - \clist_map_inline:Nn \c__pdfmanagement_Catalog_sub_clist - { - \prop_if_empty:cF { \__kernel_pdfdict_name:n { g__pdf_Core/Catalog/##1 } } - { - \iow_term:x - { - The~Catalog~subdirectory~'##1'~contains~the~single~value~entries - \prop_map_function:cN - {\__kernel_pdfdict_name:n { g__pdf_Core/Catalog/##1 }} - \msg_show_item:nn - } - } - } - \tl_show:x {\tl_to_str:n{\pdfmanagement_show:n{Catalog}}} - } -\pdfdict_new:n { g__pdf_Core/Xform/Resources/Properties} -%% File: ltdocinit.dtx -\msg_new:nnn { document } { setup-after-documentclass } - { - \token_to_str:N \DeclareDocumentMetadata \c_space_tl - should~be~used~only~before~\token_to_str:N\documentclass - } -\NewDocumentCommand\DeclareDocumentMetadata { m } - { - \cs_if_eq:NNTF \documentclass \@twoclasseserror - { \msg_error:nn { document }{ setup-after-documentclass } } - { - \keys_set_groups:nnn { document / metadata} {init}{ #1 } - %should be loaded after the backend is set, and only if not in the kernel - \cs_if_free:NTF \pdf_uncompress: - {\RequirePackage{l3pdf}}{\RequirePackage{expl3}} - \ExplSyntaxOn\makeatletter - \file_input:n {l3backend-testphase-\c_sys_backend_str.def} - \ExplSyntaxOff\makeatother - \bool_gset_true:N \g__pdfmanagement_active_bool - \keys_set_filter:nnn { document / metadata } { init } { lang=en-US, #1 } - \bool_if:NT \g__pdfmanagement_active_bool - { - \PassOptionsToPackage{customdriver=hgeneric-testphase}{hyperref} - } - \hook_use_once:n {pdfmanagement/add} - \RenewDocumentCommand\DeclareDocumentMetadata { m } - { - \keys_set_filter:nnn { document / metadata } { init } { ##1 } - \bool_if:NTF \g__pdfmanagement_active_bool - { - \str_remove_all:cn {opt@hyperref.sty}{customdriver=hgeneric-testphase} - \PassOptionsToPackage{customdriver=hgeneric-testphase}{hyperref} - } - { - \str_remove_all:cn {opt@hyperref.sty}{customdriver=hgeneric-testphase} - } - } - \RequirePackage{pdfmanagement-firstaid} - } - } -\prop_new:N \g__pdfmanagement_documentproperties_prop % -\NewDocumentCommand\AddToDocumentProperties{O{\@currname}mm} - { - \exp_args:NNx - \prop_gput:Nnn \g__pdfmanagement_documentproperties_prop - { - \tl_if_blank:eTF {#1}{top-level/}{#1/} #2 - } - { #3} - } -\NewExpandableDocumentCommand\GetDocumentProperties{m} - { - \prop_item:Nn \g__pdfmanagement_documentproperties_prop {#1} - } -\msg_new:nnn { pdfmanagement } { show-properties } - { - The~following~document~properties~have~been~stored: - #1 - } -\NewDocumentCommand\ShowDocumentProperties {} - { - \msg_show:nnx {pdfmanagement}{show-properties} - { - \prop_map_function:NN \g__pdfmanagement_documentproperties_prop \msg_show_item:nn - } - } -\clist_new:N \g__pdfmanagement_firstaidoff_clist -\keys_define:nn { document / metadata } - { - backend .code:n = - { - \PassOptionsToPackage { driver=#1 } {expl3} - \AddToDocumentProperties[document]{backend}{#1} - }, - backend .groups:n = { init } , - } - -\keys_define:nn { document / metadata } - { - ,pdfversion .code:n = - { - \pdf_version_gset:n { #1 } - \AddToDocumentProperties[document]{pdfversion}{#1} - } - ,uncompress .code:n = - { - \pdf_uncompress: - } - ,uncompress .value_forbidden:n = true - ,lang .code:n = - { - \pdfmanagement_add:nnn {Catalog} {Lang}{(#1)} - \AddToDocumentProperties[document]{lang}{#1} - } - %,xmpmeta .bool_gset:N = \g_pdfmeta_xmp_bool %see pdfmeta unused and undefined for now! - % this uses internal command from pdfmeta, it should probably move there ... - ,pdfstandard .code:n = - { - \exp_args:Nnx - \keys_set:nn {document / metadata} {_pdfstandard=\str_uppercase:n{#1}} - } - ,_pdfstandard .choices:nn = - {A-1B,A-2B,A-3B} - { - \prop_if_exist:cT { g__pdfmeta_standard_pdf/#1_prop } - { - \prop_gset_eq:Nc \g__pdfmeta_standard_prop { g__pdfmeta_standard_pdf/#1 _prop } - } - \AddToDocumentProperties [document]{pdfstandard}{#1} - } - ,_pdfstandard / unknown .code:n = - { - \msg_warning:nnn{pdf}{unknown-standard}{#1} - } - ,pdfmanagement .bool_gset:N = \g__pdfmanagement_active_bool - ,pdfmanagement .initial:n = {true} - ,firstaidoff .clist_gset:N = \g__pdfmanagement_firstaidoff_clist - } -%% File: l3pdfannot.dtx -\RequirePackage{l3bitset} -\bitset_new:Nn \l_pdfannot_F_bitset - { - Invisible = 1, - Hidden = 2, - Print = 3, - NoZoom = 4, - NoRotate = 5, - NoView = 6, - ReadOnly = 7, - Locked = 8, - ToggleNoView = 9, - LockedContents = 10 - } -\bool_new:N \g__pdfannot_use_lastlink_bool - -\cs_new_protected:Npn \pdfannot_box:nnnn #1 #2 #3 #4 - { - \__pdf_backend_annotation:nnnn {#1}{#2}{#3}{#4} - \bool_gset_false:N\g__pdfannot_use_lastlink_bool - } - -\cs_new:Npn \pdfannot_box_ref_last: - { - \__pdf_backend_annotation_last: - } - -\cs_new_protected:Npn \pdfannot_box:nnnnn #1 #2 #3 #4 #5 - { - \exp_args:Nx - \__pdf_backend_annotation:nnnn {#2}{#3}{#4} - { - \pdfdict_if_exist:nT { l__pdfannot/#1 } - { - \pdfdict_use:n { l__pdfannot/#1} - } - #5 - } - \bool_gset_false:N\g__pdfannot_use_lastlink_bool - } - \pdfdict_new:n { l__pdfannot/widget } - \pdfdict_put:nnn { l__pdfannot/widget }{ Subtype }{ /Widget } -\seq_const_from_clist:Nn \c_pdfannot_link_types_seq { URI , GoToR , Launch , GoTo, Named } -\seq_map_inline:Nn \c_pdfannot_link_types_seq - { - \pdfdict_new:n { l__pdfannot/link/#1 } - \hook_new_pair:nn - {pdfannot/link/#1/before} - {pdfannot/link/#1/after} - \hook_new_pair:nn - {pdfannot/link/#1/begin} - {pdfannot/link/#1/end} - } -\cs_new_protected:Nn \pdfannot_link:nnn %#1 type (URI, GoTo etc), - %#2 action spec, #3 link text - { - \hook_use:n { pdfannot/link/#1/before} - \mode_leave_vertical: - \exp_args:Nxx %xetex needs expansion - \__pdf_backend_link_begin_user:nnw - { - \pdfdict_if_exist:nT { l__pdfannot/link/#1 } - { - \pdfdict_use:n { l__pdfannot/link/#1} - } - } - { - /Subtype/Link - #2 %exp_not? - } - \bool_gset_true:N \g__pdfannot_use_lastlink_bool - \hook_use:n { pdfannot/link/#1/begin} - #3 - \hook_use:n { pdfannot/link/#1/end} - \__pdf_backend_link_end: - \bool_gset_true:N \g__pdfannot_use_lastlink_bool - \hook_use:n { pdfannot/link/#1/after} - } -\cs_generate_variant:Nn \pdfannot_link:nnn {nxn} -\cs_new_protected:Npn \pdfannot_link_begin:nnw #1 #2 %#1 type, #2 action spec - { - \hook_use:n { pdfannot/link/#1/before} - \mode_leave_vertical: - \exp_args:Nxx %xetex needs expansion - \__pdf_backend_link_begin_user:nnw - { - \pdfdict_if_exist:nT { l__pdfannot/link/#1 } - { - \pdfdict_use:n { l__pdfannot/link/#1} - } - } - { #2 } - \bool_gset_true:N \g__pdfannot_use_lastlink_bool - \hook_use:n { pdfannot/link/#1/begin} - } - -\cs_new_protected:Nn \pdfannot_link_end:n %#1 type, e.g. url - { - \hook_use:n { pdfannot/link/#1/end} - \__pdf_backend_link_end: - \bool_gset_true:N \g__pdfannot_use_lastlink_bool - \hook_use:n { pdfannot/link/#1/after} - } -\cs_generate_variant:Nn \pdfannot_link_begin:nnw {nxw} -\cs_new_protected:Npn \pdfannot_link_goto_begin:nw #1 %#1 destination - { - \hook_use:n { pdfannot/link/GoTo/before} - \mode_leave_vertical: - \exp_args:Nxx %xetex needs expansion - \__pdf_backend_link_begin_goto:nnw - { - \pdfdict_use:n { l__pdfannot/link/GoTo} - } - { #1 } - \bool_gset_true:N \g__pdfannot_use_lastlink_bool - \hook_use:n { pdfannot/link/GoTo/begin} - } - -\cs_new_protected:Nn \pdfannot_link_goto_end: - { - \hook_use:n { pdfannot/link/GoTo/end} - \__pdf_backend_link_end: - \bool_gset_true:N \g__pdfannot_use_lastlink_bool - \hook_use:n { pdfannot/link/GoTo/after} - } -\cs_new:Nn \pdfannot_link_ref_last: { \__pdf_backend_link_last: } -\cs_new:Npn \pdfannot_ref_last: - { - \bool_if:NTF \g__pdfannot_use_lastlink_bool - { - \__pdf_backend_link_last: - } - { - \__pdf_backend_annotation_last: - } - } -\cs_new_protected:Npn \pdfannot_link_margin:n #1 - { - \__pdf_backend_link_margin:n { #1 } - } -\cs_new_protected:Npn \pdfannot_dict_put:nnn #1 #2 #3 - { - \pdfdict_put:nnn { l__pdfannot/#1 } { #2 }{ #3 } - } -\cs_generate_variant:Nn \pdfannot_dict_put:nnn {nnx} -\cs_new_protected:Npn \pdfannot_dict_remove:nn #1 #2 - { - \pdfdict_remove:nn { l__pdfannot/#1 } { #2 } - } -\cs_new_protected:Npn \pdfannot_dict_show:n #1 - { - \pdfdict_show:n { l__pdfannot/#1 } - } -%% File: l3pdfxform.dtx -\cs_new_protected:Npn \pdfxform_new:nnn #1 #2 #3 - { - \__pdf_backend_xform_new:nnnn { #1 } { #2 } { } { #3 } - } -\cs_new_protected:Npn \pdfxform_use:n #1 - { - \__pdf_backend_xform_use:n { #1 } - } -\cs_new:Npn \pdfxform_ref:n #1 - { - \__pdf_backend_xform_ref:n { #1 } - } - -\cs_generate_variant:Nn \pdfxform_ref:n {o} -\cs_new:Npn \pdfxform_wd:n #1 - { - \tl_use:c { c__pdf_backend_xform_wd_ \tl_to_str:n { #1 } _tl } - } - -\cs_new:Npn \pdfxform_ht:n #1 - { - \tl_use:c { c__pdf_backend_xform_ht_ \tl_to_str:n { #1 } _tl } - } - -\cs_new:Npn \pdfxform_dp:n #1 - { - \tl_use:c { c__pdf_backend_xform_dp_ \tl_to_str:n { #1 } _tl } - } -%% File: l3pdfmeta.dtx -\msg_new:nnn {pdf }{unknown-standard}{The~standard~'#1'~is~unknown~and~has~been~ignored} -\tl_new:N\l__pdfmeta_tmpa_tl -\tl_new:N\l__pdfmeta_tmpb_tl -\str_new:N \l__pdfmeta_tmpa_str -\prop_new:N \g__pdfmeta_standard_prop -\cs_new:Npn \pdfmeta_standard_item:n #1 - { - \prop_item:Nn \g__pdfmeta_standard_prop {#1} - } -\cs_new_protected:Npn \pdfmeta_standard_get:nN #1 #2 - { - \prop_get:NnN \g__pdfmeta_standard_prop {#1} #2 - } -\prg_new_conditional:Npnn \pdfmeta_standard_verify:n #1 {T,F,TF} - { - \prop_if_in:NnTF \g__pdfmeta_standard_prop {#1} - { - \prg_return_false: - } - { - \prg_return_true: - } - } -\prg_new_protected_conditional:Npnn \pdfmeta_standard_verify:nn #1 #2 {T,F,TF} - { - \prop_if_in:NnTF \g__pdfmeta_standard_prop {#1} - { - \cs_if_exist:cTF {__pdfmeta_standard_verify_handler_#1:nn} - { - \exp_args:Nnnx - \use:c - {__pdfmeta_standard_verify_handler_#1:nn} - { #2 } - { \prop_item:Nn \g__pdfmeta_standard_prop {#1} } - } - { - \prg_return_false: - } - } - { - \prg_return_true: - } - } -\cs_new_protected:Npn \__pdfmeta_standard_verify_handler_min_pdf_version:nn #1 #2 - { - \pdf_version_compare:NnTF < - { #2 } - {\prg_return_false:} - {\prg_return_true:} - } - -\cs_new_protected:Npn \__pdfmeta_standard_verify_handler_named_actions:nn #1 #2 - { - \tl_if_in:nnTF { #2 }{ #1 } - {\prg_return_true:} - {\prg_return_false:} - } -\cs_new_protected:Npn \__pdfmeta_standard_verify_handler_annot_action_A:nn #1 #2 - { - \tl_if_in:nnTF { #2 }{ #1 } - {\prg_return_true:} - {\prg_return_false:} - } -\cs_new_protected:Npn \__pdfmeta_standard_verify_handler_outputintent_subtype:nn #1 #2 - { - \tl_if_eq:nnTF { #2 }{ #1 } - {\prg_return_true:} - {\prg_return_false:} - } -\cs_new_protected:Npn \__pdfmeta_verify_pdfa_annot_flags: - { - \bitset_set_true:Nn \l_pdfannot_F_bitset {Print} - \bitset_set_false:Nn \l_pdfannot_F_bitset {Hidden} - \bitset_set_false:Nn \l_pdfannot_F_bitset {Invisible} - \bitset_set_false:Nn \l_pdfannot_F_bitset {NoView} - \pdfannot_dict_put:nnn {link/URI}{F}{ \bitset_to_arabic:N \l_pdfannot_F_bitset } - \pdfannot_dict_put:nnn {link/GoTo}{F}{ \bitset_to_arabic:N \l_pdfannot_F_bitset } - \pdfannot_dict_put:nnn {link/GoToR}{F}{ \bitset_to_arabic:N \l_pdfannot_F_bitset } - \pdfannot_dict_put:nnn {link/Launch}{F}{ \bitset_to_arabic:N \l_pdfannot_F_bitset } - \pdfannot_dict_put:nnn {link/Named}{F}{ \bitset_to_arabic:N \l_pdfannot_F_bitset } - } -\hook_gput_code:nnn {begindocument} {pdf} - { - \pdfmeta_standard_verify:nF { annot_flags } - { \__pdfmeta_verify_pdfa_annot_flags: } - } -\prop_new:c { g__pdfmeta_standard_pdf/A-1B_prop } -\prop_set_from_keyval:cn { g__pdfmeta_standard_pdf/A-1B_prop } - { - ,name = pdf/A-1B - ,type = A - ,year = 2005 - ,min_pdf_version = 1.4 %minimum - ,no_encryption = - ,no_external_content = % no F, FFilter, or FDecodeParms in stream dicts - ,no_embed_content = % no EF key in filespec, no /Type/EmbeddedFiles - ,max_string_size = 65535 - ,max_array_size = 8191 - ,max_dict_size = 4095 - ,max_obj_num = 8388607 - ,max_nest_qQ = 28 - ,named_actions = {NextPage, PrevPage, FirstPage, LastPage} - ,annot_flags = - %booleans. Only the existence of the key matter. - %If the entry is added it means a requirements is there - %(in most cases "don't use ...") - % - %=============== - % Rule 6.1.13-1 CosDocument, isOptionalContentPresent == false - ,Catalog_no_OCProperties = - %=============== - % Rule 6.6.1-1: PDAction, S == "GoTo" || S == "GoToR" || S == "Thread" - % || S == "URI" || S == "Named" || S == "SubmitForm" - % means: no /S/Launch, /S/Sound, /S/Movie, /S/ResetForm, /S/ImportData, - % /S/JavaScript, /S/Hide - ,annot_action_A = {GoTo,GoToR,Thread,URI,Named,SubmitForm} - %=============== - % Rule 6.6.2-1: PDAnnot, Subtype != "Widget" || AA_size == 0 - % means: no AA dictionary - ,annot_widget_no_AA = - %=============== - % Rule 6.9-2: PDAnnot, Subtype != "Widget" || (A_size == 0 && AA_size == 0) - % (looks like a tightening of the previous rule) - ,annot_widget_no_A_AA = - %=============== - % Rule 6.9-1 PDAcroForm, NeedAppearances == null || NeedAppearances == false - ,form_no_NeedAppearances = - %=============== - %Rule 6.9-3 PDFormField, AA_size == 0 - ,form_no_AA = - %=============== - % to be continued https://docs.verapdf.org/validation/pdfa-part1/ - % - Outputintent/colorprofiles requirements - % an outputintent should be loaded and is unique. - ,outputintent_A = {GTS_PDFA1} - % - no Alternates key in image dictionaries - % - no OPI, Ref, Subtype2 with PS key in xobjects - % - Interpolate = false in images - % - no TR, TR2 in ExtGstate - } - -\prop_new:c { g__pdfmeta_standard_pdf/A-2B_prop } -\prop_gset_eq:cc - { g__pdfmeta_standard_pdf/A-2B_prop } - { g__pdfmeta_standard_pdf/A-1B_prop } -\prop_gput:cnn - { g__pdfmeta_standard_pdf/A-2B_prop }{name}{pdf/A-2B} -\prop_gput:cnn - { g__pdfmeta_standard_pdf/A-2B_prop }{year}{2011} -\prop_gremove:cn - { g__pdfmeta_standard_pdf/A-2B_prop } - { embed_content} - -\prop_new:c { g__pdfmeta_standard_pdf/A-3B_prop } -\prop_gset_eq:cc - { g__pdfmeta_standard_pdf/A-3B_prop } - { g__pdfmeta_standard_pdf/A-2B_prop } -\prop_gput:cnn - { g__pdfmeta_standard_pdf/A-3B_prop }{name}{pdf/A-3B} -\prop_gput:cnn - { g__pdfmeta_standard_pdf/A-2B_prop }{year}{2012} -\prop_gremove:cn - { g__pdfmeta_standard_pdf/A-3B_prop } - { embed_content} -\prop_new:N \g__pdfmeta_outputintents_prop -\keys_define:nn { document / metadata } - { - colorprofiles .code:n = - { - \keys_set:nn { document / metadata / colorprofiles }{#1} - } - } -\keys_define:nn { document / metadata / colorprofiles } - { - ,A .code:n = - { - \tl_if_blank:nF {#1} - { - \prop_gput:Nnn \g__pdfmeta_outputintents_prop - { GTS_PDFA1 } {#1} - } - } - ,a .code:n = - { - \tl_if_blank:nF {#1} - { - \prop_gput:Nnn \g__pdfmeta_outputintents_prop - { GTS_PDFA1 } {#1} - } - } - ,X .code:n = - { - \tl_if_blank:nF {#1} - { - \prop_gput:Nnn \g__pdfmeta_outputintents_prop - { GTS_PDFX } {#1} - } - } - ,x .code:n = - { - \tl_if_blank:nF {#1} - { - \prop_gput:Nnn \g__pdfmeta_outputintents_prop - { GTS_PDFX } {#1} - } - } - ,unknown .code:n = - { - \tl_if_blank:nF {#1} - { - \exp_args:NNo - \prop_gput:Nnn \g__pdfmeta_outputintents_prop - { \l_keys_key_str } {#1} - } - } - } -\pdfdict_new:n {l_pdfmeta/outputintent} -\pdfdict_put:nnn {l_pdfmeta/outputintent} - {Type}{/OutputIntent} -\prop_const_from_keyval:cn { c__pdfmeta_colorprofile_sRGB.icc} - { - ,OutputConditionIdentifier=IEC~sRGB - ,Info=IEC~61966-2.1~Default~RGB~colour~space~-~sRGB - ,RegistryName=http://www.iec.ch - ,N = 3 - } -\prop_const_from_keyval:cn { c__pdfmeta_colorprofile_FOGRA39L_coated.icc} - { - ,OutputConditionIdentifier=FOGRA39L~Coated - ,Info={Offset~printing,~according~to~ISO~12647-2:2004/Amd~1,~OFCOM,~ % - paper~type~1~or~2~=~coated~art,~115~g/m2,~tone~value~increase~ - curves~A~(CMY)~and~B~(K)} - ,RegistryName=http://www.fogra.org - ,N = 4 - } -\cs_new_protected:Npn \__pdfmeta_embed_colorprofile:n #1%#1 file name - { - \pdf_object_if_exist:nF { __color_icc_ #1 } - { - \pdf_object_new:nn { __color_icc_ #1 }{fstream} - \pdf_object_write:nx { __color_icc_ #1 } - { - {/N\c_space_tl - \prop_item:cn{c__pdfmeta_colorprofile_#1}{N} - } - {#1} - } - } - } - -\cs_new_protected:Npn \__pdfmeta_write_outputintent:nn #1 #2 %#1 file name, #2 subtype - { - \group_begin: - \pdfdict_put:nnx {l_pdfmeta/outputintent}{S}{/\str_convert_pdfname:n{#2}} - \pdfdict_put:nnx {l_pdfmeta/outputintent} - {DestOutputProfile} - {\pdf_object_ref:n{ __color_icc_ #1 }} - \clist_map_inline:nn { OutputConditionIdentifier, Info, RegistryName } - { - \prop_get:cnNT - { c__pdfmeta_colorprofile_#1} - { ##1 } - \l__pdfmeta_tmpa_tl - { - \pdf_string_from_unicode:nVN {utf8/string}\l__pdfmeta_tmpa_tl\l__pdfmeta_tmpa_str - \pdfdict_put:nnx - {l_pdfmeta/outputintent}{##1}{\l__pdfmeta_tmpa_str} - } - } - \pdf_object_unnamed_write:nx {dict}{\pdfdict_use:n {l_pdfmeta/outputintent} } - \pdfmanagement_add:nnx {Catalog}{OutputIntents}{\pdf_object_ref_last:} - \group_end: - } - -\AddToHook{begindocument/end} - { - \pdfmeta_standard_verify:nTF {outputintent_A} - { - \prop_map_inline:Nn \g__pdfmeta_outputintents_prop - { - \__pdfmeta_embed_colorprofile:n - {#2} - \__pdfmeta_write_outputintent:nn - {#2} - {#1} - } - } - { - \exp_args:NNx - \prop_if_in:NnF - \g__pdfmeta_outputintents_prop - { \pdfmeta_standard_item:n { outputintent_A } } - { - \exp_args:NNx - \prop_gput:Nnn - \g__pdfmeta_outputintents_prop - { \pdfmeta_standard_item:n { outputintent_A } } - { sRGB.icc } - } - \exp_args:NNx - \prop_get:NnN - \g__pdfmeta_outputintents_prop - { \pdfmeta_standard_item:n { outputintent_A } } - \l__pdfmeta_tmpb_tl - \exp_args:NV \__pdfmeta_embed_colorprofile:n \l__pdfmeta_tmpb_tl - \prop_map_inline:Nn \g__pdfmeta_outputintents_prop - { - \exp_args:NV - \__pdfmeta_write_outputintent:nn - \l__pdfmeta_tmpb_tl - { #1 } - } - } - } -%% File: l3pdftools.dtx -\cs_generate_variant:Nn \str_convert_pdfname:n { e } - -\cs_new:Npn \pdf_name_from_unicode_e:n #1 - { - / \str_convert_pdfname:e { \text_expand:n { #1 } } - } - -\cs_generate_variant:Nn \pdf_name_from_unicode_e:n {V} -\bool_lazy_any:nTF - { - \sys_if_engine_luatex_p: - \sys_if_engine_xetex_p: - } - { - \prop_gput:Nnn \g__str_alias_prop { default } { } - } - { - \prop_gput:Nnn \g__str_alias_prop { default } { utf8 } - } -\cs_new:Npn \pdf_string_from_unicode:nnN #1 #2 #3 - { - \cs_if_exist_use:cF { __pdf_string_from_unicode_#1:nN } - { - \__kernel_msg_error:nnn { pdf } { unknown-convert } {#1} - \use_none:nn - } - { #2 } #3 - } - -\cs_generate_variant:Nn \pdf_string_from_unicode:nnN {nVN} -%% TODO Names need a review when it is clear which converters -%% are actually needed -%% string conversions and printing -%% we assume here that the text purify step has been done. The input is -%% a list of (utf8) chars. -%% str convert, not expandable. - - -\cs_new_protected:cpn { __pdf_string_from_unicode_utf8/string-raw:nN } #1 #2 - { - \str_set_convert:Nnnn #2 - { #1 } - { default } - {utf8/string} - } - -\cs_new_protected:cpn { __pdf_string_from_unicode_utf8/string:nN } #1 #2 - { - \use:c { __pdf_string_from_unicode_utf8/string-raw:nN } { #1 } #2 - \str_put_left:Nn #2 {(} - \str_put_right:Nn #2 {)} - } -\cs_new_protected:cpx { __pdf_string_from_unicode_utf8/URI-raw:nN } #1 #2 - { - \exp_not:N \str_set_convert:Nnnn #2 - { #1 } - { default } - {utf8/url} - \exp_not:N \str_replace_all:Nnn #2 {\c_percent_str 3A} {:} - \exp_not:N \str_replace_all:Nnn #2 {\c_percent_str 2F} {/} - \exp_not:N \str_replace_all:Nnn #2 {\c_percent_str 23} {\c_hash_str} - \exp_not:N \str_replace_all:Nnn #2 {\c_percent_str 5B} {[} - \exp_not:N \str_replace_all:Nnn #2 {\c_percent_str 5D} {]} - \exp_not:N \str_replace_all:Nnn #2 {\c_percent_str 40} {\c_atsign_str} - \exp_not:N \str_replace_all:Nnn #2 {\c_percent_str 21} {!} - \exp_not:N \str_replace_all:Nnn #2 {\c_percent_str 24} {\c_dollar_str} - \exp_not:N \str_replace_all:Nnn #2 {\c_percent_str 26} {\c_ampersand_str} - \exp_not:N \str_replace_all:Nnn #2 {\c_percent_str 27} {'} - \exp_not:N \str_replace_all:Nnn #2 {\c_percent_str 2A} {*} - \exp_not:N \str_replace_all:Nnn #2 {\c_percent_str 2B} {+} - \exp_not:N \str_replace_all:Nnn #2 {\c_percent_str 2C} {,} - \exp_not:N \str_replace_all:Nnn #2 {\c_percent_str 3B} {;} - \exp_not:N \str_replace_all:Nnn #2 {\c_percent_str 3D} {=} - \exp_not:N \str_replace_all:Nnn #2 {\c_percent_str 30} {0} - \exp_not:N \str_replace_all:Nnn #2 {\c_percent_str 31} {1} - \exp_not:N \str_replace_all:Nnn #2 {\c_percent_str 32} {2} - \exp_not:N \str_replace_all:Nnn #2 {\c_percent_str 33} {3} - \exp_not:N \str_replace_all:Nnn #2 {\c_percent_str 34} {4} - \exp_not:N \str_replace_all:Nnn #2 {\c_percent_str 35} {5} - \exp_not:N \str_replace_all:Nnn #2 {\c_percent_str 36} {6} - \exp_not:N \str_replace_all:Nnn #2 {\c_percent_str 37} {7} - \exp_not:N \str_replace_all:Nnn #2 {\c_percent_str 38} {8} - \exp_not:N \str_replace_all:Nnn #2 {\c_percent_str 39} {9} - \exp_not:N \str_replace_all:Nnn #2 {\c_percent_str 28} {\c_backslash_str(} - \exp_not:N \str_replace_all:Nnn #2 {\c_percent_str 29} {\c_backslash_str)} - } - -\cs_new_protected:cpn { __pdf_string_from_unicode_utf8/URI:nN } #1 #2 - { - \use:c { __pdf_string_from_unicode_utf8/URI-raw:nN } {#1} #2 - \str_put_left:Nn #2 {(} - \str_put_right:Nn #2 {)} - } -\cs_new_protected:cpn { __pdf_string_from_unicode_utf16/string-raw:nN } #1 #2 - { - \str_set_convert:Nnnn #2 - { #1 } - { default } - {utf16/string} - } - -\cs_new_protected:cpn { __pdf_string_from_unicode_utf16/string:nN } #1 #2 - { - \use:c { __pdf_string_from_unicode_utf16/string-raw:nN } {#1} #2 - \str_put_left:Nn #2 {(} - \str_put_right:Nn #2 {)} - } - -\cs_new_protected:cpn { __pdf_string_from_unicode_utf16/hex-raw:nN } #1 #2 - { - \str_set_convert:Nnnn #2 - { #1 } - { default } - {utf16/hex} - } - -\cs_new_protected:cpn { __pdf_string_from_unicode_utf16/hex:nN } #1 #2 - { - \use:c { __pdf_string_from_unicode_utf16/hex-raw:nN } {#1} #2 - \str_put_left:Nn #2 {<} - \str_put_right:Nn #2 {>} - } - -\cs_new_protected:Npn \pdf_bdc:nn #1 #2 { \__pdf_backend_bdc:nn { #1 }{ #2 } } -\cs_new_protected:Npn \pdf_bdcobject:nn #1 #2 { \__pdf_backend_bdcobject:nn { #1 }{ #2 } } -\cs_new_protected:Npn \pdf_bdcobject:n #1 { \__pdf_backend_bdcobject:n { #1 } } -\cs_new_protected:Npn \pdf_bmc:n #1 { \__pdf_backend_bmc:n { #1 } } -\cs_new_protected:Npn \pdf_emc: { \__pdf_backend_emc: } -%% File: l3pdffile.dtx - -\cs_new_protected:Npn \__pdffile_filename_convert_to_print:nN #1 #2 - {\pdf_string_from_unicode:nnN {utf16/hex}{#1}{#2}} -\msg_new:nnn { pdffile } { file-not-found } - { - File~'\tl_to_str:n{#1}'~not~found - } - -\msg_new:nnn { pdffile } { mimetype-missing } - { - Mime~type~not~set~for~file~'\tl_to_str:n{#1}' - } - -\msg_new:nnn { pdffile } { target-name-missing } - { - a~target~name~for~the~/FileSpec~dictionary~is~missing. - } - -\msg_new:nnn { pdffile } { object-exists } - { - object~name~'#1'~is~already~used. - } - -\msg_new:nnn { pdffile } { show-files } - { - The~following~files~have~been~embedded\\ - #1 - } -\tl_new:N \l__pdffile_tmpa_tl -\tl_new:N \l__pdffile_tmpb_tl -\str_new:N \l__pdffile_tmpa_str -\str_new:N \l__pdffile_tmpb_str -\str_new:N \l__pdffile_ext_str -\tl_new:N \l__pdffile_automimetype_tl -\tl_new:N \l__pdffile_embed_ref_tl -\prop_new:N \g_pdffile_mimetypes_prop -\prop_set_from_keyval:Nn \g_pdffile_mimetypes_prop - { - ,.csv = text/csv - ,.html= text/html - ,.dtx = text/plain %or application/x-tex, not in iana.org list - ,.eps = application/postscript - ,.jpg = image/jpeg - ,.mp4 = video/mp4 - ,.pdf = application/pdf - ,.png = image/png - ,.tex = text/plain %or application/x-tex, not in iana.org list - ,.txt = text/plain - ,.sty = text/plain - } -\str_new:N \l_pdffile_source_name_str -\pdfdict_new:n { l_pdffile } -\pdfdict_put:nnn { l_pdffile }{Type}{/EmbeddedFile} -\pdfdict_new:n { l_pdffile/Params } -\pdfdict_put:nnn { l_pdffile/Params } - {ModDate} { (\file_timestamp:n { \l_pdffile_source_name_str }) } -\pdfdict_put:nnn { l_pdffile/Params } - {Size} { \file_size:n { \l_pdffile_source_name_str } } -\pdfdict_put:nnn { l_pdffile/Params } - {CheckSum} { (\file_mdfive_hash:n { \l_pdffile_source_name_str }) } -\pdfdict_new:n { l_pdffile/streamParams } -\pdfdict_put:nnn { l_pdffile/streamParams } - {ModDate} { - ( - D:\int_use:N\c_sys_year_int - \int_compare:nNnT{\c_sys_month_int}<{10}{0} - \int_use:N\c_sys_month_int - \int_compare:nNnT{\c_sys_day_int}<{10}{0} - \int_use:N\c_sys_day_int - ) - } -\pdfdict_new:n { l_pdffile/FileSpec } -\pdfdict_put:nnn { l_pdffile/FileSpec } - {Type} { /FileSpec } -\pdfdict_put:nnn { l_pdffile/FileSpec } - {AFRelationship} { /Unspecified } - -\prop_new:N \g_pdffile_embed_prop -\cs_new_protected:Npn \pdffile_embed_show: - { - \msg_show:nnx - {pdffile}{show-files} - { - \prop_map_function:NN {\g_pdffile_embed_prop} \msg_show_item:nn - } - } -\cs_new_protected:Npn \__pdffile_mimetype_set:nN #1 #2 - { - \file_parse_full_name:nNNN - {#1} - \l__pdffile_tmpa_str %unused - \l__pdffile_tmpb_str %unused - \l__pdffile_ext_str - %check if Subtype has been set - \pdfdict_get:nnN { l_pdffile}{Subtype}\l__pdffile_tmpa_tl - %if not look up in the prop: - \quark_if_no_value:NT \l__pdffile_tmpa_tl - { - \prop_get:NVNTF - \g_pdffile_mimetypes_prop - \l__pdffile_ext_str - \l__pdffile_tmpb_tl - { - \tl_set:Nx #2 {/Subtype~\pdf_name_from_unicode_e:V \l__pdffile_tmpb_tl} - } - { - \msg_warning:nnx { pdffile }{ mimetype-missing} {#1} - \tl_clear:N #2 - } - } - } - -\cs_generate_variant:Nn \__pdffile_mimetype_set:nN {VN} - -\cs_new_protected:Npn \__pdffile_fstream_write:nN #1 #2 - { - \pdf_object_unnamed_write:nx { fstream } - { - { - #2 - \pdfdict_use:n { l_pdffile} - \pdfdict_if_empty:nF { l_pdffile/Params} - { - /Params - << - \pdfdict_use:n { l_pdffile/Params} - >> - } - } - { #1 } - } - \tl_clear:N \l__pdffile_automimetype_tl - } - -\cs_generate_variant:Nn \__pdffile_fstream_write:nN {VN} - -\cs_new_protected:Npn \__pdffile_stream_write:nN #1 #2 - { - \pdf_object_unnamed_write:nx { stream } - { - { - #2 - \pdfdict_use:n { l_pdffile} - \pdfdict_if_empty:nF { l_pdffile/streamParams} - { - /Params - << - \pdfdict_use:n { l_pdffile/streamParams} - >> - } - } - { \exp_not:n { #1 } } - } - \tl_clear:N \l__pdffile_automimetype_tl - } - -\cs_generate_variant:Nn \__pdffile_stream_write:nN {VN} - -\cs_new_protected:Npn \__pdffile_filespec_write:nnn #1 #2 #3 - { - \tl_if_blank:nT { #2 } - { - \msg_error:nn {pdffile}{target-name-missing} - } - { - \pdf_object_new:nn { #1 } {dict} - \group_begin: - \__pdffile_filename_convert_to_print:nN { #2 } \l__pdffile_tmpa_str - \pdfdict_put:nnx {l_pdffile/FileSpec}{F} { \l__pdffile_tmpa_str } - \pdfdict_put:nnx {l_pdffile/FileSpec}{UF}{ \l__pdffile_tmpa_str } - \pdf_object_write:nx { #1 } - { - \pdfdict_use:n { l_pdffile/FileSpec} - \tl_if_empty:nF { #3 } - { - /EF <</F~#3 /UF~#3>> - } - } - \group_end: - } - } - -\cs_new_protected:Npn \pdffile_embed_file:nnn #1 #2 #3 - { % if #1 empty => only filespec - % if #2 empty => = #1 - \pdf_object_if_exist:nTF { #3 } - { - \msg_error:nnn { pdffile }{ object-exists } { #3 } - } - { - \tl_if_blank:nTF { #1 } - { - \tl_set:Nn \l__pdffile_embed_ref_tl {} - } - { - \file_get_full_name:nNTF {#1} \l_pdffile_source_name_str - { - \__pdffile_mimetype_set:VN - \l_pdffile_source_name_str - \l__pdffile_automimetype_tl - \__pdffile_fstream_write:VN - \l_pdffile_source_name_str - \l__pdffile_automimetype_tl - \tl_set:Nx \l__pdffile_embed_ref_tl { \pdf_object_ref_last: } - } - { - \msg_error:nnn { pdffile }{ file-not-found }{ #1 } - } - - } - \prop_gput:Nnx - \g_pdffile_embed_prop - { #3 } - { - { \tl_if_blank:nTF { #1 } {filespec}{file} } - {\l_pdffile_source_name_str} - { - \tl_if_blank:nTF { #2 } - { \l_pdffile_source_name_str } - { \tl_to_str:n{#2}} - } - } - \tl_if_blank:nTF { #2 } - { - \exp_args:Nnnx - \__pdffile_filespec_write:nnn - %#1 dict, #2 target file name, #3 object ref - { #3 } - { #1 } - {\l__pdffile_embed_ref_tl} - } - { - \exp_args:Nnnx - \__pdffile_filespec_write:nnn - %#1 dict, #2 target file name, #3 object ref - { #3 } - { #2 } - {\l__pdffile_embed_ref_tl} - } - } - } - -\cs_new_protected:Npn \pdffile_embed_stream:nnn #1 #2 #3 - { - % if #2 empty => error - \pdf_object_if_exist:nTF { #3 } - { - \msg_error:nnn { pdffile }{ object-exists } { #3 } - } - { - \prop_gput:Nnx - \g_pdffile_embed_prop - { #3 } - {{stream}{}{\tl_if_blank:nTF {#2}{stream.txt}{\exp_not:n{#2}}}} - \tl_if_blank:nTF {#2} - { \__pdffile_mimetype_set:nN {stream.txt}\l__pdffile_automimetype_tl} - { \__pdffile_mimetype_set:nN { #2 } \l__pdffile_automimetype_tl } - \__pdffile_stream_write:nN - { #1 } - \l__pdffile_automimetype_tl - \tl_set:Nx \l__pdffile_embed_ref_tl { \pdf_object_ref_last: } - \exp_args:Nnxx - \__pdffile_filespec_write:nnn - %#1 dict, #2 target file name, #3 object ref - { #3 } - { \tl_if_blank:nTF {#2}{stream.txt}{\exp_not:n{#2}} } - {\l__pdffile_embed_ref_tl} - } - } - -%% -%% -%% End of file `pdfmanagement-testphase.ltx'. |