texlive[64043] Master/texmf-dist: animate (4aug22)
commits+karl at tug.org
commits+karl at tug.org
Thu Aug 4 22:32:19 CEST 2022
Revision: 64043
http://tug.org/svn/texlive?view=revision&revision=64043
Author: karl
Date: 2022-08-04 22:32:19 +0200 (Thu, 04 Aug 2022)
Log Message:
-----------
animate (4aug22)
Modified Paths:
--------------
trunk/Master/texmf-dist/doc/latex/animate/ChangeLog
trunk/Master/texmf-dist/doc/latex/animate/animate.pdf
trunk/Master/texmf-dist/source/latex/animate/animate.tex
trunk/Master/texmf-dist/tex/latex/animate/animate.sty
Modified: trunk/Master/texmf-dist/doc/latex/animate/ChangeLog
===================================================================
--- trunk/Master/texmf-dist/doc/latex/animate/ChangeLog 2022-08-04 20:32:06 UTC (rev 64042)
+++ trunk/Master/texmf-dist/doc/latex/animate/ChangeLog 2022-08-04 20:32:19 UTC (rev 64043)
@@ -1,3 +1,7 @@
+2022-08-04
+ * fix: a few obsolete code lines removed; option processing acc. to new
+ LaTeX format 22-06-01
+
2022-02-21
* improvement: svg clipping code simplified
Modified: trunk/Master/texmf-dist/doc/latex/animate/animate.pdf
===================================================================
(Binary files differ)
Modified: trunk/Master/texmf-dist/source/latex/animate/animate.tex
===================================================================
--- trunk/Master/texmf-dist/source/latex/animate/animate.tex 2022-08-04 20:32:06 UTC (rev 64042)
+++ trunk/Master/texmf-dist/source/latex/animate/animate.tex 2022-08-04 20:32:19 UTC (rev 64043)
@@ -1,5 +1,5 @@
\listfiles
-%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%
% Copyright 2007--\today Alexander Grahn
%
% This material is subject to the LaTeX Project Public License. See
@@ -10,8 +10,7 @@
\ifdefined\outputmode\outputmode=0\fi
\ifdefined\pdfoutput\pdfoutput=0\fi
%%%%%%% pdfmanagement-testphase %%%%%%
-\RequirePackage{pdfmanagement-testphase} % load the package
-\DeclareDocumentMetadata % activates the PDF management interface
+\DocumentMetadata % activates the PDF management interface
{
%uncompress,
}
@@ -361,7 +360,7 @@
controls[=all | true | on]
controls=(none | false | off) | {[play][,step][,stop][,speed]}
\end{verbatim}
-Inserts control buttons below the animation widget. Visibility of buttons can be fine-tuned through optional keys. By default, if setting `\verb+controls+' alone, all available buttons are shown, while any of `\verb+none+', `\verb+false+' or `\verb+off+' suppresses them altogether. A comma-separated selection from `\verb+play+', `\verb+step+', `\verb+stop+' and `\verb+speed+' enables corresponding pairs or groups of buttons. Such a comma list must be enclosed in braces, i.\,e. \verb+controls={..., ..., ...}+. If all buttons are shown, their meaning is as follows, from left to right: stop \& first frame, step backwards, play backwards, play forwards, step forwards, stop \& last frame, decrease speed, default speed, increase speed. Both `play' buttons are replaced by a large `pause' button while the animation is playing.
+Inserts control buttons below the animation widget. Visibility of buttons can be fine-tuned through optional keys. By default, if setting `\verb+controls+' alone, all available buttons are shown, while any of `\verb+none+', `\verb+false+' or `\verb+off+' suppresses them altogether. A comma-separated selection from `\verb+play+', `\verb+step+', `\verb+stop+' and `\verb+speed+' enables corresponding pairs or groups of buttons. Such a comma list must be enclosed in braces, i.\,e. \verb+controls={play, stop}+. If all buttons are shown, their meaning is as follows, from left to right: stop \& first frame, step backwards, play backwards, play forwards, step forwards, stop \& last frame, decrease speed, default speed, increase speed. Both `play' buttons are replaced by a large `pause' button while the animation is playing.
\begin{verbatim}
controlsaligned=left[+<indent>] | center | right[+<indent>]
\end{verbatim}
Modified: trunk/Master/texmf-dist/tex/latex/animate/animate.sty
===================================================================
--- trunk/Master/texmf-dist/tex/latex/animate/animate.sty 2022-08-04 20:32:06 UTC (rev 64042)
+++ trunk/Master/texmf-dist/tex/latex/animate/animate.sty 2022-08-04 20:32:19 UTC (rev 64043)
@@ -11,13 +11,12 @@
% Supports LaTeX->dvips->ps2pdf, (Xe)LaTeX->(x)dvipdfmx, LuaLaTeX,
% pdfLaTeX and LaTeX->dvisvgm workflows.
-\NeedsTeXFormat{LaTeX2e}[2020-10-01]
+\NeedsTeXFormat{LaTeX2e}[2022-06-01]
-\def\@anim at version{2022/02/21}
+\def\@anim at version{2022/08/04}
\ProvidesPackage{animate}
[\@anim at version\space PDF & SVG animations from files and inline graphics]
-\RequirePackage{xkeyval}
\RequirePackage{ifthen}
\RequirePackage{iftex}
\RequirePackage{ifdraft}
@@ -25,61 +24,86 @@
%driver options (the only package options we process immediately)
\newboolean{@anim at dvips}
-\setboolean{@anim at dvips}{false}
\newboolean{@anim at dvipdfmx}
-\setboolean{@anim at dvipdfmx}{false}
\newboolean{@anim at dvisvgm}
-\setboolean{@anim at dvisvgm}{false}
-\ifpdf\else
- \setboolean{@anim at dvips}{true}% default dvi mode
- \setboolean{@anim at dvipdfmx}{false}
- \DeclareOptionX{dvips}{%
- \setboolean{@anim at dvips}{true}
- \setboolean{@anim at dvipdfmx}{false}
- }
- \DeclareOptionX{dvipdfmx}{%
- \setboolean{@anim at dvipdfmx}{true}
- \setboolean{@anim at dvips}{false}
+\newboolean{@anim at xetex}
+\newboolean{@anim at export}%exporting animation frames
+
+\ExplSyntaxOn
+\DeclareKeys[anim at pkg]{
+ pdftex.code:n = {},
+ pdftex.value_forbidden:n = true,
+
+ luatex.code:n = {},
+ luatex.value_forbidden:n = true,
+
+ xetex.code:n = {},
+ xetex.value_forbidden:n = true,
+
+ dvips.code:n = {},
+ dvips.value_forbidden:n = true,
+
+ dvipdfmx.code:n = {
\PassOptionsToPackage{dvipdfmx}{pdfbase}
+ \PassOptionsToPackage{dvipdfmx}{ocgbase}
\PassOptionsToPackage{dvipdfmx}{graphics}
- }
- \DeclareOptionX{xetex}{%
- \setboolean{@anim at dvipdfmx}{true}
- \setboolean{@anim at dvips}{false}
- \PassOptionsToPackage{xetex}{pdfbase}
- }
- \DeclareOptionX{dvisvgm}{%
- \setboolean{@anim at dvisvgm}{true}
- \setboolean{@anim at dvips}{false}
+ },
+ dvipdfmx.value_forbidden:n = true,
+
+ dvisvgm.code:n = {
\PassOptionsToPackage{dvisvgm}{pdfbase}
\PassOptionsToPackage{dvisvgm}{graphics}
- }
+ },
+ dvisvgm.value_forbidden:n = true,
+
+ export.legacy_if_gset:n = @anim at export,
+ export.default:n = true,
+}
+\ExplSyntaxOff
+\DeclareUnknownKeyHandler[anim at pkg]{}
+
+\ProcessKeyOptions[anim at pkg]
+% remaining package options to be processed near end of this file
+
+\RequirePackage{pdfbase}
+\@ifpackagelater{pdfbase}{2022/08/04}{}{
+ \PackageError{animate}{%
+ Support package `pdfbase.sty' too old.%
+ }{%
+ Please install an up to date version of `pdfbase.sty'.\MessageBreak%
+ Aborting.%
+ }%
+}
+
+\ifpdf\else
+ \setboolean{@anim at dvips}{true}% default dvi mode
\fi
-\newboolean{@anim at xetex}
-\setboolean{@anim at xetex}{false}
-\ifxetex
- \setboolean{@anim at xetex}{true}
+
+\ExplSyntaxOn
+\bool_if:NT\g_pbs_dvipdfmx_bool{
\setboolean{@anim at dvipdfmx}{true}
\setboolean{@anim at dvips}{false}
-\fi
-%exporting animation frames
-\newboolean{@anim at export}
-\setboolean{@anim at export}{false}
+}
+\bool_if:NT\g_pbs_dvisvgm_bool{
+ \setboolean{@anim at dvisvgm}{true}
+ \setboolean{@anim at dvips}{false}
+}
+\sys_if_engine_xetex:T{
+ \bool_if:NT\g_pbs_dvipdfmx_bool{\setboolean{@anim at xetex}{true}}
+ \setboolean{@anim at dvips}{false}
+}
+\ExplSyntaxOff
+
+\RequirePackage{graphics}%\scalebox, \resizebox, \rotatebox
+\RequirePackage{zref-abspage}
+
\newboolean{@anim at insideexport}
-\setboolean{@anim at insideexport}{false}
\newenvironment{anim at export}{%
\global\@anim at insideexporttrue%
}{%
\global\@anim at insideexportfalse%
}
-\DeclareOptionX{export}{\setboolean{@anim at export}{true}}
-\DeclareOptionX*{}\ProcessOptionsX*\relax %allow anything as an option
-%(remaining package options will be processed near end of this file)
-
-\RequirePackage{graphics}%\scalebox, \resizebox, \rotatebox
-\RequirePackage{zref-abspage}
-
% get number of pages in file given as #1 (file basename); #2 extension;
% store result into macro given as #3
\ifpdf %pdflatex/lualatex
@@ -148,7 +172,7 @@
\if at anim@export
\@ifclassloaded{standalone}{}{
\PackageError{animate}{%
- Option `export' requires `standalone' document class.\MessageBreak%
+ Option `export' requires the `standalone' document class.\MessageBreak%
Replace current document class with `standalone'%
}{%
Put the line\MessageBreak%
@@ -162,16 +186,6 @@
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
% low level PDF/SVG operations
%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
-\RequirePackage{pdfbase}
-\@ifpackagelater{pdfbase}{2017/09/29}{}{
- \PackageError{animate}{%
- Support package `pdfbase.sty' too old.%
- }{%
- Please install an up to date version of `pdfbase.sty'.\MessageBreak%
- Aborting.%
- }%
-}
-
\ExplSyntaxOn
\let\@anim at literal\pbs_literal:nn
@@ -193,8 +207,6 @@
\ExplSyntaxOff
\if at anim@dvisvgm
- \setboolean{@anim at export}{false}
-
\def\@anim at updatebbox#1#2#3{\special{dvisvgm:bbox #1 #2 #3 transform}}
%approach similar to OCGs, that is, putting the frame content in an svg group,
@@ -226,8 +238,6 @@
\pbs_pdfannot:nnnn{#1}{#2}{#3}{#4}
\pbs_appendtofields:n{\pbs_pdflastann:}
}
-
- \let\@anim at pdfcatalog\pbs_pdfcatalog:n
\ExplSyntaxOff
\RequirePackage{ocgbase} %OCG generating and configuration macros
@@ -356,7 +366,7 @@
}%
\edef\@anim at curxform{\@anim at getkeyval{xform:\@anim at fingerprint}}%
\ifthenelse{\equal{\@anim at curxform}{}}{%
- % new "<file chksum>.<page>.<graphicx opts>"
+ % new file
\@anim at filebox{#3}{#4}{#5}{\@anim at box}% store file in a box
\edef\@anim at natdims{{\the\wd\@anim at box}{\the\ht\@anim at box}{\the\dp\@anim at box}}%
\@anim at xinline{#1}{#2}{\@anim at box}{newfile}% Form XObject creation
@@ -415,7 +425,7 @@
\fi%
\ifthenelse{\equal{#4}{newfile}\OR\equal{#4}{inline}}{%
\@anim at xform{1}{1}{}{}{#3}%
- %keep a record of XObject number, needed when timeline is built
+ %keep a record of XObject number
\@anim at newkey{img@#2}{\@anim at lastxform}%
}{%
%known file
@@ -496,11 +506,9 @@
\hss%
}%
% rotate content on lscape pages
- \ifnum\@anim at method>\@ne\else%
- \ifx\@anim at lscape\@anim@@lscape%
+ \ifnum\@anim at method>\@ne\else\ifx\@anim at lscape\@anim@@lscape%
\setbox\@anim at box=\hbox{\rotatebox{90}{\box\@anim at box}}%
- \fi%
- \fi%
+ \fi\fi%
\fi%
\ifcase\@anim at method% icon based
\if at anim@singleref\else%
@@ -1577,7 +1585,7 @@
\ifcsname Ginput at path\endcsname% make use of graphic[xs] search path
\let\input at path\Ginput at path%
\fi%
- \setkeys{anim at user}{#1}%
+ \SetKeys[anim at user]{#1}%
\ifx\empty\@anim at bg\empty\xdef\@anim at alpha{}\fi%
\xdef\@anim at btnsize{\the\dimexpr\@anim at btnsize\relax}%
%correct wrong option combination; totalheight overrides height
@@ -2108,7 +2116,7 @@
\ifcsname Ginput at path\endcsname% make use of graphic[xs] search path
\let\input at path\Ginput at path%
\fi%
- \setkeys{anim at user}{#1}%
+ \SetKeys[anim at user]{#1}%
\ifx\empty\@anim at bg\empty\xdef\@anim at alpha{}\fi%
\xdef\@anim at btnsize{\the\dimexpr\@anim at btnsize\relax}%
%correct wrong option combination; totalheight overrides height
@@ -2848,171 +2856,27 @@
}
%command options
-\define at key{anim at user}{label}{%
- \gdef\@anim at label{#1}%
- \ifcsname @anim@#1\endcsname%
- \PackageWarning{animate}{Label #1 multiply defined}
- \ifdefined\@anim at multlabel\else
- \gdef\@anim at multlabel{}%
- \AtEndDocument{%
- \PackageWarningNoLine{animate}{%
- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\MessageBreak
- @ There are multiply-defined labels! @\MessageBreak
- @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@}%
- }%
- \fi%
- \fi%
- \expandafter\gdef\csname @anim@#1\endcsname{}%
-}
-%setting the widget size
-\define at key{anim at user}{width}{%
- \gdef\@anim at widtharg{#1}%
- \ifdefined\@anim at usrwd\else%
- \global\advance\@anim at resizeflags by 4%
- \def\@anim at usrwd{}%
- \fi%
-}
-\define at key{anim at user}{height}{%
- \gdef\@anim at heightarg{#1}%
- \ifdefined\@anim at usrht\else%
- \global\advance\@anim at resizeflags by 2%
- \def\@anim at usrht{}%
- \fi%
-}
-\define at key{anim at user}{totalheight}{%
- \gdef\@anim at totheightarg{#1}%
- \ifdefined\@anim at usrtht\else%
- \global\advance\@anim at resizeflags by \@ne%
- \def\@anim at usrtht{}%
- \fi%
-}
-\define at key{anim at user}{depth}{%
- \PackageWarning{animate}{Ignoring obsolete `depth' option.}%
-}
\newboolean{@anim at iso}
-\define at key{anim at user}{keepaspectratio}[true]{%
- \setboolean{@anim at iso}{#1}%
-}
-\define at key{anim at user}{bb}{%
- \xdef\@anim at bb{bb=#1}%
-}
-\define at key{anim at user}{viewport}{%
- \xdef\@anim at viewport{viewport=#1}%
-}
-\define at key{anim at user}{trim}{%
- \xdef\@anim at trim{trim=#1}%
-}
-\define at key{anim at user}{angle}{%
- \xdef\@anim at angle{angle=#1}%
-}
-\define at key{anim at user}{clip}[true]{%
- %no-op, as embedded graphics are always clipped to widget box
-}
\newboolean{@anim at hiresbb}
-\define at key{anim at user}{hiresbb}[true]{%
- \setboolean{@anim at hiresbb}{#1}%
-}
\newboolean{@anim at interpolate}
-\define at key{anim at user}{interpolate}[true]{%
- \setboolean{@anim at interpolate}{#1}%
-}
-\define at key{anim at user}{pagebox}{%
- \xdef\@anim at pagebox{pagebox=#1}%
-}
-\define at key{anim at user}{scale}{%
- \xdef\@anim at boxscale{#1}%
-}
-\define at key{anim at user}{buttonsize}{%
- \gdef\@anim at btnsize{#1}%
-}
-\def\@anim at colours#1:#2\@nil{% helper macro to get number of colour components
- \xdef\@anim at colour{\@anim at colour\space #1}% and to replace : by ` ' in the arg
- \ifthenelse{\equal{#2}{}}{}{%
- \global\advance\@anim at tmpcnt by \@ne%
- \@anim at colours#2\@nil%
- }%
-}
-\define at key{anim at user}{buttonbg}{%background colour of buttons
- \global\@anim at tmpcnt=\@ne%
- \gdef\@anim at colour{}%
- \@anim at colours#1:\@nil%
- \global\let\@anim at bgcolour\@anim at colour%
- \ifnum\if at anim@dvips 1\else\if at anim@dvisvgm 1\else0\fi\fi=1%
- \ifnum\@anim at tmpcnt=\@ne\relax%
- \xdef\@anim at bg{\@anim at colour\space setgray}%
- \else%
- \ifnum\@anim at tmpcnt=3\relax%
- \xdef\@anim at bg{\@anim at colour\space setrgbcolor}%
- \else%
- \ifnum\@anim at tmpcnt=4\relax%
- \xdef\@anim at bg{\@anim at colour\space setcmykcolor}%
- \fi%
- \fi%
- \fi%
- \else% pdftex and dvipdfmx
- \ifnum\@anim at tmpcnt=\@ne\relax%
- \xdef\@anim at bg{\@anim at colour\space g}%
- \else%
- \ifnum\@anim at tmpcnt=3\relax%
- \xdef\@anim at bg{\@anim at colour\space rg}%
- \else%
- \ifnum\@anim at tmpcnt=4\relax%
- \xdef\@anim at bg{\@anim at colour\space k}%
- \fi%
- \fi%
- \fi%
- \fi%
-}
-\define at key{anim at user}{buttonfg}{%stroking colour of buttons
- \global\@anim at tmpcnt=\@ne%
- \gdef\@anim at colour{}%
- \@anim at colours#1:\@nil%
- \global\let\@anim at fgcolour\@anim at colour%
- \ifnum\if at anim@dvips 1\else\if at anim@dvisvgm 1\else0\fi\fi=1%
- \ifnum\@anim at tmpcnt=\@ne\relax%
- \xdef\@anim at fg{\@anim at colour\space setgray}%
- \else%
- \ifnum\@anim at tmpcnt=3\relax%
- \xdef\@anim at fg{\@anim at colour\space setrgbcolor}%
- \else%
- \ifnum\@anim at tmpcnt=4\relax%
- \xdef\@anim at fg{\@anim at colour\space setcmykcolor}%
- \fi%
- \fi%
- \fi%
- \else% pdftex and dvipdfmx
- \ifnum\@anim at tmpcnt=\@ne\relax%
- \xdef\@anim at fg{\@anim at colour\space G}%
- \xdef\@anim@@@fg{\@anim at colour\space g}%
- \else%
- \ifnum\@anim at tmpcnt=3\relax%
- \xdef\@anim at fg{\@anim at colour\space RG}%
- \xdef\@anim@@@fg{\@anim at colour\space rg}%
- \else%
- \ifnum\@anim at tmpcnt=4\relax%
- \xdef\@anim at fg{\@anim at colour\space K}%
- \xdef\@anim@@@fg{\@anim at colour\space k}%
- \fi%
- \fi%
- \fi%
- \fi%
-}
-\define at key{anim at user}{buttonalpha}{%button opacity
- \xdef\@anim at alpha{#1}%
-}
-\define at key{anim at user}{alttext}{%
- \ifthenelse{\equal{#1}{none}}{%
- \gdef\@anim at alttext{}%
- }{%
- \xdef\@anim at alttext{/Contents (#1)}%
- }%
-}
-
\newboolean{@anim at controls}
\newboolean{@anim at controls@play}
\newboolean{@anim at controls@step}
\newboolean{@anim at controls@stop}
\newboolean{@anim at controls@speed}
+\newboolean{@anim at ctrlleft}
+\newboolean{@anim at ctrlright}
+\newboolean{@anim at ctrlcentre}
+\newboolean{@anim at loop}
+\newboolean{@anim at autoplay}
+\newboolean{@anim at autoresume}
+\newboolean{@anim at autopause}
+\newboolean{@anim at palindrome}
+\newboolean{@anim at step}
+\newboolean{@anim at meas}
+\setboolean{@anim at nomouse}{false}
+\newboolean{@anim at draft}
+\def\@anim at mone{-1}\def\@anim at mtwo{-2}
\def\@anim at user@controls at all{%
\setboolean{@anim at controls}{true}%
\setboolean{@anim at controls@play}{true}%
@@ -3027,186 +2891,334 @@
\setboolean{@anim at controls@stop}{false}%
\setboolean{@anim at controls@speed}{false}%
}
-\define at key{anim at user}{controls}[all]{%
- \@anim at user@controls at none%
- \setkeys{anim at user@controls}{#1}%
-}
-\define at key{anim at user@controls}{all}[]{\@anim at user@controls at all}
-\define at key{anim at user@controls}{true}[]{\@anim at user@controls at all}
-\define at key{anim at user@controls}{on}[]{\@anim at user@controls at all}
-\define at key{anim at user@controls}{none}[]{\@anim at user@controls at none}
-\define at key{anim at user@controls}{false}[]{\@anim at user@controls at none}
-\define at key{anim at user@controls}{off}[]{\@anim at user@controls at none}
-\define at key{anim at user@controls}{play}[]{%
- \setboolean{@anim at controls}{true}%
- \setboolean{@anim at controls@play}{true}%
-}
-\define at key{anim at user@controls}{step}[]{%
- \setboolean{@anim at controls}{true}%
- \setboolean{@anim at controls@step}{true}%
-}
-\define at key{anim at user@controls}{stop}[]{%
- \setboolean{@anim at controls}{true}%
- \setboolean{@anim at controls@stop}{true}%
-}
-\define at key{anim at user@controls}{speed}[]{%
- \setboolean{@anim at controls}{true}%
- \setboolean{@anim at controls@speed}{true}%
-}
-
\def\@anim at parse@ctrlsalignarg#1#2#3+#4\@nil{%
\ifthenelse{\equal{#3}{}}{}{\def#1{#3}}%
\ifthenelse{\equal{#4}{}}{#2=\z@}{\@anim at getalignindent#2#4\@nil}%
}
\def\@anim at getalignindent#1#2+\@nil{#1=#2}
-
-\newboolean{@anim at ctrlleft}
-\newboolean{@anim at ctrlright}
-\newboolean{@anim at ctrlcentre}
-\define at key{anim at user}{controlsaligned}{%
- \@anim at parse@ctrlsalignarg\@anim at tmpvar\@anim at tmpdima#1+\@nil%
- \ifthenelse{\equal{\@anim at tmpvar}{left}}{%
- \setboolean{@anim at ctrlleft}{true}%
- \setboolean{@anim at ctrlright}{false}%
- \setboolean{@anim at ctrlcentre}{false}%
- \xdef\@anim at ctrlsindent{\the\@anim at tmpdima}%
- }{%
- \ifthenelse{\equal{\@anim at tmpvar}{right}}{%
- \setboolean{@anim at ctrlleft}{false}%
- \setboolean{@anim at ctrlright}{true}%
- \setboolean{@anim at ctrlcentre}{false}%
- \xdef\@anim at ctrlsindent{\the\@anim at tmpdima}%
- }{%
- \ifthenelse{\equal{\@anim at tmpvar}{center}}{%
- \setboolean{@anim at ctrlleft}{false}%
- \setboolean{@anim at ctrlright}{false}%
- \setboolean{@anim at ctrlcentre}{true}%
- \xdef\@anim at ctrlsindent{\z@}%
- }{}%
- }%
+% helper macro to get number of colour components
+\def\@anim at colours#1{\@anim@@colours#1:\@nil}
+\def\@anim@@colours#1:#2\@nil{% helper macro to get number of colour components
+ \xdef\@anim at colour{\@anim at colour\space #1}% and to replace : by ` ' in the arg
+ \ifthenelse{\equal{#2}{}}{}{%
+ \global\advance\@anim at tmpcnt by \@ne%
+ \@anim@@colours#2\@nil%
}%
}
-\newboolean{@anim at loop}
-\define at key{anim at user}{loop}[true]{%
- \setboolean{@anim at loop}{#1}%
+\ExplSyntaxOn
+\DeclareKeys[anim at user]{
+ label.code:n = {
+ \gdef\@anim at label{#1}
+ \ifcsname @anim@#1\endcsname
+ \PackageWarning{animate}{Label~#1~multiply~defined}
+ \ifdefined\@anim at multlabel\else
+ \gdef\@anim at multlabel{}
+ \AtEndDocument{
+ \PackageWarningNoLine{animate}{
+ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@\MessageBreak
+ @~There~are~multiply-defined~labels!~@\MessageBreak
+ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@}
+ }
+ \fi
+ \fi
+ \expandafter\gdef\csname @anim@#1\endcsname{}
+ },
+ label.value_required:n = true,
+
+ width.code:n = {
+ \gdef\@anim at widtharg{#1}
+ \ifdefined\@anim at usrwd\else
+ \global\advance\@anim at resizeflags by 4
+ \def\@anim at usrwd{}
+ \fi
+ },
+ width.value_required:n = true,
+
+ height.code:n = {
+ \gdef\@anim at heightarg{#1}
+ \ifdefined\@anim at usrht\else
+ \global\advance\@anim at resizeflags by 2
+ \def\@anim at usrht{}
+ \fi
+ },
+ height.value_required:n = true,
+
+ totalheight.code:n = {
+ \gdef\@anim at totheightarg{#1}
+ \ifdefined\@anim at usrtht\else
+ \global\advance\@anim at resizeflags by \@ne
+ \def\@anim at usrtht{}
+ \fi
+ },
+ totalheight.value_required:n = true,
+
+ keepaspectratio.legacy_if_gset:n = @anim at iso,
+ keepaspectratio.default:n = true,
+
+ bb.code:n = {\xdef\@anim at bb{bb=#1}},
+ bb.value_required:n = true,
+
+ viewport.code:n = {\xdef\@anim at viewport{viewport=#1}},
+ viewport.value_required:n = true,
+
+ trim.code:n = {\xdef\@anim at trim{trim=#1}},
+ trim.value_required:n = true,
+
+ angle.code:n = {\xdef\@anim at angle{angle=#1}},
+ angle.value_required:n = true,
+
+ pagebox.code:n = {\xdef\@anim at pagebox{pagebox=#1}},
+ pagebox.value_required:n = true,
+
+ clip.code:n = {}, % no-op, as embedded graphics are always
+ clip.default:n = true, % clipped to widget box
+
+ hiresbb.legacy_if_gset:n = @anim at hiresbb,
+ hiresbb.default:n = true,
+
+ interpolate.legacy_if_gset:n = @anim at interpolate,
+ interpolate.default:n = true,
+
+ scale.tl_gset_x:N = \@anim at boxscale,
+ scale.value_required:n = true,
+
+ buttonsize.tl_gset:N = \@anim at btnsize,
+ buttonsize.value_required:n = true,
+
+ buttonbg.code:n = {
+ \global\@anim at tmpcnt=\@ne
+ \gdef\@anim at colour{}
+ \@anim at colours{#1}
+ \global\let\@anim at bgcolour\@anim at colour
+ \ifnum\if at anim@dvips 1\else\if at anim@dvisvgm 1\else0\fi\fi=1
+ \ifnum\@anim at tmpcnt=\@ne\relax
+ \xdef\@anim at bg{\@anim at colour\space setgray}
+ \else
+ \ifnum\@anim at tmpcnt=3\relax
+ \xdef\@anim at bg{\@anim at colour\space setrgbcolor}
+ \else
+ \ifnum\@anim at tmpcnt=4\relax
+ \xdef\@anim at bg{\@anim at colour\space setcmykcolor}
+ \fi
+ \fi
+ \fi
+ \else% pdftex and dvipdfmx
+ \ifnum\@anim at tmpcnt=\@ne\relax
+ \xdef\@anim at bg{\@anim at colour\space g}
+ \else
+ \ifnum\@anim at tmpcnt=3\relax
+ \xdef\@anim at bg{\@anim at colour\space rg}
+ \else
+ \ifnum\@anim at tmpcnt=4\relax
+ \xdef\@anim at bg{\@anim at colour\space k}
+ \fi
+ \fi
+ \fi
+ \fi
+ },
+ buttonbg.value_required:n = true,
+
+ buttonfg.code:n = {
+ \global\@anim at tmpcnt=\@ne
+ \gdef\@anim at colour{}
+ \@anim at colours{#1}
+ \global\let\@anim at fgcolour\@anim at colour
+ \ifnum\if at anim@dvips 1\else\if at anim@dvisvgm 1\else0\fi\fi=1
+ \ifnum\@anim at tmpcnt=\@ne\relax
+ \xdef\@anim at fg{\@anim at colour\space setgray}
+ \else
+ \ifnum\@anim at tmpcnt=3\relax
+ \xdef\@anim at fg{\@anim at colour\space setrgbcolor}
+ \else
+ \ifnum\@anim at tmpcnt=4\relax
+ \xdef\@anim at fg{\@anim at colour\space setcmykcolor}
+ \fi
+ \fi
+ \fi
+ \else% pdftex and dvipdfmx
+ \ifnum\@anim at tmpcnt=\@ne\relax
+ \xdef\@anim at fg{\@anim at colour\space G}
+ \xdef\@anim@@@fg{\@anim at colour\space g}
+ \else
+ \ifnum\@anim at tmpcnt=3\relax
+ \xdef\@anim at fg{\@anim at colour\space RG}
+ \xdef\@anim@@@fg{\@anim at colour\space rg}
+ \else
+ \ifnum\@anim at tmpcnt=4\relax
+ \xdef\@anim at fg{\@anim at colour\space K}
+ \xdef\@anim@@@fg{\@anim at colour\space k}
+ \fi
+ \fi
+ \fi
+ \fi
+ },
+ buttonfg.value_required:n = true,
+
+ buttonalpha.tl_gset_x:N = \@anim at alpha,
+ buttonalpha.value_required:n = true,
+
+ alttext.code:n = {
+ \ifthenelse{\equal{#1}{none}}{
+ \gdef\@anim at alttext{}
+ }{
+ \xdef\@anim at alttext{/Contents~(#1)}
+ }
+ },
+ alttext.value_required:n = true,
+
+ controls.multichoice:,
+ controls / all.code:n = {\@anim at user@controls at all},
+ controls / true.code:n = {\@anim at user@controls at all},
+ controls / on.code:n = {\@anim at user@controls at all},
+ controls / none.code:n = {\@anim at user@controls at none},
+ controls / false.code:n = {\@anim at user@controls at none},
+ controls / off.code:n = {\@anim at user@controls at none},
+ controls / play.code:n = {
+ \setboolean{@anim at controls}{true}
+ \setboolean{@anim at controls@play}{true}
+ },
+ controls / step.code:n = {
+ \setboolean{@anim at controls}{true}
+ \setboolean{@anim at controls@step}{true}
+ },
+ controls / stop.code:n = {
+ \setboolean{@anim at controls}{true}
+ \setboolean{@anim at controls@stop}{true}
+ },
+ controls / speed.code:n = {
+ \setboolean{@anim at controls}{true}
+ \setboolean{@anim at controls@speed}{true}
+ },
+ controls.default:n = all,
+
+ controlsaligned.code:n = {
+ \@anim at parse@ctrlsalignarg\@anim at tmpvar\@anim at tmpdima#1+\@nil
+ \ifthenelse{\equal{\@anim at tmpvar}{left}}{
+ \setboolean{@anim at ctrlleft}{true}
+ \setboolean{@anim at ctrlright}{false}
+ \setboolean{@anim at ctrlcentre}{false}
+ \xdef\@anim at ctrlsindent{\the\@anim at tmpdima}
+ }{
+ \ifthenelse{\equal{\@anim at tmpvar}{right}}{
+ \setboolean{@anim at ctrlleft}{false}
+ \setboolean{@anim at ctrlright}{true}
+ \setboolean{@anim at ctrlcentre}{false}
+ \xdef\@anim at ctrlsindent{\the\@anim at tmpdima}
+ }{
+ \ifthenelse{\equal{\@anim at tmpvar}{center}}{
+ \setboolean{@anim at ctrlleft}{false}
+ \setboolean{@anim at ctrlright}{false}
+ \setboolean{@anim at ctrlcentre}{true}
+ \xdef\@anim at ctrlsindent{\z@}
+ }{}
+ }
+ }
+ },
+ controlsaligned.value_required:n = true,
+
+ loop.legacy_if_gset:n = @anim at loop,
+ loop.default:n = true,
+
+ autoplay.code:n = {
+ \setboolean{@anim at autoplay}{#1}
+ \if at anim@autoplay\setboolean{@anim at autoresume}{false}\fi
+ },
+ autoplay.default:n = true,
+
+ autoresume.code:n = {
+ \setboolean{@anim at autoresume}{#1}
+ \if at anim@autoresume\setboolean{@anim at autoplay}{false}\fi
+ },
+ autoresume.default:n = true,
+
+ autopause.legacy_if_gset:n = @anim at autopause,
+ autopause.default:n = true,
+
+ palindrome.legacy_if_gset:n = @anim at palindrome,
+ palindrome.default:n = true,
+
+ poster.choice:, % <num> | first | last | none
+ poster / first.code:n = {\gdef\@anim at poster{0}},
+ poster / last.code:n = {\gdef\@anim at poster{-1}},
+ poster / none.code:n = {\gdef\@anim at poster{-2}},
+ poster / unknown.code:n = {% frame <num>
+ \ifnum#1<\z@\relax
+ \PackageError{animate}{
+ Poster~frame~`#1'~is~out-of-bounds~on\MessageBreak
+ input~line~\the\inputlineno.\MessageBreak
+ Try~one~of~`poster=first'~or~`poster=none'
+ }{}
+ \fi
+ \gdef\@anim at poster{#1}
+ },
+ poster.default:n = first,
+
+ step.legacy_if_gset:n = @anim at step,
+ step.default:n = true,
+
+ draft.legacy_if_gset:n = @anim at draft,
+ draft.default:n = true,
+
+ final.code:n = {
+ \ifthenelse{\equal{#1}{true}}{
+ \setboolean{@anim at draft}{false}
+ }{
+ \setboolean{@anim at draft}{true}
+ }
+ },
+ final.default:n = true,
+
+ nomouse.legacy_if_gset:n = @anim at nomouse,
+ nomouse.default:n = true,
+
+ timeline.code:n = {
+ \IfFileExists{#1}{
+ \xdef\@anim at tmlnfile{\expandafter\zap at finalspace\@filef at und\@nil}
+ \setboolean{@anim at timeline}{true}
+ }{
+ \PackageError{animate}{timeline~file~`#1'~cannot~be~opened~for~reading
+ }{
+ Make~sure~file~`#1'~exists~and~is~readable!
+ }
+ }
+ },
+ timeline.value_required:n = true,
+
+ begin.tl_gset:N = \@anim at begin,
+ begin.value_required:n = true,
+
+ end.tl_gset:N = \@anim at end,
+ end.value_required:n = true,
+
+ every.code:n = {
+ \ifnum#1<\@ne\relax\gdef\@anim at every{1}\else\gdef\@anim at every{#1}\fi
+ },
+ every.value_required:n = true,
+
+ measure.legacy_if_gset:n = @anim at meas,
+ measure.default:n = true,
+
+ method.choices:nn = {icon,widget,ocg} {
+ \ifthenelse{\equal{#1}{icon}}{
+ \def\@anim at method{\z@}
+ }{
+ \ifthenelse{\equal{#1}{widget}}{
+ \def\@anim at method{\@ne}
+ }{
+ \ifthenelse{\equal{#1}{ocg}}{
+ \def\@anim at method{\tw@}
+ }{}
+ }
+ }
+ },
+ method.value_required:n = true,
+
+ type.tl_gset_x:N = \@anim at ftype,
+ type.value_required:n = true,
}
-\newboolean{@anim at autoplay}
-\define at key{anim at user}{autoplay}[true]{%
- \setboolean{@anim at autoplay}{#1}%
- \if at anim@autoplay%
- \setboolean{@anim at autoresume}{false}%
- \fi%
-}
-\newboolean{@anim at autoresume}
-\define at key{anim at user}{autoresume}[true]{%
- \setboolean{@anim at autoresume}{#1}%
- \if at anim@autoresume%
- \setboolean{@anim at autoplay}{false}%
- \fi%
-}
-\newboolean{@anim at autopause}
-\define at key{anim at user}{autopause}[true]{%
- \setboolean{@anim at autopause}{#1}%
-}
-\newboolean{@anim at palindrome}
-\define at key{anim at user}{palindrome}[true]{%
- \setboolean{@anim at palindrome}{#1}%
-}
-\def\@anim at mone{-1}\def\@anim at mtwo{-2}
-\define at key{anim at user}{poster}[first]{% <num> | first | last | none
- \ifthenelse{%
- \equal{#1}{first}%
- }{%
- \gdef\@anim at poster{0}%
- }{%
- \ifthenelse{%
- \equal{#1}{last}%
- }{%
- \gdef\@anim at poster{-1}%
- }{%
- \ifthenelse{%
- \equal{#1}{none}%
- }{%
- \gdef\@anim at poster{-2}%
- }{%
- \ifnum#1<\z@\relax%
- \PackageError{animate}{%
- Poster frame `#1' is out-of-bounds on\MessageBreak%
- input line \the\inputlineno.\MessageBreak%
- Try one of `poster=first' or `poster=none'%
- }{}%
- \fi%
- \gdef\@anim at poster{#1}%
- }%
- }%
- }%
-}
-\newboolean{@anim at step}
-\define at key{anim at user}{step}[true]{%
- \setboolean{@anim at step}{#1}%
-}
-\newboolean{@anim at draft}
-\define at key{anim at user}{draft}[true]{%
- \setboolean{@anim at draft}{#1}%
-}
-\define at key{anim at user}{final}[true]{%
- \ifthenelse{\equal{#1}{true}}{%
- \setboolean{@anim at draft}{false}%
- }{%
- \setboolean{@anim at draft}{true}%
- }%
-}
-\setboolean{@anim at nomouse}{false}
-\define at key{anim at user}{nomouse}[true]{%
- \setboolean{@anim at nomouse}{#1}%
-}
-\define at key{anim at user}{timeline}{%
- \IfFileExists{#1}{%
- \xdef\@anim at tmlnfile{\expandafter\zap at finalspace\@filef at und\@nil}%
- \setboolean{@anim at timeline}{true}%
- }{%
- \PackageError{animate}{timeline file `#1' cannot be opened for reading%
- }{%
- Make sure file `#1' exists and is readable!%
- }%
- }%
-}
-\define at key{anim at user}{begin}{%
- \gdef\@anim at begin{#1}%
-}
-\define at key{anim at user}{end}{%
- \gdef\@anim at end{#1}%
-}
-\define at key{anim at user}{every}{% embed every #1th frame
- \ifnum#1<\@ne\relax\gdef\@anim at every{1}\else\gdef\@anim at every{#1}\fi%
-}
-\newboolean{@anim at meas}
-\define at key{anim at user}{measure}[true]{%
- \setboolean{@anim at meas}{#1}%
-}
-\define at key{anim at user}{method}{%
- \ifthenelse{\equal{#1}{icon}}{%
- \def\@anim at method{\z@}%
- }{%
- \ifthenelse{\equal{#1}{widget}}{%
- \def\@anim at method{\@ne}%
- }{%
- \ifthenelse{\equal{#1}{ocg}}{%
- \def\@anim at method{\tw@}%
- }{}%
- }%
- }%
-}
-\define at key{anim at user}{useocg}[]{%
- \PackageError{animate}{%
- Option `useocg' has been removed.\MessageBreak%
- Use `method=ocg' instead%
- }{}%
-}
+\ExplSyntaxOff
-\define at key{anim at user}{type}{\gdef\@anim at ftype{#1}}%
-
%macro to reset macros and booleans
\def\@anim at reset{%
\gdef\@anim at label{}%
@@ -3274,197 +3286,25 @@
}
%package options
-\define at key{anim at pkg}{dvips}[]{%
- \ifthenelse{\equal{#1}{}}{}{%
- \PackageError{animate}{%
- Package option `dvips' does not accept arguments%
- }{}%
- }%
-}%
-\define at key{anim at pkg}{dvipdfmx}[]{
- \ifthenelse{\equal{#1}{}}{}{%
- \PackageError{animate}{%
- Package option `dvipdfmx' does not accept arguments%
- }{}%
- }%
-}%
-\define at key{anim at pkg}{dvisvgm}[]{
- \ifthenelse{\equal{#1}{}}{}{%
- \PackageError{animate}{%
- Package option `dvisvgm' does not accept arguments%
- }{}%
- }%
-}%
-\define at key{anim at pkg}{xetex}[]{
- \ifthenelse{\equal{#1}{}}{}{%
- \PackageError{animate}{%
- Package option `xetex' does not accept arguments%
- }{}%
- }%
-}%
-\define at key{anim at pkg}{export}[]{
- \ifthenelse{\equal{#1}{}}{}{%
- \PackageError{animate}{%
- Package option `export' does not accept arguments%
- }{}%
- }%
-}%
-\def\@anim@@bg{}
-\def\@anim@@bgcolour{}
-\define at key{anim at pkg}{buttonbg}{%background colour of buttons
- \global\@anim at tmpcnt=\@ne%
- \gdef\@anim at colour{}%
- \@anim at colours#1:\@nil%
- \global\let\@anim@@bgcolour\@anim at colour%
- \ifnum\if at anim@dvips 1\else\if at anim@dvisvgm 1\else0\fi\fi=1%
- \ifnum\@anim at tmpcnt=\@ne\relax%
- \xdef\@anim@@bg{\@anim at colour\space setgray}%
- \else%
- \ifnum\@anim at tmpcnt=3\relax%
- \xdef\@anim@@bg{\@anim at colour\space setrgbcolor}%
- \else%
- \ifnum\@anim at tmpcnt=4\relax%
- \xdef\@anim@@bg{\@anim at colour\space setcmykcolor}%
- \fi%
- \fi%
- \fi%
- \else% pdftex and dvipdfmx
- \ifnum\@anim at tmpcnt=\@ne\relax%
- \xdef\@anim@@bg{\@anim at colour\space g}%
- \else%
- \ifnum\@anim at tmpcnt=3\relax%
- \xdef\@anim@@bg{\@anim at colour\space rg}%
- \else%
- \ifnum\@anim at tmpcnt=4\relax%
- \xdef\@anim@@bg{\@anim at colour\space k}%
- \fi%
- \fi%
- \fi%
- \fi%
-}
-
-\ifnum\if at anim@dvips 1\else\if at anim@dvisvgm 1\else0\fi\fi=1
- %dvips .OR. dvisvgm
- \def\@anim@@fg{0 setgray}\def\@anim@@@@fg{}
-\else% pdftex and dvipdfmx
- \def\@anim@@fg{0 G}\def\@anim@@@@fg{0 g}
-\fi
-\def\@anim@@fgcolour{}
-\define at key{anim at pkg}{buttonfg}{%stroking colour of buttons
- \global\@anim at tmpcnt=\@ne%
- \gdef\@anim at colour{}%
- \@anim at colours#1:\@nil%
- \global\let\@anim@@fgcolour\@anim at colour%
- \ifnum\if at anim@dvips 1\else\if at anim@dvisvgm 1\else0\fi\fi=1%
- \ifnum\@anim at tmpcnt=\@ne\relax%
- \xdef\@anim@@fg{\@anim at colour\space setgray}%
- \else%
- \ifnum\@anim at tmpcnt=3\relax%
- \xdef\@anim@@fg{\@anim at colour\space setrgbcolor}%
- \else%
- \ifnum\@anim at tmpcnt=4\relax%
- \xdef\@anim@@fg{\@anim at colour\space setcmykcolor}%
- \fi%
- \fi%
- \fi%
- \else% pdftex and dvipdfmx
- \ifnum\@anim at tmpcnt=\@ne\relax%
- \xdef\@anim@@fg{\@anim at colour\space G}%
- \xdef\@anim@@@@fg{\@anim at colour\space g}%
- \else%
- \ifnum\@anim at tmpcnt=3\relax%
- \xdef\@anim@@fg{\@anim at colour\space RG}%
- \xdef\@anim@@@@fg{\@anim at colour\space rg}%
- \else%
- \ifnum\@anim at tmpcnt=4\relax%
- \xdef\@anim@@fg{\@anim at colour\space K}%
- \xdef\@anim@@@@fg{\@anim at colour\space k}%
- \fi%
- \fi%
- \fi%
- \fi%
-}
-\def\@anim@@alpha{}
-\define at key{anim at pkg}{buttonalpha}{%button opacity
- \xdef\@anim@@alpha{#1}%
-}
\newcount\@anim@@resizeflags
-\def\@anim@@widtharg{\width}%
-\define at key{anim at pkg}{width}{%
- \def\@anim@@widtharg{#1}%
- \ifdefined\@anim at pkgwd\else%
- \advance\@anim@@resizeflags by 4%
- \def\@anim at pkgwd{}%
- \fi%
-}
-\def\@anim@@heightarg{\height}%
-\define at key{anim at pkg}{height}{%
- \def\@anim@@heightarg{#1}%
- \ifdefined\@anim at pkght\else%
- \advance\@anim@@resizeflags by 2%
- \def\@anim at pkght{}%
- \fi%
-}
-\def\@anim@@totheightarg{\totalheight}%
-\define at key{anim at pkg}{totalheight}{%
- \def\@anim@@totheightarg{#1}%
- \ifdefined\@anim at pkgtht\else%
- \advance\@anim@@resizeflags by \@ne%
- \def\@anim at pkgtht{}%
- \fi%
-}
+\def\@anim@@widtharg{\width}
+\def\@anim@@heightarg{\height}
+\def\@anim@@totheightarg{\totalheight}
\newboolean{@anim@@iso}
-\define at key{anim at pkg}{keepaspectratio}[true]{%
- \setboolean{@anim@@iso}{#1}%
-}
\def\@anim@@bb{}
-\define at key{anim at pkg}{bb}{%
- \xdef\@anim at bb{bb=#1}%
-}
\def\@anim@@viewport{}
-\define at key{anim at pkg}{viewport}{%
- \xdef\@anim@@viewport{viewport=#1}%
-}
\def\@anim@@trim{}
-\define at key{anim at pkg}{trim}{%
- \xdef\@anim@@trim{trim=#1}%
-}
\def\@anim@@angle{}
-\define at key{anim at pkg}{angle}{%
- \xdef\@anim@@angle{angle=#1}%
-}
-\define at key{anim at pkg}{clip}[true]{%
- %no-op, as embedded graphics are always clipped to widget box
-}
+\def\@anim@@pagebox{}
\newboolean{@anim@@hiresbb}
-\define at key{anim at pkg}{hiresbb}[true]{%
- \setboolean{@anim@@hiresbb}{#1}%
-}
\newboolean{@anim@@interpolate}
-\define at key{anim at pkg}{interpolate}[true]{%
- \setboolean{@anim@@interpolate}{#1}%
-}
-\def\@anim@@pagebox{}
-\define at key{anim at pkg}{pagebox}{%
- \xdef\@anim@@pagebox{pagebox=#1}%
-}
-\def\@anim@@boxscale{1}%
-\define at key{anim at pkg}{scale}{%
- \def\@anim@@boxscale{#1}%
-}
-\def\@anim@@btnsize{1.44em}%
-\define at key{anim at pkg}{buttonsize}{%
- \gdef\@anim@@btnsize{#1}%
-}
+\def\@anim@@boxscale{1}
+\def\@anim@@btnsize{1.44em}
+\def\@anim@@bg{}
+\def\@anim@@bgcolour{}
+\def\@anim@@fgcolour{}
+\def\@anim@@alpha{}
\edef\@anim@@alttext{/Contents (animation by animate, v. \@anim at version)}
-\define at key{anim at pkg}{alttext}{%
- \ifthenelse{\equal{#1}{none}}{%
- \gdef\@anim@@alttext{}%
- }{%
- \xdef\@anim@@alttext{/Contents (#1)}%
- }%
-}
-
\newboolean{@anim@@controls}
\newboolean{@anim@@controls at play}
\newboolean{@anim@@controls at step}
@@ -3484,170 +3324,301 @@
\setboolean{@anim@@controls at stop}{false}%
\setboolean{@anim@@controls at speed}{false}%
}
-\define at key{anim at pkg}{controls}[all]{%
- \@anim at pkg@controls at none%
- \setkeys{anim at pkg@controls}{#1}%
-}
-\define at key{anim at pkg@controls}{all}[]{\@anim at pkg@controls at all}
-\define at key{anim at pkg@controls}{true}[]{\@anim at pkg@controls at all}
-\define at key{anim at pkg@controls}{on}[]{\@anim at pkg@controls at all}
-\define at key{anim at pkg@controls}{none}[]{\@anim at pkg@controls at none}
-\define at key{anim at pkg@controls}{false}[]{\@anim at pkg@controls at none}
-\define at key{anim at pkg@controls}{off}[]{\@anim at pkg@controls at none}
-\define at key{anim at pkg@controls}{play}[]{%
- \setboolean{@anim@@controls}{true}%
- \setboolean{@anim@@controls at play}{true}%
-}
-\define at key{anim at pkg@controls}{step}[]{%
- \setboolean{@anim@@controls}{true}%
- \setboolean{@anim@@controls at step}{true}%
-}
-\define at key{anim at pkg@controls}{stop}[]{%
- \setboolean{@anim@@controls}{true}%
- \setboolean{@anim@@controls at stop}{true}%
-}
-\define at key{anim at pkg@controls}{speed}[]{%
- \setboolean{@anim@@controls}{true}%
- \setboolean{@anim@@controls at speed}{true}%
-}
-
\newboolean{@anim@@ctrlleft}
\newboolean{@anim@@ctrlright}
\newboolean{@anim@@ctrlcentre}
\setboolean{@anim@@ctrlcentre}{true}
\def\@anim@@ctrlsindent{\z@}
-\define at key{anim at pkg}{controlsaligned}{%
- \@anim at parse@ctrlsalignarg\@anim at tmpvar\@anim at tmpdima#1+\@nil%
- \setboolean{@anim@@ctrlcentre}{false}%
- \ifthenelse{\equal{\@anim at tmpvar}{left}}{%
- \setboolean{@anim@@ctrlleft}{true}%
- \edef\@anim@@ctrlsindent{\the\@anim at tmpdima}%
- }{%
- \ifthenelse{\equal{\@anim at tmpvar}{right}}{%
- \setboolean{@anim@@ctrlright}{true}%
- \edef\@anim@@ctrlsindent{\the\@anim at tmpdima}%
- }{\setboolean{@anim@@ctrlcentre}{true}}%
- }%
-}
-
\newboolean{@anim@@loop}
-\setboolean{@anim@@loop}{false}%
-\define at key{anim at pkg}{loop}[true]{%
- \setboolean{@anim@@loop}{#1}%
-}
\newboolean{@anim@@autoplay}
-\setboolean{@anim@@autoplay}{false}
-\define at key{anim at pkg}{autoplay}[true]{%
- \setboolean{@anim@@autoplay}{#1}%
- \if at anim@@autoplay\setboolean{@anim@@autoresume}{false}\fi%
-}
\newboolean{@anim@@autoresume}
-\setboolean{@anim@@autoresume}{false}
-\define at key{anim at pkg}{autoresume}[true]{%
- \setboolean{@anim@@autoresume}{#1}%
- \if at anim@@autoresume\setboolean{@anim@@autoplay}{false}\fi%
-}
\newboolean{@anim@@autopause}
-\setboolean{@anim@@autopause}{false}
-\define at key{anim at pkg}{autopause}[true]{%
- \setboolean{@anim@@autopause}{#1}%
-}
\newboolean{@anim@@palindrome}
-\setboolean{@anim@@palindrome}{false}
-\define at key{anim at pkg}{palindrome}[true]{%
- \setboolean{@anim@@palindrome}{#1}%
-}
\gdef\@anim@@poster{0}%
-\define at key{anim at pkg}{poster}[first]{%
- \ifthenelse{%
- \equal{#1}{first}%
- }{%
- \gdef\@anim@@poster{0}%
- }{%
- \ifthenelse{%
- \equal{#1}{last}%
- }{%
- \gdef\@anim@@poster{-1}%
- }{%
- \ifthenelse{%
- \equal{#1}{none}%
- }{%
- \gdef\@anim@@poster{-2}%
- }{%
- \ifnum#1<\z@\relax%
- \PackageError{animate}{%
- Poster frame `#1' is out-of-bounds on\MessageBreak%
- input line \the\inputlineno.\MessageBreak%
- Try one of `poster=first' or `poster=none'%
- }{}%
- \fi%
- \gdef\@anim@@poster{#1}%
- }%
- }%
- }%
-}
\newboolean{@anim@@step}
-\setboolean{@anim@@step}{false}
-\define at key{anim at pkg}{step}[true]{%
- \setboolean{@anim@@step}{#1}%
-}
\newboolean{@anim@@draft}
\ifdraft{%globally set by document class
\setboolean{@anim@@draft}{true}%
}{%
\setboolean{@anim@@draft}{false}%
-}%
-\define at key{anim at pkg}{draft}[true]{%
- \setboolean{@anim@@draft}{#1}%
- \if at anim@export%
- \setboolean{@anim@@draft}{false}%
- \fi%
}
-\define at key{anim at pkg}{final}[true]{%
- \ifthenelse{\equal{#1}{true}}{%
- \setboolean{@anim@@draft}{false}%
- }{%
- \setboolean{@anim@@draft}{true}%
- }%
-}
\newboolean{@anim@@nomouse}
-\setboolean{@anim@@nomouse}{false}
-\define at key{anim at pkg}{nomouse}[true]{%
- \setboolean{@anim@@nomouse}{#1}%
-}
+\def\@anim@@method{\z@}%default animation method is `icon'
+\def\@anim@@ftype{}% file type (extension) of graphics
-%file type (extension) of graphics files to be embedded
-\def\@anim@@ftype{}%
-\define at key{anim at pkg}{type}{\def\@anim@@ftype{#1}}%
+\ExplSyntaxOn
+\DeclareKeys[anim at pkg]{
+ width.code:n = {
+ \gdef\@anim@@widtharg{#1}
+ \ifdefined\@anim at pkgwd\else
+ \advance\@anim@@resizeflags by 4
+ \def\@anim at pkgwd{}%
+ \fi%
+ },
+ width.value_required:n = true,
-% animation method: icon vs. widget vs. ocg based
-\define at key{anim at pkg}{method}{%
- \ifthenelse{\equal{#1}{icon}}{%
- \def\@anim@@method{\z@}%
- }{%
- \ifthenelse{\equal{#1}{widget}}{%
- \def\@anim@@method{\@ne}%
+ height.code:n = {
+ \gdef\@anim@@heightarg{#1}
+ \ifdefined\@anim at pkght\else
+ \advance\@anim@@resizeflags by 2
+ \def\@anim at pkght{}
+ \fi
+ },
+ height.value_required:n = true,
+
+ totalheight.code:n = {
+ \gdef\@anim@@totheightarg{#1}
+ \ifdefined\@anim at pkgtht\else
+ \advance\@anim@@resizeflags by \@ne
+ \def\@anim at pkgtht{}
+ \fi
+ },
+ totalheight.value_required:n = true,
+
+ keepaspectratio.legacy_if_gset:n = @anim@@iso,
+ keepaspectratio.default:n = true,
+
+ bb.code:n = {\xdef\@anim@@bb{bb=#1}},
+ bb.value_required:n = true,
+
+ viewport.code:n = {\xdef\@anim@@viewport{viewport=#1}},
+ viewport.value_required:n = true,
+
+ trim.code:n = {\xdef\@anim@@trim{trim=#1}},
+ trim.value_required:n = true,
+
+ angle.code:n = {\xdef\@anim@@angle{angle=#1}},
+ angle.value_required:n = true,
+
+ pagebox.code:n = {\xdef\@anim@@pagebox{pagebox=#1}},
+ pagebox.value_required:n = true,
+
+ clip.code:n = {}, % no-op, as embedded graphics are always
+ clip.default:n = true, % clipped to widget box
+
+ hiresbb.legacy_if_gset:n = @anim@@hiresbb,
+ hiresbb.default:n = true,
+
+ interpolate.legacy_if_gset:n = @anim@@interpolate,
+ interpolate.default:n = true,
+
+ scale.tl_gset_x:N = \@anim@@boxscale,
+ scale.value_required:n = true,
+
+ buttonsize.tl_gset:N = \@anim@@btnsize,
+ buttonsize.value_required:n = true,
+
+ buttonbg.code:n = {
+ \global\@anim at tmpcnt=\@ne
+ \gdef\@anim at colour{}
+ \@anim at colours{#1}
+ \global\let\@anim@@bgcolour\@anim at colour
+ \ifnum\if at anim@dvips 1\else\if at anim@dvisvgm 1\else0\fi\fi=1
+ \ifnum\@anim at tmpcnt=\@ne\relax
+ \xdef\@anim@@bg{\@anim at colour\space setgray}
+ \else
+ \ifnum\@anim at tmpcnt=3\relax
+ \xdef\@anim@@bg{\@anim at colour\space setrgbcolor}
+ \else
+ \ifnum\@anim at tmpcnt=4\relax
+ \xdef\@anim@@bg{\@anim at colour\space setcmykcolor}
+ \fi
+ \fi
+ \fi
+ \else% pdftex and dvipdfmx
+ \ifnum\@anim at tmpcnt=\@ne\relax
+ \xdef\@anim@@bg{\@anim at colour\space g}
+ \else
+ \ifnum\@anim at tmpcnt=3\relax
+ \xdef\@anim@@bg{\@anim at colour\space rg}
+ \else
+ \ifnum\@anim at tmpcnt=4\relax
+ \xdef\@anim@@bg{\@anim at colour\space k}
+ \fi
+ \fi
+ \fi
+ \fi
+ },
+ buttonbg.value_required:n = true,
+
+ buttonfg.code:n = {
+ \global\@anim at tmpcnt=\@ne
+ \gdef\@anim at colour{}
+ \@anim@@colours#1:\@nil
+ \global\let\@anim@@fgcolour\@anim at colour
+ \ifnum\if at anim@dvips 1\else\if at anim@dvisvgm 1\else0\fi\fi=1
+ \ifnum\@anim at tmpcnt=\@ne\relax
+ \xdef\@anim@@fg{\@anim at colour\space setgray}
+ \else
+ \ifnum\@anim at tmpcnt=3\relax
+ \xdef\@anim@@fg{\@anim at colour\space setrgbcolor}
+ \else
+ \ifnum\@anim at tmpcnt=4\relax
+ \xdef\@anim@@fg{\@anim at colour\space setcmykcolor}
+ \fi
+ \fi
+ \fi
+ \else% pdftex and dvipdfmx
+ \ifnum\@anim at tmpcnt=\@ne\relax
+ \xdef\@anim@@fg{\@anim at colour\space G}
+ \xdef\@anim@@@@fg{\@anim at colour\space g}
+ \else
+ \ifnum\@anim at tmpcnt=3\relax
+ \xdef\@anim@@fg{\@anim at colour\space RG}
+ \xdef\@anim@@@@fg{\@anim at colour\space rg}
+ \else
+ \ifnum\@anim at tmpcnt=4\relax
+ \xdef\@anim@@fg{\@anim at colour\space K}
+ \xdef\@anim@@@@fg{\@anim at colour\space k}
+ \fi
+ \fi
+ \fi
+ \fi
+ },
+ buttonfg.value_required:n = true,
+
+ buttonalpha.tl_gset_x:N = \@anim@@alpha,
+ buttonalpha.value_required:n = true,
+
+ alttext.code:n = {
+ \ifthenelse{\equal{#1}{none}}{
+ \gdef\@anim@@alttext{}
+ }{
+ \xdef\@anim@@alttext{/Contents~(#1)}
+ }
+ },
+ alttext.value_required:n = true,
+
+ controls.multichoice:,
+ controls / all.code:n = {\@anim at pkg@controls at all},
+ controls / true.code:n = {\@anim at pkg@controls at all},
+ controls / on.code:n = {\@anim at pkg@controls at all},
+ controls / none.code:n = {\@anim at pkg@controls at none},
+ controls / false.code:n = {\@anim at pkg@controls at none},
+ controls / off.code:n = {\@anim at pkg@controls at none},
+ controls / play.code:n = {
+ \setboolean{@anim@@controls}{true}
+ \setboolean{@anim@@controls at play}{true}
+ },
+ controls / step.code:n = {
+ \setboolean{@anim@@controls}{true}
+ \setboolean{@anim@@controls at step}{true}
+ },
+ controls / stop.code:n = {
+ \setboolean{@anim@@controls}{true}
+ \setboolean{@anim@@controls at stop}{true}
+ },
+ controls / speed.code:n = {
+ \setboolean{@anim@@controls}{true}
+ \setboolean{@anim@@controls at speed}{true}
+ },
+ controls.default:n = all,
+
+ controlsaligned.code:n = {
+ \@anim at parse@ctrlsalignarg\@anim at tmpvar\@anim at tmpdima#1+\@nil
+ \setboolean{@anim@@ctrlcentre}{false}
+ \ifthenelse{\equal{\@anim at tmpvar}{left}}{
+ \setboolean{@anim@@ctrlleft}{true}
+ \edef\@anim@@ctrlsindent{\the\@anim at tmpdima}
+ }{
+ \ifthenelse{\equal{\@anim at tmpvar}{right}}{
+ \setboolean{@anim@@ctrlright}{true}
+ \edef\@anim@@ctrlsindent{\the\@anim at tmpdima}
+ }{
+ \setboolean{@anim@@ctrlcentre}{true}
+ \xdef\@anim@@ctrlsindent{\z@}
+ }
+ }
+ },
+ controlsaligned.value_required:n = true,
+
+ loop.legacy_if_gset:n = @anim@@loop,
+ loop.default:n = true,
+
+ autoplay.code:n = {
+ \setboolean{@anim@@autoplay}{#1}
+ \if at anim@@autoplay\setboolean{@anim@@autoresume}{false}\fi
+ },
+ autoplay.default:n = true,
+
+ autoresume.code:n = {
+ \setboolean{@anim@@autoresume}{#1}
+ \if at anim@@autoresume\setboolean{@anim@@autoplay}{false}\fi
+ },
+ autoresume.default:n = true,
+
+ autopause.legacy_if_gset:n = @anim@@autopause,
+ autopause.default:n = true,
+
+ palindrome.legacy_if_gset:n = @anim@@palindrome,
+ palindrome.default:n = true,
+
+ poster.choice:, % <num> | first | last | none
+ poster / first.code:n = {\gdef\@anim@@poster{0}},
+ poster / last.code:n = {\gdef\@anim@@poster{-1}},
+ poster / none.code:n = {\gdef\@anim@@poster{-2}},
+ poster / unknown.code:n = {% frame <num>
+ \ifnum#1<\z@\relax
+ \PackageError{animate}{
+ Poster~frame~`#1'~is~out-of-bounds~on\MessageBreak
+ input~line~\the\inputlineno.\MessageBreak
+ Try~one~of~`poster=first'~or~`poster=none'
+ }{}
+ \fi
+ \gdef\@anim@@poster{#1}
+ },
+ poster.default:n = first,
+
+ step.legacy_if_gset:n = @anim@@step,
+ step.default:n = true,
+
+ draft.code:n = {
+ \setboolean{@anim@@draft}{#1}
+ \if at anim@export\setboolean{@anim@@draft}{false}\fi
+ },
+ draft.default:n = true,
+
+ final.code:n = {
+ \ifthenelse{\equal{#1}{true}}{
+ \setboolean{@anim@@draft}{false}
}{%
- \ifthenelse{\equal{#1}{ocg}}{%
- \def\@anim@@method{\tw@}%
- }{}% ignoring wrong input
+ \setboolean{@anim@@draft}{true}
}%
- }%
+ },
+ final.default:n = true,
+
+ nomouse.legacy_if_gset:n = @anim@@nomouse,
+ nomouse.default:n = true,
+
+ method.choices:nn = {icon,widget,ocg} {
+ \ifthenelse{\equal{#1}{icon}}{
+ \def\@anim@@method{\z@}
+ }{
+ \ifthenelse{\equal{#1}{widget}}{
+ \def\@anim@@method{\@ne}
+ }{
+ \ifthenelse{\equal{#1}{ocg}}{
+ \def\@anim@@method{\tw@}
+ }{}% ignoring wrong input
+ }
+ }
+ },
+ method.value_required:n = true,
+
+ type.tl_gset_x:N = \@anim@@ftype,
+ type.value_required:n = true,
}
-\define at key{anim at pkg}{useocg}[]{%
- \PackageError{animate}{%
- Package option `useocg' has been removed.\MessageBreak%
- Use `method=ocg' instead%
- }{}%
-}
+\ExplSyntaxOff
-%default animation method is Icon based
-\def\@anim@@method{\z@}
+\ifnum\if at anim@dvips 1\else\if at anim@dvisvgm 1\else0\fi\fi=1
+ %dvips .OR. dvisvgm
+ \def\@anim@@fg{0 setgray}\def\@anim@@@@fg{}
+\else% pdftex and dvipdfmx
+ \def\@anim@@fg{0 G}\def\@anim@@@@fg{0 g}
+\fi
%process package options
-\def\@anim at setpkgkeys#1{\setkeys{anim at pkg}{#1}}
-\edef\@anim at pkgopts{{\@ptionlist{\@currname.\@currext}}}
-\expandafter\@anim at setpkgkeys\@anim at pkgopts
+\ProcessKeyOptions[anim at pkg]
%%%%%%%%%%%%%%%%%%%%%%%%
% JavaScript part
More information about the tex-live-commits
mailing list.