summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/pdfpc-movie/pdfpc-movie.dtx
diff options
context:
space:
mode:
authorNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
committerNorbert Preining <norbert@preining.info>2019-09-02 13:46:59 +0900
commite0c6872cf40896c7be36b11dcc744620f10adf1d (patch)
tree60335e10d2f4354b0674ec22d7b53f0f8abee672 /macros/latex/contrib/pdfpc-movie/pdfpc-movie.dtx
Initial commit
Diffstat (limited to 'macros/latex/contrib/pdfpc-movie/pdfpc-movie.dtx')
-rw-r--r--macros/latex/contrib/pdfpc-movie/pdfpc-movie.dtx234
1 files changed, 234 insertions, 0 deletions
diff --git a/macros/latex/contrib/pdfpc-movie/pdfpc-movie.dtx b/macros/latex/contrib/pdfpc-movie/pdfpc-movie.dtx
new file mode 100644
index 0000000000..de7c90e6b2
--- /dev/null
+++ b/macros/latex/contrib/pdfpc-movie/pdfpc-movie.dtx
@@ -0,0 +1,234 @@
+%\iffalse
+%<*package>
+%% \CharacterTable
+%% {Upper-case \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
+%% Lower-case \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
+%% Digits \0\1\2\3\4\5\6\7\8\9
+%% Exclamation \! Double quote \" Hash (number) \#
+%% Dollar \$ Percent \% Ampersand \&
+%% Acute accent \' Left paren \( Right paren \)
+%% Asterisk \* Plus \+ Comma \,
+%% Minus \- Point \. Solidus \/
+%% Colon \: Semicolon \; Less than \<
+%% Equals \= Greater than \> Question mark \?
+%% Commercial at \@ Left bracket \[ Backslash \\
+%% Right bracket \] Circumflex \^ Underscore \_
+%% Grave accent \` Left brace \{ Vertical bar \|
+%% Right brace \} Tilde \~}
+%</package>
+%\fi
+%\iffalse
+% Doc-Source file to use with LaTeX2e
+% Copyright (C) 2018 Sebastian Friedl
+%
+% This work is subject to the LaTeX Project Public License, Version 1.3c or -- at
+% your option -- any later version of this license.
+% This work consists of the files pdfpc-movie.dtx, pdfpc-movie.ins, pdfpc-movie-doc.dtx
+% and the derived file pdfpc-movie.sty.
+%
+% This work has the LPPL maintenance status 'maintained'.
+% Current maintainer of the work is Sebastian Friedl.
+%
+% -------------------------------------------------------------------------------------------
+%
+% Provides a \pdfpcmovie command for hyperlinking movies in a way compatible to the
+% PDF Presenter Console.
+%
+% -------------------------------------------------------------------------------------------
+%
+% Please report bugs and other problems as well as suggestions for improvements
+% to my email address (sfr682k@t-online.de).
+%
+% -------------------------------------------------------------------------------------------
+%\fi
+%
+%
+%
+% Identify the package and force \LaTeXe:
+% \begin{macrocode}
+\ProvidesPackage{pdfpc-movie}%
+ [2018/07/21 v1.0 pdfpc compatible hyperlinking of movies]
+\NeedsTeXFormat{LaTeX2e}
+% \end{macrocode}
+%
+% Require additional packages needed by \sty{pdfpc-movie}:
+% \begin{macrocode}
+\RequirePackage{etoolbox}
+\AtEndPreamble{\RequirePackage{hyperref}}
+\RequirePackage{pgfkeys}
+% \end{macrocode}
+%
+%
+% \subsubsection*{Variables and options}
+% Define some internal boolean variables required to assemble the URL parameters:
+% \begin{macrocode}
+\newif\if@pdfpcmovie@autostart
+\newif\if@pdfpcmovie@loop
+\newif\if@pdfpcmovie@noprogress
+% \end{macrocode}
+%
+% Define a counter for storing the number of non-processed options:
+% \begin{macrocode}
+\newcount\pdfpcmovie@remopts
+% \end{macrocode}
+%
+% Define a box and some dimensions to override the poster material's size:
+% \begin{macrocode}
+\newbox\pdfpcmovie@posterbox
+\newdimen\pdfpcmovie@posterwd
+\newdimen\pdfpcmovie@posterht
+\newdimen\pdfpcmovie@posterdp
+% \end{macrocode}
+%
+% Define the keys available as optional arguments of the "\pdfpcmovie" command.
+% Each key requiring additional URL parameters advances "\pdfpcmovie@remopts" by "1":
+% \begin{macrocode}
+\pgfkeys{%
+ /pdfpc-movie/width/.cd, .value required,
+ .code={\pdfpcmovie@posterwd=#1\relax},
+ /pdfpc-movie/height/.cd, .value required,
+ .code={\pdfpcmovie@posterht=#1\relax},
+ /pdfpc-movie/depth/.cd, .value required,
+ .code={\pdfpcmovie@posterdp=#1\relax},
+ /pdfpc-movie/autostart/.cd, .value forbidden,
+ .code={%
+ \@pdfpcmovie@autostarttrue
+ \advance\pdfpcmovie@remopts 1\relax},
+ /pdfpc-movie/loop/.cd, .value forbidden,
+ .code={%
+ \@pdfpcmovie@looptrue
+ \advance\pdfpcmovie@remopts 1\relax},
+ /pdfpc-movie/noprogress/.cd, .value forbidden,
+ .code={%
+ \@pdfpcmovie@noprogresstrue
+ \advance\pdfpcmovie@remopts 1\relax},
+ /pdfpc-movie/start/.cd, .value required,
+ .code={%
+ \def\pdfpcmovie@start{#1}
+ \advance\pdfpcmovie@remopts 1\relax},
+ /pdfpc-movie/stop/.cd, .value required,
+ .code={%
+ \def\pdfpcmovie@stop{#1}
+ \advance\pdfpcmovie@remopts 1\relax},
+}
+% \end{macrocode}
+%
+%
+%
+% \subsubsection*{The \texttt{\textbackslash pdfpcmovie} macro}
+% \begin{macro}{\pdfpcmovie}
+% First, "\def" is used to ensure that there is a "\pdfpcmovie" command to (re-)define:
+% \begin{macrocode}
+\def\pdfpcmovie{}
+\renewcommand{\pdfpcmovie}[3][]{%
+% \end{macrocode}
+%
+% Leave vertical mode to ensure correct placement of the movie box
+% if "\pdfpcmovie" is used at the beginning of a paragraph:
+% \begin{macrocode}
+ \leavevmode%
+% \end{macrocode}
+%
+% Check whether the requested movie file is present. Emit a warning if it's not:
+% \begin{macrocode}
+ \IfFileExists{\@currdir #3}{}{\PackageWarning{pdfpc-movie}{%
+ The movie file "#3" could not be found in the current
+ directory, where it must reside for viewing.}%
+ }%
+% \end{macrocode}
+%
+%
+% Create a box with the poster content and determine its size:
+% \begin{macrocode}
+ \setbox\pdfpcmovie@posterbox=\hbox{#2}%
+% \end{macrocode}
+%
+% Reset all variables to their default values. \\
+% After that, the optional argument containing all options gets processed:
+% \begin{macrocode}
+ \@pdfpcmovie@autostartfalse%
+ \@pdfpcmovie@loopfalse%
+ \@pdfpcmovie@noprogressfalse%
+ \let\pdfpcmovie@start\@empty%
+ \let\pdfpcmovie@stop\@empty%
+ \pdfpcmovie@posterwd=\wd\pdfpcmovie@posterbox%
+ \pdfpcmovie@posterht=\ht\pdfpcmovie@posterbox%
+ \pdfpcmovie@posterdp=\dp\pdfpcmovie@posterbox%
+ %
+ \pdfpcmovie@remopts=0%
+ \pgfkeys{/pdfpc-movie/.cd, #1}%
+% \end{macrocode}
+%
+% All hyperlink arguments appended to the file name are stored in the "\pdfpcmovie@params" variable.
+% For every specified option, the respective hyperlink code is appended. \\
+% If there are non-processed arguments remaining, an "&" separator is appended:
+% \begin{macrocode}
+ \ifnum\pdfpcmovie@remopts>0\def\pdfpcmovie@params{?}%
+ \else\def\pdfpcmovie@params{}%
+ \fi%
+ %
+ \if@pdfpcmovie@autostart%
+ \edef\pdfpcmovie@params{\pdfpcmovie@params autostart}%
+ \advance\pdfpcmovie@remopts -1\relax%
+ \ifnum\pdfpcmovie@remopts>0%
+ \edef\pdfpcmovie@params{\pdfpcmovie@params\&}%
+ \fi%
+ \fi%
+ %
+ \if@pdfpcmovie@loop%
+ \edef\pdfpcmovie@params{\pdfpcmovie@params loop}%
+ \advance\pdfpcmovie@remopts -1\relax%
+ \ifnum\pdfpcmovie@remopts>0%
+ \edef\pdfpcmovie@params{\pdfpcmovie@params\&}%
+ \fi%
+ \fi%
+ %
+ \if@pdfpcmovie@noprogress%
+ \edef\pdfpcmovie@params{\pdfpcmovie@params noprogress}%
+ \advance\pdfpcmovie@remopts -1\relax%
+ \ifnum\pdfpcmovie@remopts>0%
+ \edef\pdfpcmovie@params{\pdfpcmovie@params\&}%
+ \fi%
+ \fi%
+ %
+ \ifx\pdfpcmovie@start\@empty\else%
+ \edef\pdfpcmovie@params{\pdfpcmovie@params start=\pdfpcmovie@start}%
+ \advance\pdfpcmovie@remopts -1\relax%
+ \ifnum\pdfpcmovie@remopts>0%
+ \edef\pdfpcmovie@params{\pdfpcmovie@params\&}%
+ \fi%
+ \fi%
+ %
+ \ifx\pdfpcmovie@stop\@empty\else%
+ \edef\pdfpcmovie@params{\pdfpcmovie@params stop=\pdfpcmovie@stop}%
+ \advance\pdfpcmovie@remopts -1\relax%
+ \ifnum\pdfpcmovie@remopts>0%
+ \edef\pdfpcmovie@params{\pdfpcmovie@params\&}%
+ \fi%
+ \fi%
+ %
+ %
+ %
+% \end{macrocode}
+%
+% Set the size of the poster material box \dots
+% \begin{macrocode}
+ \wd\pdfpcmovie@posterbox=\pdfpcmovie@posterwd%
+ \ht\pdfpcmovie@posterbox=\pdfpcmovie@posterht%
+ \dp\pdfpcmovie@posterbox=\pdfpcmovie@posterdp%
+% \end{macrocode}
+%
+% \dots\ and -- last but not least -- create the hyperlink:
+% \begin{macrocode}
+ \href{run:#3\pdfpcmovie@params}{\box\pdfpcmovie@posterbox}%
+}
+% \end{macrocode}
+% \end{macro}
+%
+%
+%
+% \subsubsection*{Famous last words}
+% Enough code for this package. "\endinput".
+% \begin{macrocode}
+\endinput
+% \end{macrocode}