From cd51de63725b21c1d3cba9ea2a26555fa8c35e77 Mon Sep 17 00:00:00 2001 From: Karl Berry Date: Fri, 14 May 2021 20:12:08 +0000 Subject: pdfmanagement-testphase (14may21) git-svn-id: svn://tug.org/texlive/trunk@59194 c570f23f-e606-0410-a88d-b1316a301751 --- .../latex/pdfmanagement-testphase/color-ltx.sty | 2 +- .../pdfmanagement-testphase/hgeneric-testphase.def | 132 ++- .../hyperxmp-patches-tmp-ltx.sty | 14 +- .../l3backend-testphase-dvipdfmx.def | 18 +- .../l3backend-testphase-dvips.def | 2 +- .../l3backend-testphase-dvisvgm.def | 2 +- .../l3backend-testphase-luatex.def | 18 +- .../l3backend-testphase-pdftex.def | 20 +- .../l3backend-testphase-xetex.def | 18 +- .../l3backend-testphase.lua | 2 +- .../l3pdffield-testphase.sty | 1134 +++++++++++++++----- .../pdfmanagement-testphase/pdflscape-ltx.sty | 2 +- .../pdfmanagement-firstaid.sty | 24 +- .../pdfmanagement-testphase.ltx | 122 ++- .../pdfmanagement-testphase.sty | 2 +- .../pdfmanagement-testphase/transparent-ltx.sty | 2 +- .../xcolor-patches-tmp-ltx.sty | 54 +- 17 files changed, 1121 insertions(+), 447 deletions(-) (limited to 'Master/texmf-dist/tex') diff --git a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/color-ltx.sty b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/color-ltx.sty index 15754414a16..d8a6c9c4085 100644 --- a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/color-ltx.sty +++ b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/color-ltx.sty @@ -22,7 +22,7 @@ %% This file has the LPPL maintenance status "maintained". %% \NeedsTeXFormat{LaTeX2e}[1995/12/01] -\ProvidesPackage{color-ltx}[2021-03-17 v0.95c +\ProvidesPackage{color-ltx}[2021-05-14 v0.95d Standard LaTeX Color (patched for l3color, part of pdfmanagement-testphase, original version 2021/03/07 v1.2e) (DPC)] \edef\Gin@codes{% \catcode`\noexpand\^^A\the\catcode`\^^A\relax diff --git a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/hgeneric-testphase.def b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/hgeneric-testphase.def index 98d06175e9d..2fb91d1a128 100644 --- a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/hgeneric-testphase.def +++ b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/hgeneric-testphase.def @@ -19,7 +19,7 @@ %% and all files in that bundle must be distributed together. %% %% File: hyperref-generic.dtx -\ProvidesFile{hgeneric-testphase.def}[2021-03-17 v0.95c % +\ProvidesFile{hgeneric-testphase.def}[2021-05-14 v0.95d % generic Hyperref driver for the LaTeX PDF management testphase bundle] \RequirePackage{etoolbox} %why? @@ -243,8 +243,12 @@ ,href / format .code:n = { \cs_set_eq:NN \__hyp_href_url_format #1 } } +\hook_new_pair:nn{cmd/href/before}{cmd/href/after} + \DeclareRobustCommand*{\href}[1][]{% - \begingroup + \mode_leave_vertical: + \hook_use:n{cmd/href/before} + \group_begin: \keys_set:nn { hyp / href } {#1} \let\protect\@unexpandable@protect \bool_if:NTF \l__hyp_href_url_encode_bool @@ -257,11 +261,27 @@ \@ifnextchar\bgroup\Hy@href{\hyper@normalise\href@}% } -\DeclareRobustCommand*{\hrefurl}[1][]{ - \group_begin: - \keys_set:nn { hyp / href } {#1} - \let\protect\@unexpandable@protect - \bool_if:NTF \l__hyp_href_url_encode_bool +\begingroup + \catcode`\$=6 % + \catcode`\#=12 % + \gdef\href@$1{\expandafter\href@split$1##\\}% + \gdef\href@split$1#$2#$3\\$4{% + \hyper@@link{$1}{$2}{$4}%<---__hyp-docstrip doubling! + \endgroup + \hook_use:n{cmd/href/after} + }% +\endgroup + +\hook_new_pair:nn{cmd/hrefurl/before}{cmd/hrefurl/after} + +\DeclareRobustCommand*{\hrefurl}[1][] + { + \mode_leave_vertical: + \hook_use:n{cmd/href/before} + \group_begin: + \keys_set:nn { hyp / href } {#1} + \let\protect\@unexpandable@protect + \bool_if:NTF \l__hyp_href_url_encode_bool { \tl_set:Nn \l__hyp_text_enc_uri_print_tl {utf8/URI} } @@ -274,11 +294,15 @@ { \exp_args:Nno\hyper@linkurl{#2}{\l__hyp_href_url_protocol_tl#1} \group_end: + \hook_use:n{cmd/href/after} } +\hook_new_pair:nn{cmd/hrefpdf/before}{cmd/hrefpdf/after} \DeclareRobustCommand*{\hrefpdf}[1][] { - \begingroup + \mode_leave_vertical: + \hook_use:n{cmd/hrefpdf/before} + \group_begin: \keys_set:nn { hyp / href } {#1} \let\protect\@unexpandable@protect \hyper@normalise\__hyp_href_pdf_aux:nn @@ -286,11 +310,16 @@ \cs_new_protected:Npn \__hyp_href_pdf_aux:nn #1 #2 { - \exp_args:Nnno\hyper@linkfile{#2}{#1}{\l__hyp_href_pdf_destination_tl}\endgroup + \exp_args:Nnno\hyper@linkfile{#2}{#1}{\l__hyp_href_pdf_destination_tl} + \group_end: + \hook_use:n{cmd/hrefpdf/after} } +\hook_new_pair:nn{cmd/hrefrun/before}{cmd/hrefrun/after} \DeclareRobustCommand*{\hrefrun}[1][] { + \mode_leave_vertical: + \hook_use:n{cmd/hrefrun/before} \group_begin: \keys_set:nn { hyp / href } {#1} \let\protect\@unexpandable@protect @@ -301,10 +330,15 @@ { \exp_args:Nnno\hyper@linklaunch{#2}{#1}{\l__hyp_href_run_parameter_tl} \group_end: + \hook_use:n{cmd/hrefrun/after} } +\hook_new_pair:nn{cmd/url/before}{cmd/url/after} + \DeclareRobustCommand*{\url}[1][] { + \mode_leave_vertical: + \hook_use:n{cmd/url/before} \group_begin: \keys_set:nn {hyp / href } {#1} \let\protect \@unexpandable@protect @@ -324,8 +358,16 @@ \hyper@linkurl{\__hyp_href_url_format {#1}} {\l__hyp_href_url_protocol_tl#1} \group_end: + \hook_use:n{cmd/url/after} } + +\def\urldef#1#2{\begingroup\def\url{\hyper@normalise\url@}\setbox\z@\hbox\bgroup + \def\Url@HyperHook##1\endgroup{\Url@def{#1}{#2}}% + % Because hyperref breaks \urldef and does not define its own (Grrrr!)... + \def\url@##1{\egroup\endgroup\DeclareRobustCommand#1{#2{##1}}}% + #2} + \NewExpandableDocumentCommand\__hyp_secondoftwowithopt:wnn {omm}{#3} \pdfstringdefDisableCommands{\let\hrefurl\__hyp_secondoftwowithopt:wnn} \pdfstringdefDisableCommands{\let\hrefpdf\__hyp_secondoftwowithopt:wnn} @@ -341,9 +383,9 @@ \color_set:nn {hyp/color/citeborder}{hyp/color/cite!60!white} \keys_define:nn { hyp / setup } { - ,citecolor .code:n = {\__hyp_color_set:nn {hyp/color/cite}{#1}} + ,citecolor .code:n = {\__hyp_color_set:ne {hyp/color/cite}{#1}} ,citebordercolor - .code:n = {\__hyp_color_set:nn {hyp/color/citeborder}{#1}} + .code:n = {\__hyp_color_set:ne {hyp/color/citeborder}{#1}} } \hook_gput_code:nnn { hyp/link/cite }{hyp/cite} { @@ -810,14 +852,14 @@ { \tl_if_head_eq_charcode:nNTF {#1}[ %] { - \__hyp_colormodel_export:wnnN #1 {#2} #3 + \__hyp_color_export_aux:wnnN #1 {#2} #3 } { \color_export:nnN {#1} {#2} #3 } } -\cs_new_protected:Npn \__hyp_colormodel_export:wnnN [#1] #2 #3 #4 +\cs_new_protected:Npn \__hyp_color_export_aux:wnnN [#1] #2 #3 #4 { \color_export:nnnN {#1}{#2}{#3}#4 } @@ -827,14 +869,14 @@ { \tl_if_head_eq_charcode:nNTF {#1}[ %] { - \__hyp_colormodel_select_aux:wn #1 + \__hyp_color_select_aux:wn #1 } { \color_select:n {#1} } } -\cs_new_protected:Npn \__hyp_colormodel_select_aux:wn [#1] #2 +\cs_new_protected:Npn \__hyp_color_select_aux:wn [#1] #2 { \color_select:nn {#1}{#2} } @@ -844,14 +886,14 @@ { \tl_if_head_eq_charcode:nNTF {#2}[ %] { - \__hyp_colormodel_set_aux:nwn { #1 } #2 + \__hyp_color_set_aux:nwn { #1 } #2 } { \color_set:nn {#1} {#2} } } -\cs_new_protected:Npn \__hyp_colormodel_set_aux:nwn #1 [#2] #3 +\cs_new_protected:Npn \__hyp_color_set_aux:nwn #1 [#2] #3 { \color_set:nnn {#1}{#2}{#3} } @@ -1051,17 +1093,17 @@ } \cs_new_protected:Npn \__hyp_ocg_init: { - \pdf_object_new:nn { l__hyp_ocg_view_dict_obj } { dict } - \pdf_object_new:nn { l__hyp_ocg_print_dict_obj } { dict } - \pdf_object_new:nn { l__hyp_ocg_config_dict_obj } { dict } - \pdf_object_new:nn { l__hyp_ocg_ref_array_obj } { array } - \pdf_object_write:nx { l__hyp_ocg_ref_array_obj } + \pdf_object_new:nn { __hyp/OCG/View } { dict } + \pdf_object_new:nn { __hyp/OCG/Print } { dict } + \pdf_object_new:nn { __hyp/OCG/config } { dict } + \pdf_object_new:nn { __hyp/OCG/refarray } { array } + \pdf_object_write:nx { __hyp/OCG/refarray } { - \pdf_object_ref:n { l__hyp_ocg_view_dict_obj } + \pdf_object_ref:n { __hyp/OCG/View } \c_space_tl - \pdf_object_ref:n { l__hyp_ocg_print_dict_obj } + \pdf_object_ref:n { __hyp/OCG/Print } } - \pdf_object_write:nn { l__hyp_ocg_view_dict_obj } + \pdf_object_write:nn { __hyp/OCG/View } { /Type/OCG /Name(View) @@ -1071,7 +1113,7 @@ /View <>~ >> } - \pdf_object_write:nn { l__hyp_ocg_print_dict_obj } + \pdf_object_write:nn { __hyp/OCG/Print } { /Type/OCG /Name(Print) @@ -1081,30 +1123,30 @@ /View <>~ >> } - \pdfmanagement_add:nnx { Catalog / OCProperties }{OCGs }{ \pdf_object_ref:n {l__hyp_ocg_view_dict_obj} } - \pdfmanagement_add:nnx { Catalog / OCProperties }{OCGs }{ \pdf_object_ref:n {l__hyp_ocg_print_dict_obj} } - \pdf_object_write:nx { l__hyp_ocg_config_dict_obj } + \pdfmanagement_add:nnx { Catalog / OCProperties }{OCGs }{ \pdf_object_ref:n {__hyp/OCG/View} } + \pdfmanagement_add:nnx { Catalog / OCProperties }{OCGs }{ \pdf_object_ref:n {__hyp/OCG/Print} } + \pdf_object_write:nx { __hyp/OCG/config } { - /OFF[\pdf_object_ref:n { l__hyp_ocg_print_dict_obj }] + /OFF[\pdf_object_ref:n { __hyp/OCG/Print }] /AS[ << /Event/View - /OCGs\c_space_tl \pdf_object_ref:n { l__hyp_ocg_ref_array_obj } + /OCGs\c_space_tl \pdf_object_ref:n { __hyp/OCG/refarray } /Category[/View] >> << /Event/Print - /OCGs\c_space_tl \pdf_object_ref:n { l__hyp_ocg_ref_array_obj } + /OCGs\c_space_tl \pdf_object_ref:n { __hyp/OCG/refarray } /Category[/Print] >> << /Event/Export - /OCGs\c_space_tl \pdf_object_ref:n { l__hyp_ocg_ref_array_obj } + /OCGs\c_space_tl \pdf_object_ref:n { __hyp/OCG/refarray } /Category[/Print] >> ] } - \pdfmanagement_add:nnx { Catalog / OCProperties }{ D }{ \pdf_object_ref:n { l__hyp_ocg_config_dict_obj} } + \pdfmanagement_add:nnx { Catalog / OCProperties }{ D }{ \pdf_object_ref:n { __hyp/OCG/config} } \cs_gset:Npn \__hyp_ocg_init: {} } \prop_map_inline:Nn \c__hyp_map_hyp_annot_prop @@ -1129,10 +1171,10 @@ \hbox_set_end: \mbox { - \pdf_bdcobject:nn {OC}{l__hyp_ocg_print_dict_obj} + \pdf_bdcobject:nn {OC}{__hyp/OCG/Print} \hbox_overlap_right:n { \box_use:N \l__hyp_tmpa_box } \pdf_emc: - \pdf_bdcobject:nn {OC}{l__hyp_ocg_view_dict_obj} + \pdf_bdcobject:nn {OC}{__hyp/OCG/View} \group_begin: \color_select:n { hyp/color/#1 } \box_use_drop:N \l__hyp_tmpa_box @@ -2447,9 +2489,9 @@ } } \pdfmanagement_add:nnx {Catalog / AcroForm/DR/Font } - {ZaDb} {\pdf_object_ref:n {l__hyp_font_zapfdingbats_obj} } + {ZaDb} {\pdf_object_ref:n {__hyp/Font/ZaDb} } \pdfmanagement_add:nnx {Catalog / AcroForm/DR/Font } - {Helv} {\pdf_object_ref:n {l__hyp_font_helvetica_obj} } + {Helv} {\pdf_object_ref:n {__hyp/Font/Helv} } \pdfmanagement_add:nnx {Catalog /AcroForm} {DA}{(/Helv~10~Tf~0~g)} \pdfmeta_standard_verify:nTF {form_no_NeedAppearance} @@ -2859,10 +2901,10 @@ \ExplSyntaxOn \def\Hy@FormObjects { - \pdf_object_new:nn {l__hyp_encoding_pdfdoc_obj } { dict } - \pdf_object_new:nn {l__hyp_font_zapfdingbats_obj } { dict } - \pdf_object_new:nn {l__hyp_font_helvetica_obj } { dict } - \pdf_object_write:nx {l__hyp_encoding_pdfdoc_obj } + \pdf_object_new:nn {__hyp/Encoding/pdfdoc } { dict } + \pdf_object_new:nn {__hyp/Font/ZaDb } { dict } + \pdf_object_new:nn {__hyp/Font/Helv } { dict } + \pdf_object_write:nx {__hyp/Encoding/pdfdoc } { /Type/Encoding /Differences[ @@ -2904,20 +2946,20 @@ /uacute/ucircumflex/udieresis/yacute/thorn/ydieresis ] } - \pdf_object_write:nn {l__hyp_font_zapfdingbats_obj } + \pdf_object_write:nn {__hyp/Font/ZaDb } { /Type/Font /Subtype/Type1 /Name/ZaDb /BaseFont/ZapfDingbats } - \pdf_object_write:nx {l__hyp_font_helvetica_obj } + \pdf_object_write:nx {__hyp/Font/Helv } { /Type/Font /Subtype/Type1 /Name/Helv /BaseFont/Helvetica - /Encoding~\pdf_object_ref:n { l__hyp_encoding_pdfdoc_obj } + /Encoding~\pdf_object_ref:n { __hyp/Encoding/pdfdoc } } \global\let\Hy@FormObjects\relax } diff --git a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/hyperxmp-patches-tmp-ltx.sty b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/hyperxmp-patches-tmp-ltx.sty index b38a47f09c1..ab8723947e4 100644 --- a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/hyperxmp-patches-tmp-ltx.sty +++ b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/hyperxmp-patches-tmp-ltx.sty @@ -19,7 +19,7 @@ % % for those people who are interested. \NeedsTeXFormat{LaTeX2e}[2020/10/01] -\ProvidesExplPackage{hyperxmp-patches-tmp-ltx}{2021-03-17}{0.95c} +\ProvidesExplPackage{hyperxmp-patches-tmp-ltx}{2021-05-14}{0.95d} {Store hyperref metadata in XMP format / temporay patches to test pdfresource management ... UF} \cs_if_exist:NT \pdfmanagement_add:nnn @@ -103,8 +103,8 @@ ,pdfcontacturl ,pdfdate %hyperref, needs probably special handling - ,pdftitle - ,pdfsubject + % ,pdftitle %see below + % ,pdfsubject %see below ,pdfkeywords ,pdfproducer } @@ -115,9 +115,15 @@ % pdfauthor, this is only a work around for simple author % TODO needs improvement + \exp_args:NNe \pdfstringdef\@pdfauthor{\GetDocumentProperties{hyperref/pdfauthor}} \cs_set_eq:NN\hyxmp@pdfauthor\@pdfauthor - + \exp_args:NNe + \pdfstringdef\@pdfsubject{\GetDocumentProperties{hyperref/pdfsubject}} + \cs_set_eq:NN\hyxmp@pdfsubject\@pdfsubject + \exp_args:NNe + \pdfstringdef\@pdftitle{\GetDocumentProperties{hyperref/pdftitle}} + \cs_set_eq:NN\hyxmp@pdftitle\@pdftitle % pdflang, \tl_if_exist:cF{@pdflang}{\tl_new:c{@pdflang}} \tl_set:cx {@pdflang}{\GetDocumentProperties{document/lang}} diff --git a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-dvipdfmx.def b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-dvipdfmx.def index da3b99f7cb4..d5979d5bd1f 100644 --- a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-dvipdfmx.def +++ b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-dvipdfmx.def @@ -20,7 +20,7 @@ %% %% File: l3backend-testphase.dtx \ProvidesExplFile - {l3backend-testphase-dvipdfmx.def}{2021-03-17}{} + {l3backend-testphase-dvipdfmx.def}{2021-05-14}{} {LaTeX~PDF~management~testphase~bundle~backend~support: dvipdfmx} \RequirePackage{l3ref-tmp} \cs_generate_variant:Nn \ref_label:nn {en} @@ -127,8 +127,8 @@ \hook_gset_rule:nnnn{shipout/firstpage}{l3backend-dvipdfmx}{after}{pdf} \clist_map_inline:Nn \c__pdf_backend_PageResources_clist { - \__pdf_backend_object_new:nn { Page/Resources/#1 } { dict } - \hook_gput_code:nnn{shipout/firstpage}{pdf}{\__pdf_backend_object_write:nn { Page/Resources/#1 } {}} + \__pdf_backend_object_new:nn { __pdf/Page/Resources/#1 } { dict } + \hook_gput_code:nnn{shipout/firstpage}{pdf}{\__pdf_backend_object_write:nn { __pdf/Page/Resources/#1 } {}} } \cs_new_protected:Npn \__pdf_backend_PageResources:n #1 { @@ -143,7 +143,7 @@ %objects are not filled with \pdf_object_write as this is not additive! \__pdf_backend:x { - put~\__pdf_backend_object_ref:n {Page/Resources/#1}<> + put~\__pdf_backend_object_ref:n {__pdf/Page/Resources/#1}<> } } @@ -226,7 +226,7 @@ \__kernel_backend_literal:x { pdf:put~@resources~ - <> + <> } } } @@ -318,21 +318,21 @@ { put~ @resources ~ << - /ExtGState~ \pdf_object_ref:n { Page/Resources/ExtGState } + /ExtGState~ \pdf_object_ref:n { __pdf/Page/Resources/ExtGState } >> } \__pdf_backend:x { put~ @resources ~ << - /Pattern~ \pdf_object_ref:n { Page/Resources/Pattern } + /Pattern~ \pdf_object_ref:n { __pdf/Page/Resources/Pattern } >> } \__pdf_backend:x { put~ @resources ~ << - /Shading~ \pdf_object_ref:n { Page/Resources/Shading } + /Shading~ \pdf_object_ref:n { __pdf/Page/Resources/Shading } >> } \__pdf_backend:x @@ -340,7 +340,7 @@ put~ @resources ~ << /ColorSpace~ - \pdf_object_ref:n { Page/Resources/ColorSpace } + \pdf_object_ref:n { __pdf/Page/Resources/ColorSpace } >> } \exp_args:Nx diff --git a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-dvips.def b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-dvips.def index a8baaf26b4d..547771b06fa 100644 --- a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-dvips.def +++ b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-dvips.def @@ -20,7 +20,7 @@ %% %% File: l3backend-testphase.dtx \ProvidesExplFile - {l3backend-testphase-dvips.def}{2021-03-17}{} + {l3backend-testphase-dvips.def}{2021-05-14}{} {LaTeX~PDF~management~testphase~bundle~backend~support: dvips} \RequirePackage{l3ref-tmp} \cs_generate_variant:Nn \ref_label:nn {en} diff --git a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-dvisvgm.def b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-dvisvgm.def index ba0b8b91d95..2f30f182790 100644 --- a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-dvisvgm.def +++ b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-dvisvgm.def @@ -20,7 +20,7 @@ %% %% File: l3backend-testphase.dtx \ProvidesExplFile - {l3backend-testphase-dvisvgm.def}{2021-03-17}{} + {l3backend-testphase-dvisvgm.def}{2021-05-14}{} {LaTeX~PDF~management~testphase~bundle~backend~support: dvisvgm} \RequirePackage{l3ref-tmp} \cs_generate_variant:Nn \ref_label:nn {en} diff --git a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-luatex.def b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-luatex.def index 866c334bbf4..d753d60d7df 100644 --- a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-luatex.def +++ b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-luatex.def @@ -20,7 +20,7 @@ %% %% File: l3backend-testphase.dtx \ProvidesExplFile - {l3backend-testphase-luatex.def}{2021-03-17}{} + {l3backend-testphase-luatex.def}{2021-05-14}{} {LaTeX~PDF~management~testphase~bundle~backend~support: PDF output (LuaTeX)} \RequirePackage{l3ref-tmp} \cs_generate_variant:Nn \ref_label:nn {en} @@ -161,14 +161,14 @@ %create the backend objects: \clist_map_inline:Nn \c__pdf_backend_PageResources_clist { - \__pdf_backend_object_new:nn {Page/Resources/#1} {dict} + \__pdf_backend_object_new:nn {__pdf/Page/Resources/#1} {dict} \cs_if_exist:NT \tex_directlua:D { \tex_directlua:D { - ltx.__pdf.object["Page/Resources/#1"] + ltx.__pdf.object["__pdf/Page/Resources/#1"] = - "\__pdf_backend_object_ref:n{Page/Resources/#1}" + "\__pdf_backend_object_ref:n{__pdf/Page/Resources/#1}" } } } @@ -190,7 +190,7 @@ { \__kernel_pdfdict_name:n { g__pdf_Core/Page/Resources/##1} } { \__pdf_backend_object_write:nx - { Page/Resources/##1 } + { __pdf/Page/Resources/##1 } { \pdfdict_use:n { g__pdf_Core/Page/Resources/##1} } } } @@ -342,22 +342,22 @@ \prop_if_empty:cF { \__kernel_pdfdict_name:n { g__pdf_Core/Page/Resources/ExtGState } } { - /ExtGState~ \pdf_object_ref:n { Page/Resources/ExtGState } + /ExtGState~ \pdf_object_ref:n { __pdf/Page/Resources/ExtGState } } \prop_if_empty:cF { \__kernel_pdfdict_name:n { g__pdf_Core/Page/Resources/Pattern } } { - /Pattern~ \pdf_object_ref:n { Page/Resources/Pattern } + /Pattern~ \pdf_object_ref:n { __pdf/Page/Resources/Pattern } } \prop_if_empty:cF { \__kernel_pdfdict_name:n { g__pdf_Core/Page/Resources/Shading } } { - /Shading~ \pdf_object_ref:n { Page/Resources/Shading } + /Shading~ \pdf_object_ref:n { __pdf/Page/Resources/Shading } } \prop_if_empty:cF { \__kernel_pdfdict_name:n { g__pdf_Core/Page/Resources/ColorSpace } } { - /ColorSpace~ \pdf_object_ref:n { Page/Resources/ColorSpace } + /ColorSpace~ \pdf_object_ref:n { __pdf/Page/Resources/ColorSpace } } } \l__pdf_backend_tmpa_box diff --git a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-pdftex.def b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-pdftex.def index 518c05f7376..10ed67a42f2 100644 --- a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-pdftex.def +++ b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-pdftex.def @@ -20,7 +20,7 @@ %% %% File: l3backend-testphase.dtx \ProvidesExplFile - {l3backend-testphase-pdftex.def}{2021-03-17}{} + {l3backend-testphase-pdftex.def}{2021-05-14}{} {LaTeX~PDF~management~testphase~bundle~backend~support: PDF output (pdfTeX)} \RequirePackage{l3ref-tmp} \cs_generate_variant:Nn \ref_label:nn {en} @@ -135,14 +135,14 @@ %create the backend objects: \clist_map_inline:Nn \c__pdf_backend_PageResources_clist { - \__pdf_backend_object_new:nn {Page/Resources/#1} {dict} + \__pdf_backend_object_new:nn {__pdf/Page/Resources/#1} {dict} \cs_if_exist:NT \tex_directlua:D { \tex_directlua:D { - ltx.__pdf.object["Page/Resources/#1"] + ltx.__pdf.object["__pdf/Page/Resources/#1"] = - "\__pdf_backend_object_ref:n{Page/Resources/#1}" + "\__pdf_backend_object_ref:n{__pdf/Page/Resources/#1}" } } } @@ -158,7 +158,7 @@ { \__kernel_pdfdict_name:n { g__pdf_Core/Page/Resources/##1} } { \__pdf_backend_object_write:nx - { Page/Resources/##1 } + { __pdf/Page/Resources/##1 } { \pdfdict_use:n { g__pdf_Core/Page/Resources/##1} } } } @@ -263,7 +263,7 @@ \prop_if_empty:cF { \__kernel_pdfdict_name:n { g__pdf_Core/Page/Resources/#1} } { - \pdfdict_item:ne { #1 }{ \pdf_object_ref:n {Page/Resources/#1}} + \pdfdict_item:ne { #1 }{ \pdf_object_ref:n {__pdf/Page/Resources/#1}} } } @@ -361,22 +361,22 @@ \prop_if_empty:cF { \__kernel_pdfdict_name:n { g__pdf_Core/Page/Resources/ExtGState } } { - /ExtGState~ \pdf_object_ref:n { Page/Resources/ExtGState } + /ExtGState~ \pdf_object_ref:n { __pdf/Page/Resources/ExtGState } } \prop_if_empty:cF { \__kernel_pdfdict_name:n { g__pdf_Core/Page/Resources/Pattern } } { - /Pattern~ \pdf_object_ref:n { Page/Resources/Pattern } + /Pattern~ \pdf_object_ref:n { __pdf/Page/Resources/Pattern } } \prop_if_empty:cF { \__kernel_pdfdict_name:n { g__pdf_Core/Page/Resources/Shading } } { - /Shading~ \pdf_object_ref:n { Page/Resources/Shading } + /Shading~ \pdf_object_ref:n { __pdf/Page/Resources/Shading } } \prop_if_empty:cF { \__kernel_pdfdict_name:n { g__pdf_Core/Page/Resources/ColorSpace } } { - /ColorSpace~ \pdf_object_ref:n { Page/Resources/ColorSpace } + /ColorSpace~ \pdf_object_ref:n { __pdf/Page/Resources/ColorSpace } } } \l__pdf_backend_tmpa_box diff --git a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-xetex.def b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-xetex.def index 7d9d4e523ab..42b8b8728fd 100644 --- a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-xetex.def +++ b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase-xetex.def @@ -20,7 +20,7 @@ %% %% File: l3backend-testphase.dtx \ProvidesExplFile - {l3backend-testphase-xetex.def}{2021-03-17}{} + {l3backend-testphase-xetex.def}{2021-05-14}{} {LaTeX~PDF~management~testphase~bundle~backend~support: XeTeX} \RequirePackage{l3ref-tmp} \cs_generate_variant:Nn \ref_label:nn {en} @@ -127,8 +127,8 @@ \hook_gset_rule:nnnn{shipout/firstpage}{l3backend-xetex}{after}{pdf} \clist_map_inline:Nn \c__pdf_backend_PageResources_clist { - \__pdf_backend_object_new:nn { Page/Resources/#1 } { dict } - \hook_gput_code:nnn{shipout/firstpage}{pdf}{\__pdf_backend_object_write:nn { Page/Resources/#1 } {}} + \__pdf_backend_object_new:nn { __pdf/Page/Resources/#1 } { dict } + \hook_gput_code:nnn{shipout/firstpage}{pdf}{\__pdf_backend_object_write:nn { __pdf/Page/Resources/#1 } {}} } \cs_new_protected:Npn \__pdf_backend_PageResources:n #1 { @@ -143,7 +143,7 @@ %objects are not filled with \pdf_object_write as this is not additive! \__pdf_backend:x { - put~\__pdf_backend_object_ref:n {Page/Resources/#1}<> + put~\__pdf_backend_object_ref:n {__pdf/Page/Resources/#1}<> } } @@ -226,7 +226,7 @@ \__kernel_backend_literal:x { pdf:put~@resources~ - <> + <> } } } @@ -318,21 +318,21 @@ { put~ @resources ~ << - /ExtGState~ \pdf_object_ref:n { Page/Resources/ExtGState } + /ExtGState~ \pdf_object_ref:n { __pdf/Page/Resources/ExtGState } >> } \__pdf_backend:x { put~ @resources ~ << - /Pattern~ \pdf_object_ref:n { Page/Resources/Pattern } + /Pattern~ \pdf_object_ref:n { __pdf/Page/Resources/Pattern } >> } \__pdf_backend:x { put~ @resources ~ << - /Shading~ \pdf_object_ref:n { Page/Resources/Shading } + /Shading~ \pdf_object_ref:n { __pdf/Page/Resources/Shading } >> } \__pdf_backend:x @@ -340,7 +340,7 @@ put~ @resources ~ << /ColorSpace~ - \pdf_object_ref:n { Page/Resources/ColorSpace } + \pdf_object_ref:n { __pdf/Page/Resources/ColorSpace } >> } \exp_args:Nx diff --git a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase.lua b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase.lua index f6ae9306076..8d8f5e3c635 100644 --- a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase.lua +++ b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3backend-testphase.lua @@ -114,7 +114,7 @@ local function __pdf_backend_PageResources_gpush (page) 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) + token = token .. "/"..name.." "..ltx.pdf.object_ref("__pdf/Page/Resources/"..name) end end return token diff --git a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3pdffield-testphase.sty b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3pdffield-testphase.sty index b4d93ec6de4..9c356016b03 100644 --- a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3pdffield-testphase.sty +++ b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3pdffield-testphase.sty @@ -5,6 +5,8 @@ %% The original source files were: %% %% l3pdffield.dtx (with options: `package') +%% l3pdffield-checkbox.dtx (with options: `package') +%% l3pdffield-textfield.dtx (with options: `package') %% %% Copyright (C) 2019-2021 The LaTeX Project %% @@ -18,15 +20,19 @@ %% 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: l3pdfpdffield-checkbox.dtx +%% File: l3pdffield.dtx + \NeedsTeXFormat{LaTeX2e} -\ProvidesExplPackage{l3pdffield-testphase}{2021-03-17}{0.95c}% - {form field checkboxes} +\ProvidesExplPackage{l3pdffield-testphase}{2021-05-14}{0.95d}% + {form fields} \csname HyField@NeedAppearancesfalse\endcsname % suppress NeedAppearances -\str_new:N \l__pdffield_field_name_str \str_new:N \l__pdffield_tmpa_str -\str_new:N \l__pdffield_name_tmpa_str -\tl_new:N \l__pdffield_keys_tmpa_tl +\tl_new:N \l__pdffield_tmpa_tl +\tl_new:N \l__pdffield_tmpa_keys_tl +\cs_new_protected:Npn \__pdffield_tmpa:n #1 {} +\cs_new_protected:Npn \__pdffield_tmpa:nn #1 #2 {} +\tl_new:N \l__pdffield_currentparent_tl +\tl_new:N \l__pdffield_fieldID_tl \msg_new:nnn {pdffield}{no-period} { The~field~name~`#1`~contains~a~period. \\ @@ -39,14 +45,34 @@ } \msg_new:nnn {pdffield}{appearance-missing} { - The~appearance~`#1`~is~missing~for~the~#2~appearance. + The~appearance~definition~`#1`~is~missing~for~the~#2~appearance. + } +\msg_new:nnn {pdffield}{not-implemented} + { + Support~for~'/#1'~is~not~implemented\\ + The~key~is~ignored. } -\msg_new:nnn {pdffield}{field-keys-ignored} +\msg_new:nnn {pdffield}{key-disabled} { - The~field~`#1`~is~already~initialized\\ - The~field~keys~`#2`~are~ignored. + key~`#2`~is~disabled~and~ignored~in~the~`#1`~command.\\ + Use~key~`#3`~instead. + } +\msg_new:nnn {pdffield}{parent-field-missing} + { + The~parent~field~'#1'~doesn't~exist\\ + Create~it~with~\tl_to_str:n{\pdffield_field:nn} } +\cs_new_protected:Npn \__pdffield_key_disable:nnn #1#2#3 + { + \keys_define:nn {pdffield} + { + #2 .code:n = + { + \msg_warning:nnnnn {pdffield}{key-disabled}{#1}{#2}{#3} + } + } + } \bitset_new:Nn \l__pdffield_Ff_bitset { ReadOnly = 1, @@ -68,7 +94,27 @@ Comb = 25,%Tx, requires MaxLen in dict RadiosInUnison = 26,%Btn Radio RichText = 26,%Tx - CommitOnSelChange = 27 + CommitOnSelChange = 27, + readonly = 1, + required = 2, + noexport = 3, + multiline = 13,%Tx + password = 14, + notoggletooff = 15,%Btn, radio button + radio = 16,%Btn: Radio: 15=1, 16=0 + pushbutton = 17,%Btn: Checkbox: 15=0, 16=0 + %Btn: Pushbutton: 16=1 + combo = 18,%Ch: Combo=1 List=0 + edit = 19,%Ch, Combo=1 -> + edit field + sort = 20,%Ch, not relevant for view... + fileselect = 21,%Tx + multiselect = 22,%Ch + donotspellcheck = 23,%Tx, Ch (if Combo + Edit set) + donotscroll = 24,%Tx + comb = 25,%Tx, requires MaxLen in dict + radiosinunison = 26,%Btn Radio + richtext = 26,%Tx + commitonselchange = 27 } \bitset_new:Nn \l__pdffield_F_bitset @@ -82,62 +128,84 @@ ReadOnly = 7, Locked = 8, ToggleNoView = 9, - LockedContents = 10 + LockedContents = 10, + invisible = 1, + hidden = 2, + print = 3, + nozoom = 4, + norotate = 5, + noview = 6, + readonly = 7, + locked = 8, + togglenoview = 9, + lockedcontents = 10 } -\pdfdict_new:n {l__pdffield/checkbox/field} -\pdfdict_put:nnn {l__pdffield/checkbox/field}{FT}{/Btn} -\cs_new_protected:Npn \__pdffield_checkbox_field_new:n #1 +\pdfdict_new:n {l__pdffield/field} +\pdfdict_new:n {l__pdffield/field/AA} +\bool_new:N \l__pdffield_root_field_bool +\cs_new_protected:Npn \__pdffield_field:n #1 { - \group_begin: - \pdf_object_new:nn {__pdffield_checkbox/field/#1} {dict} - \pdf_object_new:nn {__pdffield_checkbox/field/#1/Kids} {array} - \seq_new:c {g__pdffield_checkbox/field/#1/Kids_seq} - \hook_gput_code:nnn {shipout/lastpage}{pdffield} %xetex needs this ... - { - \pdf_object_write:nx {__pdffield_checkbox/field/#1/Kids} - { - \seq_use:cn{g__pdffield_checkbox/field/#1/Kids_seq}{~} - } - } - \pdfdict_put:nnn {l__pdffield/checkbox/field}{T}{(#1)} - % V,DV are names describing the appearance. With checkboxes - % the values /Yes and /Off are used. - % this values are taken from the outside - \pdfdict_put:nnx {l__pdffield/checkbox/field} - {Kids} - { - \pdf_object_ref:n {__pdffield_checkbox/field/#1/Kids} - } - \bitset_set_false:Nn \l__pdffield_Ff_bitset {Radio} - \bitset_set_false:Nn \l__pdffield_Ff_bitset {Pushbutton} - \pdfdict_put:nnx {l__pdffield/checkbox/field} - {Ff} - {\bitset_to_arabic:N \l__pdffield_Ff_bitset } - \pdfdict_if_empty:nF{l__pdffield/checkbox/field/AA} - { - \pdfmeta_standard_verify:nT - {annot_widget_no_AA} - { - \pdfdict_put:nnx - {l__pdffield/checkbox/field} - {AA} - {<<\pdfdict_use:n {l__pdffield/checkbox/field/AA}>>} - } - } - \pdf_object_write:nx {__pdffield_checkbox/field/#1} { \pdfdict_use:n {l__pdffield/checkbox/field} } - \pdfmanagement_add:nnx - { Catalog / AcroForm } - { Fields } - {\pdf_object_ref:n {__pdffield_checkbox/field/#1} } - \group_end: + \pdf_object_new:nn {__pdffield/field/#1} {dict} + \pdf_object_new:nn {__pdffield/field/Kids/#1} {array} + \tl_if_empty:NTF \l__pdffield_currentparent_tl + { + \pdfmanagement_add:nnx + { Catalog / AcroForm } + { Fields } + {\pdf_object_ref:n {__pdffield/field/#1} } + } + { + \exp_args:Ne + \pdf_object_if_exist:nTF {__pdffield/field/\l__pdffield_currentparent_tl} + { + \pdfdict_put:nnx { l__pdffield/field }{Parent} + {\exp_args:Ne \pdf_object_ref:n{__pdffield/field/\l__pdffield_currentparent_tl}} + \seq_gput_right:cx {g__pdffield_field/Kids/\l__pdffield_currentparent_tl _seq} + { \exp_args:Ne \pdf_object_ref:n{__pdffield/field/#1}} + } + { + \msg_error:nnx {pdffield}{parent-field-missing}{\l__pdffield_currentparent_tl} + } + } + \seq_new:c {g__pdffield_field/Kids/#1_seq} + \pdfdict_put:nnx {l__pdffield/field} + {Kids} + { + \pdf_object_ref:n {__pdffield/field/Kids/#1} + } + \pdfdict_put:nnx {l__pdffield/field} + {Ff} + {\bitset_to_arabic:N \l__pdffield_Ff_bitset } + \pdfdict_if_empty:nF{l__pdffield/field/AA} + { + \pdfmeta_standard_verify:nT + {annot_widget_no_AA} + { + \pdf_object_unnamed_write:nx {dict}{\pdfdict_use:n {l__pdffield/field/AA}} + \pdfdict_put:nnx + {l__pdffield/field} + {AA} + {\pdf_object_ref_last:} + } + } + \hook_gput_code:nnn {shipout/lastpage}{pdffield} %xetex needs this ... + { + \pdf_object_write:nx {__pdffield/field/Kids/#1} + { + \seq_use:cn{g__pdffield_field/Kids/#1_seq}{~} + } + } + \pdf_object_write:nx {__pdffield/field/#1} { \pdfdict_use:n {l__pdffield/field} } } - -\pdfdict_new:n {l__pdffield/checkbox/annot} -\pdfdict_put:nnn {l__pdffield/checkbox/annot}{Subtype}{/Widget} -\cs_new_protected:Npn \__pdffield_checkbox_annot_add:nnnn #1 #2 #3 #4 %name, wd, ht, dp, +\cs_new_protected:Npn \pdffield_field:nn #1 #2 { \group_begin: - \pdfdict_put:nnx {l__pdffield/checkbox/annot}{AP}{<<\pdfdict_use:n{l__pdffield/checkbox/annot/AP}>>} + \keys_set:nn { pdffield } {#1} + \__pdffield_field:n {#2} + \group_end: + } +\cs_new_protected:Npn \__pdffield_annot: + { \pdfmeta_standard_verify:nF {annot_flags} { @@ -146,311 +214,815 @@ \bitset_set_false:Nn \l__pdffield_F_bitset {Invisible} \bitset_set_false:Nn \l__pdffield_F_bitset {NoView} } - \pdfdict_if_empty:nF{l__pdffield/checkbox/annot/AA} + \pdfannot_dict_put:nnx {widget}{F}{ \bitset_to_arabic:N \l__pdffield_F_bitset } + \tl_if_empty:NF \l__pdffield_currentparent_tl { - \pdfmeta_standard_verify:nT - {annot_widget_no_AA} - { - \pdfdict_put:nnx - {l__pdffield/checkbox/annot} - {AA} - {<<\pdfdict_use:n {l__pdffield/checkbox/annot/AA}>>} - } - } - \pdfdict_put:nnx {l__pdffield/checkbox/annot}{F}{ \bitset_to_arabic:N \l__pdffield_F_bitset } - \pdfdict_set_eq:nn {l__pdfannot/widget}{l__pdffield/checkbox/annot} - \pdfannot_dict_put:nnx {widget}{Parent}{\pdf_object_ref:n{__pdffield_checkbox/field/#1}} + \exp_args:Ne + \pdf_object_if_exist:nTF { __pdffield/field/\l__pdffield_currentparent_tl } + { + \pdfannot_dict_put:nnx {widget}{Parent} + { + \exp_args:Ne + \pdf_object_ref:n{__pdffield/field/\l__pdffield_currentparent_tl} + } + } + { + \msg_error:nnx { pdffield }{parent-field-missing}{\l__pdffield_currentparent_tl} + } + } \mode_leave_vertical: \hbox_to_wd:nn - { #2 } + { \l__pdffield_annot_wd_dim } { - \rule [-#4]{0pt}{\dim_eval:n{#3+#4} } + \rule [-\l__pdffield_annot_dp_dim]{0pt}{\dim_eval:n{\l__pdffield_annot_ht_dim+\l__pdffield_annot_dp_dim} } \pdfannot_widget_box:nnn - { #2 } - { #3 } - { #4 } + { \l__pdffield_annot_wd_dim } + { \l__pdffield_annot_ht_dim } + { \l__pdffield_annot_dp_dim } \hfill } - \seq_gput_right:cx {g__pdffield_checkbox/field/#1/Kids_seq}{ \pdfannot_box_ref_last:} - \group_end: - } - -\cs_new_protected:Npn \pdffield_store_appearance:nn #1 #2 - { - \pdfxform_new:nnn {__pdffield_#1}{}{#2} + \tl_if_empty:NF \l__pdffield_currentparent_tl + { + \seq_if_exist:cTF {g__pdffield_field/Kids/\l__pdffield_currentparent_tl _seq} + { + \seq_gput_right:cx + {g__pdffield_field/Kids/\l__pdffield_currentparent_tl _seq} + { \pdfannot_box_ref_last:} + } + { + \msg_error:nnx { pdffield}{parent-field-missing}{\l__pdffield_currentparent_tl} + } + } } - -\cs_new_protected:Nn \__pdffield_store_default_appearances: +\cs_new_protected:Npn \pdffield_annot:n #1 { - \pdffield_store_appearance:nn {checkbox/default/Yes} - { - \normalsize - \fboxsep 0pt - \framebox - [ \dim_eval:n { \box_ht:N\strutbox+\box_dp:N\strutbox } ] - { \texttimes \strut } - } - \pdffield_store_appearance:nn {checkbox/default/Off} - { - \normalsize - \fboxsep 0pt - \framebox - [ \dim_eval:n { \box_ht:N\strutbox+\box_dp:N\strutbox } ] - { \phantom{\texttimes} \strut } - } + \group_begin: + \keys_set:nn { pdffield } {#1} + \__pdffield_annot: + \group_end: } +\cs_new_protected:Npn \__pdffield_color_set:nn #1 #2 + { + \tl_if_head_eq_charcode:nNTF {#2}[ %] + { + \__pdffield_color_set_aux:nwn { #1 } #2 + } + { + \color_set:nn {#1} {#2} + } + } -\__pdffield_store_default_appearances: -\pdfdict_new:n {l__pdffield/checkbox/annot/AP} - -\cs_new_protected:Npn \__pdffield_checkbox_add:n #1 +\cs_new_protected:Npn \__pdffield_color_set_aux:nwn #1 [#2] #3 { - \group_begin: - \keys_set_filter:nnnN {pdffield / checkbox }{field}{#1}\l__pdffield_keys_tmpa_tl - \str_if_empty:NT \l__pdffield_field_name_str - { - \msg_error:nn {pdffield}{empty-name} - } - \exp_args:Nx - \pdf_object_if_exist:nTF {__pdffield_checkbox/field/\l__pdffield_field_name_str} - { - \tl_if_empty:NF \l__pdffield_keys_tmpa_tl - { - \msg_warning:nnxx - {pdffield} - {field-keys-ignored} - {\l__pdffield_field_name_str} - {\l__pdffield_keys_tmpa_tl} - } - } - { - \keys_set:nV { pdffield/checkbox } \l__pdffield_keys_tmpa_tl - \exp_args:No - \__pdffield_checkbox_field_new:n {\l__pdffield_field_name_str} - } - \exp_args:No - \__pdffield_checkbox_annot_add:nnnn - {\l__pdffield_field_name_str} - {\l__pdffield_annot_wd_tl } - {\l__pdffield_annot_ht_tl } - {\l__pdffield_annot_dp_tl } - \group_end: + \color_set:nnn {#1}{#2}{#3} } -\tl_new:N \l__pdffield_annot_ht_tl -\tl_new:N \l__pdffield_annot_wd_tl -\tl_new:N \l__pdffield_annot_dp_tl -\keys_define:nn { pdffield / checkbox } +\cs_new_protected:Npn \__pdffield_value_handler:nN #1#2 { - ,width .tl_set:N = \l__pdffield_annot_wd_tl - ,height .tl_set:N = \l__pdffield_annot_ht_tl - ,depth .tl_set:N = \l__pdffield_annot_dp_tl - ,width .initial:n = \normalbaselineskip - ,height .initial:n = \normalbaselineskip - ,depth .initial:n = 0pt + \tl_set:Nn #2 {#1} } -\keys_define:nn { pdffield / checkbox } +\keys_define:nn { pdffield } { - ,name .code:n = + ,parent .tl_set:N = \l__pdffield_currentparent_tl + ,parent .groups:n = {field,annot} + ,T .code:n = { - \pdf_string_from_unicode:nnN {utf8/string-raw}{#1}\l__pdffield_field_name_str - \str_if_in:NnT \l__pdffield_field_name_str {.} + \pdf_string_from_unicode:nnN {utf8/string-raw}{#1}\l__pdffield_tmpa_str + \str_if_in:NnT \l__pdffield_tmpa_str {.} { - \msg_error:nnx {pdffield}{no-period}{\l__pdffield_field_name_str} + \msg_error:nnx {pdffield}{no-period}{\l__pdffield_tmpa_str} } - \str_if_empty:NT\l__pdffield_field_name_str + \str_if_empty:NTF\l__pdffield_tmpa_str { - \msg_error:nn {pdffield}{empty-name} + \msg_warning:nn {pdffield}{empty-name} + \pdfdict_remove:nn { l__pdffield/field }{T} + } + { + \pdfdict_put:nnx { l__pdffield/field }{T}{(\l__pdffield_tmpa_str)} } } + ,T .value_required:n = true + ,T .groups:n = {field} + ,name .meta:n = {T={#1}} ,name .value_required:n = true - ,name .initial:n = checkbox - ,altname .code:n = + ,name .groups:n = {field} + ,TU .groups:n = {field} + ,TU .code:n = { - \pdf_string_from_unicode:nnN {utf8/string}{#1}\l__pdffield_name_tmpa_str - \pdfdict_put:nnx { l__pdffield/checkbox/field }{TU}{\l__pdffield_name_tmpa_str} + \tl_if_empty:nTF {#1} + { + \pdfdict_remove:nn { l__pdffield/field }{TU} + } + { + \pdf_string_from_unicode:nnN {utf8/string}{#1}\l__pdffield_tmpa_str + \pdfdict_put:nnx { l__pdffield/field }{TU}{\l__pdffield_tmpa_str} + } } + ,TU .groups:n = {field} + ,altname .meta:n = {TU={#1}} ,altname .groups:n = {field} - ,mappingname .code:n = + ,TM .code:n = { - \pdf_string_from_unicode:nnN {utf8/string}{#1}\l__pdffield_name_tmpa_str - \pdfdict_put:nnx { l__pdffield/checkbox/field }{TM}{\l__pdffield_name_tmpa_str} + \tl_if_empty:nTF {#1} + { + \pdfdict_remove:nn { l__pdffield/field }{TM} + } + { + \pdf_string_from_unicode:nnN {utf8/string}{#1}\l__pdffield_tmpa_str + \pdfdict_put:nnx { l__pdffield/field }{TM}{\l__pdffield_tmpa_str} + } } + ,TM .groups:n = {field} + ,mappingname .meta:n = {TM={#1}} ,mappingname .groups:n = {field} - } - -\keys_define:nn { pdffield / checkbox } - { - ,checked .choice: - ,checked / false .code:n = + ,FT .choices:nn = + { Btn, Tx, Ch, Sig } + { + \pdfdict_put:nnn { l__pdffield/field }{FT}{ /#1 } + } + ,FT .groups:n = {field} + ,V .code:n = { - \pdfdict_put:nnn {l__pdffield/checkbox/field}{V}{/Off} - \pdfdict_put:nnn {l__pdffield/checkbox/annot}{AS}{/Off} - \pdfdict_put:nnn {l__pdffield/checkbox/field}{DV}{/Off} + \tl_if_empty:nTF {#1} + { + \pdfdict_remove:nn { l__pdffield/field }{V} + } + { + \__pdffield_value_handler:nN{#1}\l__pdffield_tmpa_str + \pdfdict_put:nnx { l__pdffield/field }{V}{ \l__pdffield_tmpa_str } + } } - ,checked / true .code:n = + ,V .groups:n = {field} + ,DV .code:n = { - \pdfdict_put:nnn {l__pdffield/checkbox/field}{V}{/Yes} - \pdfdict_put:nnn {l__pdffield/checkbox/annot}{AS}{/Yes} - \pdfdict_put:nnn {l__pdffield/checkbox/field}{DV}{/Yes} + \tl_if_empty:nTF {#1} + { + \pdfdict_remove:nn { l__pdffield/field }{DV} + } + { + \__pdffield_value_handler:nN{#1}\l__pdffield_tmpa_str + \pdfdict_put:nnx { l__pdffield/field }{DV}{ \l__pdffield_tmpa_str } + } } - ,checked .default:n = {true} - ,checked .initial:n = {false} - } -\keys_define:nn { pdffield / checkbox } + ,DV .groups:n = {field} + ,MaxLen .code:n = + { + \tl_if_empty:nTF {#1} + { + \pdfdict_remove:nn { l__pdffield/field }{MaxLen} + } + { + \pdfdict_put:nnx { l__pdffield/field }{MaxLen}{ #1 } + } + } + ,MaxLen .groups:n = {field} + ,Lock .code:n = + { + \tl_if_empty:nTF {#1} + { + \pdfdict_remove:nn { l__pdffield/field }{Lock} + } + { + \pdfdict_put:nnx { l__pdffield/field }{Lock}{ \pdf_object_ref:n{#1} } + } + } + ,Lock .groups:n = {field} + ,SV .code:n = + { + \tl_if_empty:nTF {#1} + { + \pdfdict_remove:nn { l__pdffield/field }{SV} + } + { + \pdfdict_put:nnx { l__pdffield/field }{SV}{ \pdf_object_ref:n{#1} } + } + } + ,SV .groups:n = {field} + ,Opt .code:n = + { + \tl_if_empty:nTF {#1} + { + \pdfdict_remove:nn { l__pdffield/field }{Opt} + } + { + \pdfdict_put:nnx { l__pdffield/field }{Opt}{ \pdf_object_ref:n{#1} } + } + } + ,Opt .groups:n = {field} + ,TI .code:n = + { + \tl_if_empty:nTF {#1} + { + \pdfdict_remove:nn { l__pdffield/field }{TI} + } + { + \pdfdict_put:nnx { l__pdffield/field }{TI}{ #1 } + } + } + ,TI .groups:n = {field} + ,I .code:n = + { + \tl_if_empty:nTF {#1} + { + \pdfdict_remove:nn { l__pdffield/field }{I} + } + { + \pdfdict_put:nnx { l__pdffield/field }{I}{ \pdf_object_ref:n{#1} } + } + } + ,I .groups:n = {field} + } + +\keys_define:nn { pdffield } { - ,setfieldflags .code:n = + ,setFf .code:n = { \clist_map_inline:nn {#1} { \bitset_set_true:Nn \l__pdffield_Ff_bitset {##1} } } + ,setFf .groups:n = {field} + ,setfieldflags .meta:n = + {setFf={#1}} ,setfieldflags .groups:n = {field} - ,unsetfieldflags .code:n = + ,unsetFf .multichoice: + ,unsetFf / all .code:n = { \bitset_clear:N \l__pdffield_Ff_bitset} + ,unsetFf / unknown .code:n = { - \clist_map_inline:nn {#1} - { - \bitset_set_false:Nn \l__pdffield_Ff_bitset {##1} - } + \bitset_set_false:Nn \l__pdffield_Ff_bitset {#1} } + ,unsetFf .groups:n = {field} + ,unsetfieldflags .meta:n = {unsetFf={#1}} ,unsetfieldflags .groups:n = {field} - ,setannotflags .code:n = + } + +\cs_set_protected:Npn \__pdffield_tmpa:n #1 % + { + \keys_define:nn { pdffield } { - \clist_map_inline:nn {#1} + AA/#1 .code:n = { - \bitset_set_true:Nn \l__pdffield_F_bitset {##1} - } + \pdf_string_from_unicode:nnN {utf8/string-raw}{##1}\l__pdffield_tmpa_str + \str_if_empty:NTF \l__pdffield_tmpa_str + { + \pdfdict_remove:nn {l__pdffield/field/AA}{#1} + } + { + \pdfdict_put:nnx {l__pdffield/field/AA} + {#1} + {<>} + } + }, + AA/#1 .groups:n = {field} } - ,unsetannotflags .code:n = + } + +\clist_map_inline:nn {K,F,V,C}{\__pdffield_tmpa:n{#1}} + +\cs_set_protected:Npn \__pdffield_tmpa:nn #1 #2 + { + \keys_define:nn { pdffield } { - \clist_map_inline:nn {#1} - { - \bitset_set_false:Nn \l__pdffield_F_bitset {##1} - } + #1 .meta:nn = + { pdffield }{AA/#2={##1}}, + #1 .groups:n = {field} + } + } +\__pdffield_tmpa:nn {keystroke}{K} +\__pdffield_tmpa:nn {format} {F} +\__pdffield_tmpa:nn {validate} {V} +\__pdffield_tmpa:nn {calculate}{C} + +\keys_define:nn { pdffield } + { + DA .code:n = + { + \tl_if_empty:nTF {#1} + { + \pdfdict_remove:nn { l__pdffield/field }{DA} + } + { + \pdfdict_put:nnx { l__pdffield/field }{DA}{ (#1) } + } } + ,DA .groups:n = {field} + ,Q .choices:nn = {left,center,right} + { + \pdfdict_put:nnx { l__pdffield/field }{Q}{ \int_eval:n{\l_keys_choice_int-1} } + } + ,Q / .code:n = { \pdfdict_remove:nn { l__pdffield/field }{Q} } + ,Q .groups:n = {field} + ,align .meta:n={Q=#1} + ,DS .code:n = + { + \msg_warning:nnn {pdffield}{not-implemented}{DS} + } + ,DS .groups:n = {field} + ,RV .code:n = + { + \msg_warning:nnn {pdffield}{not-implemented}{RV} + } + ,RV .groups:n = {field} } +\dim_new:N \l__pdffield_annot_ht_dim +\dim_new:N \l__pdffield_annot_wd_dim +\dim_new:N \l__pdffield_annot_dp_dim -\keys_define:nn { pdffield / checkbox } +\keys_define:nn { pdffield } { - appearance .code:n = %value is a name of an appearance + ,width .dim_set:N = \l__pdffield_annot_wd_dim + ,height .dim_set:N = \l__pdffield_annot_ht_dim + ,depth .dim_set:N = \l__pdffield_annot_dp_dim + ,width .initial:n = 0pt + ,height .initial:n = 0pt + ,depth .initial:n = 0pt + } +\keys_define:nn { pdffield } + { + %parent is defined in field + ,AS .code:n = + { + \tl_if_empty:nTF {#1} + { + \pdfannot_dict_remove:nn { widget }{AS} + } + { + \pdfannot_dict_put:nnx {widget}{AS}{\pdf_name_from_unicode_e:n{#1}} + } + } + ,AS .groups:n = annot + } +\cs_new_protected:Npn \__pdffield_appearance_handler:nnn #1#2#3 + { + \pdfxform_if_exist:nTF { #1 } + { + \pdfannot_dict_put:nnx {widget/AP}{#2} + { + \pdfxform_ref:n {#1} + } + } + { + \msg_error:nnnn{pdffield}{appearance-missing}{#1}{#3} + } + } +\keys_define:nn { pdffield } + { + AP/N .code:n = { - \pdfxform_if_exist:nTF { __pdffield_#1/Yes } + \tl_if_empty:nTF {#1} { - \pdfdict_put:nnn {l__pdffield/checkbox/annot/AP} - {N} - { - << - /Yes ~ \pdfxform_ref:n { __pdffield_#1/Yes} - /Off ~ \pdfxform_ref:n { __pdffield_#1/Off} - >> - } + \pdfannot_dict_remove:nn { widget/AP }{N} } { - \msg_error:nnnn{pdffield}{appearance-missing}{#1}{normal} + \__pdffield_appearance_handler:nnn {#1}{N}{normal} } - }, - appearance .initial:n = checkbox/default, + } + ,AP/N .groups:n = annot + ,appearance .meta:n = {AP/N={#1}} } - -\keys_define:nn { pdffield / checkbox } +\keys_define:nn { pdffield } { - rollover-appearance .code:n = %value is a name of an appearance + AP/R .code:n = { + \tl_if_empty:nTF {#1} + { + \pdfannot_dict_remove:nn { widget/AP }{R} + } + { + \__pdffield_appearance_handler:nnn {#1}{R}{rollover} + } + } + ,AP/R .groups:n = annot + ,rollover-appearance .meta:n = {AP/R={#1}} + } +\keys_define:nn { pdffield } + { + AP/D .code:n = + { + \tl_if_empty:nTF {#1} + { + \pdfannot_dict_remove:nn { widget/AP }{D} + } + { + \__pdffield_appearance_handler:nnn {#1}{D}{rollover} + } + } + ,AP/D .groups:n = annot + ,down-appearance .meta:n = {AP/D={#1}} + } + +\keys_define:nn { pdffield } + { + MK/R .choices:nn = {0,90,180,270} + { + \pdfannot_dict_put:nnx {widget/MK}{R}{#1} + } + ,MK/R / .code:n = + { + \pdfannot_dict_remove:nn { widget/MK }{R} + } + ,MK/R .groups:n = annot + ,rotate .meta:n = {MK/R=#1} + } + +\keys_define:nn { pdffield } + { + MK/BC .code:n = + { \tl_if_empty:nTF {#1} - { - \pdfdict_remove:nn {l__pdffield/checkbox/annot/AP} {R} - } - { - \pdfxform_if_exist:nTF { __pdffield_#1/Yes } - { - \pdfdict_put:nnn {l__pdffield/checkbox/annot/AP} - {R} - { - << - /Yes ~ \pdfxform_ref:n { __pdffield_#1/Yes} - /Off ~ \pdfxform_ref:n { __pdffield_#1/Off} - >> - } - } - { - \msg_warning:nnnn{pdffield}{appearance-missing}{#1}{rollover} - } + { + \pdfannot_dict_remove:nn { widget/MK }{BC} + } + { + \__pdffield_color_set:nn {__pdffield/tmp}{#1} + \color_export:nnN{__pdffield/tmp}{space-sep-rgb}\l__pdffield_tmpa_tl + \pdfannot_dict_put:nnx {widget/MK}{BC}{[\l__pdffield_tmpa_tl]} + } + } + ,MK/BC .groups:n = annot + ,bordercolor .meta:n = {MK/BC=#1} + } - } - }, +\keys_define:nn { pdffield } + { + MK/BG .code:n = + { + \tl_if_empty:nTF {#1} + { + \pdfannot_dict_remove:nn { widget/MK }{BG} + } + { + \__pdffield_color_set:nn {__pdffield/tmp}{#1} + \color_export:nnN{__pdffield/tmp}{space-sep-rgb}\l__pdffield_tmpa_tl + \pdfannot_dict_put:nnx {widget/MK}{BG}{[\l__pdffield_tmpa_tl]} + } + } + ,MK/BG .groups:n = annot + ,bordercolor .meta:n = {MK/BG=#1} } -\keys_define:nn { pdffield / checkbox } +\keys_define:nn { pdffield } { - down-appearance .code:n = %value is a name of an appearance - { + MK/CA .code:n = + { \tl_if_empty:nTF {#1} - { - \pdfdict_remove:nn {l__pdffield/checkbox/annot/AP} {D} - } - { - \pdfxform_if_exist:nTF { __pdffield_#1/Yes } + { + \pdfannot_dict_remove:nn { widget/MK }{CA} + } + { + \pdf_string_from_unicode:nnN {utf8/string}{#1}\l__pdffield_tmpa_str + \pdfannot_dict_put:nnx {widget/MK}{CA}{\l__pdffield_tmpa_str} + } + } + ,MK/CA .groups:n = annot + ,caption .meta:n = {MK/CA=#1} + } + +\cs_set_protected:Npn \__pdffield_tmpa:n #1 + { + \keys_define:nn { pdffield } + { + MK/#1 .code:n = + { + \tl_if_empty:nTF {##1} { - \pdfdict_put:nnn {l__pdffield/checkbox/annot/AP} - {D} - { - << - /Yes ~ \pdfxform_ref:n { __pdffield_#1/Yes} - /Off ~ \pdfxform_ref:n { __pdffield_#1/Off} - >> - } + \pdfannot_dict_remove:nn { widget/AP }{#1} } { - \msg_warning:nnnn{pdffield}{appearance-missing}{#1}{down} + \pdfannot_dict_put:nnx {widget/MK}{#1}{##1} } - } - }, + } + ,MK/#1 .groups:n = annot + } + } + +\clist_map_inline:nn {RC,AC,I,RI,IX,IF,TP} + { \__pdffield_tmpa:n {#1} } +\keys_define:nn { pdffield } + { + ,setF .code:n = + { + \clist_map_inline:nn {#1} + { + \bitset_set_true:Nn \l__pdffield_F_bitset {##1} + } + } + ,setF .groups:n = annot + ,setannotflags .meta:nn = + { pdffield }{setF={#1}} + ,setannotflags .groups:n = annot + ,unsetF .multichoice: + ,unsetF / all .code:n = { \bitset_clear:N \l__pdffield_F_bitset} + ,unsetF / unknown .code:n = + { + \bitset_set_false:Nn \l__pdffield_F_bitset {#1} + } + ,unsetF .groups:n = annot + ,unsetannotflags .meta:nn = + { pdffield }{unsetF= {#1} } + ,unsetannotflags .groups:n = annot } -\pdfdict_new:n {l__pdffield/checkbox/annot/AA} -\pdfdict_new:n {l__pdffield/checkbox/field/AA} -\cs_new_protected:Npn \__pdffield_define_AAaction_key:nnn #1 #2 #3 %#1 key, #2 pdf, #3 dict +\cs_set_protected:Npn \__pdffield_tmpa:n #1 % { - \keys_define:nn { pdffield / checkbox } + \keys_define:nn { pdffield } { - #1 .code:n = + AA/#1 .code:n = { - \pdf_string_from_unicode:nnN {utf8/string}{##1}\l__pdffield_tmpa_str + \pdf_string_from_unicode:nnN {utf8/string-raw}{##1}\l__pdffield_tmpa_str \str_if_empty:NTF \l__pdffield_tmpa_str { - \pdfdict_remove:nn {l__pdffield/checkbox/#3/AA}{#2} + \pdfannot_dict_remove:nn {widget/AA}{#1} } { - \pdfdict_put:nnx {l__pdffield/checkbox/#3/AA} - {#2} - {<>} + \pdfannot_dict_put:nnx {widget/AA} + {#1} + {<>} } }, - #1 .groups:n = {#3} - } - } -\__pdffield_define_AAaction_key:nnn {keystroke}{K}{field} -\__pdffield_define_AAaction_key:nnn {format} {F}{field} -\__pdffield_define_AAaction_key:nnn {validate} {V}{field} -\__pdffield_define_AAaction_key:nnn {calculate}{C}{field} -\__pdffield_define_AAaction_key:nnn {onfocus} {Fo}{annot} -\__pdffield_define_AAaction_key:nnn {onblur} {Bl}{annot} -\__pdffield_define_AAaction_key:nnn {onmousedown}{D}{annot} -\__pdffield_define_AAaction_key:nnn {onmouseup}{U}{annot} -\__pdffield_define_AAaction_key:nnn {onenter} {E}{annot} -\__pdffield_define_AAaction_key:nnn {onexit} {X}{annot} -\cs_set_eq:NN \pdffield_checkbox:n \__pdffield_checkbox_add:n + ,AA/#1 .groups:n = annot + } + } + +\clist_map_inline:nn {Fo,Bl,D,U,E,X,PO,PC,PV,PI}{\__pdffield_tmpa:n{#1}} -\cs_new_protected:Npn \pdffield_setup:nn #1 #2 +\cs_set_protected:Npn \__pdffield_tmpa:nn #1 #2 + { + \keys_define:nn { pdffield } + { + #1 .meta:nn = + { pdffield }{AA/#2={##1}}, + #1 .groups:n = {annot} + } + } +\__pdffield_tmpa:nn {onfocus} {Fo} +\__pdffield_tmpa:nn {onblur} {Bl} +\__pdffield_tmpa:nn {onmousedown}{D} +\__pdffield_tmpa:nn {onmouseup}{U} +\__pdffield_tmpa:nn {onenter} {E} +\__pdffield_tmpa:nn {onexit} {X} +\cs_new_protected:Npn \pdffield_appearance:nn #1 #2 + { + \pdfxform_new:nnn {#1}{}{#2} + } + +\cs_set_eq:NN \pdffield_store_appearance:nn\pdffield_appearance:nn +\keys_define:nn { pdffield / setup } + { + ,create-style .code:n = { \__pdffield_style_create:nn #1 } + ,preset-checkbox .code:n = + { + \keys_define:nn { pdffield } + { + __pdffield/preset/checkbox .meta:n = {#1}, + } + } + ,preset-textfield .code:n = + { + \keys_define:nn { pdffield } + { + __pdffield/preset/textfield .meta:n = {#1}, + } + } + } +\keys_set:nn{ pdffield / setup }{preset-checkbox={}} +\keys_set:nn{ pdffield / setup }{preset-textfield={}} + +\cs_new_protected:Npn \__pdffield_style_create:nn #1#2 + { + \keys_define:nn { pdffield } + { + __pdffield/style/#1 .meta:n = {#2}, + } + } + +\cs_new_protected:Npn \pdffield_setup:n #1 + { + \keys_set:nn{ pdffield / setup }{#1} + } + +\keys_define:nn { pdffield } + { + style .code:n = {\keys_set:nn {pdffield}{__pdffield/style/#1={#1}}} + } +%% File: l3pdfpdffield-checkbox.dtx +\cs_new_protected:cn {__pdffield/checkbox/default_appearances:} + { + \pdffield_appearance:nn {pdffield/checkbox/default/Yes} + { + \normalsize + \fboxsep 0pt + \framebox + [ \dim_eval:n { \box_ht:N\strutbox+\box_dp:N\strutbox } ] + { \texttimes \strut } + } + \pdffield_appearance:nn {pdffield/checkbox/default/Off} + { + \normalsize + \fboxsep 0pt + \framebox + [ \dim_eval:n { \box_ht:N\strutbox+\box_dp:N\strutbox } ] + { \phantom{\texttimes} \strut } + } + \cs_gset_eq:cN {__pdffield/checkbox/default_appearances:} \prg_do_nothing: + } +\cs_new_protected:Npn \__pdffield_checkbox_field:n #1 %name + { + \pdf_object_if_exist:nF {__pdffield/field/__pdffield/checkbox/#1} + { + \__pdffield_field:n { __pdffield/checkbox/#1 } + } + \keys_set:nn {pdffield}{parent=__pdffield/checkbox/#1} + } +\cs_generate_variant:Nn \__pdffield_checkbox_field:n {V} + +\cs_new_protected:Npn \__pdffield_checkbox:n #1 + { + \group_begin: + \use:c {__pdffield/checkbox/default_appearances:} + \cs_set_eq:NN\__pdffield_appearance_handler:nnn \__pdffield_checkbox_appearance_handler:nnn + \keys_set:nn {pdffield} + { + fieldID=, + name=checkbox, + appearance = pdffield/checkbox/default, + checked=false, + width = \normalbaselineskip, + height = \normalbaselineskip, + } + \__pdffield_key_disable:nnn{checkbox}{V}{checked} + \__pdffield_key_disable:nnn{checkbox}{DV}{checked} + \__pdffield_key_disable:nnn{checkbox}{AS}{checked} + \keys_set:nn { pdffield }{__pdffield/preset/checkbox,#1} + \keys_set:nn { pdffield } + { + ,unsetFf={Radio,Pushbutton} + ,FT= Btn + } + \tl_if_empty:NT\l__pdffield_fieldID_tl + { + \pdfdict_get:nnN {l__pdffield/field}{T}\l__pdffield_fieldID_tl + \tl_put_left:Nn \l__pdffield_fieldID_tl {__pdffield/checkbox/} + } + \__pdffield_checkbox_field:V\l__pdffield_fieldID_tl + \__pdffield_annot: + \group_end: + } +\keys_define:nn { pdffield } { - \keys_set:nn {pdffield / #1 } {#2} + ,checked .choice: + ,checked / false .code:n = + { + \pdfdict_put:nnx { l__pdffield/field }{V} { /Off } + \pdfdict_put:nnx { l__pdffield/field }{DV}{ /Off } + \pdfannot_dict_put:nnn {widget}{AS}{ /Off } + } + ,checked / true .code:n = + { + \pdfdict_put:nnx { l__pdffield/field }{V} { /Yes } + \pdfdict_put:nnx { l__pdffield/field }{DV}{ /Yes } + \pdfannot_dict_put:nnn {widget}{AS}{ /Yes } + } + ,checked .default:n = {true} + ,checked .groups:n = {checkbox} + } +\keys_define:nn { pdffield } + { + fieldID .tl_set:N = \l__pdffield_fieldID_tl } +\cs_new_protected:Npn \__pdffield_checkbox_appearance_handler:nnn #1 #2 #3 %name, type, text + { + \pdfxform_if_exist:nTF { #1/Yes } + { + \pdf_object_if_exist:nF {__pdffield/checkbox/AP/#1} + { + \pdf_object_new:nn {__pdffield/checkbox/AP/#1}{dict} + \pdf_object_write:nx + {__pdffield/checkbox/AP/#1} + { + /Yes ~ \pdfxform_ref:n { #1/Yes} + /Off ~ \pdfxform_ref:n { #1/Off} + } + } + \pdfannot_dict_put:nnx {widget/AP}{#2}{\pdf_object_ref:n{__pdffield/checkbox/AP/#1}} + } + { + \msg_error:nnnn{pdffield}{appearance-missing}{#1}{#3} + } + } + +\cs_set_eq:NN \pdffield_checkbox:n \__pdffield_checkbox:n +%% File: l3pdfpdffield-textfield.dtx + +\tl_new:N \l__pdffield_DA_fontcolor_tl +\dim_new:N \l__pdffield_DA_fontsize_dim +\tl_new:N \l__pdffield_DA_fontname_tl +\cs_new_protected:cn {__pdffield/textfield/default_appearance:} + { + \pdffield_appearance:nn {pdffield/textfield/default} + { + { \color_select:n{black!5!white}\rule{\paperwidth}{\paperheight} } + } + \cs_gset_eq:cN {__pdffield/textfield/default_appearance:} \prg_do_nothing: + } +\cs_new_protected:Npn \__pdffield_textfield_field:n #1 %name + { + \pdf_object_if_exist:nF {__pdffield/field/__pdffield/textfield/#1} + { + \__pdffield_field:n { __pdffield/textfield/#1 } + } + \keys_set:nn {pdffield}{parent=__pdffield/textfield/#1} + } +\cs_generate_variant:Nn \__pdffield_textfield_field:n {V} + +\cs_new_protected:Npn \__pdffield_textfield:n #1 + { + \group_begin: + \cs_set_eq:NN\__pdffield_value_handler:nN \__pdffield_textfield_value_handler:nN + \use:c {__pdffield/textfield/default_appearance:} + \keys_set:nn {pdffield} + { + ,fieldID= + ,name=textfield + ,appearance = pdffield/textfield/default + ,width = 3cm + ,fontsize= \f@size pt + ,height = \f@size pt, + depth = \fp_eval:n {0.3*\f@size} pt, + % font defaults!! + } + \keys_set:nn { pdffield }{__pdffield/preset/textfield,#1} + \int_compare:nNnT {\bitset_item:Nn \l__pdffield_Ff_bitset {Comb}}={1} + { + % warning if set? + \keys_set:nn { pdffield } + { + ,unsetFf={FileSelect,Multiline,Password} + } + \pdfdict_get:nnN {l__pdffield/field}{MaxLen}\l__pdffield_tmpa_tl + \quark_if_no_value:NT \l__pdffield_tmpa_tl + { + \keys_set:nn { pdffield} + { + MaxLen = 10 %variable + } + % warning + } + } + \keys_set:nn { pdffield } + { + ,FT= Tx + ,AS= + ,DA= + { + \pdf_name_from_unicode_e:n{\l__pdffield_DA_fontname_tl} + \c_space_tl + \dim_to_decimal_in_bp:n{\l__pdffield_DA_fontsize_dim} + \c_space_tl + Tf + \c_space_tl + \l__pdffield_DA_fontcolor_tl + \c_space_tl + %\l__pdffield_text_DAextra_tl + } + } + \tl_if_empty:NT\l__pdffield_fieldID_tl + { + \pdfdict_get:nnN {l__pdffield/field}{T}\l__pdffield_fieldID_tl + \tl_put_left:Nn \l__pdffield_fieldID_tl {__pdffield/textfield/} + } -\endinput% -%%%% -%% Appearance -%%checkbox + \__pdffield_textfield_field:V\l__pdffield_fieldID_tl + \__pdffield_annot: + \group_end: + } +\keys_define:nn {pdffield} + { + ,fontcolor .code:n = + { + \__pdffield_color_set:nn {__pdffield/tmp}{#1} + \color_export:nnN{__pdffield/tmp}{space-sep-rgb}\l__pdffield_DA_fontcolor_tl + \tl_put_right:Nn \l__pdffield_DA_fontcolor_tl{~rg} + } + ,fontcolor .initial:n = black, + ,fontcolor .groups:n = {textfield} + ,font .tl_set:N = \l__pdffield_DA_fontname_tl + ,font .initial:n = {Helv} + ,font .groups:n = {textfield} + ,fontsize .dim_set:N = \l__pdffield_DA_fontsize_dim + ,fontsize .initial:n = {10bp} + ,fontsize .groups:n = {textfield} + } +\keys_define:nn { pdffield } + { + fieldID .tl_set:N = \l__pdffield_fieldID_tl + } +\cs_new_protected:Npn \__pdffield_textfield_value_handler:nN #1#2 + { + \pdf_string_from_unicode:nnN {utf8/string}{#1}#2 + } +\cs_set_eq:NN \pdffield_textfield:n \__pdffield_textfield:n %% %% %% End of file `l3pdffield-testphase.sty'. diff --git a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/pdflscape-ltx.sty b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/pdflscape-ltx.sty index d43c363fe5b..43ac3a7ce95 100644 --- a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/pdflscape-ltx.sty +++ b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/pdflscape-ltx.sty @@ -22,7 +22,7 @@ %% This work consists of the main source file pdflscape-ltx.sty %% \NeedsTeXFormat{LaTeX2e} -\ProvidesExplPackage{pdflscape-ltx}{2021-03-17}{0.95c} +\ProvidesExplPackage{pdflscape-ltx}{2021-05-14}{0.95d} {Display of landscape pages in PDF - adaption of pdflscape to the PDFmanagement bundle (testphase)} \RequirePackage{lscape} diff --git a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/pdfmanagement-firstaid.sty b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/pdfmanagement-firstaid.sty index 0bd7d33a23b..e641d3c7357 100644 --- a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/pdfmanagement-firstaid.sty +++ b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/pdfmanagement-firstaid.sty @@ -19,7 +19,7 @@ %% and all files in that bundle must be distributed together. %% %% File: pdfmanagement-firstaid.dtx -\ProvidesExplPackage{pdfmanagement-firstaid}{2021-03-17}{0.95c} +\ProvidesExplPackage{pdfmanagement-firstaid}{2021-05-14}{0.95d} {LaTeX PDF management testphase bundle / firstaid-patches} \clist_map_inline:nn {pgf,transparent,hyperxmp,pdflscape,xcolor,color,beamer} @@ -79,9 +79,9 @@ %objects are already created ... \def\pgf@sys@pdf@possible@resources { - /ColorSpace~\pdf_object_ref:n {Page/Resources/ColorSpace} - /Pattern ~\pdf_object_ref:n {Page/Resources/Pattern} - /ExtGState ~\pdf_object_ref:n {Page/Resources/ExtGState} + /ColorSpace~\pdf_object_ref:n {__pdf/Page/Resources/ColorSpace} + /Pattern ~\pdf_object_ref:n {__pdf/Page/Resources/Pattern} + /ExtGState ~\pdf_object_ref:n {__pdf/Page/Resources/ExtGState} } \let\pgf@sys@pdf@check@resources=\relax% %not sure if needed, but perhaps the lists are used somewhere else ... @@ -111,24 +111,22 @@ } \cs_generate_variant:Nn \tl_trim_spaces:n{V} -\cs_generate_variant:Nn \__pdf_backend_PageResources_gput:nnn {nex} +\cs_generate_variant:Nn \pdfmanagement_add:nnn {nex} \cs_new:Npn \__pdfmanagement_patch_pgfextgs:w #1/#2<<#3>>#4\q_stop { \tl_set:Nx\l_tmpa_tl{#2} - \__pdf_backend_PageResources_gput:nex - {ExtGState}{\tl_trim_spaces:V\l_tmpa_tl}{<<#3 #4>>} + \pdfmanagement_add:nex + {Page/Resources/ExtGState}{\tl_trim_spaces:V\l_tmpa_tl}{<<#3 #4>>} } \cs_new:Npn \__pdfmanagement_patch_pgfpatterns:w #1/#2\space#3\q_stop { - \exp_args:Nnxx - \__pdf_backend_PageResources_gput:nnn - {Pattern}{\tl_trim_spaces:n{#2}}{#3} + \pdfmanagement_add:nex + {Page/Resources/Pattern}{\tl_trim_spaces:n{#2}}{#3} } \cs_new:Npn \__pdfmanagement_patch_pgfcolorspaces:w #1/#2[#3]#4\q_stop { - \exp_args:Nne - \__pdf_backend_PageResources_gput:nnn - {ColorSpace}{\tl_trim_spaces:n{#2}}{[#3]} + \pdfmanagement_add:nex + {Page/Resources/ColorSpace}{\tl_trim_spaces:n{#2}}{[#3]} } \bool_if:NT \g__pdfmanagement_firstaid_transparent_bool diff --git a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/pdfmanagement-testphase.ltx b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/pdfmanagement-testphase.ltx index 32de8d45bc7..847300ef601 100644 --- a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/pdfmanagement-testphase.ltx +++ b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/pdfmanagement-testphase.ltx @@ -27,7 +27,7 @@ %% and all files in that bundle must be distributed together. %% %% File: pdfmanagement-testphase.dtx -\ProvidesExplFile{pdfmanagement-testphase.ltx}{2021-03-17}{0.95c} +\ProvidesExplFile{pdfmanagement-testphase.ltx}{2021-05-14}{0.95d} {PDF~management~code~(testphase)} %% File: l3pdfdict.dtx \cs_new:Npn \__pdfdict_get_type:n #1 @@ -666,15 +666,15 @@ \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_new:nn { __pdfmanagement/Catalog/AA } { dict } \__pdf_backend_object_write:nx - { g__pdfmanagement_/Catalog/AA_obj } + { __pdfmanagement/Catalog/AA } { \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 } + \__pdf_backend_object_ref:n { __pdfmanagement/Catalog/AA } } } } @@ -682,67 +682,67 @@ { \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_new:nn { __pdfmanagement/Catalog/AcroForm/Fields } { array } \__pdf_backend_object_write:nx - { g__pdfmanagement_/Catalog/AcroForm/Fields_obj } + { __pdfmanagement/Catalog/AcroForm/Fields } { \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 } } + { \__pdf_backend_object_ref:n { __pdfmanagement/Catalog/AcroForm/Fields } } } \seq_if_empty:cF { g__pdfmanagement_/Catalog/AcroForm/CO_seq } { - \__pdf_backend_object_new:nn { g__pdfmanagement_/Catalog/AcroForm/CO_obj } { array } + \__pdf_backend_object_new:nn { __pdfmanagement/Catalog/AcroForm/CO } { array } \exp_args:Nnx \__pdf_backend_object_write:nn - { g__pdfmanagement_/Catalog/AcroForm/CO_obj } + { __pdfmanagement/Catalog/AcroForm/CO } { \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 } } + { \__pdf_backend_object_ref:n { __pdfmanagement/Catalog/AcroForm/CO } } } \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} + \__pdf_backend_object_new:nn { __pdfmanagement/Catalog/AcroForm/DR/Font } {dict} \exp_args:Nnx \__pdf_backend_object_write:nn - { g__pdfmanagement_/Catalog/AcroForm/DR/Font_obj } + { __pdfmanagement/Catalog/AcroForm/DR/Font } { \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 } } + { \__pdf_backend_object_ref:n { __pdfmanagement/Catalog/AcroForm/DR/Font } } } \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} + \__pdf_backend_object_new:nn { __pdfmanagement/Catalog/AcroForm/DR } {dict} \exp_args:Nnx \__pdf_backend_object_write:nn - { g__pdfmanagement_/Catalog/AcroForm/DR_obj } + { __pdfmanagement/Catalog/AcroForm/DR } { \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 } } + { \__pdf_backend_object_ref:n { __pdfmanagement/Catalog/AcroForm/DR } } } \prop_if_empty:cF { \__kernel_pdfdict_name:n { g__pdf_Core/Catalog/AcroForm} } { - \__pdf_backend_object_new:nn { g__pdfmanagement_/Catalog/AcroForm_obj } {dict} + \__pdf_backend_object_new:nn { __pdfmanagement/Catalog/AcroForm } {dict} \exp_args:Nnx \__pdf_backend_object_write:nn - { g__pdfmanagement_/Catalog/AcroForm_obj } + { __pdfmanagement/Catalog/AcroForm } { \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 } } + { \__pdf_backend_object_ref:n { __pdfmanagement/Catalog/AcroForm } } } } @@ -751,16 +751,16 @@ \seq_if_empty:cF { g__pdfmanagement_/Catalog/AF_seq } { - \__pdf_backend_object_new:nn { g__pdfmanagement_/Catalog/AF_obj } { array } + \__pdf_backend_object_new:nn { __pdfmanagement/Catalog/AF } { array } \exp_args:Nnx \__pdf_backend_object_write:nn - { g__pdfmanagement_/Catalog/AF_obj } + { __pdfmanagement/Catalog/AF } { \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} + \__pdf_backend_object_ref:n {__pdfmanagement/Catalog/AF} } } } @@ -769,16 +769,16 @@ \prop_if_empty:cF { \__kernel_pdfdict_name:n { g__pdf_Core/Catalog/MarkInfo } } { - \__pdf_backend_object_new:nn { g__pdfmanagement_/Catalog/MarkInfo_obj } { dict } + \__pdf_backend_object_new:nn { __pdfmanagement/Catalog/MarkInfo } { dict } \exp_args:Nnx \__pdf_backend_object_write:nn - { g__pdfmanagement_/Catalog/MarkInfo_obj } + { __pdfmanagement/Catalog/MarkInfo } { \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} + \__pdf_backend_object_ref:n {__pdfmanagement/Catalog/MarkInfo} } } } @@ -792,10 +792,10 @@ > { 0 } { - \__pdf_backend_object_new:nn { g__pdfmanagement_/Catalog/OCProperties_obj } { dict } + \__pdf_backend_object_new:nn { __pdfmanagement/Catalog/OCProperties } { 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} + \__pdf_backend_object_write:nn {__pdfmanagement/Catalog/OCProperties} { /OCGs~[ \seq_use:cn { g__pdfmanagement_/Catalog/OCProperties/OCGs_seq } {~} ] /D~\l_tmpa_tl~ @@ -808,7 +808,7 @@ \exp_args:Nnx \__pdf_backend_catalog_gput:nn { OCProperties } - { \__pdf_backend_object_ref:n {g__pdfmanagement_/Catalog/OCProperties_obj} } + { \__pdf_backend_object_ref:n {__pdfmanagement/Catalog/OCProperties} } } } \cs_new_protected:cpn { __pdfmanagement_/Catalog/OutputIntents_gpush: } @@ -816,16 +816,16 @@ \seq_if_empty:cF { g__pdfmanagement_/Catalog/OutputIntents_seq } { - \__pdf_backend_object_new:nn { g__pdfmanagement_/Catalog/OutputIntents_obj } { array } + \__pdf_backend_object_new:nn { __pdfmanagement/Catalog/OutputIntents } { array } \exp_args:Nnx \__pdf_backend_object_write:nn - { g__pdfmanagement_/Catalog/OutputIntents_obj } + { __pdfmanagement/Catalog/OutputIntents } { \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} + \__pdf_backend_object_ref:n {__pdfmanagement/Catalog/OutputIntents} } } } @@ -834,16 +834,16 @@ \seq_if_empty:cF { g__pdfmanagement_/Catalog/Requirements_seq } { - \__pdf_backend_object_new:nn { g__pdfmanagement_/Catalog/Requirements_obj } { array } + \__pdf_backend_object_new:nn { __pdfmanagement/Catalog/Requirements } { array } \exp_args:Nnx \__pdf_backend_object_write:nn - { g__pdfmanagement_/Catalog/Requirements_obj } + { __pdfmanagement/Catalog/Requirements } { \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 } + \__pdf_backend_object_ref:n { __pdfmanagement/Catalog/Requirements } } } } @@ -852,16 +852,16 @@ \prop_if_empty:cF { \__kernel_pdfdict_name:n { g__pdf_Core/Catalog/ViewerPreferences } } { - \__pdf_backend_object_new:nn { g__pdfmanagement_/Catalog/ViewerPreferences_obj } { dict } + \__pdf_backend_object_new:nn { __pdfmanagement/Catalog/ViewerPreferences } { dict } \exp_args:Nnx \__pdf_backend_object_write:nn - { g__pdfmanagement_/Catalog/ViewerPreferences_obj } + { __pdfmanagement/Catalog/ViewerPreferences } { \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} + \__pdf_backend_object_ref:n {__pdfmanagement/Catalog/ViewerPreferences} } } } @@ -1063,21 +1063,56 @@ } \pdfdict_new:n { l__pdfannot/widget } + \pdfdict_new:n { l__pdfannot/widget/AA } + \pdfdict_new:n { l__pdfannot/widget/AP } + \pdfdict_new:n { l__pdfannot/widget/MK } + \pdfdict_new:n { l__pdfannot/widget/BS } \pdfdict_put:nnn { l__pdfannot/widget }{ Subtype }{ /Widget } \hook_new_pair:nn {pdfannot/widget/before} {pdfannot/widget/after} - \hook_new_pair:nn - {pdfannot/widget/begin} - {pdfannot/widget/end} \cs_new_protected:Npn \pdfannot_widget_box:nnn #1 #2 #3 { \hook_use:n { pdfannot/widget/before } + \group_begin: + \pdfmeta_standard_verify:nT + {annot_widget_no_AA} + { + \pdfdict_if_empty:nF { l__pdfannot/widget/AA } + { + \pdf_object_unnamed_write:nx {dict}{\pdfdict_use:n{l__pdfannot/widget/AA}} + \pdfdict_put:nnx { l__pdfannot/widget } + {AA} + {\pdf_object_ref_last:} + } + } + \pdfdict_if_empty:nF { l__pdfannot/widget/AP } + { + \pdf_object_unnamed_write:nx {dict}{\pdfdict_use:n{l__pdfannot/widget/AP}} + \pdfdict_put:nnx { l__pdfannot/widget } + {AP} + {\pdf_object_ref_last:} + } + \pdfdict_if_empty:nF { l__pdfannot/widget/MK } + { + \pdf_object_unnamed_write:nx {dict}{\pdfdict_use:n{l__pdfannot/widget/MK}} + \pdfdict_put:nnx { l__pdfannot/widget } + {MK} + {\pdf_object_ref_last:} + } + \pdfdict_if_empty:nF { l__pdfannot/widget/BS } + { + \pdf_object_unnamed_write:nx {dict}{\pdfdict_use:n{l__pdfannot/widget/BS}} + \pdfdict_put:nnx { l__pdfannot/widget } + {BS} + {\pdf_object_ref_last:} + } \pdfannot_box:nnnx {#1}{#2}{#3} { \pdfdict_use:n { l__pdfannot/widget} } - \hook_use:n { pdfannot/widget/after } + \hook_use:n { pdfannot/widget/end } + \group_end: \bool_gset_false:N\g__pdfannot_use_lastlink_bool } \seq_const_from_clist:Nn \c_pdfannot_link_types_seq { URI , GoToR , Launch , GoTo, Named } @@ -1721,6 +1756,7 @@ ,.tex = text/plain %or application/x-tex, not in iana.org list ,.txt = text/plain ,.sty = text/plain + ,.xml = text/xml } \str_new:N \l_pdffile_source_name_str \pdfdict_new:n { l_pdffile } @@ -1837,7 +1873,6 @@ \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 } @@ -1896,6 +1931,7 @@ } \tl_if_blank:nTF { #2 } { + \pdf_object_new:nn { #3 } {dict} \exp_args:Nnnx \__pdffile_filespec_write:nnn %#1 dict, #2 target file name, #3 object ref @@ -1904,6 +1940,7 @@ {\l__pdffile_embed_ref_tl} } { + \pdf_object_new:nn { #3 } {dict} \exp_args:Nnnx \__pdffile_filespec_write:nnn %#1 dict, #2 target file name, #3 object ref @@ -1933,6 +1970,7 @@ { #1 } \l__pdffile_automimetype_tl \tl_set:Nx \l__pdffile_embed_ref_tl { \pdf_object_ref_last: } + \pdf_object_new:nn { #3 } {dict} \exp_args:Nnxx \__pdffile_filespec_write:nnn %#1 dict, #2 target file name, #3 object ref diff --git a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/pdfmanagement-testphase.sty b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/pdfmanagement-testphase.sty index 21614ec555a..3161539cf01 100644 --- a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/pdfmanagement-testphase.sty +++ b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/pdfmanagement-testphase.sty @@ -19,7 +19,7 @@ %% and all files in that bundle must be distributed together. %% %% File: pdfmanagement-testphase.dtx -\ProvidesExplPackage{pdfmanagement-testphase}{2021-03-17}{0.95c} +\ProvidesExplPackage{pdfmanagement-testphase}{2021-05-14}{0.95d} {LaTeX PDF management testphase bundle} \providecommand\IfFormatAtLeastTF{\@ifl@t@r\fmtversion} \IfFormatAtLeastTF{2020-10-01}{}{ diff --git a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/transparent-ltx.sty b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/transparent-ltx.sty index 8d5abb7e2a3..4b4030c4b2f 100644 --- a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/transparent-ltx.sty +++ b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/transparent-ltx.sty @@ -3,7 +3,7 @@ %% a replacement for transparent sty from Heiko Oberdiek %% \NeedsTeXFormat{LaTeX2e}[2020/10/01] -\ProvidesExplPackage{transparent-ltx}{2021-03-17}{0.95c} +\ProvidesExplPackage{transparent-ltx}{2021-05-14}{0.95d} {Transparency with color stacks (replacement for transparent.sty from Heiko Oberdiek)}% \RequirePackage{l3opacity} diff --git a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty index aec0fbb6321..76aee08fef9 100644 --- a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty +++ b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/xcolor-patches-tmp-ltx.sty @@ -1,26 +1,44 @@ %% LaTeX2e file `xcolor-patches.sty' %% -\ProvidesPackage{xcolor-patches-tmp-ltx}[2021-03-17 v0.95c patch xcolor for l3color] +\ProvidesPackage{xcolor-patches-tmp-ltx}[2021-05-14 v0.95d patch xcolor for l3color] \@ifundefined{color_set:nn}{\RequirePackage{l3color}}{} \ExplSyntaxOn -\cs_gset_protected:Npn \@expl@xcolor@set@@nnn #1 #2 #3 +% #1 is the color name +% #2: model or models +% #3: value: either numbers or a color name +% #4 is the type: named or ps +\cs_gset_protected:Npn \@expl@xcolor@set@@nnnn #1 #2 #3 #4 { - \cs_if_exist:cTF { __color_parse_model_ #2 :w } - { - \color_set:nnn {#1}{#2}{#3} - } - { - \tl_if_eq:nnTF{#2}{named} - { - \color_set:nn{#1}{#3} - } - { - %this is for multi models, it will break if there is model - %l3 doesn't know, but the case is rare, so accept it for now. - \color_set:nnn{#1}{#2}{#3} - } - } + \str_case:nnF {#4} + { + % we ignore the ps type for now. + {ps}{} + {named} + { + \cs_if_exist:cT { __color_parse_model_ #2 :w } + { + \color_set:nnn {#1}{#2}{#3} + } + } + } + { + \cs_if_exist:cTF { __color_parse_model_ #2 :w } + { + \color_set:nnn {#1}{#2}{#3} + } + { + \tl_if_eq:nnTF{#2}{named}%this the model not the type! + { + \color_set:nn{#1}{#3} + } + { + %this is for multi models, it will break if there is model + %l3 doesn't know, but the case is rare, so accept it for now. + \color_set:nnn{#1}{#2}{#3} + } + } + } } \cs_generate_variant:Nn \color_set:nn {ne} \cs_new_protected:Npn \@expl@xcolor@set@@ne #1 #2 @@ -58,7 +76,7 @@ %\pretocmd{\XC@definec@lor}{\@expl@color@set@@nnn{#2}{#4}{#5}}{}{\fail} \def\XC@definec@lor[#1]#2[#3]#4#5% - {\@expl@xcolor@set@@nnn{#2}{#4}{#5}% + {\@expl@xcolor@set@@nnnn{#2}{#4}{#5}{#1}% \begingroup \XC@sdef\@@cls{#1}\XC@edef\@@nam{#2}\edef\colornameprefix{#3}% \XC@logdef\@@nam -- cgit v1.2.3