[latex3-commits] [git/LaTeX3-latex3-pdfresources] reworking-annot: ocgcolorlinks (15437bc)

Ulrike Fischer fischer at troubleshooting-tex.de
Sun Jan 31 01:11:09 CET 2021


Repository : https://github.com/latex3/pdfresources
On branch  : reworking-annot
Link       : https://github.com/latex3/pdfresources/commit/15437bcadd8ecf59376103f171609ea3f3c58835

>---------------------------------------------------------------

commit 15437bcadd8ecf59376103f171609ea3f3c58835
Author: Ulrike Fischer <fischer at troubleshooting-tex.de>
Date:   Sun Jan 31 01:11:09 2021 +0100

    ocgcolorlinks


>---------------------------------------------------------------

15437bcadd8ecf59376103f171609ea3f3c58835
 hyperref-generic.dtx | 333 ++++++++++++++++++++++++++++-----------------------
 1 file changed, 181 insertions(+), 152 deletions(-)

diff --git a/hyperref-generic.dtx b/hyperref-generic.dtx
index e3061bc..bf1e54e 100644
--- a/hyperref-generic.dtx
+++ b/hyperref-generic.dtx
@@ -236,7 +236,7 @@
 %   \item The option |frenchlinks| does nothing at all.
 %   \item As mentioned above the support for |citecolor| and |citebordercolor| etc
 %   has been reduced. A package like \pkg{hyperref} can't keep track of such semantic
-%   contexts, like cite, acronym, glossaries, special references and maintain keys for
+%   contexts like cite, acronym, glossaries, special references and maintain keys for
 %   them. The keys are not completly dropped as this would affect packages like
 %   \pkg{natbib}, but they have been separated and are no longer affected by
 %   group keys like |allcolors|  but must be set individually instead.
@@ -844,19 +844,6 @@
 \cs_set_eq:NN \Hy at pdfmajorversion \pdf_version_major:
 %    \end{macrocode}
 %    \begin{macrocode}
