summaryrefslogtreecommitdiff
path: root/texmf-dist/source/latex/fldigigal/fldigigal.dtx
diff options
context:
space:
mode:
Diffstat (limited to 'texmf-dist/source/latex/fldigigal/fldigigal.dtx')
-rw-r--r--texmf-dist/source/latex/fldigigal/fldigigal.dtx452
1 files changed, 452 insertions, 0 deletions
diff --git a/texmf-dist/source/latex/fldigigal/fldigigal.dtx b/texmf-dist/source/latex/fldigigal/fldigigal.dtx
new file mode 100644
index 00000000..520d1bdf
--- /dev/null
+++ b/texmf-dist/source/latex/fldigigal/fldigigal.dtx
@@ -0,0 +1,452 @@
+%\iffalse
+%<*copyright>
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%% fldigigal.sty package, 2010-23-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. %%
+%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%%
+%</copyright>
+%<package>\NeedsTeXFormat{LaTeX2e}[1997/12/01]
+%<package>\ProvidesPackage{fldigigal}
+%<package> [2010/12/29 v0.5c fldigigal: Create a Flash Digital Gallery, Acrobat Distiller only (dps)]
+%<*driver>
+\documentclass{ltxdoc}
+\usepackage[colorlinks,hyperindex]{hyperref}
+%\pdfstringdefDisableCommands{\let\\\textbackslash}
+%\EnableCrossrefs \CodelineIndex
+\begin{document}
+\def\CMD#1{\textbackslash#1}
+ \GetFileInfo{fldigigal.sty}
+ \title{\textsf{fldigigal}: Package for creating a Flash Digital Gallery}
+ \author{D. P. Story\\
+ Email: \texttt{dpstory@uakron.edu}}
+ \date{processed \today}
+ \maketitle
+ \tableofcontents
+ \let\Email\texttt
+ \DocInput{fldigigal.dtx}
+ \PrintIndex
+\end{document}
+%</driver>
+% \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}
+\RequirePackage{rmannot}[2010/12/22]
+% \end{macrocode}
+%
+% \section{Introduction}
+%
+% \section{Implementation}
+% This package offers the \LaTeX/Distiller user the ability to create
+% \emph{Flash Photo Galleries}. There are several photo gallery layouts
+% to select from, and some dynamic options that can be specified. The
+% digital photographs (\textsf{JPG}, \textsf{PNG}, or \textsf{GIF}) may
+% be embedded in the PDF document, or may reside online and referenced by
+% an \textsf{URL}.
+%
+% \begin{macro}{\fdgFolder} The path to the folder containing
+% the the \textsf{SWF} files of this distribution. This path is set through
+% the \texttt{fldigigal.cfg} file.
+% \begin{macrocode}
+\newcommand{\fdgFolder}{C:/Users/Public/Documents/My TeX Files/%
+ tex/latex/aeb/aebpro/fldigigal/swf}
+% \end{macrocode}
+% \end{macro}
+% We input the file \texttt{fldigigal.cfg} which should contain a re-definition
+% of the command \cs{fdgFolder}, the path to the Flash Digital Gallery \textsf{SWFs}.
+% \begin{macrocode}
+\InputIfFileExists{fldigigal.cfg}{}{}
+% \end{macrocode}
+% \subsection{Main Code}
+% In this section we define the \cs{fdgXmlList} and \cs{fgRmAnnot}, and their
+% supporting cast of characters.
+% \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\fdg@namegdef#1{\expandafter\gdef\csname #1\endcsname}
+\def\fdg@namexdef#1{\expandafter\xdef\csname #1\endcsname}
+% \end{macrocode}
+% We define \cs{fdg@iso}, which, within the \cs{image} command, we declare that
+% \verb!\let\iso\fdg@iso!, defining the \cs{iso} command to enter special characters
+% in the \texttt{caption} attribute.
+% \begin{macrocode}
+{\catcode`\#=12 \catcode`\&=12 \catcode`\!=6
+ \gdef\fdg@iso!1{&#!1;}
+}
+% \end{macrocode}
+% \begin{macro}{\fdgXmlList}
+% The \cs{fdgXmlList} command describes the photos to be displayed in the
+% digital gallery. Here is an example of the structure:
+%\begin{verbatim}
+%\fdgXmlList[showcount]{myDigis}{%
+% \image{path=\myPhotosLocal/Chrysanthemum.jpg,caption=Chrysanthemum}
+% \image{path=\myPhotosLocal/Desert.jpg,caption=Desert}
+% \image{path=\myPhotosOnline/Hydrangeas.jpg,caption=Hydrangeas,online}
+% \image{path=\myPhotosOnline/Jellyfish.jpg,caption=Jellyfish,online}
+% \image{path=\myPhotosOnline/Koala.jpg,caption=Koala,online}
+% \image{path=\myPhotosOnline/Lighthouse.jpg,caption=Lighthouse,online}
+% \image{path=\myPhotosOnline/Penguins.jpg,caption=Penguins,online}
+% \image{path=\myPhotosOnline/Tulips.jpg,caption=Tulips,online}
+%}
+%\end{verbatim}
+% The first optional argument takes any optional arguments; at this time, the
+% only option is \texttt{showcount}, where the photo number and total number of
+% photos is displayed, e.g. \texttt{(2 of 8)}. The default is not to show the count.
+% The second parameter is the unique name of the gallery. The third parameter consists
+% of any number of image specifications. The \cs{image} command has three properties:
+% \texttt{path}, \texttt{caption}, and \texttt{online}. These are describe
+% in more detail below.
+% \begin{macro}{path} The absolute path (url) to the photo; the path may be on a local
+% hard drive, or on the Internet. Paths may (should) be defined using the
+% the \cs{definePath}, defined in the \texttt{eforms} package.
+%\begin{verbatim}
+% \definePath{\myPhotosOnline}{%
+% http://www.math.uakron.edu/~dpstory/photos/pa_demo}
+% \definePath{\myPhotosLocal}{%
+% C:/Users/Public/Pictures/Sample Pictures}
+%\end{verbatim}
+% \begin{macrocode}
+\define@key{fdgxml}{path}[]{\def\fdg@pa@path{#1}}
+% \end{macrocode}
+% \end{macro}
+% \DescribeMacro{caption} A (short) string that describes the photo. If the
+% \texttt{caption} key is not present, the filename of the digital photo is used.
+% \begin{macrocode}
+\define@key{fdgxml}{caption}[]{\def\fdg@pa@caption{#1}}
+% \end{macrocode}
+% \DescribeMacro{online} A Boolean key, which if true, signals that the path
+% to the photo is on the Internet (\texttt{http://}). If the \texttt{online} key is not
+% present, the path is assumed to be local, and the photo will be embedded in the PDF.
+% \begin{macrocode}
+\define@boolkey{fdgxml}{online}[true]{}
+% \end{macrocode}
+% We set the global defaults of these key-value pairs.
+% \begin{macrocode}
+\setkeys{fdgxml}{path,caption,online=false}
+% \end{macrocode}
+% We use this counter to count the digis as they are defined by the \cs{image}
+% macro.
+% \begin{macrocode}
+\newcount\cntdigis
+% \end{macrocode}
+% \DescribeMacro{\image} There are two definitions of the \cs{image} command:
+% \cs{fdg@cnt@images} and \cs{fdg@image}.\par\medskip\noindent
+% \cs{fdg@cnt@images} counts the number of images.
+% \begin{macrocode}
+\def\fdg@cnt@images#1{\advance\cntdigis1 }
+% \end{macrocode}
+% \cs{fdg@image} does all the work in writing the photo information to an XML file.
+% \begin{macrocode}
+\def\fdg@image#1{\begingroup
+ \let\Name\rma@resource\let\urlName\rma@urlresource
+ \setkeys{fdgxml}{#1}%
+ \global\advance\cntdigis1
+% \end{macrocode}
+% We expand the internal name of the digital resource. The name has the form
+% \texttt{Im<number>(<name>)}.
+% \begin{macrocode}
+ \edef\@digiImgName{Im\the\cntdigis(\fdg@CurrDigiName)}%
+% \end{macrocode}
+% Use \cs{saveNamedPath} to save this name and path.
+% \begin{macrocode}
+ \saveNamedPath{\@digiImgName}{\fdg@pa@path}%
+% \end{macrocode}
+% Get the basename and extension using the \cs{Name} command.
+% \begin{macrocode}
+ \edef\fdg@NamedExp{\expandafter\Name\expandafter{\@digiImgName}}%
+% \end{macrocode}
+% If the caption is empty, use the \texttt{basename.ext}
+% \begin{macrocode}
+ \ifx\fdg@pa@caption\@empty\def\fdg@pa@caption{\fdg@NamedExp}\fi
+% \end{macrocode}
+% If \texttt{online} is true, write the full url path to the xml using
+% the \cs{urlName} macro.
+% \begin{macrocode}
+ \ifKV@fdgxml@online
+ \edef\fdg@urlNamedExp{%
+ \expandafter\urlName\expandafter{\@digiImgName}}%
+ \fdg@IWVO{\space\space\space\space
+ <image title='\fdg@pa@caption\fdg@cntOf{\the\cntdigis}'>%
+ \fdg@urlNamedExp</image>
+ }%
+ \else
+% \end{macrocode}
+% If online is not listed, or is set to \texttt{false} we embed. We
+% accumulate all resources that are embedded in \cs{fdg@embededResources}
+% \begin{macrocode}
+ \toks0=\expandafter{\fdg@embededResources}%
+ \ifx\fdg@embededResources\@empty
+ \xdef\fdg@embededResources{\@digiImgName}\else
+ \xdef\fdg@embededResources{\the\toks0,\@digiImgName}\fi
+ \fdg@IWVO{\space\space\space\space
+ <image title='\fdg@pa@caption\fdg@cntOf{\the\cntdigis}'>%
+ \fdg@NamedExp</image>
+ }%
+ \fi
+\endgroup}
+% \end{macrocode}
+% Convenience macro for writing to the XML file
+% \begin{macrocode}
+\def\fdg@IWVO{\immediate\write\verbatim@out}
+% \end{macrocode}
+% A (internal) interface to the digi resources. The one argument
+% is the name of the gallery these digis are associated with.
+% \begin{macrocode}
+\def\embededResources#1{\csname #1ERs\endcsname}
+% \end{macrocode}
+% The internal name of the xmlList. The argument is the name of the gallery.
+% \begin{macrocode}
+\def\xmlListiv#1{xmlList4#1}
+% \end{macrocode}
+% \begin{macro}{\fdgcntOf}
+% The internal command for writing the photo count is \cs{fdg@cntOf}. Initially,
+% we \cs{let} \cs{fdg@cntOf} to \cs{@gobble}
+% \begin{macrocode}
+\let\fdg@cntOf\@gobble
+% \end{macrocode}
+% \begin{macrocode}
+\newcommand{\fdgcntOf}[1]{\space(#1 of \fdg@numDigis)}
+% \end{macrocode}
+% \end{macro}
+% The options of \cs{fdgXmlList}. If \texttt{true} the photo number is displayed, if \texttt{false},
+% the default, no photo number is displayed.\par\medskip\noindent
+% \DescribeMacro{showcount} When the \texttt{showcount} option is specified, we \cs{let} \cs{fdg@cntOf}
+% to \cs{fdgcntOf}. The command may be redefined. The first argument is the photo
+% number, the command \cs{fdg@numDigis} expands to the total number of photos.
+% \begin{macrocode}
+\define@boolkey{fdgXML}{showcount}[true]{%
+ \ifKV@fdgXML@showcount\let\fdg@cntOf\fdgcntOf\else
+ \let\fdg@cntOf\@gobble\fi
+}
+% \end{macrocode}
+%\DescribeMacro{nowrite} When we set this switch, we \cs{let}
+% \cs{fdg@IWVO} to \cs{@gobble}, and do not open a \cs{newwrite} stream.
+% \begin{macrocode}
+\define@boolkey{fdgXML}{nowrite}[true]{}
+% \end{macrocode}
+% Set the defaults for he \cs{fdgXML} family.
+% \begin{macrocode}
+\setkeys{fdgXML}{showcount=false,nowrite=false}
+% \end{macrocode}
+% Finally, we have the definition of \cs{fdgXmlList}.
+% \begin{macrocode}
+\newcommand{\fdgXmlList}[3][]{%
+\begingroup
+ \setkeys{fdgXML}{#1}%
+ \ifKV@fdgXML@nowrite\let\fdg@IWVO\@gobble\fi
+ \cntdigis=0 \gdef\fdg@embededResources{}%
+ \ifKV@fdgXML@nowrite\else
+ \newwrite \fdg@writexmllist
+ \immediate\openout \fdg@writexmllist=#2.xml
+ \let\verbatim@out\fdg@writexmllist
+ \fi
+% \end{macrocode}
+% Open he photos xml file and write the top level
+% \begin{macrocode}
+ \fdg@IWVO{<photos>}%
+ \@ifundefined{#2@fdgdigis}{%
+ \fdg@namegdef{#2@fdgdigis}{#2}%
+ \def\fdg@CurrDigiName{#2}%
+ }{\PackageError{fldigigal}{Name already chosen}}%
+% \end{macrocode}
+% The \texttt{\#3} parameter contains the \cs{image} listing.
+% we first count the number of images using \cs{fdg@cnt@images}.
+% \begin{macrocode}
+ \let\image\fdg@cnt@images#3%
+ \edef\fdg@numDigis{\the\cntdigis}%
+% \end{macrocode}
+% Now, we repeat, but this time with \cs{fdg@image}.
+% \begin{macrocode}
+ \def\'{&apos;}\let\iso\fdg@iso
+ \cntdigis=0 \let\image\fdg@image#3%
+% \end{macrocode}
+% Close out XML List
+% \begin{macrocode}
+ \fdg@IWVO{</photos>}%
+ \ifKV@fdgXML@nowrite\else
+ \immediate\closeout \fdg@writexmllist
+ \fi
+\endgroup
+% \end{macrocode}
+% Save the path to the newly created xml list under the name
+% \texttt{xmlList4<name>}
+% \begin{macrocode}
+ \saveNamedPath{xmlList4#2}{\pathToSource/#2.xml}%
+% \end{macrocode}
+% Define a command to save the embedded resources.
+% \begin{macrocode}
+ \fdg@namexdef{#2ERs}{\ifx\fdg@embededResources\@empty\else,\fi
+ \fdg@embededResources}%
+}
+\@onlypreamble{\fdgXmlList}
+% \end{macrocode}
+% \end{macro}
+% \begin{macro}{\fgRmannot}
+% This is the command that actually places the SWF. It uses the \cs{rmAnnot} command
+% from the \textsf{rmannot} package.
+% \paragraph*{Define Key-Value Pairs.} We declare two keys for \cs{fgRmannot}: \texttt{gallery} and \texttt{flashvars}.
+% We use gallery to select the gallery (layout), and flashvars to set some basic
+% parameters of the SWF.
+% \begin{macrocode}
+\define@key{fgRmAnnot}{flashvars}[]{\def\fgRmAnnot@flashvars{&#1}}
+\let\fgRmAnnot@flashvars\@empty
+\define@key{fgRmAnnot}{galleryopts}[]{\def\fgRmAnnot@galleryopts{#1}}
+% \end{macrocode}
+% The `\cs{saveNamePath}' definitions for the three supported galleries.
+% I have a custom gallery for no apparent reason (actually, if I want to
+% create and test a new gallery, I can set it up to use the \texttt{custom} key.
+% \begin{macrocode}
+\saveNamedPath{fdg_vt1}{\fdgFolder/fdg_vt1.swf}
+\saveNamedPath{fdg_ht1}{\fdgFolder/fdg_ht1.swf}
+\saveNamedPath{fdg_nt1}{\fdgFolder/fdg_nt1.swf}
+\saveNamedPath{custom}{\fdgFolder/fdg_vt1.swf}
+% \end{macrocode}
+% \paragraph*{fgGalleryOpts keys.}We now define the key value pairs for the \texttt{fgGalleryOpts} family.
+% These are the keys as listed by \texttt{galleryopts}.
+%
+% \DescribeMacro{gallery} At this time, we offer four choices for a design, more to follow as I learn
+% more about Flash Pro CS5.
+% \begin{macrocode}
+\define@choicekey+{fgGalleryOpts}{gallery}[\val\nr]%
+ {vthumbs1,hthumbs1,nothumbs1,custom}[vthumbs1]{%
+ \ifcase\nr\relax
+ \def\fgGalleryOpts@gallery{fdg_vt1}\or
+ \def\fgGalleryOpts@gallery{fdg_ht1}\or
+ \def\fgGalleryOpts@gallery{fdg_nt1}\or
+ \def\fgGalleryOpts@gallery{custom}\fi
+}{}
+% \end{macrocode}
+% \DescribeMacro{trans} Some standard transitions for the photos.
+% \begin{macrocode}
+\define@choicekey+{fgGalleryOpts}{trans}[\val\nr]%
+ {Blinds,Fade,Fly,Iris,Photo,PixelDissolve,Rotate,%
+ Squeeze,Wipe,Zoom,Random}[Random]{%
+ \edef\fgGalleryOpts@trans{\val}%
+}{}
+\let\fgGalleryOpts@trans\@empty
+% \end{macrocode}
+% \DescribeMacro{delay} The amount of delay between the automatic display of
+% a new photo. The default is 6 (seconds)
+% \begin{macrocode}
+\define@key{fgGalleryOpts}{delay}[6]{\def\fgGalleryOpts@delay{#1}}
+\let\fgGalleryOpts@delay\@empty
+% \end{macrocode}
+% \DescribeMacro{auto} A Boolean switch, which if \texttt{true}, the photos are displayed
+% automatically, the delay is determined by the \texttt{delay} key. The default is \texttt{auto=true}.
+% \begin{macrocode}
+\define@boolkey{fgGalleryOpts}{auto}[true]{%
+ \edef\fgGalleryOpts@auto{\ifKV@fgGalleryOpts@auto
+ true\else false\fi}}
+% \end{macrocode}
+% \DescribeMacro{transOn} A Boolean switch, which if \texttt{true}, a transition effect is used to transition
+% between photos.
+% \begin{macrocode}
+\define@boolkey{fgGalleryOpts}{transOn}[true]{%
+ \edef\fgGalleryOpts@transOn{\ifKV@fgGalleryOpts@transOn
+ true\else false\fi}}
+% \end{macrocode}
+% \DescribeMacro{captionalign} For all galleries except for \texttt{fdg\_nt1} we can align
+% the position of the caption: \texttt{left}, \texttt{right}, or \texttt{center}. The default is \texttt{left}.
+% \begin{macrocode}
+\define@choicekey+{fgGalleryOpts}{captionalign}[\val\nr]%
+ {left,right,center}[left]{%
+ \edef\fgGalleryOpts@captionalign{\val}%
+}{}
+\let\fgGalleryOpts@captionalign\@empty
+% \end{macrocode}
+% \DescribeMacro{nocaptions} A Boolean switch, which if \texttt{true}, no caption is written the the caption bar.
+% The default is \texttt{false}, captions are written.
+% \begin{macrocode}
+\define@boolkey{fgGalleryOpts}{nocaptions}[true]{%
+ \edef\fgGalleryOpts@nocaptions{\ifKV@fgGalleryOpts@nocaptions
+ true\else false\fi}}
+% \end{macrocode}
+% \DescribeMacro{nocaptionstext} If \texttt{nocaptions} is set to \texttt{true}, the value of this
+% key is used as the caption for all the photos. If \texttt{nocaptionstext} is not listed, or has not value, the empty
+% string is used.
+% \begin{macrocode}
+\define@key{fgGalleryOpts}{nocaptionstext}[]{%
+ \def\fgGalleryOpts@nocaptionstext{#1}}
+% \end{macrocode}
+% Global defaults for the \texttt{fgGalleryOpts} family.
+% \begin{macrocode}
+\setkeys{fgGalleryOpts}{gallery,transOn,auto=true,nocaptions=false,nocaptionstext}
+% \end{macrocode}
+% \DescribeMacro{\fgRmAnnot} Now for the definition of \cs{fgRmAnnot}.
+% \begin{macrocode}
+\newcommand{\fgRmAnnot}[2][]{\begingroup
+ \@ifundefined{#2@fdgdigis}%
+ {\PackageError{fldigigal}{The name `#2' is not defined
+ for\MessageBreak this \string\fgRmAnnot}{Gallery names
+ are defined using \string\fdgXmlList}}%
+% \end{macrocode}
+% We get the key-value pairs for the \texttt{fgRmAnnot} family, then
+% within the \texttt{galleryopts} key, we process those options as well.
+% \begin{macrocode}
+ \setkeys*{fgRmAnnot}{#1}\edef\XKV@rm@saved{\XKV@rm}%
+ \edef\tmp@setkeysEx{\noexpand\setkeys{fgGalleryOpts}%
+ {\fgRmAnnot@galleryopts}}\tmp@setkeysEx
+% \end{macrocode}
+% We build part of the \texttt{flashvars} that correspond to this application.
+% The macro \cs{merged@flashvars} merges the flash variables entered directly
+% by the document author to control the \cs{rmAnnot}.
+% \begin{macrocode}
+ \edef\merged@flashvars{\fgRmAnnot@flashvars%
+ \ifKV@fgGalleryOpts@auto\else&%
+ auto=\fgGalleryOpts@auto\fi
+ \ifx\fgGalleryOpts@delay\@empty\else&%
+ delay=\fgGalleryOpts@delay\fi
+ \ifx\fgGalleryOpts@trans\@empty\else&%
+ transitionType=\fgGalleryOpts@trans\fi
+ \ifKV@fgGalleryOpts@transOn\else&%
+ transitionOn=\fgGalleryOpts@transOn\fi
+ \ifx\fgGalleryOpts@captionalign\@empty\else&%
+ captionalign=\fgGalleryOpts@captionalign\fi
+ \ifKV@fgGalleryOpts@nocaptions&%
+ nocaptions=\fgGalleryOpts@nocaptions%
+ \ifx\gGalleryOpts@nocaptionstext\@empty\else&%
+ nocaptionstext=\fgGalleryOpts@nocaptionstext\fi\fi
+ }%
+% \end{macrocode}
+% OK, now we create an \cs{rmAnnot} with the desired parameters.
+% We populate the \texttt{flashvars} key.
+% \begin{macrocode}
+ \rmAnnot[\XKV@rm@saved,
+ flashvars={xmlPath=\Name{\xmlListiv{#2}}\merged@flashvars},%
+ resources={\xmlListiv{#2}\embededResources{#2}}%
+ ]{320bp}{240bp}{\fgGalleryOpts@gallery}%
+ \endgroup
+}
+% \end{macrocode}
+% \end{macro}
+% \begin{macrocode}
+%</package>
+% \end{macrocode}
+\endinput
+History:
+ (2010/12/29 v0.5c) the auto option did not have a default value, fixed
+ (2010/12/25 v0.5b) version date referenced for the rmannot package was
+ incorrect, should read 2010/12/22.
+ (2010/12/25 v0.5a) remove some spurious spaces, and changed the size
+ of \fgRmAnnot from 640bp x 480bp to 320bp x 240bp
+ (2010/12/23 v0.5) First publication