diff options
Diffstat (limited to 'macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.dtx')
-rw-r--r-- | macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.dtx | 157 |
1 files changed, 101 insertions, 56 deletions
diff --git a/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.dtx b/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.dtx index 8c60439dd3..30266d866c 100644 --- a/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.dtx +++ b/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.dtx @@ -86,7 +86,7 @@ % }^^A % } % -% \date{Version 0.95c, released 2021-03-17} +% \date{Version 0.95d, released 2021-05-14} % % \maketitle % \begin{documentation} @@ -325,7 +325,8 @@ % \subsection{Options} % All \cs{href} commands and \cs{url} have an option argument for keyval syntax. % It accepts the following keys. Not all keys make sense for all keys, but they don't -% error, they are silently ignored. +% error, they are silently ignored. The optional argument can currently not be used together +% with the \cs{urldef} command. % % \begin{tabular}{llp{6cm}} % key & applicable commands & note\\\hline @@ -634,7 +635,7 @@ % The key is ignored with this driver. Instead the wanted standard should be declared % in \cs{DeclareDocumentMetadata}: % \begin{verbatim} -% \DeclareDocumentMetadata{standard=A-2b} +% \DeclareDocumentMetadata{pdfstandard=A-2b} % \end{verbatim} % Currently |A-1b|, |A-2b|, |A-3b| can be set. % The support for various requirements is still incomplete, but the parts that @@ -921,7 +922,7 @@ %<@@=hyp> % \end{macrocode} % \begin{macrocode} -\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? @@ -1241,10 +1242,12 @@ ,href / format .code:n = { \cs_set_eq:NN \@@_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_@@_href_url_encode_bool @@ -1257,12 +1260,27 @@ \@ifnextchar\bgroup\Hy@href{\hyper@normalise\href@}% } +\begingroup + \catcode`\$=6 % + \catcode`\#=12 % + \gdef\href@$1{\expandafter\href@split$1##\\}% + \gdef\href@split$1#$2#$3\\$4{% + \hyper@@@@link{$1}{$2}{$4}%<---@@-docstrip doubling! + \endgroup + \hook_use:n{cmd/href/after} + }% +\endgroup -\DeclareRobustCommand*{\hrefurl}[1][]{ - \group_begin: - \keys_set:nn { hyp / href } {#1} - \let\protect\@unexpandable@protect - \bool_if:NTF \l_@@_href_url_encode_bool +\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_@@_href_url_encode_bool { \tl_set:Nn \l__hyp_text_enc_uri_print_tl {utf8/URI} } @@ -1275,12 +1293,15 @@ { \exp_args:Nno\hyper@linkurl{#2}{\l_@@_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\@@_href_pdf_aux:nn @@ -1288,11 +1309,16 @@ \cs_new_protected:Npn \@@_href_pdf_aux:nn #1 #2 { - \exp_args:Nnno\hyper@linkfile{#2}{#1}{\l_@@_href_pdf_destination_tl}\endgroup + \exp_args:Nnno\hyper@linkfile{#2}{#1}{\l_@@_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 @@ -1303,10 +1329,16 @@ { \exp_args:Nnno\hyper@linklaunch{#2}{#1}{\l_@@_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 @@ -1326,9 +1358,23 @@ \hyper@linkurl{\@@_href_url_format {#1}} {\l_@@_href_url_protocol_tl#1} \group_end: + \hook_use:n{cmd/url/after} } +% \end{macrocode} +% the \cs{urldef} command doesn't like the optional argument, so we overwrite +% locally the \cs{url} command here: +% \begin{macrocode} + +\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} +% \end{macrocode} +% make the new commands compatible with \cs{pdfstringdef}: +% \begin{macrocode} \NewExpandableDocumentCommand\@@_secondoftwowithopt:wnn {omm}{#3} \pdfstringdefDisableCommands{\let\hrefurl\@@_secondoftwowithopt:wnn} \pdfstringdefDisableCommands{\let\hrefpdf\@@_secondoftwowithopt:wnn} @@ -1356,9 +1402,9 @@ \color_set:nn {hyp/color/citeborder}{hyp/color/cite!60!white} \keys_define:nn { hyp / setup } { - ,citecolor .code:n = {\@@_color_set:nn {hyp/color/cite}{#1}} + ,citecolor .code:n = {\@@_color_set:ne {hyp/color/cite}{#1}} ,citebordercolor - .code:n = {\@@_color_set:nn {hyp/color/citeborder}{#1}} + .code:n = {\@@_color_set:ne {hyp/color/citeborder}{#1}} } \hook_gput_code:nnn { hyp/link/cite }{hyp/cite} { @@ -2277,17 +2323,16 @@ % \section{Link decorations} % \subsection{Functions to export and select colors} % We support two input syntax: color expressions and model with values. -% \begin{function}{\@@_color_export:nnN,\@@_colormodel_export:nnnN} +% \begin{function}{\@@_color_export:nnN} % \begin{syntax} -% \cs{@@_color_export:nnN} \Arg{color} \Arg{export format} \meta{tlvar}\\ -% \cs{@@_colormodel_export:nnnN} \Arg{color model}\Arg{value} \Arg{export format} \meta{tlvar} +% \cs{@@_color_export:nnN} \Arg{color} \Arg{export format} \meta{tlvar} % \end{syntax} % This exports a color as space separated numbers as needed in in |/C|. % \Arg{color} should have either the format |[model]{value}| or be a color expression. % For examples: |[rgb]{1,0,.5}| or |red!50!blue|. The export format is either % |space-sep-cmyk| or |space-sep-rgb|. % \end{function} -% \begin{macro}{\@@_color_export:nnN,\@@_colormodel_export:nnnN} +% \begin{macro}{\@@_color_export:nnN,\@@_color_export_aux:wnnN} % Color keys need to parse color expressions. Two input types are supported: % |color=[rgb]{1,0,.5}| and |color=red!50!blue|. The colors are exported % to PDF syntax (space separated numbers). @@ -2296,14 +2341,14 @@ { \tl_if_head_eq_charcode:nNTF {#1}[ %] { - \@@_colormodel_export:wnnN #1 {#2} #3 + \@@_color_export_aux:wnnN #1 {#2} #3 } { \color_export:nnN {#1} {#2} #3 } } -\cs_new_protected:Npn \@@_colormodel_export:wnnN [#1] #2 #3 #4 +\cs_new_protected:Npn \@@_color_export_aux:wnnN [#1] #2 #3 #4 { \color_export:nnnN {#1}{#2}{#3}#4 } @@ -2320,7 +2365,7 @@ % \Arg{color} should have either the format |[model]{value}| or be a color expression. % For examples: |[rgb]{1,0,.5}| or |red!50!blue| % \end{function} -% \begin{macro}{\@@_color_select:n,\@@_colormodel_select_aux:wn} +% \begin{macro}{\@@_color_select:n,\@@_color_select_aux:wn} % Color keys need to parse color expressions. Two input types are supported: % |color=[rgb]{1,0,.5}| and |color=red!50!blue|. % \begin{macrocode} @@ -2328,14 +2373,14 @@ { \tl_if_head_eq_charcode:nNTF {#1}[ %] { - \@@_colormodel_select_aux:wn #1 + \@@_color_select_aux:wn #1 } { \color_select:n {#1} } } -\cs_new_protected:Npn \@@_colormodel_select_aux:wn [#1] #2 +\cs_new_protected:Npn \@@_color_select_aux:wn [#1] #2 { \color_select:nn {#1}{#2} } @@ -2352,7 +2397,7 @@ % \Arg{color} should have either the format |[model]{value}| or be a color expression. % For examples: |[rgb]{1,0,.5}| or |red!50!blue| % \end{function} -% \begin{macro}{\@@_color_set:nn,\@@_colormodel_set_aux:nwn} +% \begin{macro}{\@@_color_set:nn,\@@_color_set_aux:nwn} % Color keys need to parse color expressions. Two input types are supported: % |color=[rgb]{1,0,.5}| and |color=red!50!blue|. % \begin{macrocode} @@ -2360,14 +2405,14 @@ { \tl_if_head_eq_charcode:nNTF {#2}[ %] { - \@@_colormodel_set_aux:nwn { #1 } #2 + \@@_color_set_aux:nwn { #1 } #2 } { \color_set:nn {#1} {#2} } } -\cs_new_protected:Npn \@@_colormodel_set_aux:nwn #1 [#2] #3 +\cs_new_protected:Npn \@@_color_set_aux:nwn #1 [#2] #3 { \color_set:nnn {#1}{#2}{#3} } @@ -2621,17 +2666,17 @@ % \begin{macrocode} \cs_new_protected:Npn \@@_ocg_init: { - \pdf_object_new:nn { l_@@_ocg_view_dict_obj } { dict } - \pdf_object_new:nn { l_@@_ocg_print_dict_obj } { dict } - \pdf_object_new:nn { l_@@_ocg_config_dict_obj } { dict } - \pdf_object_new:nn { l_@@_ocg_ref_array_obj } { array } - \pdf_object_write:nx { l_@@_ocg_ref_array_obj } + \pdf_object_new:nn { @@/OCG/View } { dict } + \pdf_object_new:nn { @@/OCG/Print } { dict } + \pdf_object_new:nn { @@/OCG/config } { dict } + \pdf_object_new:nn { @@/OCG/refarray } { array } + \pdf_object_write:nx { @@/OCG/refarray } { - \pdf_object_ref:n { l_@@_ocg_view_dict_obj } + \pdf_object_ref:n { @@/OCG/View } \c_space_tl - \pdf_object_ref:n { l_@@_ocg_print_dict_obj } + \pdf_object_ref:n { @@/OCG/Print } } - \pdf_object_write:nn { l_@@_ocg_view_dict_obj } + \pdf_object_write:nn { @@/OCG/View } { /Type/OCG /Name(View) @@ -2641,7 +2686,7 @@ /View <</ViewState/ON >>~ >> } - \pdf_object_write:nn { l_@@_ocg_print_dict_obj } + \pdf_object_write:nn { @@/OCG/Print } { /Type/OCG /Name(Print) @@ -2651,30 +2696,30 @@ /View <</ViewState/OFF>>~ >> } - \pdfmanagement_add:nnx { Catalog / OCProperties }{OCGs }{ \pdf_object_ref:n {l_@@_ocg_view_dict_obj} } - \pdfmanagement_add:nnx { Catalog / OCProperties }{OCGs }{ \pdf_object_ref:n {l_@@_ocg_print_dict_obj} } - \pdf_object_write:nx { l_@@_ocg_config_dict_obj } + \pdfmanagement_add:nnx { Catalog / OCProperties }{OCGs }{ \pdf_object_ref:n {@@/OCG/View} } + \pdfmanagement_add:nnx { Catalog / OCProperties }{OCGs }{ \pdf_object_ref:n {@@/OCG/Print} } + \pdf_object_write:nx { @@/OCG/config } { - /OFF[\pdf_object_ref:n { l_@@_ocg_print_dict_obj }] + /OFF[\pdf_object_ref:n { @@/OCG/Print }] /AS[ << /Event/View - /OCGs\c_space_tl \pdf_object_ref:n { l_@@_ocg_ref_array_obj } + /OCGs\c_space_tl \pdf_object_ref:n { @@/OCG/refarray } /Category[/View] >> << /Event/Print - /OCGs\c_space_tl \pdf_object_ref:n { l_@@_ocg_ref_array_obj } + /OCGs\c_space_tl \pdf_object_ref:n { @@/OCG/refarray } /Category[/Print] >> << /Event/Export - /OCGs\c_space_tl \pdf_object_ref:n { l_@@_ocg_ref_array_obj } + /OCGs\c_space_tl \pdf_object_ref:n { @@/OCG/refarray } /Category[/Print] >> ] } - \pdfmanagement_add:nnx { Catalog / OCProperties }{ D }{ \pdf_object_ref:n { l_@@_ocg_config_dict_obj} } + \pdfmanagement_add:nnx { Catalog / OCProperties }{ D }{ \pdf_object_ref:n { @@/OCG/config} } \cs_gset:Npn \@@_ocg_init: {} } % \end{macrocode} @@ -2704,10 +2749,10 @@ \hbox_set_end: \mbox { - \pdf_bdcobject:nn {OC}{l_@@_ocg_print_dict_obj} + \pdf_bdcobject:nn {OC}{@@/OCG/Print} \hbox_overlap_right:n { \box_use:N \l_@@_tmpa_box } \pdf_emc: - \pdf_bdcobject:nn {OC}{l_@@_ocg_view_dict_obj} + \pdf_bdcobject:nn {OC}{@@/OCG/View} \group_begin: \color_select:n { hyp/color/#1 } \box_use_drop:N \l_@@_tmpa_box @@ -4187,9 +4232,9 @@ } } \pdfmanagement_add:nnx {Catalog / AcroForm/DR/Font } - {ZaDb} {\pdf_object_ref:n {l_@@_font_zapfdingbats_obj} } + {ZaDb} {\pdf_object_ref:n {@@/Font/ZaDb} } \pdfmanagement_add:nnx {Catalog / AcroForm/DR/Font } - {Helv} {\pdf_object_ref:n {l_@@_font_helvetica_obj} } + {Helv} {\pdf_object_ref:n {@@/Font/Helv} } \pdfmanagement_add:nnx {Catalog /AcroForm} {DA}{(/Helv~10~Tf~0~g)} \pdfmeta_standard_verify:nTF {form_no_NeedAppearance} @@ -4601,10 +4646,10 @@ \ExplSyntaxOn \def\Hy@FormObjects { - \pdf_object_new:nn {l_@@_encoding_pdfdoc_obj } { dict } - \pdf_object_new:nn {l_@@_font_zapfdingbats_obj } { dict } - \pdf_object_new:nn {l_@@_font_helvetica_obj } { dict } - \pdf_object_write:nx {l_@@_encoding_pdfdoc_obj } + \pdf_object_new:nn {@@/Encoding/pdfdoc } { dict } + \pdf_object_new:nn {@@/Font/ZaDb } { dict } + \pdf_object_new:nn {@@/Font/Helv } { dict } + \pdf_object_write:nx {@@/Encoding/pdfdoc } { /Type/Encoding /Differences[ @@ -4646,20 +4691,20 @@ /uacute/ucircumflex/udieresis/yacute/thorn/ydieresis ] } - \pdf_object_write:nn {l_@@_font_zapfdingbats_obj } + \pdf_object_write:nn {@@/Font/ZaDb } { /Type/Font /Subtype/Type1 /Name/ZaDb /BaseFont/ZapfDingbats } - \pdf_object_write:nx {l_@@_font_helvetica_obj } + \pdf_object_write:nx {@@/Font/Helv } { /Type/Font /Subtype/Type1 /Name/Helv /BaseFont/Helvetica - /Encoding~\pdf_object_ref:n { l_@@_encoding_pdfdoc_obj } + /Encoding~\pdf_object_ref:n { @@/Encoding/pdfdoc } } \global\let\Hy@FormObjects\relax } |