summaryrefslogtreecommitdiff
path: root/Master/texmf-dist/tex/latex/pdfmanagement-testphase/hgeneric-testphase.def
diff options
context:
space:
mode:
Diffstat (limited to 'Master/texmf-dist/tex/latex/pdfmanagement-testphase/hgeneric-testphase.def')
-rw-r--r--Master/texmf-dist/tex/latex/pdfmanagement-testphase/hgeneric-testphase.def3348
1 files changed, 3348 insertions, 0 deletions
diff --git a/Master/texmf-dist/tex/latex/pdfmanagement-testphase/hgeneric-testphase.def b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/hgeneric-testphase.def
new file mode 100644
index 00000000000..06cb3a8c5db
--- /dev/null
+++ b/Master/texmf-dist/tex/latex/pdfmanagement-testphase/hgeneric-testphase.def
@@ -0,0 +1,3348 @@
+%%
+%% This is file `hgeneric-testphase.def',
+%% generated with the docstrip utility.
+%%
+%% The original source files were:
+%%
+%% hyperref-generic.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: hyperref-generic.dtx
+\ProvidesFile{hgeneric-testphase.def}
+ [2021/02/22 v0.95a %
+ generic Hyperref driver for the LaTeX PDF management testphase bundle]
+
+\RequirePackage{etoolbox} %why?
+\ExplSyntaxOn
+\file_input:n {hyperref-colorschemes.def}
+\ExplSyntaxOff
+\ExplSyntaxOn
+\prop_gput:Nnn \g_msg_module_name_prop { hyp }{ hyperref }
+\msg_new:nnnn
+ { hyp }
+ { missing-resource-management }
+ { The~PDF~resource~management~is~required~for~this~hyperref~driver! }
+ {
+ Activate~it~with \\
+ \tl_to_str:n{\RequirePackage{pdfmanagement-testphase}}\\
+ \tl_to_str:n{\DeclareDocumentMetadata{<options>}}\\
+ before~\tl_to_str:n{\documentclass}
+ }
+\msg_new:nnnn
+ { hyp }
+ { pdfversion-disabled }
+ {
+ This~hyperref~driver~ignores~the~pdfversion~key!\\
+ Set~the~pdfversion~in~\token_to_str:N \DeclareDocumentMetadata
+ }
+ {
+ For example:\\
+ \tl_to_str:n
+ {
+ \DeclareDocumentMetadata { pdfversion=1.7 }
+ }
+ }
+\msg_new:nnn
+ { hyp }
+ { key-dropped }
+ {
+ This~hyperref~driver~ignores~the~key~#1!\\
+ Please~check~the~documentation.
+ }
+\msg_new:nnn
+ { hyp }
+ { pdfa-no-push-button }
+ { PDF/A:~Push~button~with~JavaScript~is~prohibited }
+
+\msg_new:nnn
+ { hyp }
+ { pdfa-no-reset-button }
+ { PDF/A:~Reset~action~is~prohibited }
+\msg_new:nnn
+ { hyp }
+ { pdfa-no-named-action }
+ { PDF/A:~Named~action~#1~is~prohibited }
+\msg_new:nnn
+ { hyp }
+ { empty-destination-name }
+ {
+ Empty~destination~name,\\
+ using~`#1'
+ }
+\msg_new:nnn
+ { hyp }
+ { invalid-destination-value }
+ {
+ Invalid~value~`#1'~of~`#2' \\
+ is~replaced~by~`Fit'~\msg_line_context:.
+ }
+\msg_new:nnn
+ { hyp }
+ { ignore-deprecated-or-unknown-option-in-pdf-version }
+ {
+ Option~`#1'~is~unknown~or~deprecated~in\\
+ pdf~version~#2.~Ignored.
+ }
+\msg_new:nnn
+ { hyp }
+ { ignore-deprecated-or-unknown-value-in-pdf-version }
+ {
+ Value~`#1'~is~unknown~or~deprecated~in\\
+ pdf~version~#2.~Ignored.
+ }
+\msg_new:nnn
+ { hyp }
+ { replace-deprecated-or-unknown-value-in-pdf-version }
+ {
+ Value~`#1'~is~unknown~or~deprecated~in\\
+ pdf~version~#2. Value~`#3'~is used instead.
+ }
+\msg_new:nnn
+ { hyp }
+ { unknown-key }
+ {
+ unknown~key~#2~of~module~’#1’~set~to~’#3’.
+ }
+\msg_new:nnn
+ { hyp }
+ { unknown-key-to-Hyp }
+ {
+ ignored~in~family~Hyp~unknown~key~#1.
+ }
+\cs_new:Npn \__hyp_clist_display:n #1 {*~#1\\}
+\msg_new:nnn
+ { hyp }
+ { unknown-choice }
+ {
+ Value~'#3'~is~invalid~for~key~'#1'.\\
+ The~key~accepts~only~the~choices\\
+ \clist_map_function:nN { #2 }\__hyp_clist_display:n
+ }
+
+\msg_new:nnn
+ { hyp }
+ { unknown-choice+empty }
+ {
+ Value~'#3'~is~invalid~for~key~'#1'.\\
+ The~key~accepts~only~the~choices\\
+ \clist_map_function:nN { #2 }\__hyp_clist_display:n
+ An~empty~value~removes~the~setting.
+ }
+
+\msg_new:nnn
+ { hyp }
+ { no-bool }
+ {
+ Value~'#2'~is~invalid~for~key~'#1'.\\
+ The~key~accepts~only~the~choices\\
+ *~true\\
+ *~false \\
+ *~and~an~empty~value~which~removes~the~setting.\\
+ No~value~is~equivalent~to~using~`true`.
+ }
+\cs_generate_variant:Nn\pdf_destination:nn {nf}
+\chardef\Hy@VersionChecked=1 %don't check the version!
+\cs_set_eq:NN \hypercalcbp \dim_to_decimal_in_bp:n
+\providecommand\@pdfborder{}
+\providecommand\@pdfborderstyle{}
+\newcommand\OBJ@OCG@view {} % needed in hyperref
+\def\Hy@numberline#1{#1\c_space_tl} %needed by bookmark
+\HyPsd@LoadUnicode
+\Hy@unicodetrue
+\let\HyPsd@pdfencoding\HyPsd@pdfencoding@unicode
+\Hy@DisableOption{unicode}
+\cs_set_eq:NN \Hy@pdfminorversion \pdf_version_minor:
+\cs_set_eq:NN \Hy@pdfmajorversion \pdf_version_major:
+\legacy_if:nT { Hy@setpdfversion }
+ {
+ \msg_warning:nn { hyp }{ pdfversion-disabled }
+ }
+\Hy@DisableOption{pdfversion}
+\RenewDocumentCommand \Acrobatmenu { m m }
+ {
+ \hyper@linknamed {#1} {#2}
+ }
+\cs_set_protected:Npn \hypersetup #1
+ {
+ %\kvsetkeys{Hyp} {#1}
+ \keys_set:nn { hyp / setup }{ #1 }
+ }
+\keys_define:nn { hyp / setup }
+ {
+ unknown .code:n =
+ {
+ \msg_warning:nnxxx { hyp } { unknown-key }
+ { hyp~/~setup }{ \l_keys_key_str } { #1 }
+ }
+ }
+\cs_new_protected:Npn \__hyp_store_metadata:nn #1 #2 %#1 key, #2 value.
+ {
+ %\tl_set:cn {@#1}{#2}
+ \AddToDocumentProperties[hyperref]{#1}{#2}
+ }
+\cs_generate_variant:Nn \__hyp_store_metadata:nn {xn,nx,xx}
+\hook_new:n{hyp/link/cite}
+\color_set:nnn {hyp/color/cite}{HTML}{2E7E2A}
+\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}}
+ ,citebordercolor
+ .code:n = {\__hyp_color_set:nn {hyp/color/citeborder}{#1}}
+ }
+\hook_gput_code:nnn { hyp/link/cite }{hyp/cite}
+ {
+ \keys_set:nn { hyp / setup }
+ {
+ ,linkbordercolor= hyp/color/citeborder
+ ,linkcolor = hyp/color/cite
+ }
+ }
+\bool_lazy_and:nnF
+ { \cs_if_exist_p:N \pdfmanagement_if_active_p: }{ \pdfmanagement_if_active_p: }
+ { \msg_error:nn { hyp}{ missing-resource-management } }
+\legacy_if:nT { Hy@bookmarks }
+ {
+ \AddToHook{begindocument/before}[hyperref/bookmark]{\RequirePackage{bookmark}}
+ }
+\legacy_if:nT {Hy@draft}
+ {
+ \PassOptionsToPackage{draft}{bookmark}
+ }
+\cs_new_protected:Npn \__hyp_ref_label:nn #1 #2 %label/attributes
+ {
+ \@bsphack
+ \ref_label:nn{#1}{#2}
+ \@esphack
+ }
+\cs_generate_variant:Nn \__hyp_ref_label:nn {en}
+\prg_new_eq_conditional:NNn \__hyp_ref_if_exist:nn \ref_if_exist:nn { p , T , F, TF }
+\prg_generate_conditional_variant:Nnn \__hyp_ref_if_exist:nn {en} { p , T , F, TF }
+\cs_new_protected:Npn \__hyp_ref_check:nn #1 #2 %label/attribute
+ {
+ \__hyp_ref_if_exist:nnF {#1}{#2}
+ {
+ \protect\G@refundefinedtrue
+ \@latex@warning
+ {
+ Reference~`\tl_to_str:n {#1}'~with~attribute~`\tl_to_str:n {#2}'~
+ on~page~\thepage~\space undefined
+ }
+ }
+ }
+\cs_generate_variant:Nn \__hyp_ref_check:nn {en}
+\cs_new:Npn \__hyp_ref_value:nn #1 #2
+ {
+ \ref_value:nn{#1}{#2}
+ }
+\cs_generate_variant:Nn \__hyp_ref_value:nn {en}
+\box_new:N \l__hyp_tmpa_box
+\tl_new:N \l__hyp_tmpa_tl
+\seq_new:N \l__hyp_tmpa_seq
+\int_new:N \l__hyp_tmpa_int
+\str_new:N \l__hyp_tmpa_str
+\tl_new:N \l__hyp_dest_name_tmpa_tl
+\tl_new:N \l__hyp_uri_tmpa_tl
+\tl_new:N \l__hyp_filename_tmpa_tl
+\tl_new:N \l__hyp_para_tmpa_tl
+\str_new:N \l__hyp_text_tmpa_str
+\str_new:N \g__hyp_text_tmpa_str
+\tl_const:Nn \c__hyp_dest_undefined_tl {UNDEFINED}
+\seq_const_from_clist:Nn \c__hyp_annot_types_seq
+ {url,link,file,menu,run}
+\prop_const_from_keyval:Nn \c__hyp_map_annot_hyp_prop
+ {
+ URI = url,
+ GoTo = link,
+ GoToR = file,
+ Named = menu,
+ Launch= run
+ }
+\prop_const_from_keyval:Nn \c__hyp_map_hyp_annot_prop
+ {
+ url = URI,
+ link = GoTo,
+ file = GoToR,
+ menu = Named,
+ run = Launch
+ }
+
+\tl_new:N \g__hyp_dest_pdfstartpage_tl
+\tl_new:N \g__hyp_dest_pdfstartview_tl
+\tl_new:N \l__hyp_dest_pdfremotestartview_tl
+\tl_new:N \l__hyp_text_enc_uri_print_tl
+\tl_new:N \l__hyp_text_enc_info_print_tl
+\tl_new:N \l__hyp_text_enc_dest_tl
+\tl_new:N \l__hyp_text_enc_dest_print_tl
+\tl_new:N \l__hyp_text_enc_file_print_tl
+\tl_new:N \l__hyp_text_enc_para_print_tl
+
+\tl_set:Nn \l__hyp_text_enc_uri_print_tl {utf8/URI}
+\tl_set:Nn \l__hyp_text_enc_info_print_tl {utf16/hex}
+\tl_set:Nn \l__hyp_text_enc_dest_tl {utf8/string-raw}
+\tl_set:Nn \l__hyp_text_enc_dest_print_tl {utf8/string}
+\tl_set:Nn \l__hyp_text_enc_file_print_tl {utf8/string}
+\tl_set:Nn \l__hyp_text_enc_para_print_tl {utf8/string}
+\tl_new:N \l__hyp_dest_pdfview_tl
+\str_new:N \g__hyp_bordercolormodel_str
+\seq_map_inline:Nn \c__hyp_annot_types_seq
+ {
+ \bool_new:c {l_hyp_annot_color#1_bool}
+ }
+\seq_map_inline:Nn \c__hyp_annot_types_seq
+ {
+ \bool_new:c {l_hyp_annot_ocgcolor#1_bool}
+ }
+\seq_map_inline:Nn \c_pdfannot_link_types_seq
+ {
+ \bool_new:c {l__hyp_annot_#1_bool}
+ \bool_set_true:c {l__hyp_annot_#1_bool}
+ }
+\box_new:N \l__hyp_dest_box
+
+\regex_const:Nn \c__hyp_dest_startview_regex
+ {
+ \A\ *
+ (?:
+ (?:XYZ (?:\ +(?:(?:\d+|\d*\.\d+)|null)){3}\ )
+ |
+ (?:Fit\b|FitB\b)
+ |
+ (?:(?:FitH|FitV|FitBH|FitBV)(?:\ +(?:\d+|\d*\.\d+)|\ +null){1})
+ |
+ (?:FitR (?:\ +\d+|\ +\d*\.\d+){4}\ )
+ )
+ }
+\pdfdict_new:n {l__hyp_page/Trans}
+\pdfdict_put:nnn {l__hyp_page/Trans}{Type}{/Trans}
+
+\hook_new:n {hyp/text/pdfstring}
+\cs_new_protected:Npn \__hyp_text_purify:nN #1 #2 %#1 input, #2 str command
+ {
+ \str_set:Nx #2 {\text_purify:n { #1 } }
+ }
+\cs_new_protected:Npn \__hyp_text_cleanup:N #1
+ {
+
+ }
+\cs_new_protected:Npn \__hyp_text_string_from_unicode:nN #1 #2
+ {
+ \pdf_string_from_unicode:nVN { #1 } #2 #2
+ }
+\cs_new_protected:Npn \__hyp_text_pdfstring:nnN #1 #2 #3
+ {
+ \group_begin:
+ \Hy@pdfstringtrue
+ \hook_use:n {hyp/text/pdfstring}
+ \__hyp_text_purify:nN { #1 } \l__hyp_text_tmpa_str
+ \__hyp_text_cleanup:N \l__hyp_text_tmpa_str
+ \__hyp_text_string_from_unicode:nN { #2 } \l__hyp_text_tmpa_str
+ \str_gset_eq:NN \g__hyp_text_tmpa_str\l__hyp_text_tmpa_str
+ \group_end:
+ \str_set_eq:NN #3 \g__hyp_text_tmpa_str
+ }
+\cs_generate_variant:Nn \__hyp_text_pdfstring:nnN {xnN,onN,xoN,ooN,noN}
+\cs_new_protected:Npn\Hy@pstringdef #1 #2
+ { \__hyp_text_pdfstring:xnN {#2} {utf8/string-raw}#1 }
+\cs_new_protected:Npn \__hyp_text_pdfstring_info:nN #1 #2
+ {
+ \__hyp_text_pdfstring:noN { #1 }{ \l__hyp_text_enc_info_print_tl } #2
+ }
+\cs_new_protected:Npn\__hyp_PageLabels_gpush:
+ {
+ \pdfmanagement_add:nnx {Catalog} {PageLabels}{<</Nums[\HyPL@Labels]>>}
+ }
+
+\def\Hy@PutCatalog #1 {}
+
+\legacy_if:nT { Hy@pdfpagelabels }
+ {
+ \cs_set_protected:Npn \HyPL@StorePageLabel #1
+ {
+ \tl_gput_right:Nx \HyPL@Labels { \the\Hy@abspage<<#1>> }
+ \__hyp_PageLabels_gpush:
+ }
+ }
+\Hy@WrapperDef \__hyp_destination:nn #1 #2
+ {
+ \mode_if_horizontal:T { \@savsf\spacefactor }
+ \Hy@SaveLastskip %defined in hyperref
+ \Hy@VerboseAnchor{#1} %defined in hyperref, for debugging
+ \__hyp_text_pdfstring:xoN
+ { \HyperDestNameFilter{#1} }
+ { \l__hyp_text_enc_dest_tl }
+ \l__hyp_tmpa_tl
+ \str_if_eq:nnTF {#2} {fitrbox}
+ {
+ \exp_args:NV
+ \pdf_destination:nnnn \l__hyp_tmpa_tl
+ { \box_wd:N \l__hyp_dest_box }
+ { \box_ht:N \l__hyp_dest_box }
+ { \box_dp:N \l__hyp_dest_box }
+ }
+ {
+ \exp_args:NV
+ \pdf_destination:nf
+ { \l__hyp_tmpa_tl }
+ { #2 }
+ }
+ \Hy@RestoreLastskip %defined in hyperref
+ \mode_if_horizontal:T { \spacefactor\@savsf }
+ }
+\cs_new_protected:Npn \hyper@anchor #1
+ {
+ \exp_args:NnV
+ \__hyp_destination:nn {#1} \l__hyp_dest_pdfview_tl
+ }
+
+\cs_new_protected:Npn \hyper@anchorstart #1
+ {
+ \Hy@activeanchortrue
+ \exp_args:NnV
+ \__hyp_destination:nn {#1} \l__hyp_dest_pdfview_tl
+ }
+
+\cs_new_protected:Npn \hyper@anchorend
+ {
+ \Hy@activeanchorfalse
+ }
+\cs_new_protected:Npn \__hyp_link_goto_begin:nw #1
+ {
+ \mode_leave_vertical:
+ \protected@edef \l__hyp_dest_name_tmpa_tl { #1 }
+ \tl_if_empty:NTF \l__hyp_dest_name_tmpa_tl
+ {
+ \msg_warning:nnx
+ { hyp }
+ { empty-destination-name }
+ { \c__hyp_dest_undefined_tl }
+ \tl_set_eq:NN \l__hyp_dest_name_tmpa_tl \c__hyp_dest_undefined_tl
+ }
+ {
+ \__hyp_text_pdfstring:xoN
+ { \exp_args:No \HyperDestNameFilter { \l__hyp_dest_name_tmpa_tl } }
+ { \l__hyp_text_enc_dest_tl }
+ \l__hyp_dest_name_tmpa_tl
+ }
+ \exp_args:No
+ \pdfannot_link_goto_begin:nw { \l__hyp_dest_name_tmpa_tl }
+ }
+
+\cs_new_protected:Npn \__hyp_link_goto_end:
+ {
+ \pdfannot_link_goto_end:
+ }
+
+
+\cs_new_protected:Npn \hyper@link #1 #2 #3 %#1 context, #2=destination name, #3 content
+ {
+ \bool_if:NTF \l__hyp_annot_GoTo_bool
+ {
+ \Hy@VerboseLinkStart{#1}{#2}
+ \group_begin:
+ \hook_use:n {hyp/link/#1}
+ \__hyp_link_goto_begin:nw {#2}#3\Hy@xspace@end
+ \__hyp_link_goto_end:
+ \group_end:
+ \Hy@VerboseLinkStop
+ }{#3}
+ }
+
+\cs_new_protected:Npn \hyper@linkstart #1 #2 %#1 context, #2=destination name
+ {
+ \bool_if:NT \l__hyp_annot_GoTo_bool
+ {
+ \Hy@VerboseLinkStart{#1}{#2}% only for debug
+ \group_begin:
+ \hook_use:n {hyp/link/#1}
+ \__hyp_link_goto_begin:nw {#2}
+ }
+ }
+
+\cs_new_protected:Npn \hyper@linkend
+ {
+ \bool_if:NT \l__hyp_annot_GoTo_bool
+ {
+ \__hyp_link_goto_end:
+ \group_end:
+ \Hy@VerboseLinkStop
+ }
+ }
+\pdfdict_new:n {l_hyp/annot/A/URI}
+\pdfdict_put:nnn {l_hyp/annot/A/URI}{Type}{/Action}
+\pdfdict_put:nnn {l_hyp/annot/A/URI}{S}{/URI}
+
+\cs_new_protected:Npn \hyper@linkurl #1 #2 %#1:link text #2: URI,
+ {
+ \bool_if:NTF \l__hyp_annot_URI_bool
+ {
+ \group_begin:
+ \__hyp_text_pdfstring:xoN
+ { #2}
+ { \l__hyp_text_enc_uri_print_tl }
+ \l__hyp_uri_tmpa_tl
+ \pdfdict_put:nno{l_hyp/annot/A/URI}{URI}{\l__hyp_uri_tmpa_tl}
+ \ifHy@href@ismap
+ \pdfdict_put:nnn{l_hyp/annot/A/URI}{IsMap}{true}
+ \fi
+ \tl_if_empty:NF \Hy@href@nextactionraw
+ {
+ \str_remove_once:Nn \Hy@href@nextactionraw {/Next}
+ \pdfdict_put:nno{l_hyp/annot/A/Next}{\Hy@href@nextactionraw}
+ }
+ \cs_set_eq:NN \# \c_hash_str
+ \cs_set_eq:NN \% \c_percent_str
+ \Hy@safe@activestrue
+ \mode_leave_vertical:
+ \pdfannot_link:nxn { URI }
+ {
+ /A
+ <<
+ \pdfdict_use:n {l_hyp/annot/A/URI}
+ >>
+ }
+ {
+ #1
+ \Hy@xspace@end
+ \Hy@VerboseLinkStop %where is the start??
+ }
+ \group_end:
+ }
+ {#1}
+ }
+
+\pdfdict_new:n {l_hyp/annot/A/GoToR}
+\pdfdict_put:nnn {l_hyp/annot/A/GoToR}{Type}{/Action}
+\pdfdict_put:nnn {l_hyp/annot/A/GoToR}{S}{/GoToR}
+
+\cs_new_protected:Npn \hyper@linkfile #1 #2 #3 % link text, filename, destname
+ {
+ \bool_if:NTF \l__hyp_annot_GoToR_bool
+ {
+ \group_begin:
+ \tl_set:Nn \l__hyp_filename_tmpa_tl { #2 }
+ \Hy@CleanupFile \l__hyp_filename_tmpa_tl
+ \__hyp_text_pdfstring:ooN
+ { \l__hyp_filename_tmpa_tl }
+ { \l__hyp_text_enc_file_print_tl }
+ \l__hyp_filename_tmpa_tl
+ \pdfdict_put:nno {l_hyp/annot/A/GoToR}{F}{\l__hyp_filename_tmpa_tl}
+ \__hyp_text_pdfstring:nnN
+ { #3 }
+ { \l__hyp_text_enc_dest_print_tl }
+ \l__hyp_dest_name_tmpa_tl
+ \Hy@MakeRemoteAction
+ \tl_if_blank:eTF {#3}
+ {
+ \pdfdict_put:nnx {l_hyp/annot/A/GoToR}{D}
+ {[\Hy@href@page/\l__hyp_dest_pdfremotestartview_tl]}
+ }
+ {
+ \pdfdict_put:nno {l_hyp/annot/A/GoToR}{D}{\l__hyp_dest_name_tmpa_tl}
+ }
+ \tl_if_empty:NF \Hy@href@nextactionraw
+ {
+ \str_remove_once:Nn \Hy@href@nextactionraw {/Next}
+ \pdfdict_put:nno{l_hyp/annot/A/Next}{Next}{\Hy@href@nextactionraw}
+ }
+ \mode_leave_vertical:
+ \pdfannot_link:nxn %expansion??
+ { GoToR }
+ {
+ /A<<
+ \pdfdict_use:n {l_hyp/annot/A/GoToR}
+ >>
+ }
+ {
+ #1\Hy@xspace@end
+ \Hy@VerboseLinkStop %where is the start??
+ }
+ \group_end:
+ }
+ {#1}
+ }
+\pdfdict_new:n {l_hyp/annot/A/Launch}
+\pdfdict_put:nnn {l_hyp/annot/A/Launch}{Type}{/Action}
+\pdfdict_put:nnn {l_hyp/annot/A/Launch}{S}{/Launch}
+
+\cs_new_protected:Npn \hyper@linklaunch #1 #2 #3 % filename, link text, Parameters
+ {
+ \bool_if:NTF \l__hyp_annot_Launch_bool
+ {
+ \group_begin:
+ \__hyp_text_pdfstring:nnN
+ { #1 }
+ { \l__hyp_text_enc_file_print_tl }
+ \l__hyp_filename_tmpa_tl
+ \pdfdict_put:nno {l_hyp/annot/A/Launch}{F}{\l__hyp_filename_tmpa_tl}
+ \__hyp_text_pdfstring:noN
+ { #3 }
+ { \l__hyp_text_enc_para_print_tl }
+ \l__hyp_para_tmpa_tl
+ \bool_if:nTF
+ {
+ \str_if_eq_p:Vn \l__hyp_para_tmpa_tl {()}
+ ||
+ \pdf_version_compare_p:Nn > {1.9}
+ }
+ {
+ \pdfdict_remove:nn {l_hyp/annot/A/Launch}{Win}
+ }
+ {
+ \pdfdict_put:nnx {l_hyp/annot/A/Launch}{Win}
+ {<</P \l__hyp_para_tmpa_tl /F \l__hyp_filename_tmpa_tl >>}
+ }
+ \tl_if_empty:NF \Hy@href@nextactionraw
+ {
+ \str_remove_once:Nn \Hy@href@nextactionraw {/Next}
+ \pdfdict_put:nno{l_hyp/annot/A/Next}{Next}{\Hy@href@nextactionraw}
+ }
+ \mode_leave_vertical:
+ \pdfannot_link:nxn
+ { Launch }
+ {
+ /A
+ <<
+ \pdfdict_use:n {l_hyp/annot/A/Launch}
+ >>
+ }
+ {
+ #2\Hy@xspace@end
+ \Hy@VerboseLinkStop %where is the start??
+ }
+ \group_end:
+ }
+ {#2}
+ }
+\use:x
+ { % filename, anchor text, linkname
+ \cs_set_protected:Npn \exp_not:N \@hyper@launch run \c_colon_str ##1 \exp_not:N \\ ##2 ##3
+ }
+ {
+ \hyper@linklaunch {#1}{#2}{#3}
+ }
+\pdfdict_new:n {l_hyp/annot/A/Named}
+\pdfdict_put:nnn {l_hyp/annot/A/Named}{Type}{/Action}
+\pdfdict_put:nnn {l_hyp/annot/A/Named}{S}{/Named}
+
+\cs_new_protected:Npn \hyper@linknamed #1 #2 %#1 action, #2 link text
+ {
+ \bool_if:NTF \l__hyp_annot_Named_bool
+ {
+ \group_begin:
+ \pdfmeta_standard_verify:nnTF {named_actions}{#1}
+ {
+ \mode_leave_vertical:
+ \pdfdict_put:nnx {l_hyp/annot/A/Named}{N}
+ {\pdf_name_from_unicode_e:n{#1}}
+ \tl_if_empty:NF \Hy@href@nextactionraw
+ {
+ \str_remove_once:Nn \Hy@href@nextactionraw {/Next}
+ \pdfdict_put:nno{l_hyp/annot/A/Next}{Next}{\Hy@href@nextactionraw}
+ }
+ \pdfannot_link:nxn { Named }
+ {
+ /A
+ <<
+ \pdfdict_use:n { l_hyp/annot/A/Named }
+ >>
+ }
+ {
+ #2
+ \Hy@xspace@end
+ \Hy@VerboseLinkStop
+ }
+ }
+ {
+ \msg_warning:nnn { hyp } { pdfa-no-named-action }{#1}
+ #2
+ }
+ \group_end:
+ }
+ {#2}
+ }
+
+\cs_new_protected:Npn \__hyp_color_export:nnN #1 #2 #3
+ {
+ \tl_if_head_eq_charcode:nNTF {#1}[ %]
+ {
+ \__hyp_colormodel_export:wnnN #1 {#2} #3
+ }
+ {
+ \color_export:nnN {#1} {#2} #3
+ }
+ }
+
+\cs_new_protected:Npn \__hyp_colormodel_export:wnnN [#1] #2 #3 #4
+ {
+ \color_export:nnnN {#1}{#2}{#3}#4
+ }
+
+\cs_generate_variant:Nn \__hyp_color_export:nnN {xVN}
+\cs_new_protected:Npn \__hyp_color_select:n #1
+ {
+ \tl_if_head_eq_charcode:nNTF {#1}[ %]
+ {
+ \__hyp_colormodel_select_aux:wn #1
+ }
+ {
+ \color_select:n {#1}
+ }
+ }
+
+\cs_new_protected:Npn \__hyp_colormodel_select_aux:wn [#1] #2
+ {
+ \color_select:nn {#1}{#2}
+ }
+
+\cs_generate_variant:Nn \__hyp_color_select:n {e}
+\cs_new_protected:Npn \__hyp_color_set:nn #1 #2
+ {
+ \tl_if_head_eq_charcode:nNTF {#2}[ %]
+ {
+ \__hyp_colormodel_set_aux:nwn { #1 } #2
+ }
+ {
+ \color_set:nn {#1} {#2}
+ }
+ }
+
+\cs_new_protected:Npn \__hyp_colormodel_set_aux:nwn #1 [#2] #3
+ {
+ \color_set:nnn {#1}{#2}{#3}
+ }
+
+\cs_generate_variant:Nn \__hyp_color_set:nn {ne}
+\prop_map_inline:Nn \c__hyp_map_hyp_annot_prop
+ {
+ \hook_gput_code:nnn
+ {pdfannot/link/#2/begin}
+ {hyp/color}
+ {
+ \bool_if:cT { l_hyp_annot_color#1_bool }
+ {
+ \group_begin:
+ \color_select:n { hyp/color/#1}
+ }
+ }
+ \hook_gput_code:nnn
+ {pdfannot/link/#2/end}
+ {hyp/color}
+ {
+ \bool_if:cT { l_hyp_annot_color#1_bool }
+ {
+ \group_end:
+ }
+ }
+ }
+\keys_define:nn { hyp / setup }
+ {
+ ,colorlinks .meta:n =
+ {
+ ,pdfborder={0~0~0}
+ ,pdfborderstyle=
+ ,colorurl =#1
+ ,colorlink =#1
+ ,colorrun =#1
+ ,colormenu =#1
+ ,colorfile =#1
+ }
+ ,colorlinks .default:n = {true}
+ }
+\seq_map_inline:Nn \c__hyp_annot_types_seq
+ {
+ \keys_define:nn { hyp / setup }
+ {
+ ,color#1 .bool_set:c = { l_hyp_annot_color#1_bool }
+ ,#1color .code:n = { \__hyp_color_set:ne {hyp/color/#1}{##1} }
+ }
+ }
+
+\keys_define:nn { hyp / setup }
+ {
+ ,allcolors .meta:n =
+ {
+ ,urlcolor=#1
+ ,linkcolor=#1
+ ,runcolor=#1
+ ,filecolor=#1
+ ,menucolor=#1
+ }
+ ,allcolors .value_required:n = true
+ }
+\keys_define:nn { hyp / setup }
+ {
+ ,bordercolormodel .choices:nn =
+ {rgb,cmyk}
+ { \str_gset:Nn \g__hyp_bordercolormodel_str {space-sep-#1}}
+ ,bordercolormodel .initial:n ={rgb}
+ }
+\prop_map_inline:Nn \c__hyp_map_hyp_annot_prop
+ {
+ \keys_define:nn { hyp / setup }
+ {
+ #1bordercolor .code:n =
+ {
+ \tl_if_empty:nTF { ##1 }
+ {
+ \pdfannot_dict_remove:nn
+ {link/#2}
+ { C }
+ }
+ {
+ \__hyp_color_export:xVN {##1}\g__hyp_bordercolormodel_str \l__hyp_tmpa_tl
+ \pdfannot_dict_put:nnx
+ {link/#2}
+ { C }
+ { [\l__hyp_tmpa_tl] }
+ }
+ }
+ }
+ }
+
+\keys_define:nn { hyp / setup }
+ {
+ ,allbordercolors .meta:n =
+ {
+ ,linkbordercolor=#1
+ ,urlbordercolor =#1
+ ,filebordercolor=#1
+ ,menubordercolor=#1
+ ,runbordercolor =#1
+ }
+ ,allbordercolors .value_required:n = true
+ }
+
+\prop_map_inline:Nn \c__hyp_map_hyp_annot_prop
+ {
+ \keys_define:nn { hyp / setup }
+ {
+ #1border .code:n =
+ {
+ \tl_if_empty:nTF { ##1 }
+ {
+ \pdfannot_dict_remove:nn
+ {link/#2}
+ { Border }
+ }
+ {
+ \pdfannot_dict_put:nnn
+ {link/#2}
+ { Border }
+ { [##1] }
+ }
+ }
+ }
+ }
+\keys_define:nn { hyp / setup }
+ {
+ ,pdfborder .code:n =
+ {
+ \tl_if_empty:nTF { #1 }
+ {
+ \prop_map_inline:Nn \c__hyp_map_hyp_annot_prop
+ {
+ \pdfannot_dict_remove:nn
+ {link/##2}
+ { Border }
+ }
+ }
+ {
+ \prop_map_inline:Nn \c__hyp_map_hyp_annot_prop
+ {
+ \pdfannot_dict_put:nnn
+ {link/##2}
+ { Border }
+ { [#1] }
+ }
+ }
+ }
+ ,pdfborder .initial:n = {0~0~1},
+ }
+\prop_map_inline:Nn \c__hyp_map_hyp_annot_prop
+ {
+ \keys_define:nn { hyp / setup }
+ {
+ #1borderstyle .code:n =
+ {
+ \tl_if_empty:nTF { ##1 }
+ {
+ \pdfannot_dict_remove:nn
+ {link/#2}
+ { BS }
+ }
+ {
+ \pdfannot_dict_put:nnn
+ {link/#2}
+ { BS }
+ { <<##1>> }
+ }
+ }
+ }
+ }
+\keys_define:nn { hyp / setup }
+ {
+ ,pdfborderstyle .code:n =
+ {
+ \tl_if_empty:nTF { #1 }
+ {
+ \prop_map_inline:Nn \c__hyp_map_hyp_annot_prop
+ {
+ \pdfannot_dict_remove:nn
+ {link/##2}
+ { BS }
+ }
+ }
+ {
+ \prop_map_inline:Nn \c__hyp_map_hyp_annot_prop
+ {
+ \pdfannot_dict_put:nnn
+ {link/##2}
+ { BS }
+ { <<#1>> }
+ }
+ }
+ }
+ ,pdfborderstyle .initial:n = {},
+ }
+\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_ref:n { l__hyp_ocg_view_dict_obj }
+ \c_space_tl
+ \pdf_object_ref:n { l__hyp_ocg_print_dict_obj }
+ }
+ \pdf_object_write:nn { l__hyp_ocg_view_dict_obj }
+ {
+ /Type/OCG
+ /Name(View)
+ /Usage
+ <<
+ /Print <</PrintState/OFF>>~
+ /View <</ViewState/ON >>~
+ >>
+ }
+ \pdf_object_write:nn { l__hyp_ocg_print_dict_obj }
+ {
+ /Type/OCG
+ /Name(Print)
+ /Usage
+ <<
+ /Print <</PrintState/ON>>~
+ /View <</ViewState/OFF>>~
+ >>
+ }
+ \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 }
+ {
+ /OFF[\pdf_object_ref:n { l__hyp_ocg_print_dict_obj }]
+ /AS[
+ <<
+ /Event/View
+ /OCGs\c_space_tl \pdf_object_ref:n { l__hyp_ocg_ref_array_obj }
+ /Category[/View]
+ >>
+ <<
+ /Event/Print
+ /OCGs\c_space_tl \pdf_object_ref:n { l__hyp_ocg_ref_array_obj }
+ /Category[/Print]
+ >>
+ <<
+ /Event/Export
+ /OCGs\c_space_tl \pdf_object_ref:n { l__hyp_ocg_ref_array_obj }
+ /Category[/Print]
+ >>
+ ]
+ }
+ \pdfmanagement_add:nnx { Catalog / OCProperties }{ D }{ \pdf_object_ref:n { l__hyp_ocg_config_dict_obj} }
+ \cs_gset:Npn \__hyp_ocg_init: {}
+ }
+\prop_map_inline:Nn \c__hyp_map_hyp_annot_prop
+ {
+ \hook_gput_code:nnn
+ {pdfannot/link/#2/begin}
+ {hyp/ocg}
+ {
+ \bool_if:cT { l_hyp_annot_ocgcolor#1_bool }
+ {
+ \__hyp_ocg_init:
+ \group_begin:
+ \hbox_set:Nw \l__hyp_tmpa_box
+ }
+ }
+ \hook_gput_code:nnn
+ {pdfannot/link/#2/end}
+ {hyp/ocg}
+ {
+ \bool_if:cT { l_hyp_annot_ocgcolor#1_bool }
+ {
+ \hbox_set_end:
+ \mbox
+ {
+ \pdf_bdcobject:nn {OC}{l__hyp_ocg_print_dict_obj}
+ \hbox_overlap_right:n { \box_use:N \l__hyp_tmpa_box }
+ \pdf_emc:
+ \pdf_bdcobject:nn {OC}{l__hyp_ocg_view_dict_obj}
+ \group_begin:
+ \color_select:n { hyp/color/#1 }
+ \box_use_drop:N \l__hyp_tmpa_box
+ \group_end:
+ \pdf_emc:
+ }
+ \group_end:
+ }
+ }
+ }
+\pdf_version_compare:NnTF < {1.5}
+ {
+ \keys_define:nn { hyp / setup }
+ {
+ ,_ocgcolorlinks .code:n =
+ {
+ \msg_warning:nnxx
+ { hyp }
+ { ignore-deprecated-or-unknown-option-in-pdf-version }
+ { ocgcolorlinks } { \pdf_version_major:.\pdf_version_minor: }
+ }
+ }
+ }
+ {
+ \keys_define:nn { hyp / setup }
+ {
+ ,_ocgcolorlinks .meta:n =
+ {
+ ocgcolorlink=#1,
+ ocgcolorurl=#1,
+ ocgcolorfile=#1,
+ ocgcolorrun=#1,
+ ocgcolormenu=#1
+ }
+ ,_ocgcolorlinks .default:n = true
+ }
+ }
+
+\keys_define:nn { hyp / setup }
+ {
+ ,ocgcolorlinks .choice:
+ ,ocgcolorlinks / true .meta:n =
+ {
+ pdfborder ={0~0~0},
+ pdfborderstyle ={},
+ colorlinks = false,
+ _ocgcolorlinks = true
+ }
+ ,ocgcolorlinks / false .meta:n =
+ {
+ _ocgcolorlinks = false
+ }
+ ,ocgcolorlinks .default:n = {true}
+ }
+
+\seq_map_inline:Nn \c__hyp_annot_types_seq
+ {
+ \pdf_version_compare:NnTF < {1.5}
+ {
+ \keys_define:nn { hyp / setup }
+ {
+ ,ocgcolor#1 .code:n=
+ {
+ \msg_warning:nnxx
+ { hyp }
+ { ignore-deprecated-or-unknown-option-in-pdf-version }
+ { ocgcolor#1 }
+ { \pdf_version_major:.\pdf_version_minor: }
+ }
+ }
+ }
+ {
+ \keys_define:nn { hyp / setup }
+ {
+ ,ocgcolor#1 .bool_set:c = { l_hyp_annot_ocgcolor#1_bool }
+ }
+ }
+ }
+\prop_map_inline:Nn \c__hyp_map_hyp_annot_prop
+ {
+ \keys_define:nn { hyp / setup }
+ {
+ ,#1highlight .choices:nn =
+ { /I, /N, /O, /P}
+ {
+ \pdfannot_dict_put:nnn
+ {link/#2}
+ { H }
+ { ##1 }
+
+ }
+ ,#1highlight / .code:n =
+ {
+ \pdfannot_dict_remove:nn
+ {link/#2}
+ { H }
+
+ }
+ ,#1highlight / unknown .code:n =
+ {
+ \msg_warning:nnxxx { hyp } { unknown-choice+empty }
+ { pdfhighlight }
+ { /I~(inverse), /N~(no effect), /O~(outline), /P~(inset) }
+ { \exp_not:n {##1} }
+ }
+ }
+ }
+
+\keys_define:nn { hyp / setup }
+ {
+ ,pdfhighlight .choices:nn =
+ { /I, /N, /O, /P}
+ {
+ \prop_map_inline:Nn \c__hyp_map_hyp_annot_prop
+ {
+ \pdfannot_dict_put:nnn
+ {link/####2}
+ { H }
+ { #1 }
+ }
+ }
+ ,pdfhighlight / .code:n =
+ {
+ \prop_map_inline:Nn \c__hyp_map_hyp_annot_prop
+ {
+ \pdfannot_dict_remove:nn
+ {link/##2}
+ { H }
+ }
+ }
+ ,pdfhighlight .initial:n = {/I},
+ ,pdfhighlight / unknown .code:n =
+ {
+ \msg_warning:nnxxx { hyp } { unknown-choice+empty }
+ { pdfhighlight }
+ { /I~(inverse), /N~(no effect), /O~(outline), /P~(inset) }
+ { \exp_not:n {#1} }
+ }
+ }
+\keys_define:nn { hyp / setup }
+ {
+ hidelinks .meta:n =
+ {
+ ,colorlinks = false
+ ,ocgcolorlinks = false
+ ,pdfborder = { 0~0~0 }
+ ,pdfborderstyle=
+ }
+ }
+
+\seq_map_inline:Nn \c__hyp_annot_types_seq
+ {
+ \keys_define:nn { hyp / setup }
+ {
+ hide#1 .meta:n =
+ {
+ ,color#1 = false
+ ,ocgcolor#1 = false
+ ,#1border = { 0~0~0 }
+ ,#1borderstyle =
+ }
+ }
+ }
+\keys_define:nn { hyp / setup }
+ {
+ colorscheme .code:n =
+ {
+ \prop_map_inline:cn { c__hyp_colorscheme_#1_prop }
+ {
+ \keys_set:nn { hyp /setup }
+ {
+ ##1 = ##2
+ }
+ }
+ }
+ }
+\keys_set:nn { hyp / setup } {colorscheme=phelype}
+\keys_define:nn { hyp / setup }
+ {
+ ,unicode .code:n = {}
+ ,pdfencoding .code:n = {}
+ ,pdfversion .code:n =
+ {
+ \msg_warning:nn { hyp }{ pdfversion-disabled }
+ }
+ }
+\keys_define:nn { hyp / setup }
+ {
+ ,verbose .choice:
+ ,verbose / true .code:n = { \Hy@verbosetrue}
+ ,verbose / false .code:n = { \Hy@verbosefalse}
+ ,verbose .default:n = {true}
+ ,debug .meta:n = {verbose=#1}
+ ,debug .default:n = {true}
+ }
+\keys_define:nn { hyp / setup }
+ {
+ ,draft .code:n =
+ {
+ \Hy@drafttrue
+ \PassOptionsToPackage{draft}{bookmark}
+ }
+ ,final .code:n =
+ {
+ \Hy@finaltrue
+ \PassOptionsToPackage{final}{bookmark}
+ }
+ }
+\keys_define:nn { hyp / setup }
+ {
+ ,extension .tl_set:N = \XR@ext
+ ,extension .initial:n= pdf
+ ,hypertexnames .choice:
+ ,hypertexnames / true .code:n = { \Hy@hypertexnamestrue}
+ ,hypertexnames / false .code:n = { \Hy@hypertexnamesfalse}
+ ,hypertexnames .default:n = {true}
+ ,linkfileprefix .tl_set:N = \Hy@linkfileprefix
+ ,localanchorname .choice:
+ ,localanchorname / true .code:n = { \Hy@localanchornametrue }
+ ,localanchorname / false .code:n = { \Hy@localanchornamefalse }
+ ,localanchorname .default:n = {true}
+ ,naturalnames .choice:
+ ,naturalnames / true .code:n = { \Hy@naturalnamestrue}
+ ,naturalnames / false .code:n = { \Hy@naturalnamesfalse}
+ ,naturalnames .default:n = {true}
+ ,pageanchor .choice:
+ ,pageanchor / true .code:n = { \Hy@pageanchortrue}
+ ,pageanchor / false .code:n = { \Hy@pageanchorfalse}
+ ,pageanchor .default:n = {true}
+ ,plainpages .choice:
+ ,plainpages / true .code:n = { \Hy@plainpagestrue}
+ ,plainpages / false .code:n = { \Hy@plainpagesfalse}
+ ,plainpages .default:n = {true}
+ }
+
+\keys_define:nn { hyp / setup }
+ {
+ ,linktoc .choices:nn = { none, section, all, page }
+ {
+ \cs_set_eq:Nc \Hy@linktoc { Hy@linktoc@#1 }
+ }
+ ,linktoc / unknown .code:n =
+ {
+ \msg_warning:nnxxx { hyp } { unknown-choice }
+ { linktoc }
+ { none, section, all, page }
+ { \exp_not:n {#1} }
+ }
+ ,linktocpage .choice:
+ ,linktocpage / true .meta:n = {linktoc=page}
+ ,linktocpage / false .meta:n = {linktoc=section}
+ ,linktocpage .default:n = true
+ }
+
+\prop_map_inline:Nn \c__hyp_map_hyp_annot_prop
+ {
+ \keys_define:nn { hyp / setup }
+ {
+ ,#1 .bool_set:c = {l__hyp_annot_#2_bool}
+ }
+ }
+\keys_define:nn { hyp / setup }
+ {
+ ,baseurl .code:n =
+ {
+ \__hyp_text_pdfstring:ooN { #1 } {\l__hyp_text_enc_uri_print_tl} \l__hyp_tmpa_tl
+ \tl_if_empty:NTF \l__hyp_tmpa_tl
+ {
+ \pdfmanagement_remove:nn {Catalog} { URI }
+ }
+ {
+ \pdfmanagement_add:nnx {Catalog} { URI }{ <</Base \l__hyp_tmpa_tl>> }
+ }
+ }
+ %only false does something ...
+ ,bookmarks .choice:
+ ,bookmarks / false .code:n = {\RemoveFromHook {begindocument/before}[hyperref/bookmark]}
+ ,bookmarks / true .code:n = {}
+ ,bookmarks .default:n = {true}
+ ,bookmarksnumbered .choice:
+ ,bookmarksnumbered / false .code:n = { \Hy@bookmarksnumberedfalse }
+ ,bookmarksnumbered / true .code:n = { \Hy@bookmarksnumberedtrue }
+ ,bookmarksnumbered .default:n = {true}
+ ,bookmarksopen .choice:
+ ,bookmarksopen / false .code:n = { \Hy@bookmarksopenfalse }
+ ,bookmarksopen / true .code:n = { \Hy@bookmarksopentrue }
+ ,bookmarksopen .default:n = {true}
+ ,bookmarksopenlevel .tl_set:N = \@bookmarksopenlevel
+ ,bookmarkstype .tl_set:N = \Hy@bookmarkstype
+ ,pdfcenterwindow .choice:
+ ,pdfcenterwindow / false .code:n =
+ {
+ \pdfmanagement_remove:nn {Catalog / ViewerPreferences }{ CenterWindow }
+ }
+ ,pdfcenterwindow / true .code:n =
+ {
+ \pdfmanagement_add:nnn {Catalog / ViewerPreferences } { CenterWindow }{ true }
+ }
+ ,pdfcenterwindow / .code:n =
+ {
+ \pdfmanagement_remove:nn {Catalog / ViewerPreferences }{ CenterWindow }
+ }
+ ,pdfcenterwindow / unknown .code:n =
+ {
+ \msg_warning:nnxx { hyp } { no-bool }
+ { pdfcenterwindow }
+ { \exp_not:n {#1} }
+ }
+ ,pdfcenterwindow .default:n = true
+ ,pdfdirection .choice:
+ ,pdfdirection / L2R .code:n =
+ {
+ \pdfmanagement_add:nnn {Catalog / ViewerPreferences } { Direction }{ /L2R }
+ }
+ ,pdfdirection / R2L .code:n =
+ {
+ \pdfmanagement_add:nnn {Catalog / ViewerPreferences } { Direction }{ /R2L }
+ }
+ ,pdfdirection / .code:n =
+ {
+ \pdfmanagement_remove:nn {Catalog / ViewerPreferences } { Direction }
+ }
+ ,pdfdirection / unknown .code:n =
+ {
+ \msg_warning:nnxxx { hyp } { unknown-choice+empty }
+ { pdfdirection }
+ { L2R , R2L }
+ { \exp_not:n {#1} }
+ }
+ ,pdfdisplaydoctitle .choice:
+ ,pdfdisplaydoctitle / false .code:n =
+ {
+ \pdfmanagement_remove:nn {Catalog / ViewerPreferences } { DisplayDocTitle }
+ }
+ ,pdfdisplaydoctitle / true .code:n =
+ {
+ \pdfmanagement_add:nnn {Catalog / ViewerPreferences } { DisplayDocTitle } { true }
+ }
+ ,pdfdisplaydoctitle .default:n = true
+ ,pdfduplex .choices:nn =
+ {Simplex, DuplexFlipShortEdge, DuplexFlipLongEdge}
+ {
+ \pdf_version_compare:NnTF > {1.6}
+ {
+ \pdfmanagement_add:nnn {Catalog / ViewerPreferences }
+ { PrintDuplex } { /#1 }
+ }
+ {
+ \msg_warning:nnxx
+ {hyp}
+ {ignore-deprecated-or-unknown-option-in-pdf-version}
+ {pdfduplex}
+ {\pdf_version:}
+ }
+ }%
+ ,pdfduplex / .code:n =
+ {
+ \pdfmanagement_remove:nn {Catalog / ViewerPreferences } { PrintDuplex }
+ }
+ ,pdfduplex / unknown .code:n =
+ {
+ \msg_warning:nnxxx { hyp } { unknown-choice+empty }
+ { pdfduplex }
+ { Simplex, DuplexFlipShortEdge, DuplexFlipLongEdge }
+ { \exp_not:n {#1} }
+ }
+ ,pdffitwindow .choice:
+ ,pdffitwindow / false .code:n =
+ {
+ \pdfmanagement_remove:nn {Catalog / ViewerPreferences } { FitWindow }
+ }
+ ,pdffitwindow / true .code:n =
+ {
+ \pdfmanagement_add:nnn {Catalog / ViewerPreferences } { FitWindow } { true }
+ }
+ ,pdffitwindow / .code:n =
+ {
+ \pdfmanagement_remove:nn {Catalog / ViewerPreferences } { FitWindow }
+ }
+ ,pdffitwindow .default:n = true
+ ,pdffitwindow / unknown .code:n =
+ {
+ \msg_warning:nnxx { hyp } { no-bool }
+ { pdffitwindow }
+ { \exp_not:n {#1} }
+ }
+ ,pdflinkmargin .code:n = { \pdfannot_link_margin:n { #1 } }
+ ,pdflinkmargin .initial:n = {1pt}
+ ,pdfmenubar .choice:
+ ,pdfmenubar / true .code:n =
+ {
+ \pdfmanagement_remove:nn {Catalog / ViewerPreferences } { HideMenubar }
+ }
+ ,pdfmenubar / false .code:n =
+ {
+ \pdfmanagement_add:nn {Catalog / ViewerPreferences }
+ { HideMenubar } { true }
+ }
+ ,pdfmenubar / .code:n =
+ {
+ \pdfmanagement_remove:nn {Catalog / ViewerPreferences } { HideMenubar }
+ }
+ ,pdfmenubar .default:n = true
+ ,pdfmenubar / unknown .code:n =
+ {
+ \msg_warning:nnxx { hyp } { no-bool }
+ { pdfmenubar }
+ { \exp_not:n {#1} }
+ }
+ ,pdfnewwindow .choice:
+ ,pdfnewwindow / true .code:n =
+ {
+ \pdfdict_put:nnn {l_hyp/annot/A/GoToR}{/NewWindow}{true}
+ \pdfdict_put:nnn {l_hyp/annot/A/Launch}{/NewWindow}{true}
+ }
+ ,pdfnewwindow / false .code:n =
+ {
+ \pdfdict_put:nnn {l_hyp/annot/A/GoToR}{/NewWindow}{false}
+ \pdfdict_put:nnn {l_hyp/annot/A/Launch}{/NewWindow}{false}
+ }
+ ,pdfnewwindow / .code:n =
+ {
+ \pdfdict_remove:nn {l_hyp/annot/A/GoToR}{/NewWindow}
+ \pdfdict_remove:nn {l_hyp/annot/A/Launch}{/NewWindow}
+ }
+ ,pdfnonfullscreenpagemode .choices:nn =
+ { UseNone, UseOutlines, UseThumbs, FullScreen, UseOC } %pdf 1.5
+ {
+ \pdfmanagement_add:nnx {Catalog / ViewerPreferences }
+ { NonFullScreenPageMode} {/#1}
+ }
+ ,pdfnonfullscreenpagemode / UseAttachments .code:n =
+ {
+ \pdf_version_compare:NnTF < {1.6}
+ {
+ %message
+ }
+ {
+ \pdfmanagement_add:nnx {Catalog / ViewerPreferences }
+ {NonFullScreenPageMode}{/UseAttachments}
+ }
+ }
+ ,pdfnonfullscreenpagemode / .code:n =
+ {
+ \pdfmanagement_remove:nn {Catalog / ViewerPreferences } { NonFullScreenPageMode }
+ }
+ ,pdfnonfullscreenpagemode / unknown .code:n =
+ {
+ \msg_warning:nnxxx { hyp } { unknown-choice+empty }
+ { pdfnonfullscreenpagemode }
+ { UseNone, UseOutlines, UseThumbs, FullScreen, UseOC, UseAttachments (PDF 1.6) }
+ { \exp_not:n {#1} }
+ }
+ ,pdfnumcopies .code:n =
+ {
+ \pdf_version_compare:NnTF > {1.6}
+ {
+ \tl_if_empty:nTF {#1}
+ {
+ \pdfmanagement_remove:nn {Catalog / ViewerPreferences } { NumCopies }
+ }
+ {
+ \pdfmanagement_add:nnx {Catalog / ViewerPreferences }
+ {NumCopies}{#1}
+ }
+ }
+ {
+ \msg_warning:nnxx
+ {hyp}
+ {ignore-deprecated-or-unknown-option-in-pdf-version}
+ {pdfnumcopies}
+ {\pdf_version:}
+ }
+ }
+ ,pdfpagelayout .choices:nn =
+ { SinglePage, OneColumn, TwoColumnLeft, TwoColumnRight, TwoPageLeft, TwoPageRight}
+ { \pdfmanagement_add:nnx {Catalog} { PageLayout }{ /#1 } }
+ ,pdfpagelayout / .code:n =
+ { \pdfmanagement_remove:nn {Catalog} { PageLayout } }
+ ,pdfpagelayout / unknown .code:n =
+ {
+ \msg_warning:nnxxx { hyp } { unknown-choice+empty }
+ { pdfpagelayout }
+ { SinglePage, OneColumn, TwoColumnLeft, TwoColumnRight, TwoPageLeft, TwoPageRight }
+ { \exp_not:n {#1} }
+ }
+ ,pdfpagemode .choices:nn =
+ { UseNone, UseOutlines, UseThumbs, FullScreen, UseOC } %pdf 1.5
+ { \pdfmanagement_add:nnx {Catalog} { PageMode }{ /#1 } }
+ ,pdfpagemode / UseAttachments .code:n =
+ {
+ \pdf_version_compare:NnTF > {1.5}
+ {
+ \pdfmanagement_add:nnx {Catalog} { PageMode }{ /UseAttachments }
+ }
+ {
+ \msg_warning:nnxx
+ {hyp}
+ {ignore-deprecated-or-unknown-value-in-pdf-version}
+ {UseAttachments}
+ {\pdf_version:}
+ }
+ }
+ ,pdfpagemode .initial:n = { UseOutlines } %for now ...
+ ,pdfpagemode / unknown .code:n =
+ {
+ \msg_warning:nnxxx { hyp } { unknown-choice+empty }
+ { pdfpagemode }
+ { UseNone, UseOutlines, UseThumbs, FullScreen, UseOC, UseAttachments (PDF 1.6) }
+ { \exp_not:n {#1} }
+ }
+ ,pdfpagescrop .code:n =
+ {
+ \tl_if_empty:nTF %or blank?
+ {
+ \pdfmanagement_remove:nn {Pages} { CropBox }
+ }
+ {
+ \pdfmanagement_add:nnx {Pages} { CropBox } { [#1] }
+ }
+ }
+ ,pdfpicktraybypdfsize .choice:
+ ,pdfpicktraybypdfsize / true .code:n =
+ {
+ \pdf_version_compare:NnTF > {1.6}
+ {
+ \pdfmanagement_add:nnn {Catalog / ViewerPreferences }
+ { PickTrayByPDFSize } { true }
+ }
+ {
+ \msg_warning:nnxx
+ {hyp}
+ {ignore-deprecated-or-unknown-option-in-pdf-version}
+ {pdfpicktraybypdfsize}
+ {\pdf_version:}
+ }
+ }
+ ,pdfpicktraybypdfsize / false .code:n =
+ {
+ \pdf_version_compare:NnTF > {1.6}
+ {
+ \pdfmanagement_add:nnn {Catalog / ViewerPreferences }
+ { PickTrayByPDFSize } { false }
+ }
+ {
+ \msg_warning:nnxx
+ {hyp}
+ {ignore-deprecated-or-unknown-option-in-pdf-version}
+ {pdfpicktraybypdfsize}
+ {\pdf_version:}
+ }
+ }
+ ,pdfpicktraybypdfsize / .code:n =
+ {
+ \pdfmanagement_remove:nn {Catalog / ViewerPreferences } { PickTrayByPDFSize }
+ }
+ ,pdfpicktraybypdfsize / unknown .code:n =
+ {
+ \msg_warning:nnxx { hyp } { no-bool }
+ { picktraybypdfsize }
+ { \exp_not:n {#1} }
+ }
+ ,pdfprintarea .choices:nn =
+ { MediaBox, CropBox, BleedBox, TrimBox, ArtBox }
+ {
+ \pdf_version_compare:NnTF < {2.0}
+ {
+ \pdfmanagement_add:nnx {Catalog / ViewerPreferences }
+ { PrintArea } { /#1 }
+ }
+ {
+ \msg_warning:nnxx
+ {hyp}
+ {ignore-deprecated-or-unknown-option-in-pdf-version}
+ {pdfprintarea}
+ {\pdf_version:}
+ }
+ }%
+ ,pdfprintarea / .code:n =
+ { \pdfmanagement_remove:nn {Catalog / ViewerPreferences } { PrintArea } }
+ ,pdfprintarea / unknown .code:n =
+ {
+ \msg_warning:nnxxx { hyp } { unknown-choice+empty }
+ { pdfprintarea }
+ { MediaBox, CropBox, BleedBox, TrimBox, ArtBox }
+ { \exp_not:n {#1} }
+ }
+ ,pdfprintclip .choices:nn =
+ { MediaBox, CropBox, BleedBox, TrimBox, ArtBox }
+ {
+ \pdf_version_compare:NnTF < {2.0}
+ {
+ \pdfmanagement_add:nnx {Catalog / ViewerPreferences }
+ { PrintClip } { /#1 }
+ }
+ {
+ \msg_warning:nnxx
+ {hyp}
+ {ignore-deprecated-or-unknown-option-in-pdf-version}
+ {pdfprintclip}
+ {\pdf_version:}
+ }
+ }%
+ ,pdfprintclip / .code:n =
+ {
+ \pdfmanagement_remove:nn {Catalog / ViewerPreferences } { PrintClip }
+ }
+ ,pdfprintclip / unknown .code:n =
+ {
+ \msg_warning:nnxxx { hyp } { unknown-choice+empty }
+ { pdfprintclip }
+ { MediaBox, CropBox, BleedBox, TrimBox, ArtBox }
+ { \exp_not:n {#1} }
+ }
+ ,pdfprintpagerange .code:n =
+ {
+ \pdf_version_compare:NnTF > {1.6}
+ {
+ \tl_if_empty:nTF { #1}
+ {
+ \pdfmanagement_remove:nn {Catalog / ViewerPreferences }
+ { PrintPageRange }
+ }
+ {
+ \pdfmanagement_add:nnx {Catalog / ViewerPreferences }
+ {PrintPageRange}{[#1]}
+ }
+ }
+ {
+ \msg_warning:nnxx
+ {hyp}
+ {ignore-deprecated-or-unknown-option-in-pdf-version}
+ {pdfprintpagerange}
+ {\pdf_version:}
+ }
+ }
+ ,pdfprintscaling .choices:nn =
+ { None, AppDefault }
+ {
+ \pdf_version_compare:NnTF > {1.5}
+ {
+ \pdfmanagement_add:nnx {Catalog / ViewerPreferences }
+ { PrintScaling } { /#1 }
+ }
+ {
+ \msg_warning:nnxx
+ {hyp}
+ {ignore-deprecated-or-unknown-option-in-pdf-version}
+ {pdfprintscaling}
+ {\pdf_version:}
+ }
+ }%
+ ,pdfprintscaling / .code:n =
+ {
+ \pdfmanagement_remove:nn {Catalog / ViewerPreferences } {PrintScaling }
+ }
+ ,pdfprintscaling / unknown .code:n =
+ {
+ \msg_warning:nnxxx { hyp } { unknown-choice+empty }
+ { pdfprintarea }
+ { None, AppDefault }
+ { \exp_not:n {#1} }
+ }
+ ,pdfremotestartview .code:n =
+ {
+ \tl_set:Nx \l__hyp_tmpa_tl {#1~null~null~null~}
+ \exp_args:NNV
+ \regex_extract_once:NnNTF \c__hyp_dest_startview_regex \l__hyp_tmpa_tl \l__hyp_tmpa_seq
+ {
+ \tl_set:Nx \l__hyp_dest_pdfremotestartview_tl {\seq_item:Nn \l__hyp_tmpa_seq {1}}
+ }
+ {
+ \msg_warning:nnnn {hyp}{invalid-destination-value}{#1}{pdfremotestartview}
+ \tl_set:Nn \l__hyp_dest_pdfremotestartview_tl {Fit}
+ }
+ }
+ ,pdfremotestartview .initial:n = {Fit}
+ % pdfstartpage is special as it shares code with pdfstartview
+ ,pdfstartpage .code:n =
+ {
+ \tl_gset:Nx \g__hyp_dest_pdfstartpage_tl { #1 }
+ \bool_if:nTF
+ { \tl_if_empty_p:N \g__hyp_dest_pdfstartpage_tl || \tl_if_empty_p:N \g__hyp_dest_pdfstartview_tl }
+ {
+ \pdfmanagement_remove:nn {Catalog} { OpenAction }
+ }
+ {
+ \pdfmanagement_add:nnx {Catalog} { OpenAction }
+ {
+ [\pdf_pageobject_ref:n {\g__hyp_dest_pdfstartpage_tl}~/\g__hyp_dest_pdfstartview_tl]
+ }
+ }
+ }
+ ,pdfstartpage .initial:n =1
+ ,pdfstartview .code:n =
+ {
+ \tl_set:Nx \l__hyp_tmpa_tl {#1~null~null~null~}
+ \exp_args:NNV
+ \regex_extract_once:NnNTF \c__hyp_dest_startview_regex \l__hyp_tmpa_tl \l__hyp_tmpa_seq
+ {
+ \tl_gset:Nx \g__hyp_dest_pdfstartview_tl {\seq_item:Nn \l__hyp_tmpa_seq {1}}
+ }
+ {
+ \msg_warning:nnnn {hyp}{invalid-destination-value}{#1}{pdfstartview}
+ \tl_gset:Nn \g__hyp_dest_pdfstartview_tl {Fit}
+ }
+ \bool_if:nTF
+ { \tl_if_empty_p:N \g__hyp_dest_pdfstartpage_tl || \tl_if_empty_p:N \g__hyp_dest_pdfstartview_tl }
+ {
+ \pdfmanagement_remove:nn {Catalog} { OpenAction }
+ }
+ {
+ \pdfmanagement_add:nnx {Catalog} { OpenAction }
+ {
+ [\pdf_pageobject_ref:n {\g__hyp_dest_pdfstartpage_tl}~/\g__hyp_dest_pdfstartview_tl]
+ }
+ }
+ }
+ ,pdfstartview .initial:n = Fit
+ ,pdftoolbar .choice:
+ ,pdftoolbar / true .code:n =
+ {
+ \pdfmanagement_remove:nn {Catalog / ViewerPreferences } { HideToolbar }
+ }
+ ,pdftoolbar / false .code:n =
+ {
+ \pdfmanagement_add:nnn {Catalog / ViewerPreferences }
+ { HideToolbar } { true }
+ }
+ ,pdftoolbar / true .code:n =
+ {
+ \pdfmanagement_remove:nn {Catalog / ViewerPreferences } { HideToolbar }
+ }
+ ,pdftoolbar .default:n = true
+ ,pdftoolbar / unknown .code:n =
+ {
+ \msg_warning:nnxx { hyp } { no-bool }
+ { pdftoolbar }
+ { \exp_not:n {#1} }
+ }
+ % pdfview see below.
+ ,pdfviewarea .choices:nn =
+ { MediaBox, CropBox, BleedBox, TrimBox, ArtBox }
+ {
+ \pdf_version_compare:NnTF < {2.0}
+ {
+ \pdfmanagement_add:nnn {Catalog / ViewerPreferences }
+ { ViewArea } { /#1 }
+ }
+ {
+ \msg_warning:nnxx
+ {hyp}
+ {ignore-deprecated-or-unknown-option-in-pdf-version}
+ {pdfviewarea}
+ {\pdf_version:}
+ }
+ }%
+ ,pdfviewarea / .code:n =
+ {
+ \pdfmanagement_remove:nn {Catalog / ViewerPreferences } { ViewArea }
+ }
+ ,pdfviewarea / unknown .code:n =
+ {
+ \msg_warning:nnxxx { hyp } { unknown-choice+empty }
+ { pdfviewarea }
+ { MediaBox, CropBox, BleedBox, TrimBox, ArtBox }
+ { \exp_not:n {#1} }
+ }
+ ,pdfviewclip .choices:nn =
+ { MediaBox, CropBox, BleedBox, TrimBox, ArtBox }
+ {
+ \pdf_version_compare:NnTF < {2.0}
+ {
+ \pdfmanagement_add:nnn {Catalog / ViewerPreferences }
+ { ViewClip } { /#1 }
+ }
+ {
+ \msg_warning:nnxx
+ {hyp}
+ {ignore-deprecated-or-unknown-option-in-pdf-version}
+ {pdfviewclip}
+ {\pdf_version:}
+ }
+ }%
+ ,pdfviewclip / .code:n =
+ {
+ \pdfmanagement_remove:nn {Catalog / ViewerPreferences } { ViewClip }
+ }
+ ,pdfviewclip / unknown .code:n =
+ {
+ \msg_warning:nnxxx { hyp } { unknown-choice+empty }
+ { pdfviewclip }
+ { MediaBox, CropBox, BleedBox, TrimBox, ArtBox }
+ { \exp_not:n {#1} }
+ }
+ ,pdfwindowui .choice:
+ ,pdfwindowui / true .code:n =
+ {
+ \pdfmanagement_remove:nn {Catalog / ViewerPreferences } { HideWindowUI }
+ }
+ ,pdfwindowui / false .code:n =
+ {
+ \pdfmanagement_add:nnn {Catalog / ViewerPreferences }
+ { HideWindowUI } { true }
+ }
+ ,pdfwindowui / .code:n =
+ {
+ \pdfmanagement_remove:nn {Catalog / ViewerPreferences } {HideWindowUI }
+ }
+ ,pdfwindowui / unknown .code:n =
+ {
+ \msg_warning:nnxx { hyp } { no-bool }
+ { pdfwindowui }
+ { \exp_not:n {#1} }
+ }
+ ,pdfwindowui .default:n = true
+ }
+\keys_define:nn { hyp / setup }
+ {
+ ,pdfview .code:n =
+ {
+ \seq_set_split:Nnn \l__hyp_tmpa_seq {~}{#1}
+ \str_case_e:nnF { \str_lowercase:f{ \seq_item:Nn \l__hyp_tmpa_seq {1} } }
+ {
+ { xyz }
+ {
+ \int_compare:nNnTF {\seq_count:N \l__hyp_tmpa_seq } > { 1 }
+ {
+ \seq_get_right:NN \l__hyp_tmpa_seq \l__hyp_tmpa_tl
+ \tl_if_eq:NnTF \l__hyp_tmpa_tl {null}
+ {
+ \tl_set:Nn \l__hyp_dest_pdfview_tl {xyz}
+ }
+ {
+ \tl_set:Nx \l__hyp_dest_pdfview_tl
+ {
+ \fp_eval:n { \l__hyp_tmpa_tl * 100 }
+ }
+ }
+ }
+ {
+ \tl_set:Nn \l__hyp_dest_pdfview_tl {xyz}
+ }
+ }
+ { fit } { \tl_set:Nn \l__hyp_dest_pdfview_tl {fit} }
+ { fitb } { \tl_set:Nn \l__hyp_dest_pdfview_tl {fitb} }
+ { fitbh } { \tl_set:Nn \l__hyp_dest_pdfview_tl {fitbh}}
+ { fitbv } { \tl_set:Nn \l__hyp_dest_pdfview_tl {fitbv}}
+ { fith } { \tl_set:Nn \l__hyp_dest_pdfview_tl {fith} }
+ { fitv } { \tl_set:Nn \l__hyp_dest_pdfview_tl {fitv} }
+ { fitr }
+ {
+ \int_compare:nNnTF {\seq_count:N \l__hyp_tmpa_seq } = {1}
+ {
+ \tl_set:Nn \l__hyp_dest_pdfview_tl {fitr}
+ }
+ {
+ %ensure 4 values ...
+ \tl_set:Nn \l__hyp_dest_pdfview_tl {fitrbox}
+ \seq_put_right:Nn \l__hyp_tmpa_seq {0}
+ \seq_put_right:Nn \l__hyp_tmpa_seq {0}
+ \seq_put_right:Nn \l__hyp_tmpa_seq {0}
+ \hbox_set_to_wd:Nnn \l__hyp_dest_box
+ {
+ \fp_eval:n
+ {
+ round
+ (
+ abs
+ (
+ \seq_item:Nn\l__hyp_tmpa_seq{4}
+ -
+ (\seq_item:Nn\l__hyp_tmpa_seq{2})
+ ),
+ 3
+ )
+ }bp
+ }{}
+ \box_set_dp:Nn \l__hyp_dest_box
+ {
+ \fp_eval:n
+ {
+ round(0 - (\seq_item:Nn\l__hyp_tmpa_seq{3}),3)
+ }bp
+ }
+ \box_set_ht:Nn \l__hyp_dest_box
+ {
+ \seq_item:Nn\l__hyp_tmpa_seq{5}bp
+ }
+ }
+ }
+ }
+ {
+ \msg_warning:nnnn {hyp}{invalid-destination-value}{#1}{pdfview}
+ \tl_set:Nn \l__hyp_dest_pdfview_tl {fit}
+ }
+ }
+ ,pdfview .initial:n = {xyz}
+ }
+\keys_define:nn { hyp / setup }
+ {
+ ,pdflang .code:n =
+ {
+ \tl_if_empty:nTF { #1 }
+ {
+ \pdfmanagement_remove:nn {Catalog} { Lang }
+ }
+ {
+ \pdfmanagement_add:nnx {Catalog} { Lang } { (#1) }
+ }
+ \__hyp_store_metadata:nn {pdflang}{#1}
+ }
+ }
+\cs_new_protected:Npn \__hyp_setup_info_key:nn #1 #2
+ {
+ \keys_define:nn { hyp / setup }
+ {
+ pdf#1 .code:n =
+ {
+ \tl_if_blank:nTF {##1}
+ {
+ \pdfmanagement_remove:nn {Info}{#2}
+ }
+ {
+ \__hyp_text_pdfstring_info:nN {##1}\l__hyp_tmpa_str
+ \str_if_eq:VnF\l__hyp_tmpa_str{<FEFF>}
+ {
+ \pdfmanagement_add:nnx {Info}{#2}{\l__hyp_tmpa_str}
+ }
+ }
+ \__hyp_store_metadata:nn {pdf#1}{##1}
+ }
+ }
+ \keys_define:nn { hyp / info }
+ {
+ #2 .code:n =
+ {
+ \tl_if_blank:nTF {##1}
+ {
+ \pdfmanagement_remove:nn {Info}{#2}
+ }
+ {
+ \__hyp_text_pdfstring_info:nN {##1}\l__hyp_tmpa_str
+ \str_if_eq:VnF\l__hyp_tmpa_str{<FEFF>}
+ {
+ \pdfmanagement_add:nnx {Info}{#2}{\l__hyp_tmpa_str}
+ }
+ }
+ \exp_args:Nx \__hyp_store_metadata:nn {pdf\str_lowercase:n{#1}}{##1}
+ }
+ ,unknown .code:n =
+ {
+ \__hyp_text_pdfstring_info:nN {##1}\l__hyp_tmpa_str
+ \str_if_eq:VnF\l__hyp_tmpa_str{<FEFF>}
+ {
+ \exp_args:Nno
+ \pdfmanagement_add:nnx {Info}
+ { \l_keys_key_str } {\l__hyp_tmpa_str}
+ }
+ }
+ }
+ }
+\__hyp_setup_info_key:nn {author} {Author}
+\__hyp_setup_info_key:nn {title} {Title}
+\__hyp_setup_info_key:nn {producer} {Producer}
+\__hyp_setup_info_key:nn {creator} {Creator}
+\__hyp_setup_info_key:nn {subject} {Subject}
+\__hyp_setup_info_key:nn {keywords} {Keywords}
+\cs_new_protected:Npn \__hyp_setup_info_date_key:nn #1 #2
+ {
+ \keys_define:nn { hyp / setup }
+ {
+ pdf#1 .code:n =
+ {
+ \tl_if_blank:nTF {##1}
+ {
+ \pdfmanagement_remove:nn {Info}{#2}
+ }
+ {
+ \pdfmanagement_add:nnx {Info}{#2}{(\tl_to_str:n {##1})}
+ }
+ \__hyp_store_metadata:nn {pdf#1}{##1}
+ }
+ }
+ \keys_define:nn { hyp / info }
+ {
+ #2 .code:n =
+ {
+ \tl_if_blank:nTF {##1}
+ {
+ \pdfmanagement_remove:nn {Info}{#2}
+ }
+ {
+ \pdfmanagement_add:nnx {Info}{#2}{(\tl_to_str:n {##1})}
+ }
+ \exp_args:Nx \__hyp_store_metadata:nn {pdf\str_lowercase:n{#1}}{##1}
+ }
+ }
+ }
+
+\__hyp_setup_info_date_key:nn {creationdate} {CreationDate}
+\__hyp_setup_info_date_key:nn {moddate} {ModDate}
+\keys_define:nn { hyp / setup }
+ {
+ ,pdftrapped .code:n =
+ {
+ \exp_args:Nne
+ \keys_set:nn { hyp / setup } { _pdftrapped = \str_uppercase:n { #1 } }
+ }
+ ,_pdftrapped .choices:nn = {TRUE,FALSE,UNKNOWN}
+ {
+ \pdfmanagement_add:nnx {Info}{Trapped}
+ {/
+ \str_uppercase:f { \str_head:n { #1 } }
+ \str_lowercase:f { \str_tail:n { #1 } }
+ }
+ \__hyp_store_metadata:nx {pdftrapped}
+ {
+ \str_uppercase:f { \str_head:n { #1 } }
+ \str_lowercase:f { \str_tail:n { #1 } }
+ }
+ }
+ ,_pdftrapped / unknown .code:n =
+ {
+ \msg_warning:nnxxx { hyp } { unknown-choice }
+ { pdftrapped }
+ { true~(case~insensitive), false~(case~insensitive), unknown~(case~insensitive) }
+ { \exp_not:n {#1} }
+ }
+ }
+\keys_define:nn { hyp / setup }
+ {
+ pdfinfo .code:n =
+ {
+ \keys_set:nn { hyp / info } { #1 }
+ }
+ }
+\keys_set:nn { hyp / setup} {pdfcreator = LaTeX~with~hyperref}
+\keys_set:nn { hyp / setup} {pdfauthor = }
+\keys_set:nn { hyp / setup} {pdftitle = }
+\keys_set:nn { hyp / setup} {pdfsubject = }
+\clist_map_inline:nn
+ {
+ ,pdfcopyright
+ ,pdftype
+ ,pdflicenseurl
+ ,pdfauthortitle
+ ,pdfcaptionwriter
+ ,pdfmetalang
+ ,pdfapart
+ ,pdfaconformance
+ ,pdfuapart
+ ,pdfxstandard
+ ,pdfsource
+ ,pdfdocumentid
+ ,pdfinstanceid
+ ,pdfversionid
+ ,pdfrendition
+ ,pdfpublication
+ ,pdfpubtype
+ ,pdfbytes
+ ,pdfnumpages
+ ,pdfissn
+ ,pdfeissn
+ ,pdfisbn
+ ,pdfbookedition
+ ,pdfpublisher
+ ,pdfvolumenum
+ ,pdfissuenum
+ ,pdfpagerange
+ ,pdfdoi
+ ,pdfurl
+ ,pdfidentifier
+ ,pdfsubtitle
+ ,pdfpubstatus
+ ,pdfcontactaddress
+ ,pdfcontactcity
+ ,pdfcontactregion
+ ,pdfcontactpostcode
+ ,pdfcontactcountry
+ ,pdfcontactphone
+ ,pdfcontactemail
+ ,pdfcontacturl
+ ,pdfdate
+ }
+ {
+ \keys_define:nn { hyp / setup }
+ {
+ #1 .code:n= { \__hyp_store_metadata:nn {#1}{##1}}
+ }
+ }
+\keys_define:nn { hyp / setup }
+ {
+ pdfpageduration .code:n =
+ {
+ \tl_if_blank:nTF { #1 }
+ {
+ \pdfmanagement_remove:nn {Page}{Dur}
+ }
+ {
+ \pdfmanagement_add:nnn {Page}{Dur}{#1}
+ }
+ }
+ }
+\keys_define:nn { hyp / setup }
+ {
+ pdfpagetransition .code:n =
+ {
+ \tl_if_blank:nTF {#1}
+ {
+ \pdfmanagement_remove:nn {Page}{Trans}
+ }
+ {
+ \group_begin:
+ \keys_set:nn { hyp / trans }{style=R,#1}
+ \pdf_object_unnamed_write:nx { dict }
+ {
+ \pdfdict_use:n {l__hyp_page/Trans}
+ }
+ \pdfmanagement_add:nnx {Page}{Trans}{\pdf_object_ref_last:}
+ \group_end:
+ }
+ }
+ }
+\keys_define:nn { hyp / trans }
+ {
+ ,style .choices:nn =
+ {Split,Blinds,Box,Wipe,Dissolve,Glitter,R,Fly,Push,Cover,Uncover,Fade}
+ { \pdfdict_put:nnn {l__hyp_page/Trans}{ S }{/#1} }
+ ,style / unknown .code:n =
+ {
+ \msg_warning:nnxxx { hyp } { unknown-choice }
+ { trans / style }
+ { Split,Blinds,Box,Wipe,Dissolve,Glitter,R,Fly,Push,Cover,Uncover,Fade }
+ { \exp_not:n {#1} }
+ }
+ ,duration .code:n =
+ {
+ \pdfdict_put:nnn {l__hyp_page/Trans}{ D }{#1}
+ }
+ ,direction .choices:nn =
+ {H,V}
+ { \pdfdict_put:nnn {l__hyp_page/Trans}{ S }{/#1} }
+ ,direction .choices:nn =
+ {0,90,180,270,315}
+ { \pdfdict_put:nnn {l__hyp_page/Trans}{ DI }{ #1 } }
+ ,direction / None .code:n =
+ { \pdfdict_put:nnn {l__hyp_page/Trans}{ DI }{ /None } }
+ ,direction / unknown .code:n =
+ {
+ \msg_warning:nnxxx { hyp } { unknown-choice }
+ { trans / direction }
+ {
+ H~(horizontal,~only~Split,~Blinds),
+ V~(vertical,~only~Split,~Blinds),
+ 0~(left~to~right,~only~Wipe,~Glitter,~Fly,~Cover,~Uncover,~Push),
+ 90~(bottom~to~top,~only~Wipe),
+ 180~(right~to~left,~only~Wipe),
+ 270~(top~to~bottom,~only~Wipe,~Glitter,~Fly,~Cover,~Uncover,~Push),
+ 315~(top~left~to~bottom,~only~Glitter),
+ None~(only~Fly)
+ }
+ { \exp_not:n {#1} }
+ }
+ ,motion .choices:nn =
+ {I,O}
+ { \pdfdict_put:nnn {l__hyp_page/Trans}{ M }{/#1} }
+ ,motion / unknown .code:n =
+ {
+ \msg_warning:nnxxx { hyp } { unknown-choice }
+ { trans / motion }
+ { I~(inwards) , O~(outwards) }
+ { \exp_not:n {#1} }
+ }
+ ,scale .code:n =
+ { \pdfdict_put:nnn { l__hyp_page/Trans }{ SS }{ #1 } }
+ ,opaque .choices:nn = {true,false}
+ { \pdfdict_put:nnn { l__hyp_page/Trans }{ B } { #1} }
+ ,opaque / unknown .code:n =
+ {
+ \msg_warning:nnxxx { hyp } { unknown-choice }
+ { trans / B }
+ { true~(opaque~back,~only~Fly), false~(opaque~back,~only~Fly) }
+ { \exp_not:n {#1} }
+ }
+ % try to set unknown keys as style
+ ,unknown .code:n =
+ {
+ % warning ...
+ \exp_args:Nnx\keys_set:nn {hyp/trans}{ style=\l_keys_key_str }
+ }
+ }
+\keys_set_known:nv{hyp/setup}{opt@hyperref.sty}
+%% Form field code
+\NewDocumentCommand \MakeFieldObject { m m }
+ {
+ \pdfxform_new:nnn { #2 }{} { #1 }
+ }
+
+\prop_new:N \g__hyp_AcroForm_CoFields_prop
+\prop_new:N \g__hyp_AcroForm_Fields_prop
+
+\let\HyField@afields\ltx@empty
+\let\HyField@cofields\ltx@empty
+%% UF test for old pdftex removed
+\def\HyField@AfterAuxOpen{\Hy@AtBeginDocument}%
+
+\def\HyField@AuxAddToFields#1
+ {
+ \prop_gput:Nnn \g__hyp_AcroForm_Fields_prop {#1}{F}
+ }%
+
+\def\HyField@AuxAddToCoFields #1 #2
+ {
+ \prop_gput:Nnn \g__hyp_AcroForm_CoFields_prop {a#1}{#2}
+ }
+
+\Hy@AtBeginDocument
+ {
+ \if@filesw
+ \immediate\write\@mainaux{%
+ \string\providecommand\string\HyField@AuxAddToFields[1]{}%
+ }%
+ \immediate\write\@mainaux{%
+ \string\providecommand\string\HyField@AuxAddToCoFields[2]{}%
+ }%
+ \fi
+ \let\HyField@AfterAuxOpen\@firstofone
+ }%
+
+\def\HyField@AddToFields
+ {
+ \exp_args:Nx\HyField__hypAddToFields
+ {
+ \pdfannot_box_ref_last:
+ }
+ \ifx\Fld@calculate@code\ltx@empty
+ \else
+ \begingroup
+ \Hy@safe@activestrue
+ \edef\Hy@temp{%
+ \endgroup
+ \if@filesw
+ \write\@mainaux
+ {
+ \string\HyField@AuxAddToCoFields
+ {
+ \Fld@calculate@sortkey
+ }
+ {
+ \pdfannot_box_ref_last:
+ }
+ }
+ \fi
+ }%
+ \Hy@temp
+ \fi
+ }%
+
+\def\HyField__hypAddToFields#1{
+ \HyField@AfterAuxOpen{%
+ \if@filesw
+ \write\@mainaux{%
+ \string\HyField@AuxAddToFields{#1}%
+ }%
+ \fi
+ }%
+ }%
+
+\ExplSyntaxOff
+\ExplSyntaxOn
+\tl_new:N \l__hyp_CheckmarkYes_tl
+\tl_set:Nn \l__hyp_CheckmarkYes_tl { __hyp_xform_CheckMarkYes }
+\tl_new:N \l__hyp_CheckmarkOff_tl
+\tl_set:Nn \l__hyp_CheckmarkOff_tl { __hyp_xform_CheckMarkOff }
+
+\def\@Form[#1]
+ {
+ \@ifundefined{textcolor}{\let\textcolor\@gobble}{}
+ \kvsetkeys{Form}{#1}
+ \pdf@ifdraftmode{}
+ {
+ \Hy@FormObjects
+ \prop_map_inline:Nn \g__hyp_AcroForm_Fields_prop
+ {
+ \pdfmanagement_add:nnx { Catalog / AcroForm } { Fields }{##1}
+ %\pdfmanagement_show:n { Catalog / AcroForm }
+ }
+ \prop_if_empty:NF \g__hyp_AcroForm_CoFields_prop
+ {
+ \prop_map_inline:Nn \g__hyp_AcroForm_CoFields_prop
+ {
+ \seq_put_right:Nn \l__hyp_tmpa_seq {##1}
+ }
+ \seq_sort:Nn \l__hyp_tmpa_seq
+ {
+ \int_compare:nNnTF { \pdf@strcmp{##1}{##2} } > { 0 }
+ { \sort_return_swapped: }
+ { \sort_return_same: }
+ }
+ \seq_map_inline:Nn \l__hyp_tmpa_seq
+ {
+ \pdfmanagement_add:nnx { Catalog / AcroForm }
+ { CO }
+ {
+ \prop_item:Nn \g__hyp_AcroForm_CoFields_prop {##1}
+ }
+ }
+ }
+ \pdfmanagement_add:nnx {Catalog / AcroForm/DR/Font }
+ {ZaDb} {\pdf_object_ref:n {l__hyp_font_zapfdingbats_obj} }
+ \pdfmanagement_add:nnx {Catalog / AcroForm/DR/Font }
+ {Helv} {\pdf_object_ref:n {l__hyp_font_helvetica_obj} }
+ \pdfmanagement_add:nnx {Catalog /AcroForm}
+ {DA}{(/Helv~10~Tf~0~g)}
+ \pdfmeta_standard_verify:nTF {form_no_NeedAppearance}
+ {
+ \legacy_if:nT { HyField@NeedAppearances }
+ {
+ \pdfmanagement_add:nnn {Catalog / AcroForm }{NeedAppearances}{true}
+ }
+ }
+ {
+ \pdfmanagement_remove:nn {Catalog / AcroForm }{NeedAppearances}
+ }
+ }
+ \MakeFieldObject
+ {
+ \group_begin:
+ \fontfamily{pzd}
+ \fontencoding{U}
+ \fontseries{m}
+ \fontshape{n}
+ \selectfont
+ \char123
+ \group_end:
+ }
+ {__hyp_xform_Ding}
+ \MakeFieldObject
+ {
+ \group_begin:
+ \fontfamily{pzd}
+ \fontencoding{U}
+ \fontseries{m}
+ \fontshape{n}
+ \selectfont
+ \phantom{\char123}
+ \group_end:
+ }
+ {__hyp_xform_DingOff}
+ \MakeFieldObject
+ {
+ \group_begin:
+ \fontfamily{pzd}
+ \fontencoding{U}
+ \fontseries{m}
+ \fontshape{n}
+ \selectfont
+ \char51
+ \group_end:
+ }
+ {__hyp_xform_CheckMarkYes}
+ \MakeFieldObject
+ {
+ \group_begin:
+ \fontfamily{pzd}
+ \fontencoding{U}
+ \fontseries{m}
+ \fontshape{n}
+ \selectfont
+ \phantom{\char51} %perhaps xetex needs some small glyph ..
+ \group_end:
+ }
+ {__hyp_xform_CheckMarkOff}
+ \MakeFieldObject
+ {
+ \fbox{\textcolor{yellow}{\textsf{Submit}}} %color?
+ }
+ {__hyp_xform_Submit}
+ \MakeFieldObject
+ {
+ \fbox{\textcolor{yellow}{\textsf{SubmitP}}} %color?
+ }
+ {__hyp_xform_SubmitP}
+ }
+\ExplSyntaxOff
+\let\@endForm\ltx@empty
+\let\HyAnn@AbsPageLabel\ltx@empty
+\let\Fld@pageobjref\ltx@empty
+
+\ExplSyntaxOn
+\newcount\HyAnn@Count
+\HyAnn@Count=\ltx@zero
+\def\HyAnn@AbsPageLabel
+ {
+ \global\advance\HyAnn@Count by\ltx@one
+ %\zref@labelbyprops{HyAnn@\the\HyAnn@Count}{abspage}%
+ %\zref@labelbylist {HyAnn@\the\HyAnn@Count} {l3pdf}
+ %\zref@refused{HyAnn@\the\HyAnn@Count}%
+ \__hyp_ref_label:en {HyAnn@\the\HyAnn@Count}{abspage}
+ \__hyp_ref_check:en {HyAnn@\the\HyAnn@Count}{abspage}
+ }%
+\def\Fld@pageobjref
+ {
+ \__hyp_ref_if_exist:enT {HyAnn@\the\HyAnn@Count}{abspage}
+ {
+ /P~\pdf_pageobject_ref:n
+ {
+ \__hyp_ref_value:en{HyAnn@\the\HyAnn@Count}{abspage}
+ }
+ }
+ }
+\ExplSyntaxOff
+\ExplSyntaxOn
+%% check if the attr should be set through
+%% hooks.
+%% check if options are missing.
+\def\@TextField[#1]#2{% parameters, label
+ \def\Fld@name{#2}%
+ \let\Fld@default\ltx@empty
+ \let\Fld@value\@empty
+ \def\Fld@width{\DefaultWidthofText}%
+ \def\Fld@height{%
+ \ifFld@multiline
+ \DefaultHeightofTextMultiline
+ \else
+ \DefaultHeightofText
+ \fi
+ }%
+ \begingroup
+ \expandafter\HyField@SetKeys\expandafter{%
+ \DefaultOptionsofText,#1%
+ }%
+ \PDFForm@Name
+ \HyField@FlagsText
+ \ifFld@hidden\def\Fld@width{1sp}\fi
+ \ifx\Fld@value\@empty\def\Fld@value{\Fld@default}\fi
+ \LayoutTextField{#2}{%
+ \leavevmode
+ \HyAnn@AbsPageLabel
+ \Hy@escapeform\PDFForm@Text
+ \pdfannot_box:nnnn
+ {\Fld@width}
+ {\Fld@height}
+ {0pt} %is this correct?
+ {\PDFForm@Text}
+ \MakeTextField{\Fld@width}{\Fld@height}
+ \HyField@AddToFields
+ }%
+ \endgroup
+}
+\providecommand\@curropt{}
+\def\@ChoiceMenu[#1]#2#3{% parameters, label, choices
+ \def\Fld@name{#2}
+ \let\Fld@default\relax
+ \let\Fld@value\relax
+ \def\Fld@width{\DefaultWidthofChoiceMenu}
+ \def\Fld@height{\DefaultHeightofChoiceMenu}
+ \begingroup
+ \Fld@menulength=0 %
+ \@tempdima\z@
+ \clist_map_variable:nNn { #3 } \@curropt
+ %\@for\@curropt:=#3\do
+ {%
+ \expandafter\Fld@checkequals\@curropt==\\%
+ \Hy@StepCount\Fld@menulength
+ \settowidth{\@tempdimb}{\@currDisplay}%
+ \ifdim\@tempdimb>\@tempdima\@tempdima\@tempdimb\fi
+ }%
+ \advance\@tempdima by~15\p@
+ \begingroup
+ \HyField@SetKeys{#1}
+ \edef\x{\endgroup
+ \noexpand\expandafter
+ \noexpand\HyField@SetKeys
+ \noexpand\expandafter{%
+ \expandafter\noexpand\csname DefaultOptionsof%
+ \ifFld@radio
+ Radio%
+ \else
+ \ifFld@combo
+ \ifFld@popdown
+ PopdownBox%
+ \else
+ ComboBox%
+ \fi
+ \else
+ ListBox%
+ \fi
+ \fi
+ \endcsname
+ }%
+ }\x
+ \HyField@SetKeys{#1}%
+ \PDFForm@Name
+ \ifFld@hidden\def\Fld@width{1sp}\fi
+ \ifx\Fld@value\relax
+ \let\Fld@value\Fld@default
+ \fi
+ \LayoutChoiceField{#2}{%
+ \ifFld@radio
+ \HyField@FlagsRadioButton
+ \__hypRadio{#3}%
+ \else
+ \begingroup
+ \HyField@FlagsChoice
+ \ifdim\Fld@width<\@tempdima
+ \ifdim\@tempdima<1cm\@tempdima1cm\fi
+ \edef\Fld@width{\the\@tempdima}%
+ \fi
+ \ifFld@combo
+ \else
+ \@tempdima=\the\Fld@menulength\Fld@charsize
+ \advance\@tempdima by~\Fld@borderwidth bp %
+ \advance\@tempdima by~\Fld@borderwidth bp %
+ \edef\Fld@height{\the\@tempdima}%
+ \fi
+ \__hypListbox{#3}%
+ \endgroup
+ \fi
+ }%
+ \endgroup
+}
+\tl_new:N \l__hyp_RadioYes_tl
+\tl_set:Nn \l__hyp_RadioYes_tl { __hyp_xform_Ding }
+\def\__hypRadio#1{%
+ \Fld@listcount=0~%
+ %\show\Fld@default
+ \EdefEscapeName\Fld@default{\Fld@default}%
+ \clist_map_variable:nNn { #1 } \@curropt
+ %\@for\@curropt:=#1\do
+ {%
+ \expandafter\Fld@checkequals\@curropt==\\%
+ \EdefEscapeName\@currValue{\@currValue}%
+ \Hy@StepCount\Fld@listcount
+ \@currDisplay\space
+ \leavevmode
+ \HyAnn@AbsPageLabel
+ \Hy@escapeform\PDFForm@Radio
+ \pdfannot_box:nnnn
+ {\Fld@width}
+ {\Fld@height}
+ {0pt} %is this correct?
+ {
+ \PDFForm@Radio
+ /AP
+ <<
+ /N
+ <<
+ /\@currValue\c_space_tl \pdfxform_ref:o {__hyp_xform_Ding}
+ %/Off \c_space_tl \pdfxform_ref:n {__hyp_xform_DingOff} %hm
+ >>
+ >>
+ }
+ {\fbox{ \MakeRadioField{\Fld@width}{\Fld@height}} }
+ \int_compare:nNnT { \Fld@listcount} = { 1 }
+ { \HyField@AddToFields }
+ \c_space_tl % deliberate space between radio buttons
+ % to do: --> should be configurable
+ }%
+}
+
+\newcount\Fld@listcount
+\def\__hypListbox#1
+ {
+ \HyField@PDFChoices{#1}
+ \mode_leave_vertical:
+ \HyAnn@AbsPageLabel
+ \Hy@escapeform\PDFForm@List
+ \pdf_link_user:nnn
+ {widget} %perhaps we need more types??
+ {\PDFForm@List}
+ {\MakeChoiceField{\Fld@width}{\Fld@height}}
+ \HyField@AddToFields
+ }
+
+\def\@PushButton[#1]#2{% parameters, label
+ \def\Fld@name{#2}%
+ \group_begin:
+ \exp_args:No\HyField@SetKeys
+ {
+ \DefaultOptionsofPushButton,#1
+ }
+ \PDFForm@Name
+ \pdfmeta_standard_verify:nnTF {annot_action_A}{JavaScript}
+ {
+ \HyField@FlagsPushButton
+ \legacy_if:nT {Fld@hidden}
+ {
+ \def\Fld@width{1sp}
+ }
+ \LayoutPushButtonField
+ {
+ \mode_leave_vertical:
+ \HyAnn@AbsPageLabel
+ \Hy@escapeform\PDFForm@Push
+ \hbox_set:Nn \l_tmpa_box { \MakeButtonField {#2}}
+ \pdfannot_box:nnnn
+ {\box_wd:N\l_tmpa_box}
+ {\box_ht:N\l_tmpa_box}
+ {\box_dp:N\l_tmpa_box} %is this correct?
+ {\PDFForm@Push}
+ {\box_use:N\l_tmpa_box}
+ \HyField@AddToFields
+ }
+ }
+ {
+ \msg_error:nn { hyp }{ pdfa-no-push-button }
+ \LayoutPushButtonField
+ {
+ \mode_leave_vertical:
+ \MakeButtonField{#2}
+ }
+ }
+ \group_end:
+}
+
+\def\@Submit[#1]#2
+ {
+ \def\Fld@width {\DefaultWidthofSubmit}
+ \def\Fld@height{\DefaultHeightofSubmit}
+ \group_begin:
+ \exp_args:No\HyField@SetKeys
+ {
+ \DefaultOptionsofSubmit,#1
+ }
+ \HyField@FlagsPushButton
+ \HyField@FlagsSubmit
+ \legacy_if:nT { Fld@hidden }
+ {
+ \def\Fld@width{1sp}
+ }
+ \mode_leave_vertical:
+ \HyAnn@AbsPageLabel
+ \Hy@escapeform\PDFForm@Submit
+ \hbox_set:Nn \l_tmpa_box { \MakeButtonField {#2}}
+ \pdfannot_box:nnnn
+ {\box_wd:N\l_tmpa_box}
+ {\box_ht:N\l_tmpa_box}
+ {\box_dp:N\l_tmpa_box} %is this correct?
+ {
+ \PDFForm@Submit
+ /AP<<
+ /N~\pdfxform_ref:n {__hyp_xform_Submit}~
+ /D~\pdfxform_ref:n {__hyp_xform_SubmitP}
+ >>
+ }
+ \HyField@AddToFields
+ \box_use:N\l_tmpa_box
+
+ \group_end:
+ }
+
+\def\@Reset[#1]#2
+ {
+ \def\Fld@width {\DefaultWidthofReset}
+ \def\Fld@height{\DefaultHeightofReset}
+ \group_begin:
+ \exp_args:No\HyField@SetKeys
+ {
+ \DefaultOptionsofReset,#1
+ }
+ \mode_leave_vertical:
+ \pdfmeta_standard_verify:nnTF {annot_action_A}{ResetForm}
+ {
+ \HyField@FlagsPushButton
+ \legacy_if:nT { Fld@hidden }
+ { \def\Fld@width{1sp} }
+ \HyAnn@AbsPageLabel
+ \Hy@escapeform\PDFForm@Reset
+ \hbox_set:Nn \l_tmpa_box { \MakeButtonField {#2}}
+ \pdfannot_box:nnnn
+ {\box_wd:N\l_tmpa_box}
+ {\box_ht:N\l_tmpa_box}
+ {\box_dp:N\l_tmpa_box} %is this correct?
+ { \PDFForm@Reset }
+ \HyField@AddToFields
+ \box_use:N \l_tmpa_box
+ }
+ {
+ \msg_error:nn { hyp }{ pdfa-no-reset-button }
+ \MakeButtonField{#2}
+ }
+ \group_end:
+ }
+
+\def\@CheckBox[#1]#2
+ {% parameters, label
+ \def\Fld@name{#2}
+ \def\Fld@default{0}
+ \group_begin:
+ \def\Fld@width {\DefaultWidthofCheckBox}
+ \def\Fld@height{\DefaultHeightofCheckBox}
+ \exp_args:No\HyField@SetKeys
+ {
+ \DefaultOptionsofCheckBox,#1
+ }
+ \PDFForm@Name
+ \HyField@FlagsCheckBox
+ \legacy_if:nT { Fld@hidden }
+ {
+ \def\Fld@width{1sp}
+ }
+ \LayoutCheckField{#2}
+ {
+ \mode_leave_vertical:
+ \HyAnn@AbsPageLabel
+ \Hy@escapeform\PDFForm@Check
+ \pdfannot_box:nnnn
+ {\Fld@width}
+ {\Fld@height}
+ {0pt} %is this correct?
+ {\PDFForm@Check}
+ \HyField@AddToFields %check if this works with xelatex ...
+ }
+ \group_end:
+ }
+\ExplSyntaxOff
+
+\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 }
+ {
+ /Type/Encoding
+ /Differences[
+ 24/breve/caron/circumflex/dotaccent/hungarumlaut/ogonek
+ /ring/tilde
+ \c_space_tl
+ 39/quotesingle
+ \c_space_tl
+ 96/grave %
+ \iow_newline:
+ 128/bullet/dagger/daggerdbl/ellipsis/emdash/endash/florin
+ /fraction/guilsinglleft/guilsinglright/minus/perthousand
+ /quotedblbase/quotedblleft/quotedblright/quoteleft
+ /quoteright/quotesinglbase/trademark/fi/fl/Lslash/OE
+ /Scaron/Ydieresis/Zcaron/dotlessi/lslash/oe/scaron/zcaron
+ \iow_newline:
+ 164/currency
+ \c_space_tl
+ 166/brokenbar
+ \c_space_tl
+ 168/dieresis/copyright/ordfeminine
+ \c_space_tl
+ 172/logicalnot/.notdef/registered/macron/degree/plusminus
+ /twosuperior/threesuperior/acute/mu
+ \c_space_tl
+ 183/periodcentered/cedilla/onesuperior/ordmasculine
+ \c_space_tl
+ 188/onequarter/onehalf/threequarters
+ \iow_newline:
+ 192/Agrave/Aacute/Acircumflex/Atilde/Adieresis/Aring/AE
+ /Ccedilla/Egrave/Eacute/Ecircumflex/Edieresis/Igrave
+ /Iacute/Icircumflex/Idieresis/Eth/Ntilde/Ograve/Oacute
+ /Ocircumflex/Otilde/Odieresis/multiply/Oslash/Ugrave
+ /Uacute/Ucircumflex/Udieresis/Yacute/Thorn/germandbls
+ /agrave/aacute/acircumflex/atilde/adieresis/aring/ae
+ /ccedilla/egrave/eacute/ecircumflex/edieresis/igrave
+ /iacute/icircumflex/idieresis/eth/ntilde/ograve/oacute
+ /ocircumflex/otilde/odieresis/divide/oslash/ugrave
+ /uacute/ucircumflex/udieresis/yacute/thorn/ydieresis
+ ]
+ }
+ \pdf_object_write:nn {l__hyp_font_zapfdingbats_obj }
+ {
+ /Type/Font
+ /Subtype/Type1
+ /Name/ZaDb
+ /BaseFont/ZapfDingbats
+ }
+ \pdf_object_write:nx {l__hyp_font_helvetica_obj }
+ {
+ /Type/Font
+ /Subtype/Type1
+ /Name/Helv
+ /BaseFont/Helvetica
+ /Encoding~\pdf_object_ref:n { l__hyp_encoding_pdfdoc_obj }
+ }
+ \global\let\Hy@FormObjects\relax
+ }
+\ExplSyntaxOff
+\providecommand*{\Fld@pageobjref}{}
+\ifcsname pdf@escapestring\endcsname
+ \def\Hy@escapeform#1{%
+ \ifHy@pdfescapeform
+ \let\Hy@escapestring\pdfescapestring
+ \else
+ \let\Hy@escapestring\@firstofone
+ \fi
+ }%
+ \Hy@escapeform{}%
+\else
+ \let\Hy@escapestring\@firstofone
+ \def\Hy@escapeform#1{%
+ \ifHy@pdfescapeform
+ \def\Hy@escapestring##1{%
+ \noexpand\Hy@escapestring{\noexpand##1}%
+ }%
+ \edef\Hy@temp{#1}%
+ \expandafter\Hy__hypescapeform\Hy@temp\Hy@escapestring{}\@nil
+ \def\Hy@escapestring##1{%
+ \@ifundefined{Hy@esc@\string##1}{%
+ ##1%
+ \ThisShouldNotHappen
+ }{%
+ \csname Hy@esc@\string##1\endcsname
+ }%
+ }%
+ \else
+ \let\Hy@escapestring\@firstofone
+ \fi
+ }%
+ \def\Hy__hypescapeform#1\Hy@escapestring#2#3\@nil{%
+ \ifx\\#3\\%
+ \else
+ \expandafter
+ \Hy@pstringdef\csname Hy@esc@\string#2\endcsname{#2}% probably string-hex
+ \ltx@ReturnAfterFi{%
+ \Hy__hypescapeform#3\@nil
+ }%
+ \fi
+ }%
+\fi
+\def\PDFForm@Name{%
+ \PDFForm__hypName\Fld@name
+ \ifx\Fld@altname\relax
+ \else
+ \PDFForm__hypName\Fld@altname
+ \fi
+ \ifx\Fld@mappingname\relax
+ \else
+ \PDFForm__hypName\Fld@mappingname
+ \fi
+}
+\def\PDFForm__hypName#1{%
+ \begingroup
+ \ifnum\Hy@pdfversion<5 % implementation note 117, PDF spec 1.7
+ \ifHy@unicode
+ \Hy@unicodefalse
+ \fi
+ \fi
+ \pdfstringdef\Hy@gtemp#1%
+ \endgroup
+ \let#1\Hy@gtemp
+}
+\def\Fld@X@additionalactions{%
+ \ifx\Fld@keystroke@code\@empty
+ \else
+ /K<</S/JavaScript/JS(\Hy@escapestring{\Fld@keystroke@code})>>%
+ \fi
+ \ifx\Fld@format@code\@empty
+ \else
+ /F<</S/JavaScript/JS(\Hy@escapestring{\Fld@format@code})>>%
+ \fi
+ \ifx\Fld@validate@code\@empty
+ \else
+ /V<</S/JavaScript/JS(\Hy@escapestring{\Fld@validate@code})>>%
+ \fi
+ \ifx\Fld@calculate@code\@empty
+ \else
+ /C<</S/JavaScript/JS(\Hy@escapestring{\Fld@calculate@code})>>%
+ \fi
+ \ifx\Fld@onfocus@code\@empty
+ \else
+ /Fo<</S/JavaScript/JS(\Hy@escapestring{\Fld@onfocus@code})>>%
+ \fi
+ \ifx\Fld@onblur@code\@empty
+ \else
+ /Bl<</S/JavaScript/JS(\Hy@escapestring{\Fld@onblur@code})>>%
+ \fi
+ \ifx\Fld@onmousedown@code\@empty
+ \else
+ /D<</S/JavaScript/JS(\Hy@escapestring{\Fld@onmousedown@code})>>%
+ \fi
+ \ifx\Fld@onmouseup@code\@empty
+ \else
+ /U<</S/JavaScript/JS(\Hy@escapestring{\Fld@onmouseup@code})>>%
+ \fi
+ \ifx\Fld@onenter@code\@empty
+ \else
+ /E<</S/JavaScript/JS(\Hy@escapestring{\Fld@onenter@code})>>%
+ \fi
+ \ifx\Fld@onexit@code\@empty
+ \else
+ /X<</S/JavaScript/JS(\Hy@escapestring{\Fld@onexit@code})>>%
+ \fi
+}
+\ExplSyntaxOn
+\def\Fld@additionalactions
+ {%
+ \exp_args:Ne\str_if_eq:nnF {\Fld@X@additionalactions}{}
+ {
+ \pdfmeta_standard_verify:nT {annot_widget_no_AA}
+ {/AA<<\Fld@X@additionalactions>>}
+ }
+ }
+\ExplSyntaxOff
+\def\Fld@annotnames{%
+ /T(\Fld@name)%
+ \ifx\Fld@altname\relax
+ \else
+ /TU(\Fld@altname)%
+ \fi
+ \ifx\Fld@mappingname\relax
+ \else
+ /TM(\Fld@mappingname)%
+ \fi
+}
+\ExplSyntaxOn
+\def\PDFForm@Check
+ {
+ /Subtype/Widget
+ ~\Fld@annotflags
+ ~\Fld@pageobjref
+ ~\Fld@annotnames
+ /FT/Btn
+ \Fld@flags
+ /Q~\Fld@align
+ /BS<</W~\Fld@borderwidth /S/\Fld@borderstyle>>
+ /AP
+ <<
+ /N
+ <<
+ /Yes~\pdfxform_ref:o{\l__hyp_CheckmarkYes_tl}
+ /Off~\pdfxform_ref:o{\l__hyp_CheckmarkOff_tl}
+ >>
+ >>
+ /MK<<
+ \int_compare:nNnF {\Fld@rotation}={0}
+ {
+ /R~\Fld@rotation
+ }
+ \tl_if_empty:NF\Fld@bordercolor
+ {
+ /BC[\Fld@bordercolor]
+ }
+ \tl_if_empty:NF\Fld@bcolor
+ {
+ /BG[\Fld@bcolor]
+ }
+ /CA(\Hy@escapestring{\Fld@cbsymbol})%
+ >>
+ /DA
+ (
+ /ZaDb~\strip@pt\Fld@charsize\c_space_tl Tf
+ \tl_if_empty:NF \Fld@color
+ {
+ \c_space_tl \Fld@color
+ }
+ )
+ /H/P
+ \legacy_if:nTF {Fld@checked}
+ {
+ /V/Yes /AS/Yes
+ }
+ {
+ /V/Off /AS/Off
+ }
+ \Fld@additionalactions
+}
+\ExplSyntaxOff
+\ExplSyntaxOn
+ \def\PDFForm@Push
+ {
+ /Subtype/Widget
+ ~\Fld@annotflags
+ ~\Fld@pageobjref
+ ~\Fld@annotnames
+ /FT/Btn
+ ~\Fld@flags
+ /H/P
+ /BS<</W~\Fld@borderwidth/S/\Fld@borderstyle>>
+ \bool_if:nT
+ {
+ !\int_compare_p:nNn {\Fld@rotation} = {0}
+ ||
+ \tl_if_exist_p:N \Fld@bordercolor
+ }
+ {
+ /MK
+ <<
+ \int_compare:nNnF {\Fld@rotation} = {0}
+ {
+ /R~\Fld@rotation
+ }
+ \tl_if_exist:NT \Fld@bordercolor
+ {
+ /BC[\Fld@bordercolor]
+ }
+ >>
+ }
+ /A<</S/JavaScript/JS(\Hy@escapestring{\Fld@onclick@code})>>
+ \Fld@additionalactions
+ }
+
+\ExplSyntaxOff
+\def\PDFForm@List{%
+ /Subtype/Widget%
+ \Fld@annotflags
+ \Fld@pageobjref
+ \Fld@annotnames
+ /FT/Ch%
+ \Fld@flags
+ /Q \Fld@align
+ /BS<</W \Fld@borderwidth/S/\Fld@borderstyle>>%
+ \ifcase0\ifnum\Fld@rotation=\z@ \else 1\fi
+ \ifx\Fld@bordercolor\relax\else 1\fi
+ \ifx\fld@bcolor\relax \else 1\fi
+ \space
+ \else
+ /MK<<%
+ \ifnum\Fld@rotation=\z@
+ \else
+ /R \Fld@rotation
+ \fi
+ \ifx\Fld@bordercolor\relax
+ \else
+ /BC[\Fld@bordercolor]%
+ \fi
+ \ifx\Fld@bcolor\relax
+ \else
+ /BG[\Fld@bcolor]%
+ \fi
+ >>%
+ \fi
+ /DA(/Helv \strip@pt\Fld@charsize\space Tf%
+ \ifx\Fld@color\@empty\else\space\Fld@color\fi)%
+ \Fld@choices
+ \Fld@additionalactions
+}
+\ExplSyntaxOn
+\def\PDFForm@Radio
+ {
+ /Subtype/Widget
+ ~\Fld@annotflags
+ ~\Fld@pageobjref
+ ~\Fld@annotnames
+ /FT/Btn
+ \Fld@flags
+ /H/P
+ /BS<</W~\Fld@borderwidth/S/\Fld@borderstyle>>
+ /MK<<
+ \ifnum\Fld@rotation=\z@
+ \else
+ /R~\Fld@rotation
+ \fi
+ \ifx\Fld@bordercolor\relax
+ \else
+ /BC[\Fld@bordercolor]%
+ \fi
+ \ifx\Fld@bcolor\relax
+ \else
+ /BG[\Fld@bcolor]%
+ \fi
+ /CA(\Hy@escapestring{\Fld@radiosymbol})%
+ >>
+ /DA(/ZaDb~\strip@pt\Fld@charsize\space Tf%
+ \ifx\Fld@color\@empty\else\space\Fld@color\fi)%
+ \ifx\Fld@default\@empty
+ /V/Off%
+ /DV/Off%
+ \else
+ /V/\Fld@default
+ /DV/\Fld@default
+ \fi
+ \Fld@additionalactions
+ }
+\ExplSyntaxOff
+\ExplSyntaxOn
+\def\PDFForm@Text
+ {
+ /Subtype/Widget
+ ~\Fld@annotflags
+ ~\Fld@pageobjref
+ ~\Fld@annotnames
+ /FT/Tx
+ ~\Fld@flags
+ /Q~\Fld@align
+ /BS<</W~\Fld@borderwidth\c_space_tl /S /\Fld@borderstyle>>
+ \bool_if:nT
+ {
+ !\int_compare_p:nNn {\Fld@rotation} = {0}
+ ||
+ \tl_if_exist_p:N \Fld@bordercolor
+ ||
+ \tl_if_exist_p:N \Fld@bcolor
+ }
+ {
+ /MK
+ <<
+ \int_compare:nNnF {\Fld@rotation} = {0}
+ {
+ /R~\Fld@rotation
+ }
+ \tl_if_exist:NT \Fld@bordercolor
+ {
+ /BC[\Fld@bordercolor]
+ }
+ \tl_if_exist:NT \Fld@bcolor
+ {
+ /BG[\Fld@bcolor]
+ }
+ >>
+ }
+ /DA
+ (
+ /Helv~\strip@pt\Fld@charsize\c_space_tl Tf
+ \tl_if_empty:NF {\c_space_tl\Fld@color}
+ )
+ /DV(\Hy@escapestring{\Fld@default})
+ /V(\Hy@escapestring{\Fld@value})
+ ~\Fld@additionalactions
+ \int_compare:nNnT { \Fld@maxlen}>{0}
+ {
+ /MaxLen~\Fld@maxlen
+ }
+ }
+\ExplSyntaxOff
+
+\def\PDFForm@Submit{%
+ /Subtype/Widget%
+ \Fld@annotflags
+ \Fld@pageobjref
+ \Fld@annotnames
+ /FT/Btn%
+ \Fld@flags
+ /H/P%
+ /BS<</W \Fld@borderwidth/S/\Fld@borderstyle>>%
+ \ifcase0\ifnum\Fld@rotation=\z@ \else 1\fi
+ \ifx\Fld@bordercolor\relax\else 1\fi
+ \space
+ \else
+ /MK<<%
+ \ifnum\Fld@rotation=\z@
+ \else
+ /R \Fld@rotation
+ \fi
+ \ifx\Fld@bordercolor\relax
+ \else
+ /BC[\Fld@bordercolor]%
+ \fi
+ >>%
+ \fi
+ /A<<%
+ /S/SubmitForm%
+ /F<<%
+ /FS/URL%
+ /F(\Hy@escapestring{\Form@action})%
+ >>%
+ \Fld@submitflags
+ >>%
+ \Fld@additionalactions
+}
+\ExplSyntaxOn
+ \def\PDFForm@Reset{%
+ /Subtype/Widget%
+ \Fld@annotflags
+ \Fld@pageobjref
+ \Fld@annotnames
+ /FT/Btn%
+ \Fld@flags
+ /H/P%
+ /DA(/Helv~\strip@pt\Fld@charsize\space Tf~0~0~1~rg)%
+ \ifcase0\ifnum\Fld@rotation=\z@ \else 1\fi
+ \ifx\Fld@bordercolor\relax\else 1\fi
+ \space
+ \else
+ /MK<<%
+ \ifnum\Fld@rotation=\z@
+ \else
+ /R~\Fld@rotation
+ \fi
+ \ifx\Fld@bordercolor\relax
+ \else
+ /BC[\Fld@bordercolor]%
+ \fi
+ >>%
+ \fi
+ /BS<</W \Fld@borderwidth/S/\Fld@borderstyle>>%
+ /A<</S/ResetForm>>%
+ \Fld@additionalactions
+ }%
+
+ %these patterns are used in hyperref checks.
+\str_case:VnF \c_sys_backend_str
+ {
+ { pdfmode }
+ {
+ \def\HyPat@ObjRef
+ {
+ [0-9]*[1-9][0-9]*~0~R
+ }
+ }
+ { dvipdfmx }
+ {
+ \def\HyPat@ObjRef
+ {
+ @[^~]+
+ }
+ }
+ { xdvipdfmx }
+ {
+ \def\HyPat@ObjRef
+ {
+ @[^~]+
+ }
+ }
+ }
+ { %also set in hyperref sty, so probably not needed.
+ \def\HyPat@ObjRef/{.+}
+ }
+
+\ExplSyntaxOff
+%% \RequirePackage{rerunfilecheck}[2009/12/10]
+%% removed \Hy@OutlineRerunCheck, unneeded with bookmark
+%% removed \ReadBookmarks / unneeded with bookmark.
+%% removed \Hy@OutlineName
+%% removed \check@bm@number
+%% removed \calc@bm@number
+
+\ifHy@implicit
+\else
+ \expandafter\endinput
+\fi
+\newlength\Hy@SectionHShift
+\def\Hy@SectionAnchorHref#1{%
+ \ifx\protect\@typeset@protect
+ \Hy__hypSectionAnchor{#1}%
+ \fi
+}
+\DeclareRobustCommand*{\Hy__hypSectionAnchor}[1]{%
+ \leavevmode
+ \hbox to 0pt{%
+ \kern-\Hy@SectionHShift
+ \Hy@raisedlink{%
+ \hyper@anchorstart{#1}\hyper@anchorend
+ }%
+ \hss
+ }%
+}
+\let\H@old@ssect\@ssect
+\def\@ssect#1#2#3#4#5{%
+ \Hy@MakeCurrentHrefAuto{section*}%
+ \setlength{\Hy@SectionHShift}{#1}%
+ \begingroup
+ \toks@{\H@old@ssect{#1}{#2}{#3}{#4}}%
+ \toks\tw@\expandafter{%
+ \expandafter\Hy@SectionAnchorHref\expandafter{\@currentHref}%
+ #5%
+ }%
+ \edef\x{\endgroup
+ \the\toks@{\the\toks\tw@}%
+ }\x
+}
+\let\H@old@schapter\@schapter
+\def\@schapter#1{%
+ \begingroup
+ \let\@mkboth\@gobbletwo
+ \Hy@MakeCurrentHrefAuto{\Hy@chapapp*}%
+ \Hy@raisedlink{%
+ \hyper@anchorstart{\@currentHref}\hyper@anchorend
+ }%
+ \endgroup
+ \H@old@schapter{#1}%
+}
+\ltx@IfUndefined{@chapter}{}{%
+ \let\Hy@org@chapter\@chapter
+ \def\@chapter{%
+ \def\Hy@next{%
+ \Hy@MakeCurrentHrefAuto{\Hy@chapapp*}%
+ \Hy@raisedlink{%
+ \hyper@anchorstart{\@currentHref}\hyper@anchorend
+ }%
+ }%
+ \ifnum\c@secnumdepth>\m@ne
+ \ltx@IfUndefined{if@mainmatter}%
+ \iftrue{\csname if@mainmatter\endcsname}%
+ \let\Hy@next\relax
+ \fi
+ \fi
+ \Hy@next
+ \Hy@org@chapter
+ }%
+}
+\let\H@old@part\@part
+\begingroup\expandafter\expandafter\expandafter\endgroup
+\expandafter\ifx\csname chapter\endcsname\relax
+ \let\Hy@secnum@part\z@
+\else
+ \let\Hy@secnum@part\m@ne
+\fi
+\def\@part{%
+ \ifnum\Hy@secnum@part>\c@secnumdepth
+ \phantomsection
+ \fi
+ \H@old@part
+}
+\let\H@old@spart\@spart
+\def\@spart#1{%
+ \Hy@MakeCurrentHrefAuto{part*}%
+ \Hy@raisedlink{%
+ \hyper@anchorstart{\@currentHref}\hyper@anchorend
+ }%
+ \H@old@spart{#1}%
+}
+\let\H@old@sect\@sect
+\def\@sect#1#2#3#4#5#6[#7]#8{%
+ \ifnum #2>\c@secnumdepth
+ \expandafter\@firstoftwo
+ \else
+ \expandafter\@secondoftwo
+ \fi
+ {%
+ \Hy@MakeCurrentHrefAuto{section*}%
+ \setlength{\Hy@SectionHShift}{#3}%
+ \begingroup
+ \toks@{\H@old@sect{#1}{#2}{#3}{#4}{#5}{#6}[{#7}]}%
+ \toks\tw@\expandafter{%
+ \expandafter\Hy@SectionAnchorHref\expandafter{\@currentHref}%
+ #8%
+ }%
+ \edef\x{\endgroup
+ \the\toks@{\the\toks\tw@}%
+ }\x
+ }{%
+ \H@old@sect{#1}{#2}{#3}{#4}{#5}{#6}[{#7}]{#8}%
+ }%
+}
+\expandafter\def\csname Parent-4\endcsname{}
+\expandafter\def\csname Parent-3\endcsname{}
+\expandafter\def\csname Parent-2\endcsname{}
+\expandafter\def\csname Parent-1\endcsname{}
+\expandafter\def\csname Parent0\endcsname{}
+\expandafter\def\csname Parent1\endcsname{}
+\expandafter\def\csname Parent2\endcsname{}
+\expandafter\def\csname Parent3\endcsname{}
+\expandafter\def\csname Parent4\endcsname{}
+%%
+%% End of file `hgeneric-testphase.def'.
+%%
+%%
+%% End of file `hgeneric-testphase.def'.