From 5242a77f951726f37e97cc73e0109bc8d18f617e Mon Sep 17 00:00:00 2001
From: Karl Berry <karl@freefriends.org>
Date: Tue, 7 Mar 2017 22:42:51 +0000
Subject: ocgx2 (7mar17)

git-svn-id: svn://tug.org/texlive/trunk@43425 c570f23f-e606-0410-a88d-b1316a301751
---
 Master/texmf-dist/tex/latex/ocgx2/ocgx2.sty | 261 ++++++++++++++++++----------
 1 file changed, 173 insertions(+), 88 deletions(-)

(limited to 'Master/texmf-dist/tex/latex/ocgx2/ocgx2.sty')

diff --git a/Master/texmf-dist/tex/latex/ocgx2/ocgx2.sty b/Master/texmf-dist/tex/latex/ocgx2/ocgx2.sty
index acb40f60174..36db66b8cfd 100644
--- a/Master/texmf-dist/tex/latex/ocgx2/ocgx2.sty
+++ b/Master/texmf-dist/tex/latex/ocgx2/ocgx2.sty
@@ -37,7 +37,7 @@
 \RequirePackage{xparse}
 \RequirePackage{l3keys2e}
 
-\ProvidesExplPackage{ocgx2}{2016/03/22}{0.17}
+\ProvidesExplPackage{ocgx2}{2017/03/07}{0.18}
 {ports `ocgx' functionality to dvips+ps2pdf, xelatex and dvipdfmx}
 
 %creating global definitions
@@ -375,19 +375,35 @@
 
 %re-implement commands from ocg-p.sty / ocgx.sty (all engines including
 %ps2pdf [gs>=9.15])
-\DeclareDocumentCommand\switchocg{o m +m}{
+\DeclareDocumentCommand\switchocg{s o m +m}{
   \leavevmode
-  \IfNoValueTF{#1}{
-    \ocgxii_ocglist_process_idlist:nn{triggerocg=onmouseup}{#2}
-    \ocgxii_pdflink:nn{
-      /Subtype/Link\ocgxii@insert@OC
-      /A <</S/SetOCGState/State [
-        \str_if_eq:VnF\l_ocgxii_u_list_tl{}{/Toggle~\l_ocgxii_u_list_tl}]>>
-      /Border [0~0~0]
-    }{#3}
+  \bool_if:nTF{
+    \IfBooleanTF{#1}{\c_true_bool}{\c_false_bool} ||
+    \IfValueTF{#2}{\c_true_bool}{\c_false_bool}
   }{
-    \ocgxii_ocglist_process_idlist:nn{#1}{#2}
-    \ocgxii_pdflink:nn{
+    % implemented as Widget annot (non-breakable)
+    \ocgxii_ocglist_process_idlist:nn{
+      \IfValueTF{#2}{#2}{triggerocg=onmouseup}
+    }{#3}
+    \hbox_set:Nn\l_tmpa_box{#4}
+    %dummy Widget, workaround for AR bug;
+    %see https://forums.adobe.com/message/5787612#5787612
+    \bool_if:nT{
+      !\cs_if_exist:NTF\ocgxii@insert@OC{
+        \tl_if_blank_p:V\ocgxii@insert@OC
+      }{
+        \c_true_bool
+      }
+    }{\pbs_pdfannot:nnnn{
+      \dim_use:N\box_wd:N\l_tmpa_box}{
+      \dim_use:N\box_ht:N\l_tmpa_box}{
+      \dim_use:N\box_dp:N\l_tmpa_box
+    }{/Subtype/Widget/F~2}}
+    \pbs_pdfannot:nnnn{
+      \dim_use:N\box_wd:N\l_tmpa_box}{
+      \dim_use:N\box_ht:N\l_tmpa_box}{
+      \dim_use:N\box_dp:N\l_tmpa_box
+    }{
       /Subtype/Widget/Ff~65536/FT/Btn/H/I
       /T~(ocgx2@\int_use:N\g_ocgxii_widcount_int)
       \ocgxii@insert@OC
@@ -405,25 +421,49 @@
           /X <</S/SetOCGState/State [/Toggle~\l_ocgxii_x_list_tl]>>
         }
       >>
-    }{\mbox{#3}} %Widget annots should not be broken across lines
+    }\box_use_clear:N\l_tmpa_box
     \pbs_appendtofields:n{\pbs_pdflastann:}
     \int_gincr:N\g_ocgxii_widcount_int
+  }{
+    \ocgxii_ocglist_process_idlist:nn{triggerocg=onmouseup}{#3}
+    \pbs_pdflink:nn{
+      /Subtype/Link
+      /A <</S/SetOCGState/State [
+        \str_if_eq:VnF\l_ocgxii_u_list_tl{}{/Toggle~\l_ocgxii_u_list_tl}]>>
+      /Border [0~0~0]
+    }{#4}
   }
 }
 
-\DeclareDocumentCommand\showocg{o m +m}{
+\DeclareDocumentCommand\showocg{s o m +m}{
   \leavevmode
-  \IfNoValueTF{#1}{
-    \ocgxii_ocglist_process_idlist:nn{triggerocg=onmouseup}{#2}
-    \ocgxii_pdflink:nn{
-      /Subtype/Link\ocgxii@insert@OC
-      /A <</S/SetOCGState/State [
-        \str_if_eq:VnF\l_ocgxii_u_list_tl{}{/ON~\l_ocgxii_u_list_tl}]>>
-      /Border [0~0~0]
-    }{#3}
+  \bool_if:nTF{
+    \IfBooleanTF{#1}{\c_true_bool}{\c_false_bool} ||
+    \IfValueTF{#2}{\c_true_bool}{\c_false_bool}
   }{
-    \ocgxii_ocglist_process_idlist:nn{#1}{#2}
-    \ocgxii_pdflink:nn{
+    % implemented as Widget annot (non-breakable)
+    \ocgxii_ocglist_process_idlist:nn{
+      \IfValueTF{#2}{#2}{triggerocg=onmouseup}
+    }{#3}
+    \hbox_set:Nn\l_tmpa_box{#4}
+    %dummy Widget, workaround for AR bug;
+    %see https://forums.adobe.com/message/5787612#5787612
+    \bool_if:nT{
+      !\cs_if_exist:NTF\ocgxii@insert@OC{
+        \tl_if_blank_p:V\ocgxii@insert@OC
+      }{
+        \c_true_bool
+      }
+    }{\pbs_pdfannot:nnnn{
+      \dim_use:N\box_wd:N\l_tmpa_box}{
+      \dim_use:N\box_ht:N\l_tmpa_box}{
+      \dim_use:N\box_dp:N\l_tmpa_box
+    }{/Subtype/Widget/F~2}}
+    \pbs_pdfannot:nnnn{
+      \dim_use:N\box_wd:N\l_tmpa_box}{
+      \dim_use:N\box_ht:N\l_tmpa_box}{
+      \dim_use:N\box_dp:N\l_tmpa_box
+    }{
       /Subtype/Widget/Ff~65536/FT/Btn/H/I
       /T~(ocgx2@\int_use:N\g_ocgxii_widcount_int)
       \ocgxii@insert@OC
@@ -441,25 +481,49 @@
           /X <</S/SetOCGState/State [/ON~\l_ocgxii_x_list_tl]>>
         }
       >>
-    }{\mbox{#3}} %Widget annots should not be broken across lines
+    }\box_use_clear:N\l_tmpa_box
     \pbs_appendtofields:n{\pbs_pdflastann:}
     \int_gincr:N\g_ocgxii_widcount_int
+  }{
+    \ocgxii_ocglist_process_idlist:nn{triggerocg=onmouseup}{#3}
+    \pbs_pdflink:nn{
+      /Subtype/Link
+      /A <</S/SetOCGState/State [
+        \str_if_eq:VnF\l_ocgxii_u_list_tl{}{/ON~\l_ocgxii_u_list_tl}]>>
+      /Border [0~0~0]
+    }{#4}
   }
 }
 
-\DeclareDocumentCommand\hideocg{o m +m}{
+\DeclareDocumentCommand\hideocg{s o m +m}{
   \leavevmode
-  \IfNoValueTF{#1}{
-    \ocgxii_ocglist_process_idlist:nn{triggerocg=onmouseup}{#2}
-    \ocgxii_pdflink:nn{
-      /Subtype/Link\ocgxii@insert@OC
-      /A <</S/SetOCGState/State [
-        \str_if_eq:VnF\l_ocgxii_u_list_tl{}{/OFF~\l_ocgxii_u_list_tl}]>>
-      /Border [0~0~0]
-    }{#3}
+  \bool_if:nTF{
+    \IfBooleanTF{#1}{\c_true_bool}{\c_false_bool} ||
+    \IfValueTF{#2}{\c_true_bool}{\c_false_bool}
   }{
-    \ocgxii_ocglist_process_idlist:nn{#1}{#2}
-    \ocgxii_pdflink:nn{
+    % implemented as Widget annot (non-breakable)
+    \ocgxii_ocglist_process_idlist:nn{
+      \IfValueTF{#2}{#2}{triggerocg=onmouseup}
+    }{#3}
+    \hbox_set:Nn\l_tmpa_box{#4}
+    %dummy Widget, workaround for AR bug;
+    %see https://forums.adobe.com/message/5787612#5787612
+    \bool_if:nT{
+      !\cs_if_exist:NTF\ocgxii@insert@OC{
+        \tl_if_blank_p:V\ocgxii@insert@OC
+      }{
+        \c_true_bool
+      }
+    }{\pbs_pdfannot:nnnn{
+      \dim_use:N\box_wd:N\l_tmpa_box}{
+      \dim_use:N\box_ht:N\l_tmpa_box}{
+      \dim_use:N\box_dp:N\l_tmpa_box
+    }{/Subtype/Widget/F~2}}
+    \pbs_pdfannot:nnnn{
+      \dim_use:N\box_wd:N\l_tmpa_box}{
+      \dim_use:N\box_ht:N\l_tmpa_box}{
+      \dim_use:N\box_dp:N\l_tmpa_box
+    }{
       /Subtype/Widget/Ff~65536/FT/Btn/H/I
       /T~(ocgx2@\int_use:N\g_ocgxii_widcount_int)
       \ocgxii@insert@OC
@@ -477,50 +541,67 @@
           /X <</S/SetOCGState/State [/OFF~\l_ocgxii_x_list_tl]>>
         }
       >>
-    }{\mbox{#3}} %Widget annots should not be broken across lines
+    }\box_use_clear:N\l_tmpa_box
     \pbs_appendtofields:n{\pbs_pdflastann:}
     \int_gincr:N\g_ocgxii_widcount_int
+  }{
+    \ocgxii_ocglist_process_idlist:nn{triggerocg=onmouseup}{#3}
+    \pbs_pdflink:nn{
+      /Subtype/Link
+      /A <</S/SetOCGState/State [
+        \str_if_eq:VnF\l_ocgxii_u_list_tl{}{/OFF~\l_ocgxii_u_list_tl}]>>
+      /Border [0~0~0]
+    }{#4}
   }
 }
 
-\DeclareDocumentCommand\actionsocg{o m m m +m}{
+\DeclareDocumentCommand\actionsocg{s o m m m +m}{
   \leavevmode
-  \IfNoValueTF{#1}{
-    \ocgxii_ocglist_process_idlist:nn{triggerocg=onmouseup}{#2}
-    \tl_set_eq:NN\l_ocgxii_toswitch_u_tl\l_ocgxii_u_list_tl
-    \ocgxii_ocglist_process_idlist:nn{triggerocg=onmouseup}{#3}
-    \tl_set_eq:NN\l_ocgxii_toshow_u_tl\l_ocgxii_u_list_tl
-    \ocgxii_ocglist_process_idlist:nn{triggerocg=onmouseup}{#4}
-    \tl_set_eq:NN\l_ocgxii_tohide_u_tl\l_ocgxii_u_list_tl
-    \ocgxii_pdflink:nn{
-      /Subtype/Link\ocgxii@insert@OC
-      /A <</S/SetOCGState
-        /State [
-          \str_if_eq:VnF{\l_ocgxii_toswitch_u_tl}{}{
-            /Toggle~\l_ocgxii_toswitch_u_tl}~
-          \str_if_eq:VnF{\l_ocgxii_toshow_u_tl}{}{/ON~\l_ocgxii_toshow_u_tl}~
-          \str_if_eq:VnF{\l_ocgxii_tohide_u_tl}{}{/OFF~\l_ocgxii_tohide_u_tl}
-        ]
-      >>
-      /Border [0~0~0]
-    }{#5}
+  \bool_if:nTF{
+    \IfBooleanTF{#1}{\c_true_bool}{\c_false_bool} ||
+    \IfValueTF{#2}{\c_true_bool}{\c_false_bool}
   }{
-    \ocgxii_ocglist_process_idlist:nn{#1}{#2}
+    % implemented as Widget annot (non-breakable)
+    \ocgxii_ocglist_process_idlist:nn{
+      \IfValueTF{#2}{#2}{triggerocg=onmouseup}
+    }{#3}
     \tl_set_eq:NN\l_ocgxii_toswitch_e_tl\l_ocgxii_e_list_tl
     \tl_set_eq:NN\l_ocgxii_toswitch_x_tl\l_ocgxii_x_list_tl
     \tl_set_eq:NN\l_ocgxii_toswitch_d_tl\l_ocgxii_d_list_tl
     \tl_set_eq:NN\l_ocgxii_toswitch_u_tl\l_ocgxii_u_list_tl
-    \ocgxii_ocglist_process_idlist:nn{#1}{#3}
+    \ocgxii_ocglist_process_idlist:nn{
+      \IfValueTF{#2}{#2}{triggerocg=onmouseup}
+    }{#4}
     \tl_set_eq:NN\l_ocgxii_toshow_e_tl\l_ocgxii_e_list_tl
     \tl_set_eq:NN\l_ocgxii_toshow_x_tl\l_ocgxii_x_list_tl
     \tl_set_eq:NN\l_ocgxii_toshow_d_tl\l_ocgxii_d_list_tl
     \tl_set_eq:NN\l_ocgxii_toshow_u_tl\l_ocgxii_u_list_tl
-    \ocgxii_ocglist_process_idlist:nn{#1}{#4}
+    \ocgxii_ocglist_process_idlist:nn{
+      \IfValueTF{#2}{#2}{triggerocg=onmouseup}
+    }{#5}
     \tl_set_eq:NN\l_ocgxii_tohide_e_tl\l_ocgxii_e_list_tl
     \tl_set_eq:NN\l_ocgxii_tohide_x_tl\l_ocgxii_x_list_tl
     \tl_set_eq:NN\l_ocgxii_tohide_d_tl\l_ocgxii_d_list_tl
     \tl_set_eq:NN\l_ocgxii_tohide_u_tl\l_ocgxii_u_list_tl
-    \ocgxii_pdflink:nn{
+    \hbox_set:Nn\l_tmpa_box{#6}
+    %dummy Widget, workaround for AR bug;
+    %see https://forums.adobe.com/message/5787612#5787612
+    \bool_if:nT{
+      !\cs_if_exist:NTF\ocgxii@insert@OC{
+        \tl_if_blank_p:V\ocgxii@insert@OC
+      }{
+        \c_true_bool
+      }
+    }{\pbs_pdfannot:nnnn{
+      \dim_use:N\box_wd:N\l_tmpa_box}{
+      \dim_use:N\box_ht:N\l_tmpa_box}{
+      \dim_use:N\box_dp:N\l_tmpa_box
+    }{/Subtype/Widget/F~2}}
+    \pbs_pdfannot:nnnn{
+      \dim_use:N\box_wd:N\l_tmpa_box}{
+      \dim_use:N\box_ht:N\l_tmpa_box}{
+      \dim_use:N\box_dp:N\l_tmpa_box
+    }{
       /Subtype/Widget/Ff~65536/FT/Btn/H/I
       /T~(ocgx2@\int_use:N\g_ocgxii_widcount_int)
       \ocgxii@insert@OC
@@ -586,17 +667,36 @@
           ]>>
         }
       >>
-    }{\mbox{#5}} %Widget annots should not be broken across lines
+    }\box_use_clear:N\l_tmpa_box
     \pbs_appendtofields:n{\pbs_pdflastann:}
     \int_gincr:N\g_ocgxii_widcount_int
+  }{
+    \ocgxii_ocglist_process_idlist:nn{triggerocg=onmouseup}{#3}
+    \tl_set_eq:NN\l_ocgxii_toswitch_u_tl\l_ocgxii_u_list_tl
+    \ocgxii_ocglist_process_idlist:nn{triggerocg=onmouseup}{#4}
+    \tl_set_eq:NN\l_ocgxii_toshow_u_tl\l_ocgxii_u_list_tl
+    \ocgxii_ocglist_process_idlist:nn{triggerocg=onmouseup}{#5}
+    \tl_set_eq:NN\l_ocgxii_tohide_u_tl\l_ocgxii_u_list_tl
+    \pbs_pdflink:nn{
+      /Subtype/Link
+      /A <</S/SetOCGState
+        /State [
+          \str_if_eq:VnF{\l_ocgxii_toswitch_u_tl}{}{
+            /Toggle~\l_ocgxii_toswitch_u_tl}~
+          \str_if_eq:VnF{\l_ocgxii_toshow_u_tl}{}{/ON~\l_ocgxii_toshow_u_tl}~
+          \str_if_eq:VnF{\l_ocgxii_tohide_u_tl}{}{/OFF~\l_ocgxii_tohide_u_tl}
+        ]
+      >>
+      /Border [0~0~0]
+    }{#6}
   }
 }
 
 % mimic commands from ocg-p
-\let\toggleocgs\switchocg
-\let\showocgs\showocg
-\let\hideocgs\hideocg
-\let\setocgs\actionsocg
+\def\toggleocgs{\switchocg*}
+\def\showocgs{\showocg*}
+\def\hideocgs{\hideocg*}
+\def\setocgs{\actionsocg*}
 
 \cs_new:Nn\ocgxii_process_ocgref:NN{
   \str_if_eq_x:nnF{#2}{}{
@@ -672,23 +772,6 @@
   Line~\msg_line_number: :~unknown~option~`#1'.
 }
 
