[latex3-commits] [git/LaTeX3-latex3-pdfresources] textfields: starting radio buttons (fe72045)

Ulrike Fischer fischer at troubleshooting-tex.de
Wed May 12 00:08:17 CEST 2021


Repository : https://github.com/latex3/pdfresources
On branch  : textfields
Link       : https://github.com/latex3/pdfresources/commit/fe72045cac1421968b2f677a9af7e21bccb0a9cd

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

commit fe72045cac1421968b2f677a9af7e21bccb0a9cd
Author: Ulrike Fischer <fischer at troubleshooting-tex.de>
Date:   Wed May 12 00:08:17 2021 +0200

    starting radio buttons


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

fe72045cac1421968b2f677a9af7e21bccb0a9cd
 experiments/radio.tex                              |  64 +++++++++++
 ...ield-checkbox.dtx => l3pdffield-radiobutton.dtx | 127 ++++++++++++---------
 pdfmanagement-testphase.ins                        |   1 +
 3 files changed, 136 insertions(+), 56 deletions(-)

diff --git a/experiments/radio.tex b/experiments/radio.tex
new file mode 100644
index 0000000..39244d6
--- /dev/null
+++ b/experiments/radio.tex
@@ -0,0 +1,64 @@
+\RequirePackage{pdfmanagement-testphase}
+\DeclareDocumentMetadata{uncompress}
+%\RequirePackage{pdfmanagement-regressiontest}
+\documentclass{article}
+
+\usepackage{l3pdffield-testphase}
+\usepackage{bearwear}
+\ExplSyntaxOn
+ \pdffield_appearance:nn {pdffield/bear/Yes}
+  {
+    \tikz\bear\bearwear[shirt=red,body~deco={\node[font=\tiny\bfseries,white]~at~(beartummy){Yes};}];
+  }
+ \pdffield_appearance:nn {pdffield/bear/Off}
+  {
+   \tikz\bear\bearwear[body~deco={\node[font=\tiny\bfseries,white]~at~(beartummy){Off};}];
+  }
+
+%\pdffield_setup:n {preset-checkbox={checked,style=bear},create-style={bear}{appearance=pdffield/bear}}
+\ExplSyntaxOff
+%\usepackage{fontspec}
+%\setmainfont{segoeui}
+%\setsansfont{ComicSansMS}
+\begin{document}
+
+\ExplSyntaxOn
+%\pdffield_field:nn{name=parent,V=/Yes}{parent}
+%\pdffield_checkbox:n{name=a,parent=parent}
+%\pdffield_checkbox:n{name=b,parent=parent}
+
+%\pdffield_field:nn{name=parent}{parent}
+\tl_set:Nn \l__pdffield_radiovalue_tl{A}
+\pdffield_radio:n{name=AAAA,V=/B,AS=Off}
+\tl_set:Nn \l__pdffield_radiovalue_tl{B}
+\pdffield_radio:n{name=AAAA,AS=B}
+\tl_set:Nn \l__pdffield_radiovalue_tl{C}
+\pdffield_radio:n{name=AAAA,AS=Off}
+
+
+\tl_set:Nn \l__pdffield_radiovalue_tl{A}
+\pdffield_radio:n{name=BBB,V=/B,AS=Off,setfieldflags={
+    RadiosInUnison},unsetfieldflags={NoToggleToOff}}
+%\tl_set:Nn \l__pdffield_radiovalue_tl{B}
+\pdffield_radio:n{name=BBB,AS=A}
+%\tl_set:Nn \l__pdffield_radiovalue_tl{C}
+\pdffield_radio:n{name=BBB,AS=Off}
+
+%\pdffield_radio:n{name=B,parent=parent}
+%\pdffield_radio:n{name=C,parent=parent}
+
+aaa%\pdffield_checkbox:n{name=javascript,width=40pt,height=40pt,onenter={app.alert('Hello');}}
+%\par
+%\pdffield_textfield:n {name=text,font=F\pdffeedback~fontname\font}
+%\pdfmanagement_add:nxx{Catalog/AcroForm/DR/Font}
+%       {F\pdffeedback~fontname\font}{\pdffeedback~fontobjnum\font \c_space_tl0 \c_space_tl R}
+%
+%aaaa
+\quad
+%\pdffield_textfield:n {name=text2,font=SegoeUI}
+\quad
+%\pdffield_textfield:n {name=text3,font=courier}
+\sffamily abc
+\ExplSyntaxOff
+
+\end{document}
\ No newline at end of file
diff --git a/l3pdffield-checkbox.dtx b/l3pdffield-radiobutton.dtx
similarity index 80%
copy from l3pdffield-checkbox.dtx
copy to l3pdffield-radiobutton.dtx
index 1d876f0..77f0336 100644
--- a/l3pdffield-checkbox.dtx
+++ b/l3pdffield-radiobutton.dtx
@@ -1,6 +1,6 @@
 % \iffalse meta-comment
 %
