summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/animate/animate.sty
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/animate/animate.sty')
-rw-r--r--macros/latex/contrib/animate/animate.sty134
1 files changed, 81 insertions, 53 deletions
diff --git a/macros/latex/contrib/animate/animate.sty b/macros/latex/contrib/animate/animate.sty
index 75fca7a6a4..b4e05000ab 100644
--- a/macros/latex/contrib/animate/animate.sty
+++ b/macros/latex/contrib/animate/animate.sty
@@ -13,7 +13,7 @@
\NeedsTeXFormat{LaTeX2e}
-\def\@anim@version{2020/03/25}
+\def\@anim@version{2020/04/25}
\ProvidesPackage{animate}
[\@anim@version\space PDF & SVG animations from files and inline graphics]
@@ -104,7 +104,7 @@
\endlinechar`\:% `:' appended to every line read
\IfFileExists{#1.xbb}{%
%read from xbb file
- {\catcode`\%=0\sbox0{\input{#1.xbb}}}%
+ {\catcode`\:=12\catcode`\%=0\sbox0{\input{#1.xbb}}}%
\ifdefined#3\else%
\PackageError{animate}{%
Cannot read number of pages from file\MessageBreak%
@@ -118,23 +118,22 @@
%read from command pipe (`extractbb')
%firstly, check whether reading from pipe is allowed
\immediate\closein\@inputcheck%
- \immediate\openin\@inputcheck="|extractbb -h"%
- \let\@anim@foo\@anim@bar% <-- needed for some reason to make
- \ifeof\@inputcheck% <-- this test work correctly
+ \immediate\openin\@inputcheck="|extractbb -h"\relax%
+ \ifeof\@inputcheck%
\immediate\closein\@inputcheck%
\PackageError{animate}{%
Cannot determine number of pages in file\MessageBreak%
----------------------------------------\MessageBreak%
#1.#2\MessageBreak%
----------------------------------------\MessageBreak%
- Try --shell-escape option (--enable-pipes in MikTeX),%
+ Try --shell-escape option (--enable-pipes in MiKTeX),%
\MessageBreak or run\MessageBreak%
\space\space extractbb #1.#2\MessageBreak%
on the command line to provide a valid `xbb' file%
}{}%
\else%
\immediate\closein\@inputcheck%
- {\catcode`\%=0\sbox0{\@@input "|extractbb -O #1.#2"}}%
+ {\catcode`\:=12\catcode`\%=0\sbox0{\@@input "|extractbb -O #1.#2"}}%
\fi%
}%
}}
@@ -349,14 +348,14 @@
%helper macro that typesets graphics file into savebox
\if@anim@dvips
\def\@anim@filebox#1#2{% dvips: no multi-page support
- \edef\@anim@curfile{[clip\@anim@gropts]{#1}}%
+ \edef\@anim@curfile{[\@anim@gropts]{#1}}%
\global\setbox\@anim@box=\hbox{%
\expandafter\includegraphics\@anim@curfile}%
}
\else
%pdfTeX, LuaTeX, dvipdfmx, xetex, dvisvgm
\def\@anim@filebox#1#2{%
- \edef\@anim@curfile{[clip\@anim@gropts,page=#2]{#1}}%
+ \edef\@anim@curfile{[\@anim@gropts,page=#2]{#1}}%
\global\setbox\@anim@box=\hbox{%
\expandafter\includegraphics\@anim@curfile}%
}
@@ -398,7 +397,8 @@
\gdef\@anim@boxscale{\@ne}%
%append final dims to inclusion opts, also used for the remaining files
%of the current animation
- \xdef\@anim@gropts{\@anim@gropts,width=\@anim@animwidth%
+ \xdef\@anim@gropts{\@anim@gropts%
+ \ifx\@anim@gropts\@empty\else,\fi width=\@anim@animwidth%
,height=\@anim@animheight,totalheight=\@anim@animtotalheight}%
\fi%
\fi%
@@ -1535,10 +1535,22 @@
\ifnum\@anim@resizeflags=7\relax% height+totalheight+width->totalheight+width
\global\@anim@resizeflags=5%
\fi%
- \if@anim@hiresbb\xdef\@anim@gropts{\@anim@gropts,hiresbb}\fi%
- \if@anim@interpolate\xdef\@anim@gropts{\@anim@gropts,interpolate}\fi%
- \ifx\@anim@pagebox\@empty\else%
- \xdef\@anim@gropts{\@anim@gropts,pagebox=\@anim@pagebox}\fi%
+ \ifx\@anim@bb\@empty\else\xdef\@anim@gropts{\@anim@gropts%
+ \ifx\@anim@gropts\@empty\else,\fi\@anim@bb}\fi%
+ \ifx\@anim@viewport\@empty\else\xdef\@anim@gropts{\@anim@gropts%
+ \ifx\@anim@gropts\@empty\else,\fi\@anim@viewport}\fi%
+ \ifx\@anim@trim\@empty\else\xdef\@anim@gropts{\@anim@gropts%
+ \ifx\@anim@gropts\@empty\else,\fi\@anim@trim}\fi%
+ \ifx\@anim@angle\@empty\else\xdef\@anim@gropts{\@anim@gropts%
+ \ifx\@anim@gropts\@empty\else,\fi\@anim@angle}\fi%
+ \if@anim@clip\xdef\@anim@gropts{\@anim@gropts%
+ \ifx\@anim@gropts\@empty\else,\fi clip}\fi%
+ \if@anim@hiresbb\xdef\@anim@gropts{\@anim@gropts%
+ \ifx\@anim@gropts\@empty\else,\fi hiresbb}\fi%
+ \if@anim@interpolate\xdef\@anim@gropts{\@anim@gropts%
+ \ifx\@anim@gropts\@empty\else,\fi interpolate}\fi%
+ \ifx\@anim@pagebox\@empty\else\xdef\@anim@gropts{\@anim@gropts%
+ \ifx\@anim@gropts\@empty\else,\fi\@anim@pagebox}\fi%
\ifthenelse{\boolean{@anim@autoplay}\OR\boolean{@anim@autoresume}}{%
\setboolean{@anim@autoplayorresume}{true}%
}{}%
@@ -2790,6 +2802,22 @@
\define@key{anim@user}{keepaspectratio}[true]{%
\setboolean{@anim@iso}{#1}%
}
+\define@key{anim@user}{bb}{%
+ \xdef\@anim@bb{bb=#1}%
+}
+\define@key{anim@user}{viewport}{%
+ \xdef\@anim@viewport{viewport=#1}%
+}
+\define@key{anim@user}{trim}{%
+ \xdef\@anim@trim{trim=#1}%
+}
+\define@key{anim@user}{angle}{%
+ \xdef\@anim@angle{angle=#1}%
+}
+\newboolean{@anim@clip}
+\define@key{anim@usr}{clip}[true]{%
+ \setboolean{@anim@clip}{#1}%
+}
\newboolean{@anim@hiresbb}
\define@key{anim@user}{hiresbb}[true]{%
\setboolean{@anim@hiresbb}{#1}%
@@ -2799,10 +2827,10 @@
\setboolean{@anim@interpolate}{#1}%
}
\define@key{anim@user}{pagebox}{%
- \gdef\@anim@pagebox{#1}%
+ \xdef\@anim@pagebox{pagebox=#1}%
}
\define@key{anim@user}{scale}{%
- \gdef\@anim@boxscale{#1}%
+ \xdef\@anim@boxscale{#1}%
}
\define@key{anim@user}{buttonsize}{%
\gdef\@anim@btnsize{#1}%
@@ -2946,7 +2974,7 @@
\newboolean{@anim@ctrlright}
\newboolean{@anim@ctrlcentre}
\define@key{anim@user}{controlsaligned}{%
- \@anim@parse@ctrlsalignarg\@anim@tmpvar\@anim@tmpdima#1+\@nil%
+ \@anim@parse@ctrlsalignarg\@anim@tmpvar\@anim@tmpdima#1+\@nil%
\ifthenelse{\equal{\@anim@tmpvar}{left}}{%
\setboolean{@anim@ctrlleft}{true}%
\setboolean{@anim@ctrlright}{false}%
@@ -3063,18 +3091,6 @@
\define@key{anim@user}{every}{% embed every #1th frame
\ifnum#1<\@ne\relax\gdef\@anim@every{1}\else\gdef\@anim@every{#1}\fi%
}
-\define@key{anim@user}{bb}{%
- \g@addto@macro\@anim@gropts{, bb=#1}%
-}
-\define@key{anim@user}{viewport}{%
- \g@addto@macro\@anim@gropts{, viewport=#1}%
-}
-\define@key{anim@user}{trim}{%
- \g@addto@macro\@anim@gropts{, trim=#1}%
-}
-\define@key{anim@user}{angle}{%
- \g@addto@macro\@anim@gropts{, angle=#1}%
-}
\newboolean{@anim@meas}
\define@key{anim@user}{measure}[true]{%
\setboolean{@anim@meas}{#1}%
@@ -3107,6 +3123,11 @@
\setboolean{@anim@doscaling}{true}%
\global\let\@anim@boxscale\@anim@@boxscale%
\global\let\if@anim@iso=\if@anim@@iso%
+ \global\let\@anim@bb\@anim@@bb%
+ \global\let\@anim@viewport\@anim@@viewport%
+ \global\let\@anim@trim\@anim@@trim%
+ \global\let\@anim@angle\@anim@@angle%
+ \global\let\if@anim@clip=\if@anim@@clip%
\global\let\if@anim@hiresbb=\if@anim@@hiresbb%
\global\let\if@anim@interpolate=\if@anim@@interpolate%
\global\let\@anim@pagebox\@anim@@pagebox%
@@ -3308,6 +3329,26 @@
\define@key{anim@pkg}{keepaspectratio}[true]{%
\setboolean{@anim@@iso}{#1}%
}
+\def\@anim@@bb{}
+\define@key{anim@pkg}{bb}{%
+ \xdef\@anim@bb{bb=#1}%
+}
+\def\@anim@@viewport{}
+\define@key{anim@pkg}{viewport}{%
+ \xdef\@anim@@viewport{viewport=#1}%
+}
+\def\@anim@@trim{}
+\define@key{anim@pkg}{trim}{%
+ \xdef\@anim@@trim{trim=#1}%
+}
+\def\@anim@@angle{}
+\define@key{anim@pkg}{angle}{%
+ \xdef\@anim@@angle{angle=#1}%
+}
+\newboolean{@anim@@clip}
+\define@key{anim@pkg}{clip}[true]{%
+ \setboolean{@anim@@clip}{#1}%
+}
\newboolean{@anim@@hiresbb}
\define@key{anim@pkg}{hiresbb}[true]{%
\setboolean{@anim@@hiresbb}{#1}%
@@ -3318,7 +3359,7 @@
}
\def\@anim@@pagebox{}
\define@key{anim@pkg}{pagebox}{%
- \def\@anim@@pagebox{#1}%
+ \xdef\@anim@@pagebox{pagebox=#1}%
}
\def\@anim@@boxscale{1}%
\define@key{anim@pkg}{scale}{%
@@ -3389,7 +3430,7 @@
\setboolean{@anim@@ctrlcentre}{true}
\def\@anim@@ctrlsindent{\z@}
\define@key{anim@pkg}{controlsaligned}{%
- \@anim@parse@ctrlsalignarg\@anim@tmpvar\@anim@tmpdima#1+\@nil%
+ \@anim@parse@ctrlsalignarg\@anim@tmpvar\@anim@tmpdima#1+\@nil%
\setboolean{@anim@@ctrlcentre}{false}%
\ifthenelse{\equal{\@anim@tmpvar}{left}}{%
\setboolean{@anim@@ctrlleft}{true}%
@@ -3569,7 +3610,7 @@
\if@anim@controls@play%
var a#1_btnPauseLeft,a#1_btnPlayLeft,a#1_btnPauseRight,a#1_btnPlayRight;$%
\fi%
- var a#1_playsRight,a#1_isPaused;$%
+ var a#1_playsRight,a#1_isPaused\if@anim@step\else,a#1_playing\fi;$%
\if@anim@step\else
var a#1_int;$% timer id (takes return val of setIntervall())
% function pointers
@@ -4228,7 +4269,7 @@
\@anim@@jsvardecls{#1}% variables that are supposed to be global
(function(){$% IIFE (self-executing anon. function) to limit scope
function onload(){$%
- \@anim@@jsinit{#1}%
+ \@anim@@jsinit{#1}$%
\if@anim@nomouse\else
document.getElementById('anm#1').addEventListener('mouseup',%
onMouseUpWdgt);$%
@@ -4236,10 +4277,6 @@
onMouseDownWdgt);$%
document.getElementById('anm#1').addEventListener('touchend',%
onTouchEndWdgt);$%
- document.getElementById('anm#1').addEventListener('touchstart',%
- onTouchStartWdgt);$%
- document.getElementById('anm#1').addEventListener('touchmove',%
- onTouchMove);$%
\fi%
onvisible();$% in case of `autoplay' option
}$%
@@ -4259,28 +4296,19 @@
document.addEventListener('visibilitychange',onVisibilityChange);$%
window.addEventListener('load',onload);$%
\if@anim@nomouse\else
- var permPause#1=false;
function onWidgetUpAction(event){$%
\@anim@wdgtUpJS{#1}%
}$%
- function onTouchStartWdgt(event){$%
- event.preventDefault();$%
- event.stopPropagation();$%
- permPause#1=false;
- \@anim@wdgtDownJS{#1}%
- }$%
function onTouchEndWdgt(event){$%
event.preventDefault();$%
event.stopPropagation();$%
- if(event.targetTouches.length>0){permPause#1=true;}$%
- else{$%
- if(permPause#1){permPause#1=false;}$%
- else{onWidgetUpAction(event);}$%
- }$%
- }$%
- function onTouchMove(event){$%
- event.preventDefault();$%
- event.stopPropagation();$%
+ \if@anim@step\else
+ if(a#1_playing){try{a#1_pause();}catch(e){}}else{$%
+ \fi%
+ \@anim@wdgtUpJS{#1}%
+ \if@anim@step\else%
+ }$%
+ \fi%
}$%
function onMouseDownWdgt(event){$%
event.preventDefault();$%