-% dvipdfmx and xelatex workaround for ocg buttons within `tikzpicture' context
-\cs_new:Nn\ocgxii_pdflink:nn{
-  \bool_if:nTF{
-    \g_ocgxii_dvipdfmx_bool && \cs_if_exist_p:N\pgfpictureid
-  }{
-    \hbox_set:Nn\l_tmpa_box{#2}
-    \pbs_pdfannot:nnnn{
-      \dim_use:N\box_wd:N\l_tmpa_box}{
-      \dim_use:N\box_ht:N\l_tmpa_box}{
-      \dim_use:N\box_dp:N\l_tmpa_box
-    }{#1}
-    \box_use_clear:N\l_tmpa_box
-  }{
-    \pbs_pdflink:nn{#1}{#2}
-  }
-}
-
 \cs_gset_eq:NN\ocgxii_atenddvi_checkimpl_orig:\AtEndDvi@CheckImpl%
 \def\AtEndDvi@CheckImpl{
   \ocgxii_atenddvi_checkimpl_orig:
@@ -780,7 +863,9 @@
     % ref
     ref/.style={
       /tikz/execute at begin scope={%
-        \begin{ocg}[\ocgxii@opts]{\ocgxii@name}{#1}{\ocgxii@visibility}},
+        \begin{ocg}[\ocgxii@opts]{%
+            \ifx\empty\ocgxii@name\empty#1\else\ocgxii@name\fi%
+        }{#1}{\ocgxii@visibility}},
       /tikz/execute at end scope={\end{ocg}},
     },
   },
@@ -794,7 +879,7 @@
         in
         (path picture bounding box.center)
         node[inner sep=0pt,anchor=center,outer sep=0pt]
-        {\switchocg{#1}{\phantom{\rule{\x3}{\y3}}}};
+        {\switchocg*{#1}{\phantom{\rule{\x3}{\y3}}}};
       }
     },
   },
@@ -842,7 +927,7 @@
         in
         (path picture bounding box.center)
         node[inner sep=0pt,anchor=center]
-        {\showocg{#1}{\phantom{\rule{\x3}{\y3}}}};
+        {\showocg*{#1}{\phantom{\rule{\x3}{\y3}}}};
       },
     },
   },
@@ -856,7 +941,7 @@
         in
         (path picture bounding box.center)
         node[inner sep=0pt,anchor=center]
-        {\hideocg{#1}{\phantom{\rule{\x3}{\y3}}}};
+        {\hideocg*{#1}{\phantom{\rule{\x3}{\y3}}}};
       },
     },
   },
@@ -870,7 +955,7 @@
         in
         (path picture bounding box.center)
         node[inner sep=0pt,anchor=center]
-        {\actionsocg{#1}{#2}{#3}{\phantom{\rule{\x3}{\y3}}}};
+        {\actionsocg*{#1}{#2}{#3}{\phantom{\rule{\x3}{\y3}}}};
       },
     },
   },
-- 
cgit v1.2.3

