texlive[57884] branches/branch2020/Master: pdfmanagement-testphase
commits+karl at tug.org
commits+karl at tug.org
Thu Feb 25 00:39:12 CET 2021
Revision: 57884
http://tug.org/svn/texlive?view=revision&revision=57884
Author: karl
Date: 2021-02-25 00:39:12 +0100 (Thu, 25 Feb 2021)
Log Message:
-----------
pdfmanagement-testphase runtime files
Modified Paths:
--------------
branches/branch2020/Master/tlpkg/libexec/ctan2tds
Added Paths:
-----------
branches/branch2020/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase.lua
branches/branch2020/Master/texmf-dist/tex/latex/pdfmanagement-testphase/pdfmanagement-testphase.ltx
Removed Paths:
-------------
branches/branch2020/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3backend-testphase.lua
branches/branch2020/Master/texmf-dist/doc/latex/pdfmanagement-testphase/pdfmanagement-testphase.ltx
Deleted: branches/branch2020/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3backend-testphase.lua
===================================================================
--- branches/branch2020/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3backend-testphase.lua 2021-02-24 23:29:52 UTC (rev 57883)
+++ branches/branch2020/Master/texmf-dist/doc/latex/pdfmanagement-testphase/l3backend-testphase.lua 2021-02-24 23:39:12 UTC (rev 57884)
@@ -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'.
Deleted: branches/branch2020/Master/texmf-dist/doc/latex/pdfmanagement-testphase/pdfmanagement-testphase.ltx
===================================================================
--- branches/branch2020/Master/texmf-dist/doc/latex/pdfmanagement-testphase/pdfmanagement-testphase.ltx 2021-02-24 23:29:52 UTC (rev 57883)
+++ branches/branch2020/Master/texmf-dist/doc/latex/pdfmanagement-testphase/pdfmanagement-testphase.ltx 2021-02-24 23:39:12 UTC (rev 57884)
@@ -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 at hyperref.sty}{customdriver=hgeneric-testphase}
- \PassOptionsToPackage{customdriver=hgeneric-testphase}{hyperref}
- }
- {
- \str_remove_all:cn {opt at 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'.
Added: branches/branch2020/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase.lua
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase.lua (rev 0)
+++ branches/branch2020/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase.lua 2021-02-24 23:39:12 UTC (rev 57884)
@@ -0,0 +1,143 @@
+--
+-- 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'.
Property changes on: branches/branch2020/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase.lua
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Added: branches/branch2020/Master/texmf-dist/tex/latex/pdfmanagement-testphase/pdfmanagement-testphase.ltx
===================================================================
--- branches/branch2020/Master/texmf-dist/tex/latex/pdfmanagement-testphase/pdfmanagement-testphase.ltx (rev 0)
+++ branches/branch2020/Master/texmf-dist/tex/latex/pdfmanagement-testphase/pdfmanagement-testphase.ltx 2021-02-24 23:39:12 UTC (rev 57884)
@@ -0,0 +1,1940 @@
+%%
+%% 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 at hyperref.sty}{customdriver=hgeneric-testphase}
+ \PassOptionsToPackage{customdriver=hgeneric-testphase}{hyperref}
+ }
+ {
+ \str_remove_all:cn {opt at 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'.
Property changes on: branches/branch2020/Master/texmf-dist/tex/latex/pdfmanagement-testphase/pdfmanagement-testphase.ltx
___________________________________________________________________
Added: svn:eol-style
## -0,0 +1 ##
+native
\ No newline at end of property
Modified: branches/branch2020/Master/tlpkg/libexec/ctan2tds
===================================================================
--- branches/branch2020/Master/tlpkg/libexec/ctan2tds 2021-02-24 23:29:52 UTC (rev 57883)
+++ branches/branch2020/Master/tlpkg/libexec/ctan2tds 2021-02-24 23:39:12 UTC (rev 57884)
@@ -2096,6 +2096,7 @@
'patch', '\.tex',
'pdf-trans', 'pdf-trans.tex',
'pdfcprot', '\.cpa|\.sty',
+ 'pdfmanagement-testphase', '\.(lua|ltx)$|' . $standardtex,
'pdftexcmds', '\.lua$|' . $standardtex,
'pdfscreen', 'overlay.*pdf|but.*pdf|left.*pdf|right\.pdf|pdfscreen.sty',
'pdfslide', '\.jpg|\.sty|\.clo|\.cfg|meta.*\.pdf',
More information about the tex-live-commits
mailing list.