summaryrefslogtreecommitdiff
path: root/macros/latex/contrib/beamer/base/multimedia/multimedia.sty
diff options
context:
space:
mode:
Diffstat (limited to 'macros/latex/contrib/beamer/base/multimedia/multimedia.sty')
-rw-r--r--macros/latex/contrib/beamer/base/multimedia/multimedia.sty323
1 files changed, 323 insertions, 0 deletions
diff --git a/macros/latex/contrib/beamer/base/multimedia/multimedia.sty b/macros/latex/contrib/beamer/base/multimedia/multimedia.sty
new file mode 100644
index 0000000000..5a0f21a01d
--- /dev/null
+++ b/macros/latex/contrib/beamer/base/multimedia/multimedia.sty
@@ -0,0 +1,323 @@
+% Copyright 2003--2007 by Till Tantau
+% Copyright 2010 by Vedran Mileti\'c
+% Copyright 2011,2012,2015 by Vedran Mileti\'c, Joseph Wright
+% Copyright 2017,2018 by Louis Stuart, Joseph Wright
+%
+% This file may be distributed and/or modified
+%
+% 1. under the LaTeX Project Public License and/or
+% 2. under the GNU Public License.
+%
+% See the file doc/licenses/LICENSE for more details.
+
+\ProvidesPackage{multimedia}[2012/05/02 ver 0.02]
+\NeedsTeXFormat{LaTeX2e}[1995/12/01]
+
+
+\RequirePackage{keyval}[1997/11/10]
+
+\RequirePackage{ifpdf}
+
+\ifx\directlua\@undefined
+ \let\beamer@pdfpageattr\pdfpageattr
+ \let\beamer@pdfobj\pdfobj
+ \let\beamer@pdfrefobj\pdfrefobj
+ \let\beamer@pdflastobj\pdflastobj
+ \let\beamer@pdfannot\pdfannot
+ \let\beamer@pdfstartlink\pdfstartlink
+ \let\beamer@pdfendlink\pdfendlink
+\else %
+ \edef\beamer@pdfpageattr{\pdfvariable pageattr}
+ \protected\def\beamer@pdfobj{\pdfextension obj }
+ \protected\def\beamer@pdfrefobj{\pdfextension refobj }
+ \protected\def\beamer@pdflastobj{\numexpr\pdffeedback lastobj\relax}
+ \protected\def\beamer@pdfannot{\pdfextension annot }
+ \protected\def\beamer@pdfstartlink{\pdfextension startlink }
+ \protected\def\beamer@pdfendlink{\pdfextension endlink\relax}
+\fi
+
+\ifpdf
+ \let\mm@psorpdf\@secondoftwo
+\else
+ \let\mm@psorpdf\@firstoftwo
+ \PassOptionsToPackage{pdfmark}{hyperref}
+ \define@key{PDF}{Movie}{\pdf@addtoks{#1}{Movie}}
+ \define@key{PDF}{T}{\pdf@addtoks{#1}{T}}
+ \define@key{PDF}{Annotations}{\pdf@addtoks{#1}{A}}
+\fi
+
+\define@key{multimedia}{automute}[true]{\csname mm@autostop#1\endcsname}
+\define@key{multimedia}{autostart}[true]{\csname mm@autostart#1\endcsname}
+\define@key{multimedia}{bitspersample}{\def\mm@b{/B #1}}
+\define@key{multimedia}{borderwidth}{{\@tempdima=#1\relax\@tempdima=0.99626401\@tempdima\xdef\mm@bw{\strip@pt\@tempdima}}}
+\define@key{multimedia}{channels}{\def\mm@c{/C #1}}
+\define@key{multimedia}{depth}{\@tempdimc=#1\relax}
+\define@key{multimedia}{duration}{\mm@convert#1{\mm@duration}{/Duration}}%
+\define@key{multimedia}{encoding}{\def\mm@e{/E /#1}}
+\define@key{multimedia}{externalviewer}[]{\mm@externaltrue}
+\define@key{multimedia}{height}{\@tempdimb=#1\relax}
+\define@key{multimedia}{inlinesound}[true]{\csname mm@inline#1\endcsname}
+\define@key{multimedia}{label}{\def\mm@label{#1}}
+\define@key{multimedia}{loop}[]{\def\mm@playmode{/Mode /Repeat}\def\mm@repeat{/Repeat true}}
+\define@key{multimedia}{mixsound}[true]{\def\mm@mix{/Mix #1}}
+\define@key{multimedia}{once}[]{\def\mm@playmode{/Mode /Once}}
+\define@key{multimedia}{palindrome}[]{\def\mm@playmode{/Mode /Palindrome}}
+\define@key{multimedia}{pause}[]{\def\mm@do{/Operation /Pause}}
+\define@key{multimedia}{play}[]{\def\mm@do{/Operation /Play}}
+\define@key{multimedia}{poster}[true]{\def\mm@poster{/Poster #1}}
+\define@key{multimedia}{repeat}[]{\def\mm@playmode{/Mode /Repeat}\def\mm@repeat{/Repeat true}}
+\define@key{multimedia}{resume}[]{\def\mm@do{/Operation /Resume}}
+\define@key{multimedia}{samplingrate}{\def\mm@r{/R #1}}
+\define@key{multimedia}{showcontrols}[true]{\def\mm@controls{/ShowControls #1}}
+\define@key{multimedia}{start}{\mm@convert#1{\mm@start}{/Start}}%
+\define@key{multimedia}{stop}[]{\def\mm@do{/Operation /Stop}}
+\define@key{multimedia}{width}{\@tempdima=#1\relax}
+\define@key{multimedia}{open}[]{\def\mm@playmode{/Mode /Open}}
+
+\def\mm@convert#1s{\mm@@convert{#1}}
+\def\mm@@convert#1#2#3{%
+ {\@tempdima=#1pt%
+ \@tempcnta=\@tempdima%
+ \divide\@tempcnta by 512%
+ \xdef#2{#3 [\the\@tempcnta\space 128]}}}
+
+\newif\ifmm@autostart
+\newif\ifmm@autostop
+\newif\ifmm@external
+\newif\ifmm@inline
+\newcount\mm@movie
+
+\newcommand\movie[3][]{%
+ \leavevmode%
+ % Sanity check
+ \IfFileExists{\@currdir #3}{}{%
+ \PackageWarning{multimedia}{The movie file ``#3'' could not be
+ found in the current directory, where it must reside for
+ viewing.}%
+ }%
+ {%
+ % Calculate size of the poster
+ \setbox\@tempboxa=\hbox{#2}%
+ \@tempdima=\wd\@tempboxa%
+ \@tempdimb=\ht\@tempboxa%
+ \@tempdimc=\dp\@tempboxa%
+ \global\advance\mm@movie by1\relax%
+ \edef\mm@label{mmdefaultlabel\the\mm@movie}%
+ \def\mm@playmode{}%
+ \def\mm@duration{}%
+ \def\mm@start{}%
+ \def\mm@poster{}%
+ \def\mm@controls{}%
+ \mm@autostartfalse%
+ \mm@externalfalse%
+ \def\mm@bw{0}%
+ \setkeys{multimedia}{#1}%
+ \wd\@tempboxa=\@tempdima%
+ \ht\@tempboxa=\@tempdimb%
+ \dp\@tempboxa=\@tempdimc%
+ \ifmm@external%
+ \href{run:#3}{\box\@tempboxa}%
+ \else%
+ \mm@psorpdf{%
+ \pdfmark[{\box\@tempboxa}]{%
+ pdfmark=/ANN,%
+ Subtype=/Movie,%
+ Movie=<< /F (#3) \mm@poster\space >>,%
+ Annotations=<< \mm@start\space \mm@duration\space \mm@playmode\space \mm@controls\space>>,%
+ T=(\mm@label),
+ Border={0 0 \mm@bw}}%
+ }{%
+ \beamer@pdfannot width \@tempdima height \@tempdimb depth \@tempdimc
+ {
+ /Subtype /Movie
+ /T (\mm@label)
+ /Border [0 0 \mm@bw]
+ /Movie << /F (#3) \mm@poster\space >>
+ /A << \mm@start\space \mm@duration\space \mm@playmode\space \mm@controls\space >>
+ }%
+ }%
+ \mm@psorpdf{}{\box\@tempboxa}%
+ \ifmm@autostart%
+ \mm@psorpdf%
+ {%
+ \pdfmark{pdfmark=/PUT,%
+ Raw={{ThisPage} << /AA << /O << /S /Movie
+ /T (\mm@label) /Operation /Play >> >> >>}%
+ }}%
+ {%
+ \immediate\beamer@pdfobj {<< /S /Movie /T (\mm@label) /Operation /Play >>}%
+ \beamer@pdfannot width 0pt height 0pt depth 0pt {%
+ /Subtype/Widget
+ /FT/Btn/Ff 65537
+ /T (wid@\mm@label)
+ /AA <</PO \the\beamer@pdflastobj\space 0 R>>% attention: /O --> /PO for Widget annots
+ }%
+ }%
+ \fi%
+ \fi%
+ }%
+}
+
+
+\newcommand\hyperlinkmovie[3][]{%
+ \leavevmode%
+ {\def\mm@playmode{}\def\mm@start{}\def\mm@duration{}\def\mm@do{}\def\mm@controls{}%
+ \setkeys{multimedia}{#1}%
+ \mm@psorpdf{%
+ \pdfmark[{#3}]{%
+ Color=\@linkbordercolor,%
+ linktype={link},%
+ AcroHighlight=\@pdfhighlight,%
+ Border=\@pdfborder,%
+ pdfmark=/ANN,%
+ Subtype=/Link,%
+ Annotations=<< /S /Movie /T (#2) \mm@controls\space
+ \mm@do\space \mm@start\space \mm@duration\space \mm@playmode\space
+ >>%
+ }}%
+ {%
+ \beamer@pdfstartlink
+ attr{%
+ /Border [\@pdfborder]
+ /H \@pdfhighlight\space
+ /C [\@menubordercolor]%
+ }%
+ user{
+ /Subtype /Link
+ /A <<
+ /S /Movie /T (#2) \mm@controls\space
+ \mm@do\space \mm@start\space \mm@duration\space \mm@playmode\space
+ >>
+ }%
+ #3\beamer@pdfendlink}%
+ }%
+}
+
+
+\newcommand\sound[3][]{%
+ \mm@psorpdf{\movie[#1]{#2}{#3}}% no way of defining a stream object...
+ {%
+ \leavevmode%
+ % Sanity check
+ \IfFileExists{\@currdir #3}{}{%
+ \PackageWarning{multimedia}{The movie file ``#3'' could not be
+ found in the current directory, where it must reside for
+ viewing.}%
+ }%
+ {%
+ % Calculate size of the poster
+ \setbox\@tempboxa=\hbox{#2}%
+ \@tempdima=\wd\@tempboxa%
+ \@tempdimb=\ht\@tempboxa%
+ \@tempdimc=\dp\@tempboxa%
+ \def\mm@label{mmdefaultlabel}%
+ \def\mm@playmode{}%
+ \def\mm@duration{}%
+ \def\mm@start{}%
+ \def\mm@repeat{}%
+ \def\mm@mix{/Mix false}%
+ \setkeys{multimedia}{samplingrate=44100,channels=1,bitspersample=16,encoding=muLaw}%
+ \mm@autostartfalse%
+ \mm@autostopfalse%
+ \mm@externalfalse%
+ \mm@inlinefalse%
+ \def\mm@bw{0}%
+ \setkeys{multimedia}{#1}%
+ \wd\@tempboxa=\@tempdima%
+ \ht\@tempboxa=\@tempdimb%
+ \dp\@tempboxa=\@tempdimc%
+ \ifmm@external%
+ \href{run:#3}{\box\@tempboxa}%
+ \else%
+ \ifmm@inline%
+ \beamer@pdfobj stream
+ attr {/Type /Sound \mm@r\space \mm@c\space \mm@b\space}
+ file {#3}%
+ \beamer@pdfrefobj \beamer@pdflastobj%
+ \else
+ \beamer@pdfobj stream
+ attr {\mm@r\space \mm@c\space \mm@b\space \mm@e\space /F (#3)}
+ {}%
+ \beamer@pdfrefobj \beamer@pdflastobj%
+ \fi%
+ \expandafter\xdef\csname mms@\mm@label\endcsname{\the\beamer@pdflastobj}%
+ \def\@temp{#2}\ifx\@temp\@empty\else\hyperlinksound[#1]{\mm@label}{\box\@tempboxa}\fi%
+ \ifmm@autostart%
+ \beamer@pdfobj {<< /S /Sound /Sound \the\beamer@pdflastobj\space 0 R \mm@mix\space >>}%
+ \beamer@pdfrefobj\beamer@pdflastobj%
+ \xdef\mm@pdfpageadditionalaction{/O \the\beamer@pdflastobj\space 0 R }%
+ \fi%
+ \ifmm@autostop%
+ \beamer@pdfobj {<< /S /Sound /Sound \mms@mute\space 0 R >>}%
+ \beamer@pdfrefobj\beamer@pdflastobj%
+ \xdef\mm@pdfpageadditionalaction{%
+ \ifx\mm@pdfpageadditionalaction\relax\else\mm@pdfpageadditionalaction\fi\space /C \the\beamer@pdflastobj\space 0 R }%
+ \fi%
+ \fi%
+ }%
+ }%
+}
+
+\mm@psorpdf{}{%
+ \beamer@pdfobj stream attr {/R 22050} {}%
+ \beamer@pdfrefobj \beamer@pdflastobj%
+ \edef\mms@mute{\the\beamer@pdflastobj}
+}
+
+\newcommand\hyperlinkmute[1]{\mm@psorpdf{#1}{\hyperlinksound{mute}{#1}}}
+
+\newcommand\hyperlinksound[3][]{%
+ \mm@psorpdf{\hyperlinkmovie[#1]{#2}{#3}}%
+ {%
+ \@ifundefined{mms@#2}%
+ {\PackageError{multimedia}{Sound labeled ``#2'' not defined}{}}
+ {%
+ \leavevmode%
+ \def\mm@mix{/Mix false}%
+ \def\mm@repeat{/Repeat false}%
+ \setkeys{multimedia}{#1}%
+ \beamer@pdfstartlink
+ attr{%
+ /Border [\@pdfborder]
+ /H \@pdfhighlight\space
+ /C [\@menubordercolor]%
+ }%
+ user{
+ /Subtype /Link
+ /A << /S /Sound /Sound \csname mms@#2\endcsname\space 0 R \mm@mix\space \mm@repeat\space >>
+ }%
+ #3\beamer@pdfendlink}%
+ }%
+}
+
+
+% Copyright Notice: The following code is based on code from hyperref.sty
+\def\mm@pageadditionalaction{%
+ \ifx\mm@pdfpageadditionalaction\relax
+ \else
+ \expandafter\mm@RemoveAAPageAttr\the\beamer@pdfpageattr^^J/AA{}>>\END
+ \ifx\mm@pdfpageadditionalaction\@empty
+ \else
+ \edef\@processme{%
+ \global\beamer@pdfpageattr{%
+ \the\beamer@pdfpageattr
+ ^^J/AA << \mm@pdfpageadditionalaction\space >>%
+ }%
+ }%
+ \@processme
+ \fi
+ \global\let\mm@pdfpageadditionalaction=\@empty% not on next page
+ \fi
+}
+\gdef\mm@RemoveAAPageAttr#1^^J/AA#2#3>>#4\END{%
+ \ifx\\#2\\%
+ \global\beamer@pdfpageattr{#1}%
+ \else
+ \mm@RemoveAAPageAttr#1#4\END
+ \fi
+}
+\let\mm@pdfpageadditionalaction=\relax
+
+% This is *not* the way to do it, but it'll have to do for now:
+\let\mm@orighyper@pagetransition=\hyper@pagetransition
+\AtBeginDocument{\def\hyper@pagetransition{\mm@orighyper@pagetransition\mm@pageadditionalaction}}