summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.dtx')
-rw-r--r--macros/latex/contrib/pdfmanagement-testphase/hyperref-generic.dtx157
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
}