From aadc6fbc73f1ca0b93f8c406c46cdb2600bce890 Mon Sep 17 00:00:00 2001 From: Norbert Preining Date: Fri, 31 Jul 2020 03:03:02 +0000 Subject: CTAN sync 202007310303 --- obsolete/macros/latex/contrib/yt4pdf/README.md | 21 + .../macros/latex/contrib/yt4pdf/doc/yt4pdf_man.pdf | Bin 0 -> 347953 bytes .../macros/latex/contrib/yt4pdf/doc/yt4pdf_man.tex | 737 +++++++++++++++++++++ .../contrib/yt4pdf/examples/config_intacc.def | 29 + .../contrib/yt4pdf/examples/graphics/MIA9.eps | Bin 0 -> 290523 bytes .../contrib/yt4pdf/examples/graphics/MIAX.eps | Bin 0 -> 400298 bytes .../yt4pdf/examples/graphics/trustmanager.eps | Bin 0 -> 845442 bytes .../yt4pdf/examples/graphics/yt_icon_sm.eps | Bin 0 -> 558266 bytes .../latex/contrib/yt4pdf/examples/yt4pdf-1.tex | 93 +++ .../latex/contrib/yt4pdf/examples/yt4pdf-2.tex | 152 +++++ .../latex/contrib/yt4pdf/examples/yt4pdf-3.tex | 88 +++ .../latex/contrib/yt4pdf/graphics/pdfyt_poster.eps | Bin 0 -> 850618 bytes .../latex/contrib/yt4pdf/swf/pdf_tube_basic.swf | Bin 0 -> 10470 bytes obsolete/macros/latex/contrib/yt4pdf/yt4pdf.cfg | 10 + obsolete/macros/latex/contrib/yt4pdf/yt4pdf.dtx | 629 ++++++++++++++++++ obsolete/macros/latex/contrib/yt4pdf/yt4pdf.ins | 60 ++ obsolete/macros/latex/contrib/yt4pdf/yt4pdf.sty | 346 ++++++++++ 17 files changed, 2165 insertions(+) create mode 100644 obsolete/macros/latex/contrib/yt4pdf/README.md create mode 100644 obsolete/macros/latex/contrib/yt4pdf/doc/yt4pdf_man.pdf create mode 100644 obsolete/macros/latex/contrib/yt4pdf/doc/yt4pdf_man.tex create mode 100644 obsolete/macros/latex/contrib/yt4pdf/examples/config_intacc.def create mode 100644 obsolete/macros/latex/contrib/yt4pdf/examples/graphics/MIA9.eps create mode 100644 obsolete/macros/latex/contrib/yt4pdf/examples/graphics/MIAX.eps create mode 100644 obsolete/macros/latex/contrib/yt4pdf/examples/graphics/trustmanager.eps create mode 100644 obsolete/macros/latex/contrib/yt4pdf/examples/graphics/yt_icon_sm.eps create mode 100644 obsolete/macros/latex/contrib/yt4pdf/examples/yt4pdf-1.tex create mode 100644 obsolete/macros/latex/contrib/yt4pdf/examples/yt4pdf-2.tex create mode 100644 obsolete/macros/latex/contrib/yt4pdf/examples/yt4pdf-3.tex create mode 100644 obsolete/macros/latex/contrib/yt4pdf/graphics/pdfyt_poster.eps create mode 100644 obsolete/macros/latex/contrib/yt4pdf/swf/pdf_tube_basic.swf create mode 100644 obsolete/macros/latex/contrib/yt4pdf/yt4pdf.cfg create mode 100644 obsolete/macros/latex/contrib/yt4pdf/yt4pdf.dtx create mode 100644 obsolete/macros/latex/contrib/yt4pdf/yt4pdf.ins create mode 100644 obsolete/macros/latex/contrib/yt4pdf/yt4pdf.sty (limited to 'obsolete/macros') diff --git a/obsolete/macros/latex/contrib/yt4pdf/README.md b/obsolete/macros/latex/contrib/yt4pdf/README.md new file mode 100644 index 0000000000..5d1400140e --- /dev/null +++ b/obsolete/macros/latex/contrib/yt4pdf/README.md @@ -0,0 +1,21 @@ +The yt4pdf package +Dated: 2016/10/04 + +The yt4pdf package uses the rmannot package to embed a special SWF file to +play the YouTube videos. There is a complete set of buttons that come with +the package to control the video: play, pause, stop loading, rewind, load +a video by its YouTube video ID, and a button to view a video on the +YouTube web site. Adobe Acrobat 9 or later is required to author a +document; only Adobe Reader 9 is need to view the created yt4pdf document. + +The SWF file for playing the YouTube videos was developed by UVSAR +(http://www.uvsar.com/pdftube/) and is based on the YouTube chromeless +player and the YouTube ActionScript 3.0 Player API Reference +(http://code.google.com/apis/youtube/flash_api_reference.html) + +Now, I simply must get back to my retirement. + +Dr. D. P. Story +www.acrotex.net +dpstory@uakron.edu +dpstory@acrotex.net diff --git a/obsolete/macros/latex/contrib/yt4pdf/doc/yt4pdf_man.pdf b/obsolete/macros/latex/contrib/yt4pdf/doc/yt4pdf_man.pdf new file mode 100644 index 0000000000..5b0bbca68d Binary files /dev/null and b/obsolete/macros/latex/contrib/yt4pdf/doc/yt4pdf_man.pdf differ diff --git a/obsolete/macros/latex/contrib/yt4pdf/doc/yt4pdf_man.tex b/obsolete/macros/latex/contrib/yt4pdf/doc/yt4pdf_man.tex new file mode 100644 index 0000000000..97febc04f1 --- /dev/null +++ b/obsolete/macros/latex/contrib/yt4pdf/doc/yt4pdf_man.tex @@ -0,0 +1,737 @@ +% makeindex < aebpro_man.idx > aebpro_man.ind +\documentclass{article} +\usepackage[fleqn]{amsmath} +\usepackage[ + web={centertitlepage,designv,tight*,usetemplates, + forcolorpaper,latextoc,pro},%usesf, + eforms,aebxmp +]{aeb_pro} +%\usepackage{multicol} +\usepackage{aeb_mlink} +\usepackage{array} +\usepackage[altbullet]{lucidbry} + +\usepackage{makeidx} +\makeindex +\usepackage{acroman} + +\usepackage[active]{srcltx} + +\def\expath{../examples} + +\urlstyle{rm} +\def\pkg{\textsf} +\let\app\textsf +\let\opt\texttt +\let\uif\textsf +\let\env\texttt +\def\meta#1{\textit{\texttt{#1}}} +\def\ameta#1{$\langle\textit{\texttt{#1}}\rangle$} +\newdimen\aebdimen \aebdimen6pt %\partopsep \advance\aebdimen\partopsep +\newcommand\bVerb[1][]{\begingroup#1\vskip\aebdimen\parindent0pt}% +\def\eVerb{\vskip\aebdimen\endgroup\noindent} +\def\SUB#1{\ensuremath{{}_{\text{#1}}}} +\def\darg#1{\texttt{\{#1\}}} +\def\takeMeasure{\bgroup\obeyspaces\takeMeasurei} +\def\takeMeasurei#1{\global\setbox\webtempboxi\hbox{\ttfamily#1}\egroup} +\def\bxSize{\wd\webtempboxi+2\fboxsep+2\fboxrule} +\let\amtIndent\leftmargini +\makeatletter +\def\setDisplayNumber#1#2{\kern0pt + \setlength\abovedisplayshortskip{0pt}% + \setlength\belowdisplayshortskip{0pt}% + \setlength\abovedisplayskip{0pt}% + \setlength\belowdisplayskip{0pt}% + \begin{equation}\label{#2}\end{equation}\kern0pt +} +\renewenvironment{quote}[1][] + {\def\@rgi{#1}\ifx\@rgi\@empty + \let\rghtm\@empty\else\def\rghtm{\rightmargin\leftmargin}\fi + \list{}{\rghtm} %{\rightmargin\leftmargin}% + \item\relax} + {\endlist} +\renewcommand*\descriptionlabel[1]{\hspace\labelsep + \normalfont #1} +\setcounter{secnumdepth}{4} +\setcounter{tocdepth}{5} +\renewcommand*{\theparagraph}{\texorpdfstring{\protect\P\protect\ }{\textparagraph}} +\renewcommand{\paragraph} + {\renewcommand{\@seccntformat}[1]{\theparagraph}% + \@startsection{paragraph}{4}{0pt}{6pt}{-3pt}{\color{\aeb@subsubsectioncolor}\bfseries}} +\renewcommand*\l@paragraph{\@dottedtocline{4}{5.0em}{1em}} %{7.0em}{4.1em}} +\def\chgCurrLblName#1{\def\@currentlabelname{#1}} +\def\echgCurrLblName#1{\edef\@currentlabelname{#1}} +\makeatother + + +\newcommand{\YouTube}{\textsf{YouTube}} + + +%\def\tutpath{doc/tutorial} +%\def\tutpathi{tutorial} + +\DeclareDocInfo +{ + university={\AcroTeX.Net}, + title={The \texorpdfstring{\textsf{yt4PDF} Package\\[1em]}{: } + Playing \texorpdfstring{\YouTube}{YouTube} Videos in PDF}, + author={D. P. Story}, + email={dpstory@acrotex.net}, + subject={Playing YouTube Videos in PDF}, + talksite={\url{www.acrotex.net}}, + version={1.1, 2016/10/04}, + keywords={AcroTeX, PDF, YouTube, rmannot}, + copyrightStatus=True, + copyrightNotice={Copyright (C) \the\year, D. P. Story}, + copyrightInfoURL={http://www.acrotex.net} +} + +\def\dps{$\hbox{$\mathfrak D$\kern-.3em\hbox{$\mathfrak P$}% + \kern-.6em \hbox{$\mathcal S$}}$} + +\universityLayout{fontsize=Large} +\titleLayout{fontsize=LARGE} +\authorLayout{fontsize=Large} +\tocLayout{fontsize=Large,color=aeb} +\sectionLayout{indent=-40pt,fontsize=large,color=aeb} %,afterskip=1sp} +\subsectionLayout{indent=-20pt,color=aeb} %,afterskip=1sp} +\subsubsectionLayout{indent=0pt,color=aeb} %,afterskip=1sp} +\subsubDefaultDing{\texorpdfstring{$\bullet$}{\textrm\textbullet}} + +\newenvironment{eqComments}[1][\strut]{\smallskip\leftskip-\labelwidth +\item[]\textbf{\textcolor{blue}{#1}}}{\par\smallskip} + +%\pagestyle{empty} +%\parindent0pt\parskip\medskipamount + +\chngDocObjectTo{\newDO}{doc} +\begin{docassembly} +var titleOfManual="The yt4pdf MANUAL"; +var manualfilename="Manual_BG_Print_yt4pdf.pdf"; +var manualtemplate="Manual_BG_Brown.pdf"; // Blue, Green, Brown +var _pathToBlank="C:/Users/Public/Documents/ManualBGs/"+manualtemplate; +var doc; +var buildIt=false; +if ( buildIt ) { + console.println("Creating new " + manualfilename + " file."); + doc = \appopenDoc({cPath: _pathToBlank, bHidden: true}); + var _path=this.path; + var pos=_path.lastIndexOf("/"); + _path=_path.substring(0,pos)+"/"+manualfilename; + \docSaveAs\newDO ({ cPath: _path }); + doc.closeDoc(); + doc = \appopenDoc({cPath: manualfilename, oDoc:this, bHidden: true}); + f=doc.getField("ManualTitle"); + f.value=titleOfManual; + doc.flattenPages(); + \docSaveAs\newDO({ cPath: manualfilename }); + doc.closeDoc(); +} else { + console.println("Using the current "+manualfilename+" file."); +} +var _path=this.path; +var pos=_path.lastIndexOf("/"); +_path=_path.substring(0,pos)+"/"+manualfilename; +\addWatermarkFromFile({ + bOnTop:false, + bOnPrint:false, + cDIPath:_path +}); +\executeSave(); +\end{docassembly} + +\begin{document} + +\maketitle + +\selectColors{linkColor=black} +\tableofcontents +\selectColors{linkColor=webgreen} + +\section{Introduction}\label{s:intro} + + I believe that I was vaguely aware of the \href{http://code.google.com/apis/youtube/flash_api_reference.html} +{{\YouTube} ActionScript 3.0 Player},\footnote{The YouTube AcrionScript 2.0 Player API + has been deprecated as of January 27, 2015; however, it is still supported, for now.} but never pursued it because of my +general lack of interest in {\YouTube} (\url{www.youtube.com}). Recently, I +came across a very nice demo PDF that used the API, see +%\mlhref{http://www.uvsar.com/pdftube/}{PDF Tube - {\YouTube} API wrapper for PDF documents}. +``PDF Tube - {\YouTube} API wrapper for PDF documents'' (the page has +since been removed). +The SWF file and JavaScript are made freely available, so I +downloaded it, and was sufficiently impressed to port the example to +{\LaTeX} using various members of the {Acro\negthinspace\TeX} Fine Family of Software +\verb!:-{)!. The SWF file and JavaScript are due to the good folks at +\textbf{UVSAR} (\url{www.uvsar.com}). The \textbf{UVSAR}'s sample demo also appeared in the forums of +the \href{http://acrobatusers.com/forum/javascript/embed-youtube-video-pdf}{Acrobat User +Community}. + +The \textsf{yt4pdf} package uses the \textsf{rmannot} to embed the \textsf{SWF} +file that plays the {\YouTube} videos. There is a complete set of buttons +that come with the package to control the video: play, pause, stop +loading, rewind, load a video by its {\YouTube} video ID, and a button to +view a video on the {\YouTube} web site.\footnote{Some videos do not allow +embedded playback, and must be viewed on the {\YouTube} web site.} + +% http://acrobatusers.com/news/youtube-widget-acrobat + +\subsection{Sample files} + +The following are the sample files shipped with \textsf{yt4pdf}: +\begin{itemize} + \item \texttt{yt4pdf-1.tex} demonstrates the basic functionality of + the {\YouTube} RMA: the use of the poster, including \cs{ytComboList}, + \cs{ytComboBtn}, and \cs{ytvId}. + \item \texttt{yt4pdf-2.tex} experiments with different ways the + {\YouTube} annotation can be displayed + \begin{itemize} + \item As a small icon, videos are played in a floating window, + buttons displayed in the running footer. + \item[] This one uses a rollover, popup menu system (as opposed to + a combo box). The \textsf{popupmenu} package is used. + \item Using a built-in poster, with the combo box under the + annotation, control buttons in running footer. + \item Same as above, but control buttons moved to a two column + format. + \item Using the custom {\YouTube} for PDF poster with combo box and + control buttons under the RMA. + \end{itemize} + \item \texttt{yt4pdf-3.tex} illustrates the usage of the \texttt{play} and \texttt{load} + keys that are passed in the optional parameter of \cs{ytRmAnnot}. +\end{itemize} +% Advanced examples \href{http://www.math.uakron.edu/~dpstory/aebblog.html}{AeB Blog site}. + +\section{Requirements} + +This package is part of \textsf{AeB Pro}, which means Acrobat Distiller is +used to create the PDF; the package requires \textsf{rmannot}, which +creates rich media annotations. Therefore, we require +\begin{equation*} + \boxed{\text{\large\bfseries Adobe Acrobat, version 9.0 or later}} +\end{equation*} +To use this package, the document author must have AeB and AeB Pro +installed, as well as \textsf{rmannot}. The manual for \textsf{rmannot} +needs to be read closely to properly install it and to function correctly. +I have made \textsf{rmannot} a required package, and recently +have made the \textsf{popupmenu} package required as well. + +\section{Configuring your installation} + +In addition to configuring the \textsf{rmannot} package correctly, the +\textsf{yt4pdf} package needs configuring as well. The \textsf{yt4pdf} package +comes with a configuration file \texttt{yt4pdf.cfg}. Open this file in +your favorite editor to see +\begin{Verbatim}[fontsize=\small] +% yt4pdf config file. Delete the \endinput below and replace the path +% provided with the path to the swf folder of your yt4pdf installation. +% This path is used to locate the pdf_tube_basic.swf file, used to play +% YouTube videos. +\endinput +\renewcommand{\ytFolder}{C:/Users/Public/Documents/My TeX Files/% +tex/latex/aeb/aebpro/yt4pdf/swf} +\end{Verbatim} +Edit this file so that \cs{ytFolder} points to the \texttt{swf} folder on +your computer. + +\section{The Rich Mediation Annotation for {\YouTube}} + +The Rich Media Annotation (RMA) used is \cs{ytRmAnnot}, its definition +uses the command \cs{rmAnnot}, which is defined in the \textsf{rmannot} package. +\bVerb\takeMeasure{\string\ytRmAnnot[\ameta{KV-pairs}]\darg{\ameta{name}}\darg{\ameta{width}}\darg{\ameta{height}}}% +\begin{minipage}{\linewidth} +\begin{minipage}{\bxSize} +\xdef\panelWidth{\the\linewidth}% +\begin{Verbatim}[frame=single,commandchars=!(),rulecolor=\color{red}] +\ytRmAnnot[!ameta(KV-pairs)]{!ameta(name)}{!ameta(width)}{!ameta(height)} +\end{Verbatim} +\end{minipage}\hfill +\begin{minipage}{\linewidth-\panelWidth} +\setDisplayNumber\label{display:ytRmAnnot} +\end{minipage}\end{minipage}\endgroup +\PD +\begin{enumerate} + \item The first (optional) parameter is used to pass the key-value pairs of the + \cs{rmAnnot} command. Additionally, there are two other \ameta{KV-pairs} + recognized, specialized to the \cs{ytRmAnnot} command. + \begin{itemize} + \item \texttt{play=\ameta{vID}} Loads and plays the {\YouTube} video with + video ID of \ameta{vID}. + \item \texttt{load=\ameta{vID}} Loads the specified video's thumbnail + (as specified by \ameta{vID}) and prepares the player to play + the video. The player does not request the \textsf{FLV} until the play + button is pressed. + \end{itemize} + When you want to play a {\YouTube} video when the page containing + the annotation is opened, use the \texttt{play} key; for example + \texttt{play=GZ9e3Dy7obA} causes the video whose video ID is + \texttt{GZ9e3Dy7obA} to play when the page is opened. + + See the manual for the \pkg{rmannot} package for more details on the + key-value pairs that can be passed through the optional first + parameter. + + \item The \ameta{name} parameter is a name used to refer to the + annotation through underlying JavaScript code. The \ameta{name} + should consist of only letters and numbers. The value of this + parameter is placed in the macro \cs{ytCurrRMAName}. This macro is + used internally by the various control buttons. + + \item The width of the annotation. + + \item The height of the annotation. +\end{enumerate} + +\paragraph*{Annot Dimensions.} +The width and height of the {\YouTube} annotation should be \texttt{571bp} +and \texttt{330bp}, respectively, or any re-scaling of these dimensions. + +Examples, +\begin{Verbatim} + \ytRmAnnot[posternote=AcroTeX PDF Tube,play=eNzrn8-JFSE, + deactivated=pageclose]{YouTube1}{571bp}{330bp} +\end{Verbatim} +is a ``full-size'' annotation, while +\begin{Verbatim} + \ytRmAnnot[posternote=AcroTeX PDF Tube,load=eNzrn8-JFSE, + deactivated=pageclose]{YouTube1}{571bp/2}{330bp/2} +\end{Verbatim} +is half that size. The first example above plays a video when +the page is opened, the second example loads the thumbnail, and waits play +the video. + +You can also re-scale using either \cs{resizebox} or +\cs{scalebox} from the \textsf{graphicx} package. +\begin{Verbatim} + \resizebox{2in}{!}{\ytRmAnnot[posternote=AcroTeX PDF Tube, + deactivated=pageclose]{YouTube1}{571bp}{330bp}} +\end{Verbatim} +or, using \cs{scalebox}, +\begin{Verbatim} + \scalebox{.5}{\ytRmAnnot[posternote=AcroTeX PDF Tube, + deactivated=pageclose]{YouTube1}{571bp}{330bp}} +\end{Verbatim} + +\textbf{Running multiple videos at once.} At the time of this writing, the +\pkg{yt4pdf} package is not designed to run more than one video at a +time, that's not saying it cannot be done, however. It is not recommended, +indeed, why would you want to look at two {\YouTube} videos at the same +time? + +For documents with multiple {\YouTube} annotations over +several pages it is recommended, therefore, that the \texttt{deactivated=pageclose} +should be used in the optional parameter list of the \cs{ytRmAnnot} +command. + +\subsection{The \texorpdfstring{\protect\textsf{yt4pdf}}{yt4pdf} Poster} + +The \textsf{rmannot} package provides a standard poster (a gray rectangle +with text in the lower left corner). However, there is an especially +designed poster, designed by the folks at \textbf{UVSAR}. (See +Figure~\ref*{pdfytPoster}, page~\pageref*{pdfytPoster}.) + +\begin{figure}[htb] +\begin{center} + \includegraphics[scale=.5]{./graphics/pdfyt_poster}\\ + \caption{YouTube for PDF poster}\label{pdfytPoster} +\end{center} +\end{figure} + +\goodbreak +\textbf{To use this really cool poster:} +\begin{enumerate} + \item Insert the following line into the preamble, +\begin{Verbatim}[fontsize=\small] + \makePoster[bb=0 0 570.794 329.887]{pdfyt_poster}{pdfyt_poster} +\end{Verbatim} +The optional parameter should remain as it is, it adjusts the bounding +box so that the poster is properly placed. + +\item Use the \texttt{poster} key in the first optional parameter of +\cs{ytRmAnnot}, like so, +\begin{Verbatim} + \ytRmAnnot[poster=pdfyt_poster, + deactivated=pageclose]{YouTube}{571bp}{330bp}} +\end{Verbatim} +\end{enumerate} + +\subsection{Control Buttons} + +The {\YouTube} rich media annotation (as created by \cs{ytRmAnnot}), comes +with six (optional) control buttons. +\bVerb\takeMeasure{\string\ytSelect[\ameta{KV-pairs}]\darg{\ameta{vID}}\darg{\ameta{width}}\darg{\ameta{height}}}% +\begin{minipage}{\bxSize} +\begin{Verbatim}[frame=single,commandchars=!(),rulecolor=\color{red}] +\ytPlayToggle[!ameta(KV-pairs)]{!ameta(width)}{!ameta(height)} +\ytStopLoading[!ameta(KV-pairs)]{!ameta(width)}{!ameta(height)} +\ytMuteToggle[!ameta(KV-pairs)]{!ameta(width)}{!ameta(height)} +\ytRewind[!ameta(KV-pairs)]{!ameta(width)}{!ameta(height)} +\ytSelect[!ameta(KV-pairs)]{!ameta(vID)}{!ameta(width)}{!ameta(height)} +\ytOpenWeb[!ameta(KV-pairs)]{!ameta(width)}{!ameta(height)} +\end{Verbatim} +\end{minipage}\endgroup +\PD The labels are self-explanatory, the \texttt{} parameter is +the standard \textsf{eforms} optional parameter for changing the +appearance of the form. The \ameta{vID} parameter for \cs{ytSelect} is +a {\YouTube} video ID. + +\goodbreak +\CmdDescription We give brief descriptions of each of the six control +buttons. +\begin{itemize} + \item \cs{ytPlayToggle}: + This button has several functions, \textsf{PAUSE}, \textsf{PLAY}, \textsf{BUFFERING}, and \textsf{REPLAY}. + Initially the button label is on \textsf{PAUSE} (pressing it pauses a playing video); + the button label reads \textsf{PLAY} when the video is loaded and paused (pressing it plays or resumes + the video); while the video is loading, the button label is + \textsf{BUFFERING\dots}. After the video finishes playing, the button + label is changed to \textsf{Replay}. + \item \cs{ytStopLoading}: Pressing this button stops the streaming of the currently playing + video. If the video is started again, there will be some buffering before the play begins. + \item \cs{ytMuteToggle}: This button toggles and sound off and on. Button labels are + \textsf{MUTE} and \textsf{UNMUTE}. + \item \cs{ytRewind}: If the video is playing, this button + stops the video, rewinds it to the beginning, and starts play again. If the video + is paused, this button rewinds the video to the beginning, the video remains paused. + \item \cs{ytSelect}: When this button is pressed, a response dialog opens. + The user enters a {\YouTube} video ID into the field. On pressing OK, this video is played. + + \item[] The second parameter \ameta{vID} is the default video + that is displayed in the input box of the response box that opens. + \item[] \textbf{Note:} Some {\YouTube} videos are security + restricted and cannot be played through an embedded player, such as the one used here. + If video ID of a video that does not allow embedded playback, a dialog appears giving + the user the opportunity to view the video on the web. + \item \cs{ytOpenWeb}: The user has the option of pressing this button to view the + current video on the web at \texttt{www.youtube.com}. +\end{itemize} + +The first (optional) parameter can be used to modify the appearance of the +individual buttons. To modify the appearances of the buttons as a group, +use, +\bVerb\takeMeasure{\string\ytBtnPresets\darg{\ameta{KV-pairs}}}% +\begin{minipage}{\bxSize} +\begin{Verbatim}[frame=single,commandchars=!(),rulecolor=\color{red}] +\ytBtnPresets{!ameta(KV-pairs)} +\end{Verbatim} +\end{minipage}\eVerb +The key-value pairs are ones defined for form fields created by the \textsf{eforms} +package. The default definition is, +\begin{Verbatim}[xleftmargin=\amtIndent] +\ytBtnPresets{\BC{.5 0 0}\S{S}\textFont{HeBo}} +\end{Verbatim} + +The second parameter of \cs{ytRmAnnot} is the name to be associated with +that annot; the name of the annot is not known until after the annot is +defined. The command \cs{DeclareYTName}, +\bVerb\takeMeasure{\string\DeclareYTName\darg{\ameta{name}}}% +\begin{minipage}{\bxSize} +\begin{Verbatim}[frame=single,commandchars=!(),rulecolor=\color{red}] +\DeclareYTName{!ameta(name)} +\end{Verbatim} +\end{minipage}\eVerb +allows you to define the name prior to the creation of the annot. This is +useful if you want to place the control buttons above the annot itself. By +specifying the name, the control buttons will know the name of the annot +they are to control. + +\subsection{Controls for playing a {\YouTube} video} + +To actually play a video, you must pass a video ID to the underlying SWF +file. We present two methods here, through links and through a combo box. +One of the example files, \texttt{yt4pdf-2.pdf}, illustrates another method +using a popup menu. + +\subsubsection{Playing a video through a link} + +The command \cs{ytvId} creates a list such that when you click on it, the +video specified by the second parameter of the command is played in the +associated Rich Media annotation created by \cs{ytRmAnnot}. The associated +RMA is the one most recently defined prior to the link. If the link occurs +before the target RMA, you can use \cs{DeclareYTName} to set the name of +the target RMA for the link. +\bVerb\takeMeasure{\string\ytvId[\ameta{KV-pairs}]\darg{\ameta{vID}}\darg{\ameta{text}}}% +\begin{minipage}{\bxSize} +\begin{Verbatim}[frame=single,commandchars=!(),rulecolor=\color{red}] +\ytvId[!ameta(KV-pairs)]{!ameta(vID)}{!ameta(text)} +\end{Verbatim} +\end{minipage}\endgroup +\PD The first parameter takes the usual key-value pairs for links created +by the \textsf{eforms} package. The second parameter is the video ID to be +played. The third parameter is the text to be displayed by the link, +usually the title of the {\YouTube} video. + +\cs{ytvId} loads and plays the specified video; there is an +\texttt{*}-form of this command, +\bVerb\takeMeasure{\string\ytvId*[\ameta{KV-pairs}]\darg{\ameta{vID}}\darg{\ameta{text}}}% +\begin{minipage}{\bxSize} +\begin{Verbatim}[frame=single,commandchars=!(),rulecolor=\color{red}] +\ytvId*[!ameta(KV-pairs)]{!ameta(vID)}{!ameta(text)} +\end{Verbatim} +\end{minipage}\eVerb +When this form is used, the {\YouTube} thumbnail image for the video is +displayed. The player does not +request the video until the play button is pressed. + +You can set the appearances for a all links created by \cs{ytvId} by using +\cs{ytvIdPresets} +\bVerb\takeMeasure{\string\ytvIdPresets\darg{\ameta{KV-pairs}}}% +\begin{minipage}{\bxSize} +\begin{Verbatim}[frame=single,commandchars=!(),rulecolor=\color{red}] +\ytvIdPresets{!ameta(KV-pairs)} +\end{Verbatim} +\end{minipage}\eVerb +The key-value pairs are ones defined for form fields created by the \textsf{eforms} +package. The default definition is +\begin{Verbatim}[xleftmargin=\amtIndent] +\ytvIdPresets{\linktxtcolor{webbrown}} +\end{Verbatim} + +\subsubsection{Playing a video using a combo box} + +You can created a combo box with a play list. There are three commands +that create the combo list, \cs{ytPlayList}, \cs{ytComboList}, and +\cs{ytComboBtn}. +\bVerb\takeMeasure{\string\ytPlayList\darg{\ameta{default\_vId}}\darg{\ameta{playlist}}}% +\begin{minipage}{\bxSize} +\begin{Verbatim}[frame=single,commandchars=!(),rulecolor=\color{red}] +\ytPlayList{!ameta(default_vId)}{!ameta(playlist)} +\end{Verbatim} +\end{minipage}\eVerb +This command sets the play list to be displayed in the combo box, it needs +to be executed before the actual creation of the combo box (using +\cs{ytComboList}). The first parameter is the default video ID, this title +will be initially displayed by the combo box. The \ameta{playlist} is +an array of video IDs and title pairs. The \ameta{playlist} is conveniently defined +within the \cs{declarePlayList} command: +\bVerb\takeMeasure{\string\declarePlayList\darg{\ameta{\cs{plCmd}}}\{\%}% +\begin{minipage}{\bxSize} +\begin{Verbatim}[frame=single,commandchars=!(),rulecolor=\color{red}] +\declarePlayList{!ameta(\plCmd)}{% + !ameta(array-of-vIDs-titles) +} +\end{Verbatim} +\end{minipage}\eVerb The array of video IDs and title pairs are saved under the command name \ameta{plCmd}. +For example +\begin{Verbatim}[xleftmargin=\amtIndent,fontsize=\small] +\declarePlayList{\playList}{% + [(GZ9e3Dy7obA)(Kung-Fu Fighting {(Bruce Lee version)})] + [(eNzrn8-JFSE)(Open at Adobe)] + [(5y9-EVmreU4)(Lori's Corner: Episode \#1)] +} +\end{Verbatim} +The format for each pair is \texttt{[(\ameta{vId})(\ameta{title})]}. Notice that in the case +of the Bruce Lee video, the title itself contains parentheses; to avoid parsing errors when +the \pkg{eforms} package builds the combo box, \emph{enclose these parentheses in a pair of matching braces}. + +In the example above, the array, in its correct format, is loaded +conveniently into a macro \cs{playList} declared through \cs{declarePlayList}. The macro may then be passed as the +second parameter of \cs{ytPlayList}. Thus, an example of the use of +\cs{ytPlayList} is +\begin{Verbatim}[xleftmargin=\amtIndent] +\ytPlayList{eNzrn8-JFSE}{\playList} +\end{Verbatim} + +There is a convenience command, \cs{ytIdTitle}, that is used to build +a \cs{ytPlayList}. +\bVerb\takeMeasure{\string\ytIdTitle\darg{\ameta{vId}}\darg{\ameta{title}}}% +\begin{minipage}{\bxSize} +\begin{Verbatim}[frame=single,commandchars=!(),rulecolor=\color{red}] +\ytIdTitle{!ameta(vId)}{!ameta(title)} +\end{Verbatim} +\end{minipage}\eVerb +The above example can the be re-written as, +\begin{Verbatim}[xleftmargin=\amtIndent,fontsize=\small] +\declarePlayList{\playList}{% + \ytIdTitle{GZ9e3Dy7obA}{Kung-Fu Fighting {(Bruce Lee version)}} + \ytIdTitle{eNzrn8-JFSE}{Open at Adobe} + \ytIdTitle{5y9-EVmreU4}{Lori's Corner: Episode \#1} +} +\end{Verbatim} + +\paragraph*{The combo box.} The syntax for the combo box itself is +\bVerb\takeMeasure{\string\ytComboList[\ameta{KV-pairs}]\darg{\ameta{width}}\darg{\ameta{height}}}% +\begin{minipage}{\bxSize} +\begin{Verbatim}[frame=single,commandchars=!(),rulecolor=\color{red}] +\ytComboList[!ameta(KV-pairs)]{!ameta(width)}{!ameta(height)} +\end{Verbatim} +\end{minipage}\eVerb +The \cs{ytComboList} is a combo box of video Ids and titles. The user +selects a video based on its title, then presses the \textsf{PLAY} button +(see \cs{ytComboBtn} below). This command is executed \emph{before} +\cs{ytComboBtn} to set the play list, and the default value. +\PD\begin{itemize} + \item \ameta{KV-pairs}: (optional) The key-value pairs associated with an + \textsf{eforms} form field, used to change the appearance of the field. + \item \ameta{width}: The width of the combo box + \item \ameta{height}: The height of the combo box +\end{itemize} +The appearance can be changed locally by the optional first parameter. The +command \cs{ytComboListPresets} is used to change all combo lists create +by \cs{ytComboList}. The command takes has one parameter, the key-value +pairs for changing the appearance. The default definition is +\verb!\ytComboListPresets{}!. + +Originally, I visualized only one combo box per page, recently that +mind-set has changed. Should you want several combo boxes, as created by +\cs{ytComboList}, each box must have a unique name. To that end +\bVerb\takeMeasure{\string\ytNewBaseName[\ameta{name}]}% +\begin{minipage}{\bxSize} +\begin{Verbatim}[frame=single,commandchars=!(),rulecolor=\color{red}] +\ytNewBaseName[!ameta(name)] +\ytResetBaseName +\end{Verbatim} +\end{minipage}\eVerb +The first command, \cs{ytNewBaseName}, has one optional parameter, if no +parameter is supplied, then a base name will be generated; otherwise, +the title of the combo box will be based on the \ameta{name} passed to +it. For the command \cs{ytResetBaseName}, the first command effects the JS +and the field name of \cs{ytComboBtn} described below. +\begin{Verbatim}[xleftmargin=\amtIndent,fontsize=\small,commandchars=!()] +\begin{itemize} +\item \ytNewBaseName\relax\ytPlayList{!ameta(default_Id)}{\playListii}% + \ytComboList{2.5in}{11bp}\kern1bp\ytComboBtn{33bp}{11bp} +\item \ytNewBaseName[Listiii]\ytPlayList{!ameta(default_Id)}{\playListiii}% + \ytComboList{2.5in}{11bp}\kern1bp\ytComboBtn{33bp}{11bp} +\end{itemize} +\end{Verbatim} +\textbf{\textcolor{red}{Note:}} Because \cs{ytNewBaseName} has an optional +argument, you should place a \cs{relax} after \cs{ytNewBaseName} to prevent +premature expansion of the \cs{ytplayList} command that follows. + +\newtopic Once the selection has been made from the combo box, the user +can play the selection by pressing the button created by \cs{ytComboBtn}. +\bVerb\takeMeasure{\string\ytComboBtn[\ameta{KV-pairs}]\darg{\ameta{width}}\darg{\ameta{height}}}% +\begin{minipage}{\bxSize} +\begin{Verbatim}[frame=single,commandchars=!(),rulecolor=\color{red}] +\ytComboBtn[!ameta(KV-pairs)]{!ameta(width)}{!ameta(height)} +\end{Verbatim} +\end{minipage}\eVerb +\textbf{\textcolor{red}{Note:}} If you hold down the shift key and click on +the button, the thumbnail poster is loaded, and the player is ready to +play the video. +\PD\begin{itemize} + \item \ameta{KV-pairs}: (optional) The key-value pairs associated with an + \textsf{eforms} form field, used to change the appearance of the field. + \item \ameta{width}: The width of the combo box + \item \ameta{height}: The height of the combo box +\end{itemize} +The appearance can be changed locally by the optional first parameter. The +command \cs{ytComboBtnPresets} is used to change all combo lists create +by \cs{ytComboBtn}. The command takes has one parameter, the key-value +pairs for changing the appearance. The default definition is +\verb!\ytComboBtnPresets{}!. + +\subsection{Using the \textsf{popupmenu} package} + +The \pkg{popupmenu} a required package, \pkg{yt4pdf} adds some commands and +JS to facilitate its usage. The demo file for this feature is +\texttt{yt4pdf-2.tex}, where you will find some comments in the source file. + +In the preamble, we define our menu structure, + +\begin{Verbatim}[numbers=left,xleftmargin=\leftmargini,fontsize=\fontsize{9}{11}\selectfont] +\begin{popupmenu}{YTMenu} + \puIdTitle{Select a You Tube Video}{} % A title has no yt Id + \begin{submenu}{title=Music Videos} + \puIdTitle{Ink Spots - If I didn't care}{rvwfLe6sLis} + \puIdTitle{Ink Spots - My Prayer}{h7KJCns5v3g} + \end{submenu} + \begin{submenu}{title=Adobe Related Videos} + \puIdTitle{Open at Adobe}{eNzrn8-JFSE} + \puIdTitle{Lori's Corner Episode \#1}{5y9-EVmreU4} + \puIdTitle{Intro to PDF Portfolios}{T9Yzo_hlwP0} + \end{submenu} +\end{popupmenu} +\ytPopupMenuData{\YTMenu} +\end{Verbatim} +The \cs{puIdTitle} is a convenience macro to enter the menu data; the +first argument is the title of the {\YouTube} video, the second argument +is the {\YouTube} ID. There may be several \texttt{popupmenu} environments, each +with a different name. After the last such environment, execute the +\cs{ytPopuMenuData} command, seen in line~(12). Its argument is a token +list of all popupmenus; here, we have only one. If there are several, they +are listed as follows: +\begin{Verbatim}[xleftmargin=\leftmargini] +\ytPopupMenuData{\YTMenu\myEduVids\myMusicVids} +\end{Verbatim} + +The menu is displayed as an mouse-over action of button, here is the +verbatim listing from \texttt{yt4pdf-2.tex} + +\begin{Verbatim}[numbers=left,xleftmargin=\leftmargini,fontsize=\fontsize{9}{11}\selectfont] +\DeclareYTName{ytInWindow} +... +\newcommand{\myPBPresets}{% + \CA{YT Menu}\textColor{0 0 1}\W1\BC{}\textSize{0}\S{S} + \AA{\AAMouseEnter{\JS{ytPopupMenu("\ytCurrRMAName",YTMenu)}}}} +\setWindowDimPos{% + position={halign=center,valign=center,hoffset=0,voffset=0}, + width={default=571},height={default=330}}% +\setlength{\pichskip}{3pt} +\parpic(.25in,.25in){% +\parbox{.25in}{\offinterlineskip\resizebox{.25in}{!}{% + \ytRmAnnot[windowed,poster=yt_poster,deactivated=pageclose]% + {ytInWindow}{72bp}{72bp}% +}}} +\pushButton[\presets{\myPBPresets}]{myYTMenu}{20bp}{5bp} +On this page, the You Tube annotation is icon size and the +video is played in a floating window. +\end{Verbatim} +\textbf{Comments:} +\begin{itemize} + \item In line~(1) we declare the name of the {\YouTube} annot to be + used. We do this because we need to use the name before the annot is + defined. The annot itself is not defined until line~(12). + \item Lines~(3)--(5): Define a command to be used for passing the + button attributes for the \texttt{myYTMenu} button (seen in + line~(15)). In line~(5) we define the action for the button; it is a + mouse enter action that executes the \texttt{ytPopupMenu} JS function + defined in the \texttt{yt2pdf} package. This function takes two + arguments, the first is the name of the target Rich Media Annotation + hat will display the videos, this name is \verb!"\ytCurrRMAName"!, + where \cs{ytCurrRMAName} holds the name of the most recent {\YouTube} + annotation. The second argument is the name of the menu data (defined + by the \texttt{popupmenu} environment. + \item Lines~(9)--(14): We create an annot so that it appears as an + icon, the text of the paragraph wraps around the icon. This is what we + do with the \cs{parpic} command. In lines~(12)--(13), we create the + {\YouTube} annot using \cs{ytRmAnnot}. + \item In line~(15) we have a button with a mouse rollover action. Note + we pass the earlier defined presets to this button. +\end{itemize} +See the complete source file in \texttt{yt4pdf-2.tex}. + + +\section{Language localizations} + +The default language for \textsf{yt4pdf} is English; the English strings +that \textsf{yt4pdf} uses are listed below. These can be redefined as +desired. +\begin{Verbatim} +\newcommand{\ytStrPLAY}{PLAY} +\newcommand{\ytStrREPLAY}{REPLAY} +\newcommand{\ytStrPAUSE}{PAUSE} +\newcommand{\ytStrBuffering}{Buffering...} +\newcommand{\ytStrStopLoading}{Stop Loading} +\newcommand{\ytStrMUTE}{MUTE} +\newcommand{\ytStrUNMUTE}{UNMUTE} +\newcommand{\ytStrREWIND}{REWIND} +\newcommand{\ytStrLoadVideo}{Load Video} +\newcommand{\ytStrWatchOnWeb}{Watch on YouTube} +% response dialog box associated with ytSelect() +\newcommand{\ytRespQues}{Enter the YouTube Video ID} +\newcommand{\ytRespTitle}{Load a Video} +\newcommand{\ytRespLabel}{ID:} +% alert error messages +\newcommand{\ytStrErrorVideoNotFound}{Error: Video not found} +\newcommand{\ytStrErrorNoEmbed}{Error: This video does not allow + embedded playback \r\r Would you like to view this video + on the web?} +\newcommand{\ytStrConnecTimedOut}{Connection timed out, try again.} +\end{Verbatim} + +\bigskip + +That's all for now, I simply must get back to my retirement. {\dps} + +\end{document} diff --git a/obsolete/macros/latex/contrib/yt4pdf/examples/config_intacc.def b/obsolete/macros/latex/contrib/yt4pdf/examples/config_intacc.def new file mode 100644 index 0000000000..ac2e0f8e25 --- /dev/null +++ b/obsolete/macros/latex/contrib/yt4pdf/examples/config_intacc.def @@ -0,0 +1,29 @@ +\newpage + +\begin{minipage}[t]{3in}\parindent20pt\small +\noindent\makebox[\linewidth][c]{\bfseries\normalsize\color{blue}Configuring +Preferences}\\[3pt] +To avoid the security alerts when loading FLV files from You Tube, +configure your preferences as described below. + +Start Adobe Reader 9 or later (or Acrobat~9 or later), and open the \textbf{Preferences} +dialog box (located in the menu system by selecting \textbf{Edit +\texttt{>} Preferences} or using the shortcut Ctrl+K); select +\textbf{Trust Manager} from the left-hand \textbf{Categories} panel. On +the right side of the dialog box, press the button labeled \textbf{Change +Settings}, shown below.\par\vspace*{3pt}\centering +\includegraphics[width=\linewidth]{graphics/trustmanager} +\end{minipage}\hfill +\begin{minipage}[t]{\linewidth-3in-10pt}\small +In the \textbf{Manage Internet Access}, make selections as +indicated by the red boxes.\par\medskip +\noindent\makebox[\linewidth][c]{\bfseries\normalsize\color{blue}For Version 9}\\[3pt] +\noindent\makebox[\linewidth][c]{\includegraphics[width=2in]{graphics/MIA9}}\\[3pt] +That is, select \textbf{Allow all web sites}\par\medskip +\noindent\makebox[\linewidth][c]{\bfseries\normalsize\color{blue}For Version 10}\\[3pt] +\noindent\makebox[\linewidth][c]{\includegraphics[width=2in]{graphics/MIAX}}\\[3pt] +\textbf{Allow PDF files to access all web sites}\par\medskip +Exit the dialogs, and try \textbf{YT4PDF}! +\end{minipage} + +\newpage diff --git a/obsolete/macros/latex/contrib/yt4pdf/examples/graphics/MIA9.eps b/obsolete/macros/latex/contrib/yt4pdf/examples/graphics/MIA9.eps new file mode 100644 index 0000000000..e68a0a0b87 Binary files /dev/null and b/obsolete/macros/latex/contrib/yt4pdf/examples/graphics/MIA9.eps differ diff --git a/obsolete/macros/latex/contrib/yt4pdf/examples/graphics/MIAX.eps b/obsolete/macros/latex/contrib/yt4pdf/examples/graphics/MIAX.eps new file mode 100644 index 0000000000..71bdbbc0c4 Binary files /dev/null and b/obsolete/macros/latex/contrib/yt4pdf/examples/graphics/MIAX.eps differ diff --git a/obsolete/macros/latex/contrib/yt4pdf/examples/graphics/trustmanager.eps b/obsolete/macros/latex/contrib/yt4pdf/examples/graphics/trustmanager.eps new file mode 100644 index 0000000000..ee141a72ec Binary files /dev/null and b/obsolete/macros/latex/contrib/yt4pdf/examples/graphics/trustmanager.eps differ diff --git a/obsolete/macros/latex/contrib/yt4pdf/examples/graphics/yt_icon_sm.eps b/obsolete/macros/latex/contrib/yt4pdf/examples/graphics/yt_icon_sm.eps new file mode 100644 index 0000000000..2e6e0ff10e Binary files /dev/null and b/obsolete/macros/latex/contrib/yt4pdf/examples/graphics/yt_icon_sm.eps differ diff --git a/obsolete/macros/latex/contrib/yt4pdf/examples/yt4pdf-1.tex b/obsolete/macros/latex/contrib/yt4pdf/examples/yt4pdf-1.tex new file mode 100644 index 0000000000..fac944ab7a --- /dev/null +++ b/obsolete/macros/latex/contrib/yt4pdf/examples/yt4pdf-1.tex @@ -0,0 +1,93 @@ +\documentclass{article} +\usepackage{amsmath} +% +% the driver line is not necessary if you +% have aebpro.cfg configured to your driver. +% +\usepackage[% + web={designv,pro,tight,usesf,usetemplates}, + eforms,graphicxsp={showembeds},aebxmp +]{aeb_pro} +\usepackage{rmannot} +\usepackage{yt4pdf} +\usepackage{multicol} + +\textBgColor{lightgray} + +\DeclareDocInfo +{ + title=The \texorpdfstring{\textsf{yt4pdf} Package\\[3pt]}{yt4pdf Package: }Demo 1 of You Tube API, + author=D. P. Story, + university=Acro\negthinspace\TeX.Net, + email=dpstory@acrotex.net, + subject={Live streamed video from YouTube.com}, + keywords={You Tube, AeB, rmannot}, + talksite=\url{http://www.acrotex.net}, + talkdate={\today} +} +\talkdateLabel{Published:} + +\def\AcroTeX{Acro\!\TeX} + +\makePoster{pdfyt_poster}{pdfyt_poster} + +\parindent=0pt\parskip6pt +\rheader{} + +\DeclarePageLayout{footskip=29pt} + +\declarePlayList{\playList}{% dps note I've put these parentheses within braces, that was the problem. + \ytIdTitle{Kung-Fu Fighting {(Bruce Lee version)}}{GZ9e3Dy7obA} + \ytIdTitle{Kung-Fu Fighting {(Original, must view on YouTube)}}{jhUkGIsKvn0} + \ytIdTitle{RAF Sculthorpe {(Watch for my Mom!)}}{K7H8QghVs9k} + \ytIdTitle{Rocket Jump}{7XzdZ4KcI8Y} + \ytIdTitle{Abdul And Cleopatra - Jonathan Richman and the Modern Lovers}{mLDF5MBMWHE} +} + +\begin{document} + +\maketitle + +\input{config_intacc.def} + +\begin{center}\bfseries\Large\color{blue}YT4PDF\end{center} + + +%\previewtrue + +\begin{minipage}{571bp/2} +\ytRmAnnot[poster=pdfyt_poster,deactivated=pageclose]{YouTube}{571bp/2}{330bp/2} +\end{minipage}\hfill +\begin{minipage}{\linewidth-290bp-10bp}\centering +\ytPlayToggle{1in}{11bp}\\[3bp] +\ytStopLoading[\textSize{0}]{1in}{11bp}\\[3bp] +\ytMuteToggle{1in}{11bp}\\[3bp] +\ytRewind{1in}{11bp}\\[3bp] +\ytSelect[\textSize{0}]{eNzrn8-JFSE}{1in}{11bp}\\[6bp] +\ytOpenWeb[\textSize{0}]{1in}{11bp} +\end{minipage} + +\medskip + +\begin{flushleft} +\raggedcolumns\bfseries +Favorites to play:\vspace{-.5\baselineskip} +\begin{multicols}{2}\ytPlayList{GZ9e3Dy7obA}{\playList}% +\begin{itemize} +\item \ytComboList{\linewidth-1bp-33bp}{11bp}\kern1bp\ytComboBtn[\TU{Click to play, shift-click to load thumbnail only}]{33bp}{11bp} +\item \ytvId{_iUnOpPEg0w}{TegrityGuy} + +\item \ytvId*{eNzrn8-JFSE}{Open at Adobe} (load thumbnail) + +\columnbreak + +\item \ytvId{q-iiFo-6Vi0}{Digital Signature in 9.0 Pro} +\item \ytvId{5y9-EVmreU4}{Lori's Corner: Episode \#1} +\item \ytvId{T9Yzo_hlwP0}{Intro to PDF Portfolios} +\end{itemize} +\end{multicols} +\end{flushleft} + + + +\end{document} diff --git a/obsolete/macros/latex/contrib/yt4pdf/examples/yt4pdf-2.tex b/obsolete/macros/latex/contrib/yt4pdf/examples/yt4pdf-2.tex new file mode 100644 index 0000000000..558b39288e --- /dev/null +++ b/obsolete/macros/latex/contrib/yt4pdf/examples/yt4pdf-2.tex @@ -0,0 +1,152 @@ +\documentclass{article} +\usepackage{amsmath} +% +% the driver line is not necessary if you +% have aebpro.cfg configured to your driver. +% +\usepackage[% + web={designv,pro,tight,usesf,usetemplates}, + eforms,graphicxsp={showembeds},aebxmp +]{aeb_pro} +\usepackage{yt4pdf} +\usepackage{picins} + +% \textBgColor{lightgray} + +\DeclareDocInfo +{ + title=The \texorpdfstring{\textsf{yt4pdf} Package\\[3pt]}{yt4pdf Package: }Demo 2 of You Tube API, + author=D. P. Story, + university=Acro\negthinspace\TeX.Net, + email=dpstory@acrotex.net, + subject={Live streamed video from YouTube.com}, + keywords={You Tube, AeB, rmannot}, + talksite=\url{http://www.acrotex.net}, + talkdate={\today} +} +\talkdateLabel{Published:} + +\def\AcroTeX{Acro\!\TeX} + +\makePoster{pdfyt_poster}{pdfyt_poster} +\makePoster{yt_poster}{graphics/yt_icon_sm} + +\parindent=0pt\parskip6pt +\rheader{} + +\DeclarePageLayout{footskip=15.5pt} + +%\previewtrue + +\declarePlayList{\playList}{% + \ytIdTitle{Kung-Fu Fighting {(Bruce Lee version)}}{GZ9e3Dy7obA} + \ytIdTitle{Kung-Fu Fighting {(Original, must view on YouTube)}}{jhUkGIsKvn0} + \ytIdTitle{RAF Sculthorpe {(Watch for my Mom!)}}{K7H8QghVs9k} + \ytIdTitle{Rocket Jump}{7XzdZ4KcI8Y} +} + +% +% Note: popupmenu package version 1.0 (2010/09/18) or later required here. +% +\begin{popupmenu}{YTMenu} + \puIdTitle{Select a You Tube Video}{} % A title has no yt Id + \begin{submenu}{title=Music Videos} + \puIdTitle{Kung-Fu Fighting (Bruce Lee version)}{GZ9e3Dy7obA} + \puIdTitle{Kung-Fu Fighting (Original, view on You Tube)}{jhUkGIsKvn0} + \puIdTitle{Ink Spots - If I didn't care}{rvwfLe6sLis} + \puIdTitle{Ink Spots - My Prayer}{h7KJCns5v3g} + \end{submenu} + \begin{submenu}{title=Adobe Related Videos} + \puIdTitle{Open at Adobe}{eNzrn8-JFSE} + \puIdTitle{Lori's Corner Episode \#1}{5y9-EVmreU4} + \puIdTitle{Intro to PDF Portfolios}{T9Yzo_hlwP0} + \end{submenu} + \begin{submenu}{title=Action Videos} + \puIdTitle{Rocket Jump}{7XzdZ4KcI8Y} + \puIdTitle{AimBot}{NYGlWjIKoY4} + \puIdTitle{Flower Warfare}{031Dshcnso4} + \puIdTitle{Modern Warfare: Frozen Crossing Pt. 1}{rzQMGMuD1sU} + \puIdTitle{Modern Warfare: Frozen Crossing Pt. 2}{a08ViuvORRM} + \end{submenu} +\end{popupmenu} + +% After defining all menus used with YouTube videos, we declare them using \ytPopupMenuData +% The argument is a token list: \ytPopupMenuData{\myEducationMenu\myFunMenu...} +\ytPopupMenuData{\YTMenu} + +\begin{document} + +\maketitle + +\input{config_intacc.def} + + +\begin{center}\bfseries\Large\color{blue}YT4PDF\end{center} + +\DeclareYTName{ytInWindow} +\ytBtnPresets{\BC{.5 0 0}\W{1}\S{S}\textFont{HeBo}}% +{\setlength{\dimen0}{(\linewidth)/6-1bp}\xdef\ytWidth{\the\dimen0}} %-.5bp +\cfooter{\makebox[\linewidth][c]{\kern1bp\ytPlayToggle{\ytWidth}{11bp}\kern1bp\ytStopLoading[\textSize{0}]{\ytWidth}{11bp}\kern1bp +\ytMuteToggle{\ytWidth}{11bp}\kern1bp\ytRewind{\ytWidth}{11bp}\kern1bp +\ytSelect[\textSize{0}]{eNzrn8-JFSE}{\ytWidth}{11bp}\kern1bp\ytOpenWeb[\textSize{0}]{\ytWidth}{11bp}}} + +\newcommand{\myPBPresets}{\CA{YT Menu}\textColor{0 0 1}\W1\BC{}\textSize{0} + \S{S}\AA{\AAMouseEnter{\JS{ytPopupMenu("\ytCurrRMAName",YTMenu)}}}} + +\setWindowDimPos{position={halign=center,valign=center,hoffset=0,voffset=0}, + width={default=571},height={default=330}}% + +\setlength{\pichskip}{3pt} +\parpic(.25in,.25in){% +\parbox{.25in}{\offinterlineskip\resizebox{.25in}{!} +{\ytRmAnnot[windowed,poster=yt_poster,deactivated=pageclose]{ytInWindow}{72bp}{72bp}}}} +\pushButton[\presets{\myPBPresets}]{myYTMenu}{20bp}{5bp} +On this page, the You Tube annotation is icon size and the video is played +in a floating window. + +Move the window by dragging its title bar. Resize it by dragging the +lower-right corner. Close the window by clicking on the upper-right +corner. + +The \textsf{YT Menu} uses the \textsf{popupmenu} package. Alternatively, +we could just use the combo box that has been used already, but, I thought +we might try something different. + +\newpage + +\ytRmAnnot[posternote=AcroTeX PDF Tube,deactivated=pageclose]{YouTube1}{571bp/2}{330bp/2}\\ +\ytPlayList{GZ9e3Dy7obA}{\playList}\ytComboListPresets{\textSize{9}}% +\ytComboList{(571bp/2)-1bp-33bp}{11bp}\kern1bp\ytComboBtn[\TU{Click to play, shift-click to load thumbnail only}]{33bp}{11bp} + +\newpage +\cfooter{} +\begin{minipage}{571bp/2} +\ytRmAnnot[posternote=AcroTeX PDF Tube,deactivated=pageclose]{YouTube2}{571bp/2}{330bp/2}\\ +\ytPlayList{GZ9e3Dy7obA}{\playList}\ytComboListPresets{\textSize{9}}% +\ytComboList{(571bp/2)-1bp-33bp}{11bp}\kern1bp\ytComboBtn[\TU{Click to play, shift-click to load thumbnail only}]{33bp}{11bp} +\end{minipage}\hfill +\begin{minipage}{\linewidth-290bp-10bp}\centering +\ytPlayToggle{1in}{11bp}\\[3bp] +\ytStopLoading[\textSize{0}]{1in}{11bp}\\[3bp] +\ytMuteToggle{1in}{11bp}\\[3bp] +\ytRewind{1in}{11bp}\\[3bp] +\ytSelect[\textSize{0}]{eNzrn8-JFSE}{1in}{11bp}\\[6bp] +\ytOpenWeb[\textSize{0}]{1in}{11bp} +\end{minipage} + +\newpage + +\begin{center} +\begin{minipage}{571bp/2} +\ytRmAnnot[poster=pdfyt_poster,deactivated=pageclose]{YouTube3}{571bp/2}{330bp/2}\\ +\ytPlayList{GZ9e3Dy7obA}{\playList}\ytComboListPresets{\textSize{9}}% +\ytComboList{(571bp/2)-1bp-33bp}{11bp}\kern1bp\ytComboBtn[\TU{Click to play, shift-click to load thumbnail only}]{33bp}{11bp}\\[1bp] +{\setlength{\dimen0}{(\linewidth+1bp)/6-1bp}\xdef\ytWidth{\the\dimen0}}% +\ytPlayToggle{\ytWidth}{11bp}\kern1bp\ytStopLoading[\textSize{0}]{\ytWidth}{11bp}\kern1bp +\ytMuteToggle{\ytWidth}{11bp}\kern1bp\ytRewind{\ytWidth}{11bp}\kern1bp +\ytSelect[\textSize{0}]{eNzrn8-JFSE}{\ytWidth}{11bp}\kern1bp +\ytOpenWeb[\textSize{0}\CA{View on Web}]{\ytWidth}{11bp} +\end{minipage} +\end{center} + +\end{document} diff --git a/obsolete/macros/latex/contrib/yt4pdf/examples/yt4pdf-3.tex b/obsolete/macros/latex/contrib/yt4pdf/examples/yt4pdf-3.tex new file mode 100644 index 0000000000..03625c9fe1 --- /dev/null +++ b/obsolete/macros/latex/contrib/yt4pdf/examples/yt4pdf-3.tex @@ -0,0 +1,88 @@ +%\ytIdTitle{No Ordinary Love - Sade}{_WcWHZc8s2I} +\documentclass{article} +\usepackage{amsmath} +% +% the driver line is not necessary if you +% have aebpro.cfg configured to your driver. +% +\usepackage[% + web={designv,pro,tight,usesf,usetemplates}, + eforms,graphicxsp={showembeds},aebxmp +]{aeb_pro} +\usepackage{yt4pdf} + +%\margins{10bp}{10bp}{.5in}{.5in} % left,right,top, bottom +%\screensize{7.5in}{10in} % height,width dimensions + +\textBgColor{lightgray} + +\DeclareDocInfo +{ + title=The \texorpdfstring{\textsf{yt4pdf} Package\\[3pt]}{yt4pdf Package: }Demo 3 of You Tube API, + author=D. P. Story, + university=Acro\negthinspace\TeX.Net, + email=dpstory@acrotex.net, + subject={Live streamed video from YouTube.com}, + keywords={You Tube, AeB, rmannot}, + talksite=\url{http://www.acrotex.net}, + talkdate={\today} +}\talkdateLabel{Published:} + +\def\AcroTeX{Acro\!\TeX} + +\makePoster{pdfyt_poster}{pdfyt_poster} +\makePoster{yt_poster}{graphics/yt_icon_sm} + +\parindent=0pt\parskip6pt +\rheader{} + +% dps need to change the catcode of subscript (_) before hyperref gets +% chance to look at it. +\declarePlayList{\playList}{% + \ytIdTitle{Kung-Fu Fighting {(Bruce Lee version)}} {GZ9e3Dy7obA} + \ytIdTitle{Kung-Fu Fighting {(Original, must view on YouTube)}}{jhUkGIsKvn0} + \ytIdTitle{RAF Sculthorpe {(Watch for my Mom!)}} {K7H8QghVs9k} + \ytIdTitle{Rocket Jump} {7XzdZ4KcI8Y} + \ytIdTitle{No Ordinary Love - Sade} {_WcWHZc8s2I} +} + +\begin{document} + +\maketitle + +\input{config_intacc.def} + +\begin{center}\bfseries\Large\color{blue}YT4PDF\end{center} + +\ytBtnPresets{\BC{.5 0 0}\W{1}\S{S}\textFont{HeBo}}% + +\resizebox{\linewidth}{!}{\ytRmAnnot[play=eNzrn8-JFSE,poster=pdfyt_poster, + deactivated=pageclose]{ytPlayOnOpen}{571bp}{330bp}}\\ +{\setlength{\dimen0}{(\linewidth-2bp)/6}\xdef\ytWidth{\the\dimen0}}% +\ytPlayToggle{\ytWidth}{11bp}\ytStopLoading{\ytWidth}{11bp}% +\ytMuteToggle{\ytWidth}{11bp}\ytRewind{\ytWidth}{11bp}% +\ytSelect{eNzrn8-JFSE}{\ytWidth}{11bp}\ytOpenWeb[\textSize{0}]{\ytWidth}{11bp}% + +\ytPlayList{GZ9e3Dy7obA}{\playList} + +% We have to disable the RMA so the combo box can be seen above it. +Playlist: \ytComboList[\A{\JS{\thisNamedRMA(ytPlayOnOpen).activated=false;}}]{2.5in}{11bp}\kern1bp\ytComboBtn[\TU{Click to play, shift-click to load thumbnail only}]{33bp}{11bp} + +\newpage +\begin{center}\bfseries\Large\color{blue}YT4PDF\end{center} + +\resizebox{\linewidth}{!}{\ytRmAnnot[load=GZ9e3Dy7obA,poster=pdfyt_poster, + deactivated=pageclose]{ytLoadOnOpen}{571bp}{330bp}}\\ +\ytBtnPresets{\BC{.5 0 0}\W{1}\S{S}\textFont{HeBo}}% +{\setlength{\dimen0}{(\linewidth-2bp)/6}\xdef\ytWidth{\the\dimen0}}% +\ytPlayToggle{\ytWidth}{11bp}\ytStopLoading{\ytWidth}{11bp}% +\ytMuteToggle{\ytWidth}{11bp}\ytRewind{\ytWidth}{11bp}% +\ytSelect{eNzrn8-JFSE}{\ytWidth}{11bp}\ytOpenWeb[\textSize{0}]{\ytWidth}{11bp}% + +\ytPlayList{GZ9e3Dy7obA}{\playList} + +% We have to disable the RMA so the combo box can be seen above it. +Playlist: \ytComboList[\A{\JS{\thisNamedRMA(ytLoadOnOpen).activated=false;}}]{2.5in}{11bp}\kern1bp\ytComboBtn[\TU{Click to play, shift-click to load thumbnail only}]{33bp}{11bp} + + +\end{document} diff --git a/obsolete/macros/latex/contrib/yt4pdf/graphics/pdfyt_poster.eps b/obsolete/macros/latex/contrib/yt4pdf/graphics/pdfyt_poster.eps new file mode 100644 index 0000000000..97c7ecd154 Binary files /dev/null and b/obsolete/macros/latex/contrib/yt4pdf/graphics/pdfyt_poster.eps differ diff --git a/obsolete/macros/latex/contrib/yt4pdf/swf/pdf_tube_basic.swf b/obsolete/macros/latex/contrib/yt4pdf/swf/pdf_tube_basic.swf new file mode 100644 index 0000000000..5dde7b7cb5 Binary files /dev/null and b/obsolete/macros/latex/contrib/yt4pdf/swf/pdf_tube_basic.swf differ diff --git a/obsolete/macros/latex/contrib/yt4pdf/yt4pdf.cfg b/obsolete/macros/latex/contrib/yt4pdf/yt4pdf.cfg new file mode 100644 index 0000000000..7a8e5de800 --- /dev/null +++ b/obsolete/macros/latex/contrib/yt4pdf/yt4pdf.cfg @@ -0,0 +1,10 @@ +% +% yt4pdf config file. Delete the \endinput below and replace the path +% provided with the path to the swf folder of your yt4pdf installation. This +% path is used to locate the pdf_tube_basic.swf file, used to play YouTube +% videos. +% +\endinput +\renewcommand{\ytFolder}{C:/Users/Public/Documents/My TeX Files/% +tex/latex/aeb/aebpro/yt4pdf/swf} +\endinput diff --git a/obsolete/macros/latex/contrib/yt4pdf/yt4pdf.dtx b/obsolete/macros/latex/contrib/yt4pdf/yt4pdf.dtx new file mode 100644 index 0000000000..4ca3bcc0b6 --- /dev/null +++ b/obsolete/macros/latex/contrib/yt4pdf/yt4pdf.dtx @@ -0,0 +1,629 @@ +%\iffalse +%<*copyright> +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% yt4pdf.sty package, %% +%% Copyright (C) 2010--2016 D. P. Story %% +%% dpstory@uakron.edu %% +%% %% +%% This program can redistributed and/or modified under %% +%% the terms of the LaTeX Project Public License %% +%% Distributed from CTAN archives in directory %% +%% macros/latex/base/lppl.txt; either version 1 of the %% +%% License, or (at your option) any later version. %% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +% +%\NeedsTeXFormat{LaTeX2e}[1997/12/01] +%\ProvidesPackage{yt4pdf} +% [2016/10/04 v1.1 yt4pdf: Play You Tube videos in PDF, Acrobat Distiller only (dps)] +%<*driver> +\documentclass{ltxdoc} +\usepackage[colorlinks,hyperindex]{hyperref} +%\pdfstringdefDisableCommands{\let\\\textbackslash} +%\EnableCrossrefs \CodelineIndex +\begin{document} +\def\CMD#1{\textbackslash#1} + \GetFileInfo{yt4pdf.sty} + \title{\textsf{yt4pdf}: Package for playing You Tube Videos} + \author{D. P. Story\\ + Email: \texttt{dpstory@uakron.edu}} + \date{processed \today} + \maketitle + \tableofcontents + \let\Email\texttt + \DocInput{yt4pdf.dtx} + \PrintIndex +\end{document} +% +% \fi +% \MakeShortVerb{|} +% \StopEventually{} +% +% \DoNotIndex{\def,\edef,\gdef,\xdef,\global,\long,\let} +% \DoNotIndex{\expandafter,\string,\the,\ifx,\else,\fi} +% \DoNotIndex{\csname,\endcsname,\relax,\begingroup,\endgroup} +% \DoNotIndex{\DeclareTextCommand,\DeclareTextCompositeCommand} +% \DoNotIndex{\space,\@empty,\special} +% +% \begin{macrocode} +%<*package> +% \end{macrocode} +% \begin{macrocode} +\RequirePackage{xkeyval} +% \end{macrocode} +% \begin{macrocode} +\ProcessOptions +\RequirePackage{rmannot} +\RequirePackage{popupmenu}[2010/09/18] +% \end{macrocode} +% +% \section{Introduction} +% +% I believe that I was vaguely aware of the \href{http://code.google.com/apis/youtube/flash_api_reference.html} +%{YouTube ActionScript 3.0 Player}, but never pursued it because of my +%general lack of interest in You Tube (\url{www.youtube.com}). Recently, I +%became aware of a very nice demo PDF that used the API, see +%\href{http://www.uvsar.com/pdftube/}{PDF Tube - YouTube API wrapper for PDF +%documents}. The SWF file and JavaScript are made freely available, so I +%downloaded it, and was sufficiently impressed to port the example to +%{\LaTeX} using various members of the {Acro\negthinspace\TeX} Fine Family of Software +%\verb!:-{)!. The SWF file and JavaScript are due to the good folks at +%UVSAR (\url{www.uvsar.com}). The UVSAR's sample demo also appeared in the forums of +%the \href{http://acrobatusers.com/forums/aucbb/viewtopic.php?pid=62134}{Acrobat User +%Community}. +% +% \section{Implementation} +% +% \DescribeMacro{\ytFolder} The path to the folder containing +% the \texttt{pdf\_Tube\_basic.swf} file. This path is set through +% the \texttt{yt4pdf.cfg} file. +% \begin{macrocode} +\newcommand{\ytFolder}{C:/Users/Public/Documents/My TeX Files/% +tex/latex/aeb/aebpro/yt4pdf/swf} +% \end{macrocode} +% \DescribeMacro{ytSWF} The path to \texttt{pdf\_Tube\_basic.swf}, used +% as an argument for the \cs{rmAnnot} macro. +% \begin{macrocode} +\saveNamedPath{ytSWF}{\ytFolder/pdf_tube_basic.swf} +% \end{macrocode} +% We input the file \texttt{yt4pdf.cfg} which should contain a re-definition +% of \cs{ytFolder}, the path to the user's installation containing the +% \texttt{pdf\_tube\_basic.swf}. +% \begin{macrocode} +\InputIfFileExists{yt4pdf.cfg}{}{} +% \end{macrocode} +% \subsection{The YouTube RMA} +% In this section, we define \cs{ytRmAnnot}, a rich media annotation, that is used +% to play YouTube videos. +% \begin{macrocode} +% \end{macrocode} +% An internal command for getting the rma object based on the current page and the +% name of the annot. +% \begin{macrocode} +\def\yt@namegdef#1{\expandafter\gdef\csname #1\endcsname} +\def\yt@namexdef#1{\expandafter\xdef\csname #1\endcsname} +\def\thisNamedRMA(#1){this.getAnnotRichMedia(this.pageNum,"#1")} +% \end{macrocode} +% \DescribeMacro{play} This is a key-value pair for the \cs{ytRmAnnot} command. +% The value of \texttt{play} is a YouTube video ID. When the page the annot is +% on, the video will be played. +% \begin{macrocode} +\define@key{ytRmAnnot}{play}[]{\def\ytrmannot@play{#1}} +\define@key{ytRmAnnot}{load}[]{\def\ytrmannot@load{#1}} +\setkeys{ytRmAnnot}{play,load} +\let\ytCurrRMAName\@empty +% \end{macrocode} +% \begin{macro}{\ytRmAnnot} +% The \cs{ytRmAnnot} creates a rich media annotation using the \textsf{rmannot} package. +% It uses the SWF file \texttt{pdf\_Tube\_basic.swf} referenced here by the name of +% \texttt{ytSWF}. The command takes four parametrs: +% \begin{itemize} +% \item[\texttt{[\#1]}]: The optional first parameter takes the key-value pairs of the +% \cs{rmAnnot} command, plus the \texttt{play} key, defined above. The play key is used +% to set the annot up so it plays automatically when the page is opened. +% \item[\texttt{\#2}]: The name of this annot, unique to the document. This should be +% a ``JavaScript variable.'' The name populates the command \cs{ytCurrRMAName}, which is +% needed for the other commands in this package. +% \item[\texttt{\#3}]: The width of the annot +% \item[\texttt{\#4}]: The height of the annot +% \end{itemize} +% \begin{macrocode} +\newcommand{\ytRmAnnot}[4][]{\begingroup + \@ifundefined{#2@ytrmname}{\yt@namegdef{#2@ytrmname}{#1}}% + {\PackageError{yt2pdf}{The name `#2' is already defined + for\MessageBreak this \string\ytRmAnnot}{Choose a unique + name for this \string\ytRmAnnot, one different from `#2'.}}% + \setkeys*{ytRmAnnot}{#1}\gdef\ytCurrRMAName{#2}% + \ifx\ytrmannot@play\@empty\else + \makebox[0pt][l]{\pushButton[\BC{}\BG{}\S{S} + \AA{\AAPageOpen{aebStartPlayer(\thisNamedRMA(#2),% + "\ytrmannot@play",true);}\AAPageClose{aebCancelWait(false);}} + ]{btnRmAnnot#2}{1bp}{1bp}}\let\ytrmannot@load\@empty\fi + \ifx\ytrmannot@load\@empty + \else\makebox[0pt][l]{\pushButton[\BC{}\BG{}\S{S} + \AA{\AAPageOpen{aebStartPlayer(\thisNamedRMA(#2),% + "\ytrmannot@load",false);}\AAPageClose{aebCancelWait(false);}} + ]{btnRmAnnot#2}{1bp}{1bp}}\fi + \rmAnnot[\XKV@rm,name=#2,enabled=onclick]{#3}{#4}{ytSWF}% + \endgroup +} +% \end{macrocode} +% \end{macro} +% \DescribeMacro{\DeclareYTName} Defines the internal macro +% \cs{ytCurrRMAName}. This command is needed in the case were links, or +% control buttons come before the RMA annot. The first parameter is the +% page on which the target annot resides, the default is the current page. +% The second argument is the name of the target annot. +% code passed is +% \begin{macrocode} +\newcommand{\DeclareYTName}[2][]{\def\argi{#1}% + \ifx\argi\@empty\gdef\ytCurrRMAName{#2}\else + \gdef\ytCurrRMAName{[#1]#2}\fi +} +% \end{macrocode} +% \subsection{Button Controls} +% We present six control buttons for the rm annot +% \begin{macro}{\ytBtnPresets} +% The default appearances of the control buttons. +% \begin{macrocode} +\newcommand{\ytBtnPresets}[1]{\def\yt@Presets{#1}} +\ytBtnPresets{\BC{.5 0 0}\S{S}\textFont{HeBo}\autoCenter{n}} +% \end{macrocode} +% \end{macro} +% The following six commands all take three parameters, the first one optional +%\begin{enumerate} +% \item[\texttt{\#1}:] Standard key-value pairs for modifying the +% appearance of an eforms form field. +% \item[\texttt{\#2}:] +% \texttt{this.getAnnotRichMedia(this.pageNum+1, "YouTube")}. +% \item[\texttt{\#3}:] the width of the button +% \item[\texttt{\#4}:] the height of the button +%\end{enumerate} +% \begin{macro}{\ytPlayToggle} +% This button has several functions: Pause/Play/Buffering. +% Initially the button label is on Pause (pressing it pauses a playing video); +% the button label reads Play when the video is loaded and paused (pressing it plays or resumes +% the video); while the video is loading, the button label is Buffering... +% \begin{macro}{\ytStopLoading} Pressing this button stops the streaming of the currently playing +% video. If the video is started again, there will be some buffering before the play begins. +% \begin{macro}{\ytMuteToggle} This button toggles and sound off and on. Button labels are +% MUTE and UNMUTE. +% \begin{macro}{\ytRewind} If the video is playing, this button +% stops the video, rewinds it to the beginning, and starts play again. If the video +% is paused, this button rewinds the video to the beginning, the video remains paused. +% \begin{macro}{\ytSelect} When this button is pressed, a response dialog opens. +% The user enters a YouTube video ID into the field. On pressing OK, this video is played. +% \item[] \textbf{Note:} Some YouTube videos are security +% restricted and cannot be played through an embedded player, such as the one used here. +% If video ID of a video that does not allow embedded playback, a dialog appears giving +% the use to view the video on the web. +% \begin{macro}{\ytOpenWeb} The user has the option of pressing this button to view the +% currently video on the web at \texttt{www.youtube.com}. +% \begin{macrocode} +% \end{macrocode} +% The \cs{oyt@RMA} command takes the second parameter of each of the six button commands, +% and expands it into the appropriate JS code. +% \begin{macrocode} +\newcommand{\oyt@RMA}[1][this.pageNum]{\oyt@@RMA[#1]} +\def\oyt@@RMA[#1]#2\@nil{\gdef\yt@CurrRMAName{#2}% + \def\yt@rm{this.getAnnotRichMedia(#1,"#2")}} +% \end{macrocode} +% We finally define the six control buttons. +% \begin{macrocode} +\newcommand{\ytPlayToggle}[3][]{% + \expandafter\oyt@RMA\ytCurrRMAName\@nil% + \pushButton[\CA{\ytStrPAUSE}\presets{\yt@Presets}#1 + \A{\JS{ytPlayToggle(\yt@rm);}}]{playToggle}{#2}{#3}% +} +\newcommand{\ytStopLoading}[3][]{% + \expandafter\oyt@RMA\ytCurrRMAName\@nil% + \pushButton[\CA{\ytStrStopLoading}\presets{\yt@Presets}#1 + \A{\JS{\yt@rm.callAS("stopVideo");}}]{vidStop}{#2}{#3}% +} +\newcommand{\ytMuteToggle}[3][]{% + \expandafter\oyt@RMA\ytCurrRMAName\@nil% + \pushButton[\CA{\ytStrMUTE}\presets{\yt@Presets}#1 + \A{\JS{ytMuteToggle(\yt@rm);}}]{muteToggle}{#2}{#3}% +} +\newcommand{\ytRewind}[3][]{% + \expandafter\oyt@RMA\ytCurrRMAName\@nil% + \pushButton[\CA{\ytStrREWIND}\presets{\yt@Presets}#1 + \A{\JS{ytRewind(\yt@rm);}}]{ytRewind}{#2}{#3}% +} +\newcommand{\ytSelect}[4][]{% + \expandafter\oyt@RMA\ytCurrRMAName\@nil% + \pushButton[\CA{\ytStrLoadVideo}\presets{\yt@Presets}#1 + \A{\JS{ytSelect(\yt@rm,"#2");}}]{selectVid}{#3}{#4}% +} +\newcommand{\ytOpenWeb}[3][]{% + \expandafter\oyt@RMA\ytCurrRMAName\@nil% + \pushButton[\CA{\ytStrWatchOnWeb}\presets{\yt@Presets}#1 + \A{\JS{ytOpenWeb(\yt@rm);}}]{playOnWeb}{#2}{#3}% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \end{macro} +% \subsection{Defining a Video Id} +% \subsubsection{Using a Link} +% \begin{macro}{\ytvIdPresets} +% The options for the \cs{ytvId} link. The default is given below in the definition. +% \begin{macro}{\ytvId} +% The \cs{ytvId} is link which when pressed plays the video whose Video Id is passed as +% its second argument. +% \begin{itemize} +% \item[\texttt{[\#1]}:] The name of the annot this video is to play in. When +% this parameter is not specified, the default +% is \cs{ytCurrRMAName}, which is defined by the \cs{ytRmAnnot} macro. +% \item[\texttt{\#2}:] The video Id for the YouTube video to play +% \item[\texttt{\#3}:] The text that displays the link. +%\end{itemize} +% \begin{macrocode} +\newcommand{\ytvIdPresets}[1]{\def\yt@vIdPresets{#1}} +\ytvIdPresets{\linktxtcolor{webbrown}} +\newcommand{\ytvId}{\@ifstar{\def\yt@lnk@play{false}\yt@@vId} + {\def\yt@lnk@play{true}\yt@@vId}} +\newcommand{\yt@@vId}[3][\ytCurrRMAName]{% + \oyt@RMA#1\@nil\setLink[\presets{\yt@vIdPresets} + \A{\JS{aebStartPlayer(\yt@rm,"#2",\yt@lnk@play);}}]{#3}} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \subsubsection{Using a Combobox} +% \begin{macro}{\ytComboList} +% The \cs{ytComboList} is a combox box of video Ids and titles. The user selects a +% video based on its title, then presses the PLAY button. The two commands +% \cs{ytComboListPresets} and \cs{ytComboBtnPresets} are used to set the appearances +% of the combo box and the PLAY button. +%\begin{itemize} +% \item[\texttt{[\#1]}:] eforms key-value pairs +% \item[\texttt{\#2}:] The width of the combo box +% \item[\texttt{\#3}:] The height of the combo box +%\end{itemize} +% \begin{macro}{\ytComboBtn} +% A button to play the selection made in the combo box. +% \begin{macro}{\ytPlayList} +% This command is executed before \cs{ytComboBtn} to set the play list, +% and the default value. +% \begin{macrocode} +\newcommand{\ytComboListPresets}[1]{\def\yt@ComboListPresets{#1}} +\newcommand{\ytComboBtnPresets}[1]{\def\yt@ComboBtnPresets{#1}} +\let\yt@ComboListPresets\@empty +\let\yt@ComboBtnPresets\@empty +% \end{macrocode} +% Use the \cs{ytPlayList} to pass the play list to the next combo box +% \begin{macrocode} +\newcommand{\ytPlayList}{\begingroup\@makeother\_\@makeother\' + \ytPlayList@i} +\def\ytPlayList@i#1#2{\gdef\yt@pl@def{#1}\xdef\yt@pl@pl{#2}\endgroup} +% \end{macrocode} +% \begin{macro}{\declarePlayList} +% A video ID may contain characters {\LaTeX} considers special, so we sanitize these +% special characters before reading in the video ID. Near as I can determine, a video +% id consists of 11 characters comprising combinations of letters (A-Z,a-z) numbers +% (0-9) and special characters underscore and hyphen (\_ and -). We sanitize the last two. +%\begin{verbatim} +%\declarePlayList{<\cmd>}{ +% \ytIdTitle{}{} +% ... +% \ytIdTitle{}{} +% } +%\end{verbatim} +%The entries may also be in raw form `|[()()]|'. Note that the two arguments are +%enclosed in parentheses, there is a problem with parsing if \texttt{} itself contains +%parentheses. Within \texttt{} enclose matching parentheses in braces, for example, +%\begin{flushleft}|\ytIdTitle{Kung-Fu Fighting {(Bruce Lee version)}}{GZ9e3Dy7obA}|\end{flushleft} +% \changes{v1.1}{2016/10/04}{Added \string\cs{declarePlayList}} +% \begin{macrocode} +\newcommand{\declarePlayList}{\bgroup + \@makeother\_\@makeother\- + \yt@declarePlayList} +\def\yt@declarePlayList#1#2{% + \gdef#1{#2}\egroup} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\ytIdTitle} +% A convenience command to lay out the playlist, for example, +%\begin{verbatim} +%\declarePlayList{\playListii}{% +% \ytIdTitle{Elfego Baca}{gRwa0MdeqVs} +% \ytIdTitle{Texas John Slaughter}{7yrk1BvtLE8} +% \ytIdTitle{Swamp Fox}{-SBPnw5riLM&NR} +% \ytIdTitle{Zorro Promo}{cKludhxEoJ0} +%} +%\end{verbatim} +% \begin{macrocode} +\newcommand{\ytIdTitle}[2]{[(#2)(#1)]} +% \end{macrocode} +% \end{macro} +% \begin{macro}{\ytNewBaseName} +% \cs{ytNewBaseName} is a not so perfect attempt to fix the problem of having +% multiple combo boxes on one page. The field names need to be distinct. We +% can pass the new field name using this command. +% \begin{macro}{\ytResetBaseName} +% This command resets the field name back to its default value. +% Both of these commands apply to \cs{ytComboList} and to \cs{ytComboBtn}. +% \changes{v1.0}{2011/08/23}{Added \cs{ytBaseName} to pass a field title to +% combo box and controlling play button} +% \begin{macrocode} +\newcount\ytListCnt \ytListCnt=0 +\newcommand{\ytNewBaseName}[1][]{% + \def\yt@argi{#1}\ifx\yt@argi\@empty\global\advance\ytListCnt1\relax + \gdef\yt@BaseName{\yt@CurrRMAName\the\ytListCnt}\else + \gdef\yt@BaseName{\yt@CurrRMAName#1}\fi +} +\newcommand{\ytResetBaseName}{\gdef\yt@BaseName{\yt@CurrRMAName}} +\ytResetBaseName +% \end{macrocode} +% \end{macro} +% \end{macro} +% Now we have the code for \cs{ytComboList} +% \begin{macrocode} +\newcommand{\ytComboList}[3][]{% + \expandafter\oyt@RMA\ytCurrRMAName\@nil% + \comboBox[\DV{\yt@pl@def}\V{\yt@pl@def} + \presets{\yt@ComboListPresets}#1]{ytSelect\yt@BaseName} + {#2}{#3}{\yt@pl@pl}% +} +% \end{macrocode} +% The parameters for \cs{ytComboBtn} are +%\begin{itemize} +% \item[\texttt{[\#1]}:] The the name of the \cs{ytRmAnnot} this selection is to play in +% the default is \cs{ytCurrRMAName}. +% \item[\texttt{\#2}:] The width of the combo box +% \item[\texttt{\#3}:] The height of the combo box +% the array of values and titles. +%\end{itemize} +% \begin{macrocode} +\newcommand{\ytComboBtn}[3][]{% + \expandafter\oyt@RMA\ytCurrRMAName\@nil% + \pushButton[\CA{\ytStrPLAY}\presets{\yt@ComboBtnPresets}#1 + \A{\JS{var f=this.getField("ytSelect\yt@BaseName");\r + aebStartPlayer(\yt@rm,f.value,!event.shift); + }}]{ytSelectBtn\yt@BaseName}{#2}{#3}% +} +% \end{macrocode} +% \end{macro} +% \end{macro} +% \end{macro} +% \subsection{Support for the \textsf{popupmenu} package} +% \begin{macro}{\ytPopupMenuData} +% A command use to list the popupmenu data. It defines a command +% \cs{ytPopupData} that is used in the JS support for popup menus. +% \begin{macrocode} +\newcommand{\ytPopupMenuData}[1]{{\toks0={// yt4pdf: Begin popup menu data^^J}% + \@tfor\yt@menu:=#1\do{% + \toks2=\expandafter{\yt@menu}% + \edef\@tmp@exp{\the\toks0\the\toks2^^J}% + \toks0=\expandafter{\@tmp@exp}% + }\xdef\ytPopupData{\the\toks0// End of popup menu data}% +}} +\def\ytPopupData{// No popup menu data defined}% +% \begin{macro}{\puIdTitle} +% A convenience macro for entering popupmenu data for youtube videos. +%\begin{verbatim} +%\puIdTitle{\string\"Sea Hunt\string\" TV serie}{MW-IZ67iADU} +%\end{verbatim} +% Note that we must protect the double quote. +% \begin{macrocode} +\newcommand{\puIdTitle}[2]{\item{title={#1},return={[\itemindex,'#2']}}} +% \end{macrocode} +% \end{macro} +% +% \subsection{Strings that can be localized} +% The following strings are used on the buttons, and in the document level JS +% \begin{macrocode} +\newcommand{\ytStrPLAY}{PLAY} +\newcommand{\ytStrREPLAY}{REPLAY} +\newcommand{\ytStrPAUSE}{PAUSE} +\newcommand{\ytStrBuffering}{Buffering...} +\newcommand{\ytStrStopLoading}{Stop Loading} +\newcommand{\ytStrMUTE}{MUTE} +\newcommand{\ytStrUNMUTE}{UNMUTE} +\newcommand{\ytStrREWIND}{REWIND} +\newcommand{\ytStrLoadVideo}{Load Video} +\newcommand{\ytStrWatchOnWeb}{Watch on YouTube} +% response dialog box associated with ytSelect() +\newcommand{\ytRespQues}{Enter the YouTube Video ID} +\newcommand{\ytRespTitle}{Load a Video} +\newcommand{\ytRespLabel}{ID:} +% alert error messages +\newcommand{\ytStrErrorVideoNotFound}{Error: Video not found} +\newcommand{\ytStrErrorNoEmbed}{Error: This video does not allow + embedded playback \r\r Would you like to view this video + on the web?} +\newcommand{\ytStrConnecTimedOut}{Connection timed out, try again.} +% \end{macrocode} +% +% \subsection{Document level JavaScript} +% \begin{macrocode} +\begin{insDLJS*}[ytPlayToggle]{yt} +\begin{newsegment}{yt4PDF: YouTube for PDF JavaScript} +/* + Document-level script for YouTube player + Document-level script for the PDFtube embedded YouTube player + *************************************************************** + Functions to be called by buttons or links on the PDF + in each case, "rm" is the RichMedia annot containing the player + All these are optional and can be renamed or edited as required + *********************************************************** +*/ +// toggle play/pause (button labels updated by event functions) +function ytPlayToggle(rm) { + var ps = rm.callAS("getPlayerState"); + rm.callAS((ps == 1)? "pauseVideo" : "playVideo"); +} +// toggle mute (have to update button labels ourselves) +function ytMuteToggle(rm) { + var im = rm.callAS("isMuted"); + if (im) { + event.target.buttonSetCaption("\ytStrMUTE"); + rm.callAS("unMute"); + } else { + event.target.buttonSetCaption("\ytStrUNMUTE"); + rm.callAS("mute"); + } +} +// Ask the user for the ID number of a new video, and play it +function ytSelect(rm,vID) { + var rsp = app.response({ + cQuestion: "\ytRespQues", + cTitle: "\ytRespTitle", + cDefault: vID, + cLabel: "\ytRespLabel"}); + if (rsp !=null && rsp != "") + aebStartPlayer(rm,rsp,true); // dps +} +// open the video's YouTube page in the web browser +function ytOpenWeb(rm) { + var link = rm.callAS("getVideoUrl"); + if (link != null) { + app.launchURL(link,true); + rm.activated = false; + } +} +// rewind (seek to zero) +function ytRewind(rm) { rm.callAS("seekTo",0); } +/* + ************************************************************ + Functions called by the player itself, in response to events + as the events are "external", the annot is not the target. + These functions must exist and match the names in the SWF. + *********************************************************** +*/ +function ytPlayerReady() { + + // this is the place to load your default video - for example... + console.println(" Player loaded and ready"); + // this.getAnnotsRichMedia(this.pageNum)[0].callAS("loadVideoById", + // "eNzrn8-JFSE",0); + aebStartPlayer.isPlayerReady=true; // dps +} +function ytStateChange(st) { + // Possible values are unstarted (-1), ended (0), playing (1), + // paused (2), buffering (3), video cued (5) + var lbl = ""; + console.println(" State changed to " + st); + if (st == 0) lbl = "\ytStrREPLAY"; + else if (st == 1) lbl = "\ytStrPAUSE"; + else if (st == 3) lbl = "\ytStrBuffering"; + else if (st == 2 || st == 5) lbl = "\ytStrPLAY"; + if (lbl) this.getField("playToggle").buttonSetCaption(lbl); +} +function ytPlaybackQualityChange(str) { + // Possible values are "small", "medium", "large" and "hd720" + console.println(" Quality changed to " + str); +} +function ytProgress(q) { + // q has four properties that you can use to update form fields, + // such as... + //this.getField("currentTime").value = q.CurrentTime; + //this.getField("Duration").value = q.Duration; + //this.getField("BytesLoaded").value = q.BytesLoaded; + //this.getField("BytesTotal").value = q.BytesTotal; +} +function ytError(err) { + // Video cannot be played + console.println(" ERROR code " + err + " received"); + if (err == 100) + app.alert("\ytStrErrorVideoNotFound", 0, 0, "YouTube"); + else { + var resp=app.alert("\ytStrErrorNoEmbed", 1, 3, "YouTube"); + if (resp==4) { + aebCancelWait(false); + ytOpenWeb(aebStartPlayer.annot); + } + } +} +/* + We start the player if the annot is activated, if not, + we set annot.activated=true, and wait for the widget to say it + is ready. When ready, ytPlayerReady() sets + aebStartPlayer.isPlayerReady=true +*/ +function aebStartPlayer(rm,Id,bPlay) { + aebStartPlayer.annot=rm; + if (aebStartPlayer.annot.activated) + aebStartPlayer.annot.callAS(% +(bPlay)?"loadVideoById":"cueVideoById",Id,0); + else { + aebCancelWait(false); + aebStartPlayer.annot.activated=true; + aebStartPlayer.isPlayerReady=false; + aebStartPlayer.twait=app.setInterval(% +'aebWait4Ready(\"'+Id+'\",'+bPlay+');',250); + aebStartPlayer.to=app.setTimeOut("aebCancelWait(true)", 10000); + } +} +aebStartPlayer.isPlayerReady=false; +aebStartPlayer.twait=null; +aebStartPlayer.to=null; +/* + If the player is ready, we start the video, and clear + the setInterval, otherwise, we wait. +*/ +function aebWait4Ready(Id,bPlay) { + if (aebStartPlayer.isPlayerReady) { + aebCancelWait(false); + aebStartPlayer.annot.callAS(% +(bPlay)?"loadVideoById":"cueVideoById",Id,0); + } +} +function aebCancelWait(bNotify) { + var twait=aebStartPlayer.twait; + if (aebStartPlayer.to!=null) + try { app.clearTimeOut(aebStartPlayer.to); } catch(e) {}; + aebStartPlayer.to=null; + if (aebStartPlayer.twait!=null) + try { app.clearInterval(aebStartPlayer.twait); } catch(e) {} + aebStartPlayer.twait=null; + if ( bNotify && twait!=null ) app.alert("\ytStrConnecTimedOut"); +} +\end{newsegment} +\begin{newsegment}{Popup Menu Data and JS} +\ytPopupData +var aChoice; +function ytProcessMenu(aMenu) { + var cChoice = \popUpMenu(aMenu); + if ( cChoice != null ) { + aChoice=eval(cChoice); + if (aChoice[1]=="") return null; + var thisChoice=aChoice[0]; + if (ytProcessMenu.nChoice==undefined) { + ytProcessMenu.nChoice=thisChoice; + eval("aMenu"+ytProcessMenu.nChoice).bMarked=true; + } else { + eval("aMenu"+ytProcessMenu.nChoice).bMarked=false; + var oldnChoice=ytProcessMenu.nChoice; + ytProcessMenu.nChoice=thisChoice; + eval("aMenu"+ytProcessMenu.nChoice).bMarked=(oldnChoice==ytProcessMenu.nChoice)?false:true; + } + return aChoice; + } else return null; +} +function ytPopupMenu(rmaName,ytmenu) { + var aChoice=ytProcessMenu(ytmenu); + var rm=this.getAnnotRichMedia(this.pageNum,rmaName); + if (aChoice!=null) { + if (ytProcessMenu.lastDescrip==undefined) { + aebStartPlayer(rm,aChoice[1],!event.shift); + } else { + if (ytProcessMenu.lastDescrip!=aChoice[1]) { + aebStartPlayer(rm,aChoice[1],!event.shift); + } + } + ytProcessMenu.lastDescrip=aChoice[1]; + } +} +\end{newsegment} +\end{insDLJS*} +% \end{macrocode} +% \begin{macrocode} +% +% \end{macrocode} +\endinput + +rm=this.getAnnotRichMedia(this.pageNum,"YouTube1"); +rm.callAS("cueVideoById", "GZ9e3Dy7obA"); diff --git a/obsolete/macros/latex/contrib/yt4pdf/yt4pdf.ins b/obsolete/macros/latex/contrib/yt4pdf/yt4pdf.ins new file mode 100644 index 0000000000..6732fb251c --- /dev/null +++ b/obsolete/macros/latex/contrib/yt4pdf/yt4pdf.ins @@ -0,0 +1,60 @@ +%% +%% This file will generate fast loadable files and documentation +%% driver files from the doc files in this package when run through +%% LaTeX or TeX. +%% +%% Copyright 1999-2006 D. P. Story +%% +%% This file is part of the `AcroTeX eDucation Bundle'. +%% ------------------------------------------- +%% +%% It may be distributed under the conditions of the LaTeX Project Public +%% License, either version 1.2 of this license or (at your option) any +%% later version. The latest version of this license is in +%% http://www.latex-project.org/lppl.txt +%% and version 1.2 or later is part of all distributions of LaTeX +%% version 1999/12/01 or later. +%% +%% --------------- start of docstrip commands ------------------ +%% +\def\filedate{2010/09/10} +\def\batchfile{yt4pdf.ins} + +\input docstrip +\ifx\generate\undefined + \Msg{**********************************************} + \Msg{*} + \Msg{* This installation requires docstrip} + \Msg{* version 2.4 or later.} + \Msg{*} + \Msg{* An older version of docstrip has been input} + \Msg{*} + \Msg{**********************************************} + \errhelp{Move or rename old docstrip.tex and get a newer one.} + \errmessage{Old docstrip in input path} + \batchmode + \csname @@end\endcsname\end +\fi + +\keepsilent +\askforoverwritefalse +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% + +\preamble +\endpreamble + +\generate +{% + \file{yt4pdf.sty}{\from{yt4pdf.dtx}{copyright,package}} +} + +\Msg{***************************************************************} +\Msg{*} +\Msg{* \space To finish the installation you have to copy the files } +\Msg{*} +\Msg{* \space *.sty, *.cfg and *.def into a directory searched by TeX} +\Msg{*} +\Msg{***************************************************************} + +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\endinput diff --git a/obsolete/macros/latex/contrib/yt4pdf/yt4pdf.sty b/obsolete/macros/latex/contrib/yt4pdf/yt4pdf.sty new file mode 100644 index 0000000000..7bed0d2499 --- /dev/null +++ b/obsolete/macros/latex/contrib/yt4pdf/yt4pdf.sty @@ -0,0 +1,346 @@ +%% +%% This is file `yt4pdf.sty', +%% generated with the docstrip utility. +%% +%% The original source files were: +%% +%% yt4pdf.dtx (with options: `copyright,package') +%% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +%% yt4pdf.sty package, 2010-09-10 %% +%% Copyright (C) 2010 D. P. Story %% +%% dpstory@uakron.edu %% +%% %% +%% This program can redistributed and/or modified under %% +%% the terms of the LaTeX Project Public License %% +%% Distributed from CTAN archives in directory %% +%% macros/latex/base/lppl.txt; either version 1 of the %% +%% License, or (at your option) any later version. %% +%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%% +\NeedsTeXFormat{LaTeX2e}[1997/12/01] +\ProvidesPackage{yt4pdf} + [2016/10/04 v1.1 yt4pdf: Play You Tube videos in PDF, Acrobat Distiller only (dps)] +\RequirePackage{xkeyval} +\ProcessOptions +\RequirePackage{rmannot} +\RequirePackage{popupmenu}[2010/09/18] +\newcommand{\ytFolder}{C:/Users/Public/Documents/My TeX Files/% +tex/latex/aeb/aebpro/yt4pdf/swf} +\saveNamedPath{ytSWF}{\ytFolder/pdf_tube_basic.swf} +\InputIfFileExists{yt4pdf.cfg}{}{} +\def\yt@namegdef#1{\expandafter\gdef\csname #1\endcsname} +\def\yt@namexdef#1{\expandafter\xdef\csname #1\endcsname} +\def\thisNamedRMA(#1){this.getAnnotRichMedia(this.pageNum,"#1")} +\define@key{ytRmAnnot}{play}[]{\def\ytrmannot@play{#1}} +\define@key{ytRmAnnot}{load}[]{\def\ytrmannot@load{#1}} +\setkeys{ytRmAnnot}{play,load} +\let\ytCurrRMAName\@empty +\newcommand{\ytRmAnnot}[4][]{\begingroup + \@ifundefined{#2@ytrmname}{\yt@namegdef{#2@ytrmname}{#1}}% + {\PackageError{yt2pdf}{The name `#2' is already defined + for\MessageBreak this \string\ytRmAnnot}{Choose a unique + name for this \string\ytRmAnnot, one different from `#2'.}}% + \setkeys*{ytRmAnnot}{#1}\gdef\ytCurrRMAName{#2}% + \ifx\ytrmannot@play\@empty\else + \makebox[0pt][l]{\pushButton[\BC{}\BG{}\S{S} + \AA{\AAPageOpen{aebStartPlayer(\thisNamedRMA(#2),% + "\ytrmannot@play",true);}\AAPageClose{aebCancelWait(false);}} + ]{btnRmAnnot#2}{1bp}{1bp}}\let\ytrmannot@load\@empty\fi + \ifx\ytrmannot@load\@empty + \else\makebox[0pt][l]{\pushButton[\BC{}\BG{}\S{S} + \AA{\AAPageOpen{aebStartPlayer(\thisNamedRMA(#2),% + "\ytrmannot@load",false);}\AAPageClose{aebCancelWait(false);}} + ]{btnRmAnnot#2}{1bp}{1bp}}\fi + \rmAnnot[\XKV@rm,name=#2,enabled=onclick]{#3}{#4}{ytSWF}% + \endgroup +} +\newcommand{\DeclareYTName}[2][]{\def\argi{#1}% + \ifx\argi\@empty\gdef\ytCurrRMAName{#2}\else + \gdef\ytCurrRMAName{[#1]#2}\fi +} +\newcommand{\ytBtnPresets}[1]{\def\yt@Presets{#1}} +\ytBtnPresets{\BC{.5 0 0}\S{S}\textFont{HeBo}\autoCenter{n}} +\newcommand{\oyt@RMA}[1][this.pageNum]{\oyt@@RMA[#1]} +\def\oyt@@RMA[#1]#2\@nil{\gdef\yt@CurrRMAName{#2}% + \def\yt@rm{this.getAnnotRichMedia(#1,"#2")}} +\newcommand{\ytPlayToggle}[3][]{% + \expandafter\oyt@RMA\ytCurrRMAName\@nil% + \pushButton[\CA{\ytStrPAUSE}\presets{\yt@Presets}#1 + \A{\JS{ytPlayToggle(\yt@rm);}}]{playToggle}{#2}{#3}% +} +\newcommand{\ytStopLoading}[3][]{% + \expandafter\oyt@RMA\ytCurrRMAName\@nil% + \pushButton[\CA{\ytStrStopLoading}\presets{\yt@Presets}#1 + \A{\JS{\yt@rm.callAS("stopVideo");}}]{vidStop}{#2}{#3}% +} +\newcommand{\ytMuteToggle}[3][]{% + \expandafter\oyt@RMA\ytCurrRMAName\@nil% + \pushButton[\CA{\ytStrMUTE}\presets{\yt@Presets}#1 + \A{\JS{ytMuteToggle(\yt@rm);}}]{muteToggle}{#2}{#3}% +} +\newcommand{\ytRewind}[3][]{% + \expandafter\oyt@RMA\ytCurrRMAName\@nil% + \pushButton[\CA{\ytStrREWIND}\presets{\yt@Presets}#1 + \A{\JS{ytRewind(\yt@rm);}}]{ytRewind}{#2}{#3}% +} +\newcommand{\ytSelect}[4][]{% + \expandafter\oyt@RMA\ytCurrRMAName\@nil% + \pushButton[\CA{\ytStrLoadVideo}\presets{\yt@Presets}#1 + \A{\JS{ytSelect(\yt@rm,"#2");}}]{selectVid}{#3}{#4}% +} +\newcommand{\ytOpenWeb}[3][]{% + \expandafter\oyt@RMA\ytCurrRMAName\@nil% + \pushButton[\CA{\ytStrWatchOnWeb}\presets{\yt@Presets}#1 + \A{\JS{ytOpenWeb(\yt@rm);}}]{playOnWeb}{#2}{#3}% +} +\newcommand{\ytvIdPresets}[1]{\def\yt@vIdPresets{#1}} +\ytvIdPresets{\linktxtcolor{webbrown}} +\newcommand{\ytvId}{\@ifstar{\def\yt@lnk@play{false}\yt@@vId} + {\def\yt@lnk@play{true}\yt@@vId}} +\newcommand{\yt@@vId}[3][\ytCurrRMAName]{% + \oyt@RMA#1\@nil\setLink[\presets{\yt@vIdPresets} + \A{\JS{aebStartPlayer(\yt@rm,"#2",\yt@lnk@play);}}]{#3}} +\newcommand{\ytComboListPresets}[1]{\def\yt@ComboListPresets{#1}} +\newcommand{\ytComboBtnPresets}[1]{\def\yt@ComboBtnPresets{#1}} +\let\yt@ComboListPresets\@empty +\let\yt@ComboBtnPresets\@empty +\newcommand{\ytPlayList}{\begingroup\@makeother\_\@makeother\' + \ytPlayList@i} +\def\ytPlayList@i#1#2{\gdef\yt@pl@def{#1}\xdef\yt@pl@pl{#2}\endgroup} +\newcommand{\declarePlayList}{\bgroup + \@makeother\_\@makeother\- + \yt@declarePlayList} +\def\yt@declarePlayList#1#2{% + \gdef#1{#2}\egroup} +\newcommand{\ytIdTitle}[2]{[(#2)(#1)]} +\newcount\ytListCnt \ytListCnt=0 +\newcommand{\ytNewBaseName}[1][]{% + \def\yt@argi{#1}\ifx\yt@argi\@empty\global\advance\ytListCnt1\relax + \gdef\yt@BaseName{\yt@CurrRMAName\the\ytListCnt}\else + \gdef\yt@BaseName{\yt@CurrRMAName#1}\fi +} +\newcommand{\ytResetBaseName}{\gdef\yt@BaseName{\yt@CurrRMAName}} +\ytResetBaseName +\newcommand{\ytComboList}[3][]{% + \expandafter\oyt@RMA\ytCurrRMAName\@nil% + \comboBox[\DV{\yt@pl@def}\V{\yt@pl@def} + \presets{\yt@ComboListPresets}#1]{ytSelect\yt@BaseName} + {#2}{#3}{\yt@pl@pl}% +} +\newcommand{\ytComboBtn}[3][]{% + \expandafter\oyt@RMA\ytCurrRMAName\@nil% + \pushButton[\CA{\ytStrPLAY}\presets{\yt@ComboBtnPresets}#1 + \A{\JS{var f=this.getField("ytSelect\yt@BaseName");\r + aebStartPlayer(\yt@rm,f.value,!event.shift); + }}]{ytSelectBtn\yt@BaseName}{#2}{#3}% +} +\newcommand{\ytPopupMenuData}[1]{{\toks0={// yt4pdf: Begin popup menu data^^J}% + \@tfor\yt@menu:=#1\do{% + \toks2=\expandafter{\yt@menu}% + \edef\@tmp@exp{\the\toks0\the\toks2^^J}% + \toks0=\expandafter{\@tmp@exp}% + }\xdef\ytPopupData{\the\toks0// End of popup menu data}% +}} +\def\ytPopupData{// No popup menu data defined}% +\newcommand{\puIdTitle}[2]{\item{title={#1},return={[\itemindex,'#2']}}} +\newcommand{\ytStrPLAY}{PLAY} +\newcommand{\ytStrREPLAY}{REPLAY} +\newcommand{\ytStrPAUSE}{PAUSE} +\newcommand{\ytStrBuffering}{Buffering...} +\newcommand{\ytStrStopLoading}{Stop Loading} +\newcommand{\ytStrMUTE}{MUTE} +\newcommand{\ytStrUNMUTE}{UNMUTE} +\newcommand{\ytStrREWIND}{REWIND} +\newcommand{\ytStrLoadVideo}{Load Video} +\newcommand{\ytStrWatchOnWeb}{Watch on YouTube} +\newcommand{\ytRespQues}{Enter the YouTube Video ID} +\newcommand{\ytRespTitle}{Load a Video} +\newcommand{\ytRespLabel}{ID:} +\newcommand{\ytStrErrorVideoNotFound}{Error: Video not found} +\newcommand{\ytStrErrorNoEmbed}{Error: This video does not allow + embedded playback \r\r Would you like to view this video + on the web?} +\newcommand{\ytStrConnecTimedOut}{Connection timed out, try again.} +\begin{insDLJS*}[ytPlayToggle]{yt} +\begin{newsegment}{yt4PDF: YouTube for PDF JavaScript} +/* + Document-level script for YouTube player + Document-level script for the PDFtube embedded YouTube player + *************************************************************** + Functions to be called by buttons or links on the PDF + in each case, "rm" is the RichMedia annot containing the player + All these are optional and can be renamed or edited as required + *********************************************************** +*/ +// toggle play/pause (button labels updated by event functions) +function ytPlayToggle(rm) { + var ps = rm.callAS("getPlayerState"); + rm.callAS((ps == 1)? "pauseVideo" : "playVideo"); +} +// toggle mute (have to update button labels ourselves) +function ytMuteToggle(rm) { + var im = rm.callAS("isMuted"); + if (im) { + event.target.buttonSetCaption("\ytStrMUTE"); + rm.callAS("unMute"); + } else { + event.target.buttonSetCaption("\ytStrUNMUTE"); + rm.callAS("mute"); + } +} +// Ask the user for the ID number of a new video, and play it +function ytSelect(rm,vID) { + var rsp = app.response({ + cQuestion: "\ytRespQues", + cTitle: "\ytRespTitle", + cDefault: vID, + cLabel: "\ytRespLabel"}); + if (rsp !=null && rsp != "") + aebStartPlayer(rm,rsp,true); // dps +} +// open the video's YouTube page in the web browser +function ytOpenWeb(rm) { + var link = rm.callAS("getVideoUrl"); + if (link != null) { + app.launchURL(link,true); + rm.activated = false; + } +} +// rewind (seek to zero) +function ytRewind(rm) { rm.callAS("seekTo",0); } +/* + ************************************************************ + Functions called by the player itself, in response to events + as the events are "external", the annot is not the target. + These functions must exist and match the names in the SWF. + *********************************************************** +*/ +function ytPlayerReady() { + + // this is the place to load your default video - for example... + console.println(" Player loaded and ready"); + // this.getAnnotsRichMedia(this.pageNum)[0].callAS("loadVideoById", + // "eNzrn8-JFSE",0); + aebStartPlayer.isPlayerReady=true; // dps +} +function ytStateChange(st) { + // Possible values are unstarted (-1), ended (0), playing (1), + // paused (2), buffering (3), video cued (5) + var lbl = ""; + console.println(" State changed to " + st); + if (st == 0) lbl = "\ytStrREPLAY"; + else if (st == 1) lbl = "\ytStrPAUSE"; + else if (st == 3) lbl = "\ytStrBuffering"; + else if (st == 2 || st == 5) lbl = "\ytStrPLAY"; + if (lbl) this.getField("playToggle").buttonSetCaption(lbl); +} +function ytPlaybackQualityChange(str) { + // Possible values are "small", "medium", "large" and "hd720" + console.println(" Quality changed to " + str); +} +function ytProgress(q) { + // q has four properties that you can use to update form fields, + // such as... + //this.getField("currentTime").value = q.CurrentTime; + //this.getField("Duration").value = q.Duration; + //this.getField("BytesLoaded").value = q.BytesLoaded; + //this.getField("BytesTotal").value = q.BytesTotal; +} +function ytError(err) { + // Video cannot be played + console.println(" ERROR code " + err + " received"); + if (err == 100) + app.alert("\ytStrErrorVideoNotFound", 0, 0, "YouTube"); + else { + var resp=app.alert("\ytStrErrorNoEmbed", 1, 3, "YouTube"); + if (resp==4) { + aebCancelWait(false); + ytOpenWeb(aebStartPlayer.annot); + } + } +} +/* + We start the player if the annot is activated, if not, + we set annot.activated=true, and wait for the widget to say it + is ready. When ready, ytPlayerReady() sets + aebStartPlayer.isPlayerReady=true +*/ +function aebStartPlayer(rm,Id,bPlay) { + aebStartPlayer.annot=rm; + if (aebStartPlayer.annot.activated) + aebStartPlayer.annot.callAS(% +(bPlay)?"loadVideoById":"cueVideoById",Id,0); + else { + aebCancelWait(false); + aebStartPlayer.annot.activated=true; + aebStartPlayer.isPlayerReady=false; + aebStartPlayer.twait=app.setInterval(% +'aebWait4Ready(\"'+Id+'\",'+bPlay+');',250); + aebStartPlayer.to=app.setTimeOut("aebCancelWait(true)", 10000); + } +} +aebStartPlayer.isPlayerReady=false; +aebStartPlayer.twait=null; +aebStartPlayer.to=null; +/* + If the player is ready, we start the video, and clear + the setInterval, otherwise, we wait. +*/ +function aebWait4Ready(Id,bPlay) { + if (aebStartPlayer.isPlayerReady) { + aebCancelWait(false); + aebStartPlayer.annot.callAS(% +(bPlay)?"loadVideoById":"cueVideoById",Id,0); + } +} +function aebCancelWait(bNotify) { + var twait=aebStartPlayer.twait; + if (aebStartPlayer.to!=null) + try { app.clearTimeOut(aebStartPlayer.to); } catch(e) {}; + aebStartPlayer.to=null; + if (aebStartPlayer.twait!=null) + try { app.clearInterval(aebStartPlayer.twait); } catch(e) {} + aebStartPlayer.twait=null; + if ( bNotify && twait!=null ) app.alert("\ytStrConnecTimedOut"); +} +\end{newsegment} +\begin{newsegment}{Popup Menu Data and JS} +\ytPopupData +var aChoice; +function ytProcessMenu(aMenu) { + var cChoice = \popUpMenu(aMenu); + if ( cChoice != null ) { + aChoice=eval(cChoice); + if (aChoice[1]=="") return null; + var thisChoice=aChoice[0]; + if (ytProcessMenu.nChoice==undefined) { + ytProcessMenu.nChoice=thisChoice; + eval("aMenu"+ytProcessMenu.nChoice).bMarked=true; + } else { + eval("aMenu"+ytProcessMenu.nChoice).bMarked=false; + var oldnChoice=ytProcessMenu.nChoice; + ytProcessMenu.nChoice=thisChoice; + eval("aMenu"+ytProcessMenu.nChoice).bMarked=(oldnChoice==ytProcessMenu.nChoice)?false:true; + } + return aChoice; + } else return null; +} +function ytPopupMenu(rmaName,ytmenu) { + var aChoice=ytProcessMenu(ytmenu); + var rm=this.getAnnotRichMedia(this.pageNum,rmaName); + if (aChoice!=null) { + if (ytProcessMenu.lastDescrip==undefined) { + aebStartPlayer(rm,aChoice[1],!event.shift); + } else { + if (ytProcessMenu.lastDescrip!=aChoice[1]) { + aebStartPlayer(rm,aChoice[1],!event.shift); + } + } + ytProcessMenu.lastDescrip=aChoice[1]; + } +} +\end{newsegment} +\end{insDLJS*} +\endinput +%% +%% End of file `yt4pdf.sty'. -- cgit v1.2.3