[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.