aboutsummaryrefslogtreecommitdiff
%%
%% This is the original source file advi.sty
%%
%% Package `advi' to use with LaTeX 2e
%% Copyright Roberto Di Cosmo, Jun Furuse, Didier Remy, and Pierre Weis
%% All rights reserved.

% Which name is ours
\def \ActiveDVI {Active-DVI}

\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{advi}
         [2001/29/08 v0.40 Advi Package for advi Previewer]

%%

%% Identification
%% Preliminary declarations

\RequirePackage {keyval}

%% Options

\newif \ifadvi@ignore \advi@ignorefalse
\DeclareOption {ignore}{\advi@ignoretrue}

\ProcessOptions
% \@ifundefined {AdviOptions}{}{\ExecuteOptions {\AdviOptions}}

%% More declarations

% Auxilliary macros


\def \advi@empty{}
\def \advi@ifempty #1{\def \@test {#1}\ifx \@test \advi@empty 
  \expandafter \@firstoftwo \else \expandafter \@secondoftwo \fi}
\def \advi@error #1{\PackageError {Advi}{#1}{Type <RETURN> to proceed.}}
\def \advi@warning #1{\PackageWarning {Advi}{#1}}
\def \advi@undefinedenv {\advi@error {Environment \@currenvir\space undefined.
Maybe you mean \@currenvir ing}}
\def \advi@special@ {\advi@ifadvi{\special}{\advi@ignore}}
\def \advi@special #1{\advi@special@ {advi: #1}}
\def \advi@export #1#2{\@ifdefinable #1{\let #1#2}}
\def \advi@exportenv #1#2{%
  \@ifundefined {#1}{\expandafter \let \csname #1\expandafter \endcsname
                     \csname end#1\endcsname }\relax  
  \expandafter \@ifdefinable \csname #1\endcsname
  {\expandafter \let \csname #1\expandafter \endcsname \csname #2\endcsname
   \expandafter \let \csname end#1\expandafter \endcsname 
        \csname end#2\endcsname}}

\def \advi@ignore #1{}
\def \advi@id #1{#1}

\def \advi@ifadvi {\ifadvi@ignore
  \expandafter \@secondoftwo \else \expandafter \@firstoftwo \fi}
\advi@export \adviignore \advi@ignoretrue
\advi@export \ifadvi \advi@ifadvi

%%% Record and play

\newif \ifadvi@recording 
\def \advi@ifrecording {\ifadvi@recording
   \expandafter \@firstoftwo \else \expandafter \@secondoftwo \fi}
\def \advi@ifrecordenv {\ifx \@currenvir \advi@recordenv
   \expandafter \@firstoftwo \else \expandafter \@secondoftwo \fi}

\def \advi@start {start}
\def \advi@startplay {start play}
\define@key{advi@record}{play}[]{\let \advi@do \advi@startplay}
\def \advi@recordenv {advirecord}

\newenvironment{advi@recording}[2][]%
  {\begingroup
     \let \advi@do \advi@start \setkeys{advi@record}{#1}%
     \advi@special {proc=#2 record=\advi@do}%
   \endgroup}
  {\advi@special {proc record=end}}
\newcommand {\advi@record}[3][]{\advi@recording[#1]{#2}#3\endadvi@recording}

\newcommand {\advi@play}[2][]%
   {\begingroup
      \advi@ifempty{#1}{}{\color {#1}}{\advi@special {proc=#2 play}}%
    \endgroup}

\advi@exportenv {advirecording}{advi@recording} 
\advi@export \advirecord \advi@record
\let \endadvirecord \advi@undefinedenv
\advi@export \adviplay \advi@play


%%% Embedded applications

\def \advi@embed@name{anonymous}
\def \advi@embed@mode{ephemeral}
\def \advi@embed@width{0pt}
\def \advi@embed@height{0pt}
\define@key {advi@embed}{name}{\def \advi@embed@name {#1}}
\define@key {advi@embed}{width}%
   {\@tempdima#1\relax \edef \advi@embed@width {\the\@tempdima}}
\define@key {advi@embed}{height}%
   {\@tempdima#1\relax \edef \advi@embed@height {\the\@tempdima}}
\def \advi@definemode #1{%
  \define@key {advi@embed}{#1}[anonymous]{%
     \def \advi@embed@mode {#1}\def\advi@embed@name {##1}%
  }}
\advi@definemode{ephemeral}
\advi@definemode{persistent}
\advi@definemode{sticky}

\def \advi@embed@ #1#2#3#4#5{%
  \mbox{\advi@special
          {embed name="#1" mode=#2 width=#3 height=#4 command="#5"}%
          {\vbox to #4{\hbox to #3{}}}}}
\def \advi@length #1{\@tempdima #1\relax \the\@tempdima}
\newcommand{\advi@embed}[2][]{%
  \mbox {\setkeys {advi@embed}{#1}%
         \advi@embed@ {\advi@embed@name}{\advi@embed@mode}
             {\advi@embed@width}{\advi@embed@height}{#2}}}

\newcommand{\advi@killembed}[2][]{\advi@special {kill name="#2" signal="#1"}}

\advi@export \adviembed \advi@embed

\advi@export \advikillembed \advi@killembed 


%%% Background colors and images

\def \do #1{\expandafter \def \csname advi@geom@#1@\endcsname {#1}}
\do {center}
\do {left}
\do {right}
\do {bottom}
\do {top}
\do {topleft}
\do {topright}
\do {bottomleft}
\do {bottomright}
\let \do \relax
\def \advi@ifnine #1#2#3{\@ifundefined {advi@geom@#1@}{#3}{#2}}

\let \advi@global \relax
\def \advi@global@ {global}
\newif \ifadvi@bgactive

\def \advi@bg@do
 {\do\advi@bgcolor \do\advi@bgimage \do \advi@bgalpha \do\advi@bgblend}
\def \advi@auto@ { fit=auto}
\def \advi@bgreset 
 {\def \do ##1{\expandafter \advi@global
                  \expandafter \let \noexpand ##1\advi@empty}\advi@bg@do
  \advi@global \let \advi@bgfit \advi@auto@
  \advi@global \advi@bgactivefalse}
\advi@bgreset

\def \advi@none@ {none}
\def \advi@ifnone #1{\def \@test{#1}\ifx \@test \advi@none@
  \let \@test \advi@empty \fi \ifx \@test \advi@empty
  \expandafter \@firstoftwo \else \expandafter \@secondoftwo \fi}

\def \advi@setbg #1#2#3{\advi@ifnone {#1}
  {\advi@global \expandafter \let \noexpand #1\advi@empty}
  {\advi@global \expandafter \def \noexpand #1{ #2=#3}%
   \advi@global \advi@bgactivetrue}}
\define@key {advi@bg}{color}[]{\advi@setbg{\advi@bgcolor}{color}{#1}}
\define@key {advi@bg}{image}[]{\advi@setbg{\advi@bgimage}{image}{#1}}
\define@key {advi@bg}{alpha}[]{\advi@setbg{\advi@bgalpha}{alpha}{#1}}
\define@key {advi@bg}{blend}[]{\advi@setbg{\advi@bgblend}{blend}{#1}}
\define@key {advi@bg}{fit}[auto]{\def \advi@bgfit {#1}%
     \ifx \advi@bgfit \advi@auto@ \else
     \advi@ifnine {\advi@bgfit}
       {\advi@global \def \advi@bgfit{ fit=#1}}
       {\advi@error {Ill formed background fit=#1}}%
   \fi}
\def \advi@bgset #1{\advi@ifnone {#1}{\advi@bgreset}{\setkeys {advi@bg}{#1}}}

%\define@key {advi@bg}{inherit}[]{\advi@special{setbg inherit}}

\def \advi@bgemit 
  {\advi@special 
     {setbg \advi@bgcolor \advi@bgimage \advi@bgalpha \advi@bgblend
      \advi@bgfit
      }}
\newif \ifadvi@bglocal

\newcommand{\advi@bg}[2][]{%
  \begingroup 
  \def \@test {#1}\ifx \@test \advi@global@ \let \advi@global \global
  \advi@bgset {#2}\else
  \ifx \@test \advi@empty \else \advi@warning
     {Optional argument [#1] to \string \advibg ignored}\fi
  \global \advi@bglocaltrue
  \advi@bgset{#2}\advi@bgemit \fi
  \endgroup}
\def \advi@bgpage
   {\ifadvi@bgactive \ifadvi@bglocal\else \advi@bgemit \fi\fi
    \global \advi@bglocalfalse}

\advi@export \advibg \advi@bg

%%% Pausing and waiting

\def\advi@pause {\advi@special{pause}}
\def\advi@wait#1{\advi@special{wait sec=#1}}

%% export
\newcommand {\adviwait}[1][]%
   {\advi@ifempty {#1}{\advi@pause}{\advi@wait {#1}}}

%%% Transparency and alpha blending
%%% To be revisited. 

\def\advi@epstransparent
   {\advi@special{epstransparent push true}%
    \aftergroup \advi@resetepstransparent} 
\def\advi@epswhite
   {\advi@special{epstransparent push false}%
    \aftergroup \advi@resetepstransparent} 
\def\advi@setalpha#1%
   {\advi@special{alpha push #1}%
    \aftergroup \advi@resetalpha} 
\def\advi@setblend#1%
   {\advi@special{blend push #1}%
    \aftergroup\advi@resetblend}
\def\advi@resetepstransparent {\advi@special{epstransparent pop}}
\def\advi@resetalpha {\advi@special{alpha pop}}
\def\advi@resetblend {\advi@special{blend pop}}

\advi@export \epstransparent \advi@epstransparent
\advi@export \epswhite \advi@epswhite
\advi@export \setalpha \advi@setalpha
\advi@export \setblend \advi@setblend

%%% Animated transitions

\def \advi@transfrom{}
\def \advi@transsteps{}
\def \advi@settrans {\advi@global \def}
\define@key {advi@trans}{none} []{\advi@settrans \advi@transmode {none}}
\define@key {advi@trans}{slide}[]{\advi@settrans \advi@transmode {slide}}
\define@key {advi@trans}{block}[]{\advi@settrans \advi@transmode {block}}
\define@key {advi@trans}{wipe} []{\advi@settrans \advi@transmode {wipe}}
\define@key {advi@trans}{from} {\advi@settrans \advi@transfrom { from=#1}}
\define@key {advi@trans}{steps}{\advi@settrans \advi@transsteps { steps=#1}}

\def \advi@transemit
   {\advi@special{trans \advi@transmode \advi@transfrom \advi@transsteps}}
\newif \ifadvi@translocal 
\newcommand {\advi@transition}[2][]{%
  \begingroup
     \def \@test {#1}\ifx \@test \advi@global@ \let \advi@global \global
     \setkeys {advi@trans}{#2}\else
     \ifx \@test \advi@empty \else \advi@warning
        {Optional argument [#1] to \string \advitransition ignored}\fi
     \global \advi@translocaltrue
     \setkeys {advi@trans}{#2}\advi@transemit \fi
  \endgroup}

\def \advi@transpage
  {\@ifundefined {advi@transmode}{}
        {\ifadvi@translocal\else \advi@transemit \fi}%
   \global \advi@translocalfalse}

%% Hook \advi@setpagesetyle at \@begindvi that run at every page

\def \advi@setpagestyle {\advi@bgpage \advi@transpage}
\def \endpage@hook {}
\def \AtEndPage {\g@addto@macro \endpage@hook}
\AtEndPage {\advi@setpagestyle}

% We must patch \@begindvi to put out hook. 
% However, hyperref may patch it as well. So we should do it at begin
% document to have the control (no one after us). 
% Howver, one must be careful, because \@begindvi redefines itself at the
% first call to its prerecorded final value. 
% So our first patch will be overridden with the value that it was
% meant to have after the first page.
% Hence, we patch it a second time to put our hook to this final value. 

% we can use \g@addto@macro which redefines #1 to so that it procedes as 
% before and then execute #2 at the end. 

\def \advi@begindvi@patch
  {\g@addto@macro \@begindvi      
      {\endpage@hook \g@addto@macro \@begindvi {\endpage@hook}}}

\AtBeginDocument {\advi@begindvi@patch}

%  {\let \advi@begindvi@save \@begindvi   %% value at begindocument
%   \def \@begindvi                       %% our new value
%     {\advi@begindvi@save                %% may redefine \@begindvi
%      \global\let \advi@begindvi@save    %% so we this new value
%         \@begindvi                      
%      \gdef \@begindvi                   %% now and forever
%         {\advi@begindvi@save \endpage@hook}%
%      \endpage@hook                      %% our hook for the
%     }}



%% Transitions

\def\advi@transbox@save#1#2#3{\advi@special
  {transbox save width=#1 height=#2 depth=#3}}
\def\advi@transbox@go#1{\advi@special{transbox go #1}}

\def \advi@transslide {slide}
\def \advi@transbox #1{%
   \def \advi@afterbox 
      {\hbox {\advi@transbox@save{\the\wd0 }{\the\ht0 }{\the\dp0}%
              \unhbox0\setkeys {advi@trans}{#1}%
              \advi@transbox@go
                  {\advi@transmode \advi@transfrom \advi@transsteps}}}%
   \def \advi@@afterbox {\aftergroup \advi@afterbox} 
   \afterassignment \advi@@afterbox \setbox0 \hbox } 

\advi@export \advitransition \advi@transition
\advi@export \advitransbox \advi@transbox

%%% For PS Tricks

\def \advi@moveto {\advi@special {moveto}}
\def\advi@psput@special#1{%
\hbox{%
\pst@Verb{{ \pst@coor }  
dup exec 2 copy moveto advi@Dict begin printpos end
\tx@PutCoor 
\tx@PutBegin}
\hbox {\advi@moveto \box#1}%
\pst@Verb{\tx@PutEnd}}}

\def\advi@ncput@iii{%
\leavevmode
\hbox{%
\pst@Verb{%
\pst@nodedict
/t \psk@npos def
tx@NodeDict /LPutPos known { LPutPos } { CP /Y ED /X ED /NAngle 0
def } ifelse 
LPutCoor 
end
\tx@PutBegin
}%
\hbox {\box\pst@hbox}%
\pst@Verb{\tx@PutEnd}}}

\def \advi@pstricks@patch
  {\@ifundefined {psput@special}{}
    {\let \psput@special \advi@psput@special
     %\@ifundefined {ncput@iii}{}{\let \ncput@iii \advi@ncput@iii}%
     \pstheader {advi.pro}}}
\AtBeginDocument {\advi@pstricks@patch}


%%% Active DVI

\def \advi@over@ {over}
\def \advi@click@ {click}
\def \advi@null {\hbox {}}

\newenvironment {advi@anchoring}[2][over]{%
   \begingroup
   \def \@test {#1}\ifx \@test \advi@over@ 
       \advi@special@ {html:<a advi="#2">}\else
   \ifx \@test \advi@click@ 
       \advi@special@ {html:<a hdvi="#2">}\else
   \advi@error {Incorect anchor mode #1}\fi \fi\endgroup}
  {\advi@special@ {html:</a>}}
\newcommand {\advi@anchor}[3][over]%
   {\advi@anchoring[#1]{#2}#3\endadvi@anchoring}

\def \advi@endanchor #1{#1\endadvi@anchor \endgroup}
\advi@exportenv {advianchoring}{advi@anchoring}
\advi@export \advianchor \advi@anchor
\let \endadvianchor \advi@undefinedenv

%%% Partial patch for overlays -- 0 will be shown > 0 will not be shown

\def \advi@max {0}
\def \advi@overlay #1{%
  \advi@ifadvi 
    {%\advance \c@overlay by 1
     \ifnum \c@overlay>\advi@max \global \xdef \advi@max {\the \c@overlay}\fi
     \advi@recording {overlay@#1}\aftergroup \endadvi@recording}
    {\latex@overlay {#1}}}

\def \advi@overlay@loop
 {\advi@ifadvi 
  {\begingroup
    \c@overlay=0
    \@whilenum\c@overlay<\advi@max
    \do {\advance \c@overlay  by 1%
         \adviwait \adviplay{overlay@\the\c@overlay}}%
  \endgroup
  \gdef \advi@max {0}}
 {\latex@overlay@loop}}

\def \advi@end@slide 
  {\advi@ifadvi {\overlay@loop}{}\latex@end@slide}

\def \advi@overlay@patch {%
   \let \latex@overlay \@overlay
   \let \latex@end@slide \end@slide
   \let \latex@overlay@loop \overlay@loop
   \let \@overlay \advi@overlay
   \let \overlay@loop \advi@overlay@loop
   \let \end@slide \advi@end@slide
  }

\@ifundefined {overlay}{}
   {\AtBeginDocument {\advi@overlay@patch}}


\endinput