-\legacy_if:nT { Hy at ocgcolorlinks }
-  {
-    \pdf_version_compare:NnT < {1.5}
-     {
-       \msg_warning:nnnx
-        { hyp }
-        { ignore-deprecated-or-unknown-option-in-pdf-version }
-        { ocgcolorlinks } { \pdf_version_major:.\pdf_version_minor: }
-       \Hy at ocgcolorlinksfalse
-       \Hy at DisableOption{ocgcolorlinks}
-     }
-  }
-
 \legacy_if:nT { Hy at setpdfversion }
  {
     \msg_warning:nn { hyp }{ pdfversion-disabled }
@@ -872,18 +859,16 @@
 %    \end{macrocode}
 %
 % \cs{hypersetup} should set the new keys.
-% We for now also execute |\kvsetkeys{Hyp}| to avoid compability problems.
-% To avoid errors with the new keys a handler unknown keys is added.
-% But in the end only the new keyval should be used.
+% We can't also execute |\kvsetkeys{Hyp}| as this errors for example with colors.
 % This means the driver has to provide new code for every key!
 %
 %    \begin{macrocode}
 %  TODO should go at some time ...
-\kv at set@family at handler{Hyp}
-  { \msg_warning:nnx {hyp}{unknown-key-to-Hyp}{#1} }
+% \kv at set@family at handler{Hyp}
+%  { \msg_warning:nnx {hyp}{unknown-key-to-Hyp}{#1} }
 \cs_set_protected:Npn \hypersetup #1
   {
-     \kvsetkeys{Hyp} {#1}
+     %\kvsetkeys{Hyp} {#1}
      \keys_set:nn { hyp / setup }{ #1 }
   }
 % TODO for now unknown keys should only give warnings.
@@ -916,7 +901,7 @@
   }
 \hook_gput_code:nnn { hyp/link/cite }{hyp/cite}
   {
-    \hypersetup
+    \keys_set:nn { hyp / setup }
       {
         ,linkbordercolor= \l_@@_annot_citebordercolor_tl
         ,linkcolor      = \l_@@_annot_citecolor_tl
@@ -1133,8 +1118,16 @@
 \tl_new:N  \l_@@_dest_pdfview_tl
 %    \end{macrocode}
 % \end{variable}
-% These variables hold the names of the text colors
-% \begin{variable}{l_@@_annot_XXXcolor_tl}
+% These variables hold the names of the text. The variables are also used as
+% ocg color.
+% \begin{variable}
+%   {
+%     \l_@@_annot_linkcolor_tl,
+%     \l_@@_annot_urlcolor_tl,
+%     \l_@@_annot_filecolor_tl,
+%     \l_@@_annot_runcolor_tl,
+%     \l_@@_annot_menucolor_tl,
+%   }
 %    \begin{macrocode}
 \seq_map_inline:Nn \c_@@_annot_types_seq
   {
@@ -1151,14 +1144,32 @@
 %    \end{macrocode}
 % \end{variable}
 % \subsection{Booleans}
-% These booleans are probably needed to control the colors.
-%
 % \begin{variable}
 %   {
-%     \l_@@_annot_ocgcolorlinks_bool
+%     \l_@@_annot_colorlink_bool,
+%     \l_@@_annot_colorurl_bool,
+%     \l_@@_annot_colorfile_bool,
+%     \l_@@_annot_colorrun_bool,
+%     \l_@@_annot_colormenu_bool,
 %   }
+%  These booleans are needed to control the colors.
+%    \begin{macrocode}
+\seq_map_inline:Nn \c_@@_annot_types_seq
+  {
+    \bool_new:c {l_@@_annot_color#1_bool}
+  }
+%    \end{macrocode}
+% \end{variable}
+% \begin{variable}
+%   {
+%     \l_@@_annot_ocgcolorlink_bool,
+%     \l_@@_annot_ocgcolorurl_bool,
+%     \l_@@_annot_ocgcolorfile_bool,
+%     \l_@@_annot_ocgcolorrun_bool,
+%     \l_@@_annot_ocgcolormenu_bool,
+%   }
+%  These booleans are needed to control the ocgcolors.
 %    \begin{macrocode}
-\bool_new:N \l_@@_annot_ocgcolorlinks_bool
 \seq_map_inline:Nn \c_@@_annot_types_seq
   {
     \bool_new:c {l_@@_annot_ocgcolor#1_bool}
@@ -1403,7 +1414,7 @@
 % \end{verbatim}
 %
 % This driver defines for consistency also
-% |\hyper at linklaunch| for Launch.
+% |\hyper at linklaunch| for Launch and |\hyper at linknamed| for Named.
 %
 % \subsection{ Anchors / destinations}
 % The first three commands are needed for \enquote{anchors}. At first
@@ -1809,44 +1820,15 @@
 
 %    \end{macrocode}
 %
+% \section{Colorlinks}
 %
-%    \begin{macrocode}
-\pdfannot_link_margin:n { 1pt }
-
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-
-%these patterns are used in hyperref checks.
-%it is unclear if they are really useful and if a backend support is
-%needed.
-\str_case:VnF \c_sys_backend_str
- {
-   { pdfmode }
-   {
-     \def\HyPat at ObjRef
-      {
-       [0-9]*[1-9][0-9]*~0~R
-      }
-   }
-   { dvipdfmx }
-   {
-     \def\HyPat at ObjRef
-      {
-        @[^~]+
-      }
-   }
-   { xdvipdfmx }
-   {
-     \def\HyPat at ObjRef
-      {
-        @[^~]+
-      }
-   }
- }
- { %also set in hyperref sty, so probably not needed.
-   \def\HyPat at ObjRef/{.+}
- }
-%    \end{macrocode}
+%
+%
+% \subsection{ocgcolorlinks}
+% OCG colorlinks need objects and an entry in the catalog.
+% Perhaps the objects need public names to avoid that ocgx2 has to create
+% duplicates?
+% TODO
 % \begin{macro}{\@@_ocg_init:}
 % This commands write the objects as needed if ocg links are used.
 % The initialization should happens only once.
@@ -1911,31 +1893,29 @@
   }
 %    \end{macrocode}
 % \end{macro}
-% ocg colorlinks should be done as in ocgx. This here
-% are boxes ...
+% We use like with colors a hook, this allows ocgx to replace it.
+% The implementation is rather simple and uses a box.
 %    \begin{macrocode}
-\legacy_if:nTF {Hy at ocgcolorlinks}
+\prop_map_inline:Nn \c_@@_map_hyp_annot_prop
   {
-    \@@_ocg_init:
-    \Hy at AtBeginDocument
-      {
-        \def\Hy at colorlink#1
-          {
-            \group_begin:
-            \legacy_if:nTF {Hy at ocgcolorlinks}
-              {
-                \def\Hy at ocgcolor{#1}
-                \hbox_set:Nw \l_@@_tmpa_box
-              }
-              {
-                \HyColor at UseColor#1
-              }
-          }
-        \def\Hy at endcolorlink
-         {
-           \legacy_if:nT {Hy at ocgcolorlinks}
-             {
-               \hbox_set_end:
+     \hook_gput_code:nnn
+       {pdfannot/link/#2/begin}
+       {hyp/ocg}
+       {
+         \bool_if:cT { l_@@_annot_ocgcolor#1_bool }
+           {
+             \@@_ocg_init:
+             \group_begin:
+             \hbox_set:Nw \l_@@_tmpa_box
+           }
+       }
+     \hook_gput_code:nnn
+       {pdfannot/link/#2/end}
+       {hyp/ocg}
+       {
+         \bool_if:cT { l_@@_annot_ocgcolor#1_bool }
+           {
+             \hbox_set_end:
                \mbox
                  {
                    \pdf_bdc_obj:nn {OC}{l_@@_ocg_print_dict_obj}
@@ -1943,25 +1923,129 @@
                    \pdf_emc:
                    \pdf_bdc_obj:nn {OC}{l_@@_ocg_view_dict_obj}
                    \group_begin:
-                   \expandafter\HyColor at UseColor\Hy at ocgcolor
+                   \@@_color_select:e { \tl_use:c {l_@@_annot_#1color_tl} }
                    \box_use_drop:N \l_@@_tmpa_box
                    \group_end:
                    \pdf_emc:
-                }
-             }
-           \group_end:
-         }
+                 }
+             \group_end:
+           }
+       }
+  }
+%    \end{macrocode}
+% Thus are the keys for ocgcolors
+%    \begin{macrocode}
+\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: }
+          }
       }
-   }
-   {
-     \Hy at DisableOption{ocgcolorlinks}
-   }
+  }
+  {
+     \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_@@_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_@@_annot_ocgcolor#1_bool }
+          }
+      }
+  }
+%    \end{macrocode}
+
+%    \begin{macrocode}
 \cs_set_protected:Npn \setpdflinkmargin #1
   {
     \pdfannot_link_margin:n { #1 }
   }
 
+\pdfannot_link_margin:n { 1pt }
+
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+
+%these patterns are used in hyperref checks.
+%it is unclear if they are really useful and if a backend support is
+%needed.
+\str_case:VnF \c_sys_backend_str
+ {
+   { pdfmode }
+   {
+     \def\HyPat at ObjRef
+      {
+       [0-9]*[1-9][0-9]*~0~R
+      }
+   }
+   { dvipdfmx }
+   {
+     \def\HyPat at ObjRef
+      {
+        @[^~]+
+      }
+   }
+   { xdvipdfmx }
+   {
+     \def\HyPat at ObjRef
+      {
+        @[^~]+
+      }
+   }
+ }
+ { %also set in hyperref sty, so probably not needed.
+   \def\HyPat at ObjRef/{.+}
+ }
 
 %file links to pdfs. See test-filelinks.pdf for a few example.
 
@@ -3095,63 +3179,8 @@
       }
   }
 \keys_set:nn { hyp / setup } {colorscheme=phelype}
-%ocgcolorlinks, unfinished
 
-\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 .bool_set:N = \l_@@_annot_ocgcolorlinks_bool
-      }
-  }
 
-\keys_define:nn { hyp / setup }
-  {
-    ,ocgcolorlinks .meta:n =
-      {
-        pdfborder={0~0~0},
-        pdfborderstyle={},
-        _ocgcolorlinks = #1
-      }
-    ,ocgcolorlinks .default:n = {true}
-  }
-
-%for now only boolean, if need it can be expanded later
-\seq_map_inline:Nn \c_@@_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_@@_annot_ocgcolor#1_bool }
-          }
-      }
-  }
 
 
 





More information about the latex3-commits mailing list.