5049 \fi
5050 \fi
5051 \fi
5052 \fi
5053 \ifHy@activeanchor
5054 \anchor@spot
5055 \else
5056 \hyper@anchor{#1}%
5057 \fi
5058 \expandafter\put@me@back
5059 \fi
5060 \let\anchor@spot\@empty
5061}
5062\let\anchor@spot\ltx@empty
18 Compatibility with the L
ATEX2html package
Map our macro names on to Nikos’, so that documents prepared for that system will work without change.
Note, however, that the whole complicated structure for segmenting documents is not supported; it is assumed that the user will loadhtml.styfirst, and thenhyperref.sty, so that the definitions inhtml.stytake effect, and are then overridden in a few circumstances by this package.
5063\let\htmladdimg\hyperimage
5064\def\htmladdnormallink#1#2{\href{#2}{#1}}
5065\def\htmladdnormallinkfoot#1#2{\href{#2}{#1}\footnote{#2}}
5066\def\htmlref#1#2{% anchor text, label
5067 \label@hyperref[{#2}]{#1}%
5068}
This is really too much. The LATEX2html package defines its own\hyperrefcommand, with a different syntax. Was this always here? Its weird, anyway. We interpret it in the
‘printed’ way, since we are about fidelity to the page.
5069\def\@@latextohtmlX{%
5070 \let\hhyperref\hyperref
5071 \def\hyperref##1##2##3##4{% anchor text for HTML
5072 % text to print before label in print
5073 % label
5074 % post-label text in print
5075 ##2\ref{##4}##3%
5076 }%
5077}
19 Forms creation
Allow for creation of PDF or HTML forms. The effects here are limited somewhat by the need to support both output formats, so it may not be as clever as something which only wants to make PDF forms.
I (Sebastian) could not have started this without the encouragement of T V Raman.
Each flag has a option name, an\ifswitch, and a bit position. The default is always
‘false’, the flag is clear. This is also the default of the switch created by\newif.
The names of the flags in the PDF specification (1.7) are used as lowercase option names.
\HyField@NewFlag #1: type:Fannot flags,Fffield flags
#2: PDF name
#3: PDF position
5079\def\HyField@NewFlag#1#2{%
5080 \lowercase{\HyField@NewOption{#2}}%
5081 \lowercase{\HyField@NewBitsetFlag{#2}}{#2}{#1}%
5082}
\HyField@NewFlagOnly
5083\def\HyField@NewFlagOnly#1#2{%
5084 \lowercase{\HyField@NewBitsetFlag{#2}}{#2}{#1}%
5085}
\HyField@NewOption #1: option name
5086\def\HyField@NewOption#1{%
5087 \expandafter\newif\csname ifFld@#1\endcsname
5088 \define@key{Field}{#1}[true]{%
5089 \lowercase{\Field@boolkey{##1}}{#1}%
5090 }%
5091}
\HyField@NewBitsetFlag Package ‘bitset’ uses zero based positions, the PDF specification starts with one.
#1: option
#2: PDF name
#3: type:Fannot flags,Fffield flags
#4: PDF position
5092\def\HyField@NewBitsetFlag#1#2#3#4{%
5093 \begingroup
5094 \count@=#4\relax
5095 \advance\count@\m@ne
5096 \def\x##1{%
5097 \endgroup
5098 \expandafter\def\csname HyField@#3@#1\endcsname{##1}%
5099 \expandafter\ifx\csname HyField@#3@##1\endcsname\relax
5100 \expandafter\edef\csname HyField@#3@##1\endcsname{%
5101 (\number#4) #2%
5102 }%
5103 \else
5104 \expandafter\edef\csname HyField@#3@##1\endcsname{%
5105 \csname HyField@#3@##1\endcsname
5106 /#2%
5107 }%
5108 \fi
5109 }%
5110 \expandafter\x\expandafter{\the\count@}%
5111}
\HyField@UseFlag The bit set isHyField@#1
5112\def\HyField@UseFlag#1#2{%
5113 \lowercase{\HyField@@UseFlag{#2}}{#1}%
5114}
\HyField@@UseFlag
5115\def\HyField@@UseFlag#1#2{%
5116 \bitsetSetValue{HyField@#2}{%
5117 \csname HyField@#2@#1\endcsname
5118 }{%
5119 \csname ifFld@#1\endcsname 1\else 0\fi
5120 }%
5121}
\HyField@SetFlag The bit set isHyField@#1
5122\def\HyField@SetFlag#1#2{%
5123 \lowercase{\HyField@@SetFlag{#2}}{#1}%
5124}
\HyField@@SetFlag
5125\def\HyField@@SetFlag#1#2{%
5126 \bitsetSetValue{HyField@#2}{%
5127 \csname HyField@#2@#1\endcsname
5128 }{1}%
5129}
\HyField@PrintFlags
5130\def\HyField@PrintFlags#1#2{%
5131 \ifHy@verbose
5132 \begingroup
5133 \let\Hy@temp\@empty
5134 \let\MessageBreak\relax
5135 \expandafter\@for\expandafter\x\expandafter:\expandafter=%
5136 \bitsetGetSetBitList{HyField@#1}\do{%
5137 \edef\Hy@temp{%
5138 \Hy@temp
5139 \csname HyField@#1@\x\endcsname\MessageBreak
5140 }%
5141 }%
5142 \edef\x{\endgroup
5143 \noexpand\Hy@Info{%
5144 Field flags: %
5145 \expandafter\ifx\@car#1\@nil S\else/\fi
5146 #1 %
5147 \bitsetGetDec{HyField@#1} %
5148 (0x\bitsetGetHex{HyField@#1}{32})\MessageBreak
5149 \Hy@temp
5150 for #2%
5151 }%
5152 }\x
5153 \fi
5154}
19.1.1 Declarations of field flags
“Table 8.70 Field flags common to all field types”
5155\HyField@NewFlag{Ff}{ReadOnly}{1}
5156\HyField@NewFlag{Ff}{Required}{2}
5157\HyField@NewFlag{Ff}{NoExport}{3}
“Table 8.75 Field flags specific to button fields”
5158\HyField@NewFlag{Ff}{NoToggleToOff}{15}
5159\HyField@NewFlag{Ff}{Radio}{16}
5160\HyField@NewFlag{Ff}{Pushbutton}{17}
5161\HyField@NewFlag{Ff}{RadiosInUnison}{26}
“Table 8.77 Field flags specific to text fields”
5162\HyField@NewFlag{Ff}{Multiline}{13}
5163\HyField@NewFlag{Ff}{Password}{14}
5164\HyField@NewFlag{Ff}{FileSelect}{21}% PDF 1.4
5165\HyField@NewFlag{Ff}{DoNotSpellCheck}{23}% PDF 1.4
5166\HyField@NewFlag{Ff}{DoNotScroll}{24}% PDF 1.4
5167\HyField@NewFlag{Ff}{Comb}{25}% PDF 1.4
5168\HyField@NewFlag{Ff}{RichText}{26}% PDF 1.5
“Table 8.79 field flags specific to choice fields”
5169\HyField@NewFlag{Ff}{Combo}{18}
5170\HyField@NewFlag{Ff}{Edit}{19}
5171\HyField@NewFlag{Ff}{Sort}{20}
5172\HyField@NewFlag{Ff}{MultiSelect}{22}% PDF 1.4
5173% \HyField@NewFlag{Ff}{DoNotSpellCheck}{23}% PDF 1.4
5174\HyField@NewFlag{Ff}{CommitOnSelChange}{27}% PDF 1.5 Signature fields are not supported.
Until 6.76i hyperref uses field option ‘combo’ to set three flags ‘Combo’, ‘Edit’, and
‘Sort’. Option ‘popdown’ sets flag ‘Combo’ only.
5175\newif\ifFld@popdown
5176\define@key{Field}{popdown}[true]{%
5177 \lowercase{\Field@boolkey{#1}}{popdown}%
5178}
Annotation flags. The form objects are widget annotations. There are two flags for readonly settings, the one in the annotation flags is ignored, instead the other in the field flags is used.
FlagPrintis not much useful, because hyperref do not use the appearance entry of the annotations for most fields.
5179\HyField@NewFlag{F}{Invisible}{1}
5180\HyField@NewFlag{F}{Hidden}{2}% PDF 1.2
5181\HyField@NewFlag{F}{Print}{3}% PDF 1.2
5182\HyField@NewFlag{F}{NoZoom}{4}% PDF 1.2
5183\HyField@NewFlag{F}{NoRotate}{5}% PDF 1.3
5184\HyField@NewFlag{F}{NoView}{6}% PDF 1.3
5185\HyField@NewFlag{F}{Locked}{8}% PDF 1.4
5186\HyField@NewFlag{F}{ToggleNoView}{9}% PDF 1.5
5187\HyField@NewFlag{F}{LockedContents}{10}% PDF 1.7
5188\ifHy@pdfa
5189 \def\HyField@PDFAFlagWarning#1#2{%
5190 \Hy@Warning{%
5191 PDF/A: Annotation flag ‘#1’ must\MessageBreak
5192 be set to ‘#2’%
5193 }%
5194 }%
5195 \Fld@invisiblefalse
5196 \def\Fld@invisibletrue{%
5197 \HyField@PDFAFlagWarning{invisible}{false}%
5198 }%
5199 \Fld@hiddenfalse
5200 \def\Fld@hiddentrue{%
5201 \HyField@PDFAFlagWarning{hidden}{false}%
5202 }%
5203 \Fld@printtrue
5204 \def\Fld@printfalse{%
5205 \HyField@PDFAFlagWarning{print}{true}%
5206 }%
5207 \Fld@nozoomtrue
5208 \def\Fld@nozoomfalse{%
5209 \HyField@PDFAFlagWarning{nozoom}{true}%
5210 }%
5211 \Fld@norotatetrue
5212 \def\Fld@norotatefalse{%
5213 \HyField@PDFAFlagWarning{norotate}{true}%
5214 }%
5215 \Fld@noviewfalse
5216 \def\Fld@noviewtrue{%
5217 \HyField@PDFAFlagWarning{noview}{false}%
5218 }%
5219\fi
Submit flags. Flag 1 Include/Exclude is not supported, use option noexport instead.
5220\HyField@NewFlag{Submit}{IncludeNoValueFields}{2}
5221\HyField@NewFlagOnly{Submit}{ExportFormat}{3}
5222\HyField@NewFlag{Submit}{GetMethod}{4}
5223\HyField@NewFlag{Submit}{SubmitCoordinates}{5}
5224\HyField@NewFlagOnly{Submit}{XFDF}{6}
5225\HyField@NewFlag{Submit}{IncludeAppendSaves}{7}
5226\HyField@NewFlag{Submit}{IncludeAnnotations}{8}
5227\HyField@NewFlagOnly{Submit}{SubmitPDF}{9}
5228\HyField@NewFlag{Submit}{CanonicalFormat}{10}
5229\HyField@NewFlag{Submit}{ExclNonUserAnnots}{11}
5230\HyField@NewFlag{Submit}{ExclFKey}{12}
5231\HyField@NewFlag{Submit}{EmbedForm}{14}
5232\define@key{Field}{export}{%
5233 \lowercase{\def\Hy@temp{#1}}%
5234 \@ifundefined{Fld@export@\Hy@temp}{%
5235 \@onelevel@sanitize\Hy@temp
5236 \Hy@Error{%
5237 Unknown export format ‘\Hy@temp’.\MessageBreak
5238 Known formats are ‘FDF’, ‘HTML’, ‘XFDF’, and ‘PDF’%
5239 }\@ehc
5240 }{%
5241 \let\Fld@export\Hy@temp
5242 }%
5243}
5244\def\Fld@export{fdf}
5245\@namedef{Fld@export@fdf}{0}%
5246\@namedef{Fld@export@html}{1}%
5247\@namedef{Fld@export@xfdf}{2}%
5248\@namedef{Fld@export@pdf}{3}%
19.1.2 Set submit flags
\HyField@FlagsSubmit
5249\def\HyField@FlagsSubmit{%
5250 \bitsetReset{HyField@Submit}%
5251 \ifcase\@nameuse{Fld@export@\Fld@export} %
5252 % FDF
5253 \HyField@UseFlag{Submit}{IncludeNoValueFields}%
5254 \HyField@UseFlag{Submit}{SubmitCoordinates}%
5255 \HyField@UseFlag{Submit}{IncludeAppendSaves}%
5256 \HyField@UseFlag{Submit}{IncludeAnnotations}%
5257 \HyField@UseFlag{Submit}{CanonicalFormat}%
5258 \HyField@UseFlag{Submit}{ExclNonUserAnnots}%
5259 \HyField@UseFlag{Submit}{ExclFKey}%
5260 \HyField@UseFlag{Submit}{EmbedForm}%
5261 \or % HTML
5262 \HyField@SetFlag{Submit}{ExportFormat}%
5263 \HyField@UseFlag{Submit}{IncludeNoValueFields}%
5264 \HyField@UseFlag{Submit}{GetMethod}%
5265 \HyField@UseFlag{Submit}{SubmitCoordinates}%
5266 \HyField@UseFlag{Submit}{CanonicalFormat}%
5267 \or % XFDF
5268 \HyField@SetFlag{Submit}{XFDF}%
5269 \HyField@UseFlag{Submit}{IncludeNoValueFields}%
5270 \HyField@UseFlag{Submit}{SubmitCoordinates}%
5271 \HyField@UseFlag{Submit}{CanonicalFormat}%
5272 \or % PDF
5273 \HyField@SetFlag{Submit}{SubmitPDF}%
5274 \HyField@UseFlag{Submit}{GetMethod}%
5275 \fi
5276 \HyField@PrintFlags{Submit}{submit button field}%
5277 \bitsetIsEmpty{HyField@Submit}{%
5278 \let\Fld@submitflags\ltx@empty
5279 }{%
5280 \edef\Fld@submitflags{/Flags \bitsetGetDec{HyField@Submit}}%
5281 }%
5282}
19.1.3 Set annot flags in fields
\HyField@FlagsAnnot
5283\def\HyField@FlagsAnnot#1{%
5284 \bitsetReset{HyField@F}%
5285 \HyField@UseFlag{F}{Invisible}%
5286 \HyField@UseFlag{F}{Hidden}%
5287 \HyField@UseFlag{F}{Print}%
5288 \HyField@UseFlag{F}{NoZoom}%
5289 \HyField@UseFlag{F}{NoRotate}%
5290 \HyField@UseFlag{F}{NoView}%
5291 \HyField@UseFlag{F}{Locked}%
5292 \HyField@UseFlag{F}{ToggleNoView}%
5293 \HyField@UseFlag{F}{LockedContents}%
5294 \HyField@PrintFlags{F}{#1}%
5295 \bitsetIsEmpty{HyField@F}{%
5296 \let\Fld@annotflags\ltx@empty
5297 }{%
5298 \edef\Fld@annotflags{/F \bitsetGetDec{HyField@F}}%
5299 }%
5300}
19.1.4 Pushbutton field
\HyField@FlagsPushButton
5301\def\HyField@FlagsPushButton{%
5302 \HyField@FlagsAnnot{push button field}%
5303 \bitsetReset{HyField@Ff}%
5304 \HyField@UseFlag{Ff}{ReadOnly}%
5305 \HyField@UseFlag{Ff}{Required}%
5306 \HyField@UseFlag{Ff}{NoExport}%
5307 \HyField@SetFlag{Ff}{Pushbutton}%
5308 \HyField@PrintFlags{Ff}{push button field}%
5309 \bitsetIsEmpty{HyField@Ff}{%
5310 \let\Fld@flags\ltx@empty
5311 }{%
5312 \edef\Fld@flags{/Ff \bitsetGetDec{HyField@Ff}}%
5313 }%
5314}
19.1.5 Check box field
\HyField@FlagsCheckBox
5315\def\HyField@FlagsCheckBox{%
5316 \HyField@FlagsAnnot{check box field}%
5317 \bitsetReset{HyField@Ff}%
5318 \HyField@UseFlag{Ff}{ReadOnly}%
5319 \HyField@UseFlag{Ff}{Required}%
5320 \HyField@UseFlag{Ff}{NoExport}%
5321 \HyField@PrintFlags{Ff}{check box field}%
5322 \bitsetIsEmpty{HyField@Ff}{%
5323 \let\Fld@flags\ltx@empty
5324 }{%
5325 \edef\Fld@flags{/Ff \bitsetGetDec{HyField@Ff}}%
5326 }%
5327}
19.1.6 Radio button field
\HyField@FlagsRadioButton
5328\def\HyField@FlagsRadioButton{%
5329 \HyField@FlagsAnnot{radio button field}%
5330 \bitsetReset{HyField@Ff}%
5331 \HyField@UseFlag{Ff}{ReadOnly}%
5332 \HyField@UseFlag{Ff}{Required}%
5333 \HyField@UseFlag{Ff}{NoExport}%
5334 \HyField@UseFlag{Ff}{NoToggleToOff}%
5335 \HyField@SetFlag{Ff}{Radio}%
5336 \HyField@UseFlag{Ff}{RadiosInUnison}%
5337 \HyField@PrintFlags{Ff}{radio button field}%
5338 \bitsetIsEmpty{HyField@Ff}{%
5339 \let\Fld@flags\ltx@empty
5340 }{%
5341 \edef\Fld@flags{/Ff \bitsetGetDec{HyField@Ff}}%
5342 }%
5343}
19.1.7 Text fields
\HyField@FlagsText
5344\def\HyField@FlagsText{%
5345 \HyField@FlagsAnnot{text field}%
5346 \bitsetReset{HyField@Ff}%
5347 \HyField@UseFlag{Ff}{ReadOnly}%
5348 \HyField@UseFlag{Ff}{Required}%
5349 \HyField@UseFlag{Ff}{NoExport}%
5350 \HyField@UseFlag{Ff}{Multiline}%
5351 \HyField@UseFlag{Ff}{Password}%
5352 \HyField@UseFlag{Ff}{FileSelect}%
5353 \HyField@UseFlag{Ff}{DoNotSpellCheck}%
5354 \HyField@UseFlag{Ff}{DoNotScroll}%
5355 \ifFld@comb
5356 \ifcase0\ifFld@multiline
5357 \else\ifFld@password
5358 \else\ifFld@fileselect
5359 \else 1\fi\fi\fi\relax
5360 \Hy@Error{%
5361 Field option ‘comb’ cannot used together with\MessageBreak
5362 ‘multiline’, ‘password’, or ‘fileselect’%
5363 }\@ehc
5364 \else
5365 \HyField@UseFlag{Ff}{Comb}%
5366 \fi
5367 \fi
5368 \HyField@UseFlag{Ff}{RichText}%
5369 \HyField@PrintFlags{Ff}{text field}%
5370 \bitsetIsEmpty{HyField@Ff}{%
5371 \let\Fld@flags\ltx@empty
5372 }{%
5373 \edef\Fld@flags{/Ff \bitsetGetDec{HyField@Ff}}%
5374 }%
5375}
19.1.8 Choice fields
\HyField@FlagsChoice
5376\def\HyField@FlagsChoice{%
5377 \HyField@FlagsAnnot{choice field}%
5378 \bitsetReset{HyField@Ff}%
5379 \HyField@UseFlag{Ff}{ReadOnly}%
5380 \HyField@UseFlag{Ff}{Required}%
5381 \HyField@UseFlag{Ff}{NoExport}%
5382 \HyField@UseFlag{Ff}{Combo}%
5383 \ifFld@combo
5384 \HyField@UseFlag{Ff}{Edit}%
5385 \fi
5386 \HyField@UseFlag{Ff}{Sort}%
5387 \HyField@UseFlag{Ff}{MultiSelect}%
5388 \ifFld@combo
5389 \ifFld@edit
5390 \HyField@UseFlag{Ff}{DoNotSpellCheck}%
5391 \fi
5392 \fi
5393 \HyField@UseFlag{Ff}{CommitOnSelChange}%
5394 \HyField@PrintFlags{Ff}{choice field}%
5395 \bitsetIsEmpty{HyField@Ff}{%
5396 \let\Fld@flags\ltx@empty
5397 }{%
5398 \edef\Fld@flags{/Ff \bitsetGetDec{HyField@Ff}}%
5399 }%
5400}