-%% File: l3pdfpdffield-checkbox.dtx
+%% File: l3pdfpdffield-radiobutton.dtx
 %
 % Copyright (C) 2021 The LaTeX Project
 %
@@ -38,11 +38,6 @@
 \end{document}
 %</driver>
 % \fi
-% \NewDocElement[
-%   idxgroup=checkbox keys,
-%   idxtype = {checkbox key},
-%   printtype= \textit{checkbox key}
-%    ]{Checkboxkey}{checkboxkey}
 % \providecommand\hook[1]{\texttt{#1}}
 % \ExplSyntaxOn
 % \pdffield_appearance:nn {pdffield/bear/Yes}
@@ -55,7 +50,7 @@
 %  }
 % \ExplSyntaxOff
 % \title{^^A
-%   The \pkg{l3pdffield-checkbox} module\\ Commands to create checkbox form fields   ^^A
+%   The \pkg{l3pdffield-radiobutton} module\\ Commands to create radio form fields   ^^A
 %   \\ \LaTeX{} PDF management testphase bundle
 % }
 %
@@ -72,32 +67,32 @@
 %
 % \maketitle
 % \begin{documentation}
-% \section{\pkg{l3pdffield-checkbox} Introduction}
-% This is the documentation for checkbox fields, for general information about form fields
+% \section{\pkg{l3pdffield-radiobutton} Introduction}
+% This is the documentation for radio buttons fields, for general information about form fields
 % check the documentation l3pdffield.
 %
 %
 %
 % Please keep in mind
 % \begin{itemize}
-% \item Not every PDF viewer supports checkboxes.
+% \item Not every PDF viewer supports radio buttons.
 % \item The handling can depend on settings in the PDF viewer. In adobe reader for
 % example I had to disable an option to avoid that it tries to create an appearance
 % itself
 % \item Standards like pdf/A disable features of form fields too
 % (as you typically can't change the PDF).
 % \end{itemize}
-% \section{Checkboxes}
+% \section{Radio buttons}
 % Click me:
 % \ExplSyntaxOn
-%  \pdffield_checkbox:n{name=bear,appearance=pdffield/bear,width=23pt,height=30pt,depth=10pt}
+%  ^^A \pdffield_radio:n{name=bear,appearance=pdffield/bear,width=23pt,height=30pt,depth=10pt}
 % \ExplSyntaxOff
 %
 % \bigskip
 % \subsection{Commands}
-% \begin{function}{\pdffield_checkbox:n}
+% \begin{function}{\pdffield_radio:n}
 % \begin{syntax}
-%  \cs{pdffield_checkbox:n}\Arg{key val list}
+%  \cs{pdffield_radio:n}\Arg{key val list}
 % \end{syntax}
 % This creates a checkbox to check and uncheck. The list of allowed keys is described below.
 % The \meta{key val list} should at least set the name, without it the default name
@@ -265,13 +260,14 @@
 % \end{documentation}
 %
 % \begin{implementation}
-% \section{\pkg{l3pdffield-checkbox} Implementation}
+% \section{\pkg{l3pdffield-radiobutton} Implementation}
 %    \begin{macrocode}
 %<*package>
 %<@@=pdffield>
 %    \end{macrocode}
 % \subsection{Variables}
 %    \begin{macrocode}
+\tl_new:N\l_@@_radiovalue_tl
 %    \end{macrocode}
 % \subsection{Messages}
 %    \begin{macrocode}
@@ -280,13 +276,13 @@
 % The default appearances are a cross (\cs{texttimes}),
 % Every appearance should have two versions and follow the naming
 % module/\meta{name}/Yes and module/\meta{name}/Off.
-%  \begin{macro}{@@/checkbox/default_appearances:}
+%  \begin{macro}{@@/radio/default_appearances:}
 %  This defines the standard appearance. It is setup at the first
 %  use of a checkbox, and will adapt to the font family in use then.
 %    \begin{macrocode}
-\cs_new_protected:cn {@@/checkbox/default_appearances:}
+\cs_new_protected:cn {@@/radio/default_appearances:}
   {
-     \pdffield_appearance:nn {pdffield/checkbox/default/Yes}
+     \pdffield_appearance:nn {pdffield/radio/default/Yes}
        {
          \normalsize
          \fboxsep 0pt
@@ -294,7 +290,7 @@
            [ \dim_eval:n { \box_ht:N\strutbox+\box_dp:N\strutbox } ]
            { \texttimes \strut }
        }
-     \pdffield_appearance:nn {pdffield/checkbox/default/Off}
+     \pdffield_appearance:nn {pdffield/radio/default/Off}
        {
          \normalsize
          \fboxsep 0pt
@@ -302,7 +298,7 @@
            [ \dim_eval:n { \box_ht:N\strutbox+\box_dp:N\strutbox } ]
            { \phantom{\texttimes} \strut }
        }
-    \cs_gset_eq:cN {@@/checkbox/default_appearances:} \prg_do_nothing:
+    \cs_gset_eq:cN {@@/radio/default_appearances:} \prg_do_nothing:
   }
 %    \end{macrocode}
 % \end{macro}
@@ -310,55 +306,56 @@
 %\subsection{Creating the field}
 % A field should be created if the name doesn't exist
 %    \begin{macrocode}
-\cs_new_protected:Npn \@@_checkbox_field:n #1 %name
+\cs_new_protected:Npn \@@_radio_field:n #1 %name
   {
-    \pdf_object_if_exist:nF {@@/field/@@/checkbox/#1}
+    \pdf_object_if_exist:nF {@@/field/@@/radio/#1}
       {
-        \@@_field:n { @@/checkbox/#1 }
+        \@@_field:n { @@/radio/#1 }
       }
-    \keys_set:nn {pdffield}{parent=@@/checkbox/#1}
+    \keys_set:nn {pdffield}{parent=@@/radio/#1}
   }
-\cs_generate_variant:Nn \@@_checkbox_field:n {V}
+\cs_generate_variant:Nn \@@_radio_field:n {V}
 %    \end{macrocode}
-% \subsection{Assembling the checkbox}
+% \subsection{Assembling the radio}
 
-% \begin{macro}{\@@_checkbox:n}
+% \begin{macro}{\@@_radio:n}
 %    \begin{macrocode}
-\cs_new_protected:Npn \@@_checkbox:n #1
+\cs_new_protected:Npn \@@_radio:n #1
   {
     \group_begin:
-    \use:c {@@/checkbox/default_appearances:}
-    \cs_set_eq:NN\@@_appearance_handler:nnn \@@_checkbox_appearance_handler:nnn
+    \use:c {@@/radio/default_appearances:}
+    \cs_set_eq:NN\@@_appearance_handler:nnn \@@_radio_appearance_handler:nnn
 %    \end{macrocode}
 % Setting up the defaults.
 %    \begin{macrocode}
     \keys_set:nn {pdffield}
       {
         fieldID=,
-        name=checkbox,
-        appearance = pdffield/checkbox/default,
-        checked=false,
+        name=radio,
+        appearance = pdffield/radio/default,
         width  = \normalbaselineskip,
         height = \normalbaselineskip,
       }
 %    \end{macrocode}
-% Value keys should be undefined.
+% Value keys should be undefined.??
 %    \begin{macrocode}
-    \@@_key_disable:nnn{checkbox}{V}{checked}
-    \@@_key_disable:nnn{checkbox}{DV}{checked}
-    \@@_key_disable:nnn{checkbox}{AS}{checked}
-    \keys_set:nn { pdffield }{@@/preset/checkbox,#1}
+%    \@@_key_disable:nnn{checkbox}{V}{checked}
+%    \@@_key_disable:nnn{checkbox}{DV}{checked}
+%    \@@_key_disable:nnn{checkbox}{AS}{checked}
+    \keys_set:nn { pdffield }{%@@/preset/radio,
+     #1}
     \keys_set:nn { pdffield }
       {
-        ,unsetFf={Radio,Pushbutton}
+        ,unsetFf={Pushbutton}
+        ,setFf={Radio}
         ,FT= Btn
       }
     \tl_if_empty:NT\l_@@_fieldID_tl
       {
         \pdfdict_get:nnN {l_@@/field}{T}\l_@@_fieldID_tl
-        \tl_put_left:Nn \l_@@_fieldID_tl {@@/checkbox/}
+        \tl_put_left:Nn \l_@@_fieldID_tl {@@/radio/}
       }
-    \@@_checkbox_field:V\l_@@_fieldID_tl
+    \@@_radio_field:V\l_@@_fieldID_tl
     \@@_annot:
     \group_end:
   }
@@ -386,7 +383,7 @@
        \pdfannot_dict_put:nnn {widget}{AS}{ /Yes }
      }
    ,checked .default:n = {true}
-   ,checked .groups:n  = {checkbox}
+   ,checked .groups:n  = {radio}
  }
 %    \end{macrocode}
 % And a key to set a dedicated field ID
@@ -396,23 +393,41 @@
    fieldID .tl_set:N = \l_@@_fieldID_tl
  }
 %    \end{macrocode}
-% \begin{macro}{\@@_checkbox_appearance_handler:nnn}
+% \begin{macro}{\@@_radio_appearance_handler:nnn}
 %    \begin{macrocode}
-\cs_new_protected:Npn \@@_checkbox_appearance_handler:nnn #1 #2 #3 %name, type, text
+%\cs_new_protected:Npn \@@_radio_appearance_handler:nnn #1 #2 #3 %name, type, text
+%  {
+%    \pdfxform_if_exist:nTF {  #1 /Yes }
+%      {
+%        \pdf_object_if_exist:nF {@@/radio/AP/#1}
+%          {
+%            \pdf_object_new:nn {@@/radio/AP/#1}{dict}
+%            \pdf_object_write:nx
+%              {@@/radio/AP/#1}
+%              {
+%                /Yes ~ \pdfxform_ref:n { #1/Yes}
+%                /Off ~ \pdfxform_ref:n { #1/Off}
+%              }
+%          }
+%        \pdfannot_dict_put:nnx {widget/AP}{#2}{\pdf_object_ref:n{@@/radio/AP/#1}}
+%      }
+%      {
+%         \msg_error:nnnn{pdffield}{appearance-missing}{#1}{#3}
+%      }
+%   }
+
+
+\cs_new_protected:Npn \@@_radio_appearance_handler:nnn #1 #2 #3 %name, type, text
   {
-    \pdfxform_if_exist:nTF {  #1/Yes }
+    \pdfxform_if_exist:nTF {  #1 / Yes }
       {
-        \pdf_object_if_exist:nF {@@/checkbox/AP/#1}
+        \pdf_object_unnamed_write:nx
+          {dict}
           {
-            \pdf_object_new:nn {@@/checkbox/AP/#1}{dict}
-            \pdf_object_write:nx
-              {@@/checkbox/AP/#1}
-              {
-                /Yes ~ \pdfxform_ref:n { #1/Yes}
-                /Off ~ \pdfxform_ref:n { #1/Off}
-              }
+             /\l_@@_radiovalue_tl \c_space_tl \pdfxform_ref:n  { #1/Yes}
+             /Off ~ \pdfxform_ref:n { #1/Off}
           }
-        \pdfannot_dict_put:nnx {widget/AP}{#2}{\pdf_object_ref:n{@@/checkbox/AP/#1}}
+       \pdfannot_dict_put:nnx {widget/AP}{#2}{\pdf_object_ref_last:}
       }
       {
          \msg_error:nnnn{pdffield}{appearance-missing}{#1}{#3}
@@ -424,9 +439,9 @@
 % \end{macro}
 %
 % \subsection{user commands}
-% \begin{macro}{\pdffield_checkbox:n}
+% \begin{macro}{\pdffield_radio:n}
 %    \begin{macrocode}
-\cs_set_eq:NN \pdffield_checkbox:n \@@_checkbox:n
+\cs_set_eq:NN \pdffield_radio:n \@@_radio:n
 %</package>
 %    \end{macrocode}
 % \end{macro}
diff --git a/pdfmanagement-testphase.ins b/pdfmanagement-testphase.ins
index 97db2f0..1bf0b59 100644
--- a/pdfmanagement-testphase.ins
+++ b/pdfmanagement-testphase.ins
@@ -130,6 +130,7 @@ and all files in that bundle must be distributed together.
         \from{l3pdffield.dtx}{package}
         \from{l3pdffield-checkbox.dtx}{package}
         \from{l3pdffield-textfield.dtx}{package}
+        \from{l3pdffield-radiobutton.dtx}{package}
       }%
   }
 





More information about the latex3-commits mailing list.