diff options
Diffstat (limited to 'Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3pdffield-testphase.sty')
-rw-r--r-- | Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3pdffield-testphase.sty | 455 |
1 files changed, 455 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3pdffield-testphase.sty b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3pdffield-testphase.sty new file mode 100644 index 00000000000..ed28f7b00e6 --- /dev/null +++ b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/l3pdffield-testphase.sty @@ -0,0 +1,455 @@ +%% +%% This is file `l3pdffield-testphase.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% l3pdffield.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: l3pdfpdffield-checkbox.dtx +\NeedsTeXFormat{LaTeX2e} +\ProvidesExplPackage{l3pdffield-checkbox}{0000-00-00}{v0.00a}{form field checkbox}% +\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 +\msg_new:nnn {pdffield}{no-period} + { + The~field~name~`#1`~contains~a~period. \\ + This~is~not~allowed. ` + } +\msg_new:nnn {pdffield}{empty-name} + { + The~field~name~is~empty. \\ + This~is~not~allowed. ` + } +\msg_new:nnn {pdffield}{appearance-missing} + { + The~appearance~`#1`~is~missing~for~the~#2~appearance. + } +\msg_new:nnn {pdffield}{field-keys-ignored} + { + The~field~`#1`~is~already~initialized\\ + The~field~keys~`#2`~are~ignored. + } + +\bitset_new:Nn \l__pdffield_Ff_bitset + { + ReadOnly = 0, + Required = 1, + NoExport = 2, + Multiline = 12,%Tx + Password = 13, + NoToggleToOff = 14,%Btn, radio button + Radio = 15,%Btn: Radio: 15=1, 16=0 + Pushbutton = 16,%Btn: Checkbox: 15=0, 16=0 + %Btn: Pushbutton: 16=1 + Combo = 17,%Ch: Combo=1 List=0 + Edit = 18,%Ch, Combo=1 -> + edit field + Sort = 19,%Ch, not relevant for view... + FileSelect = 20,%Tx + MultiSelect = 21,%Ch + DoNotSpellCheck = 22,%Tx, Ch (if Combo + Edit set) + DoNotScroll = 23,%Tx + Comb = 24,%Tx, requires MaxLen in dict + RadiosInUnison = 25,%Btn Radio + RichText = 25,%Tx + CommitOnSelChange = 26 + } + +\bitset_new:Nn \l__pdffield_F_bitset + { + 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 + { + \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: + } + +\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, + { + \group_begin: + \pdfdict_put:nnx {l__pdffield/checkbox/annot}{AP}{<<\pdfdict_use:n{l__pdffield/checkbox/annot/AP}>>} + \pdfmeta_standard_verify:nF + {annot_flags} + { + \bitset_set_true:Nn \l__pdffield_F_bitset {Print} + \bitset_set_false:Nn \l__pdffield_F_bitset {Hidden} + \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} + { + \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}} + \mode_leave_vertical: + \hbox_to_wd:nn + { #2 } + { + \rule [-#4]{0pt}{\dim_eval:n{#3+#4} } + \pdfannot_widget_box:nnn + { #2 } + { #3 } + { #4 } + \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} + } + +\cs_new_protected:Nn \__pdffield_store_default_appearances: + { + \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 } + } + } + +\__pdffield_store_default_appearances: +\pdfdict_new:n {l__pdffield/checkbox/annot/AP} + +\cs_new_protected:Npn \__pdffield_checkbox_add:n #1 + { + \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: + } +\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 } + { + ,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 + } +\keys_define:nn { pdffield / checkbox } + { + ,name .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 {.} + { + \msg_error:nnx {pdffield}{no-period}{\l__pdffield_field_name_str} + } + \str_if_empty:NT\l__pdffield_field_name_str + { + \msg_error:nn {pdffield}{empty-name} + } + } + ,name .value_required:n = true + ,name .initial:n = checkbox + ,altname .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} + } + ,altname .groups:n = {field} + ,mappingname .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} + } + ,mappingname .groups:n = {field} + } + +\keys_define:nn { pdffield / checkbox } + { + ,checked .choice: + ,checked / false .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} + } + ,checked / true .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} + } + ,checked .default:n = {true} + ,checked .initial:n = {false} + } +\keys_define:nn { pdffield / checkbox } + { + ,setfieldflags .code:n = + { + \clist_map_inline:nn {#1} + { + \bitset_set_true:Nn \l__pdffield_Ff_bitset {##1} + } + } + ,setfieldflags .groups:n = {field} + ,unsetfieldflags .code:n = + { + \clist_map_inline:nn {#1} + { + \bitset_set_false:Nn \l__pdffield_Ff_bitset {##1} + } + } + ,unsetfieldflags .groups:n = {field} + ,setannotflags .code:n = + { + \clist_map_inline:nn {#1} + { + \bitset_set_true:Nn \l__pdffield_F_bitset {##1} + } + } + ,unsetannotflags .code:n = + { + \clist_map_inline:nn {#1} + { + \bitset_set_false:Nn \l__pdffield_F_bitset {##1} + } + } + } + +\keys_define:nn { pdffield / checkbox } + { + appearance .code:n = %value is a name of an appearance + { + \pdfxform_if_exist:nTF { __pdffield_#1/Yes } + { + \pdfdict_put:nnn {l__pdffield/checkbox/annot/AP} + {N} + { + << + /Yes ~ \pdfxform_ref:n { __pdffield_#1/Yes} + /Off ~ \pdfxform_ref:n { __pdffield_#1/Off} + >> + } + } + { + \msg_error:nnnn{pdffield}{appearance-missing}{#1}{normal} + } + }, + appearance .initial:n = checkbox/default, + } + +\keys_define:nn { pdffield / checkbox } + { + rollover-appearance .code:n = %value is a name of an appearance + { + \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} + } + + } + }, + } + +\keys_define:nn { pdffield / checkbox } + { + down-appearance .code:n = %value is a name of an appearance + { + \tl_if_empty:nTF {#1} + { + \pdfdict_remove:nn {l__pdffield/checkbox/annot/AP} {D} + } + { + \pdfxform_if_exist:nTF { __pdffield_#1/Yes } + { + \pdfdict_put:nnn {l__pdffield/checkbox/annot/AP} + {D} + { + << + /Yes ~ \pdfxform_ref:n { __pdffield_#1/Yes} + /Off ~ \pdfxform_ref:n { __pdffield_#1/Off} + >> + } + } + { + \msg_warning:nnnn{pdffield}{appearance-missing}{#1}{down} + } + } + }, + } +\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 + { + \keys_define:nn { pdffield / checkbox } + { + #1 .code:n = + { + \pdf_string_from_unicode:nnN {utf8/string}{##1}\l__pdffield_tmpa_str + \str_if_empty:NTF \l__pdffield_tmpa_str + { + \pdfdict_remove:nn {l__pdffield/checkbox/#3/AA}{#2} + } + { + \pdfdict_put:nnx {l__pdffield/checkbox/#3/AA} + {#2} + {<</S/JavaScript/JS\l__pdffield_tmpa_str>>} + } + }, + #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 + +\cs_new_protected:Npn \pdffield_setup:nn #1 #2 + { + \keys_set:n {pdffield / #1 } {#2} + } + +\endinput% +%%%% +%% Appearance +%%checkbox +%% +%% +%% End of file `l3pdffield-testphase.sty'. |