%% pause.sty                                      18 Jun 2002
%%-----------------------------------------------------------
%% History:
%% The initial version was created                11 Jun 1999
%% Updated to allow options                       10 Mar 2000
%% Restructured after tests                       03 Apr 2000
%% Added procesing for random builds              07 May 2000
%% Supply test for new enough pdftex              09 May 2000
%% No need for pdftex 14 any more                 31 May 2000
%% Added commands for highligthing etc.           12 Jun 2000
%% Added options ignore, nomarkers and dvipdfm
%% runs with vlatex and dvipdfm                   10 Nov 2001
%% Update comment section                         13 Jun 2002
%% Make catcodes safe for pdfliteral              18 Jun 2002
%%
%%   Because we need a color definition this can be used
%%   primarily with LaTeX. Thus we can also rely on \@ifnextchar
%%   and LaTeX option processing.
%%
%% insert small colored chunks to mark spots in the pdf file,
%% where a break should be made during display.
%% This method needs postprocessing by another program.
%% But one can preview the formatted text, where stops are indicated
%% as small colored chunks. These will vanish during postprocessing.
%%
%% Take care: because we have to insert pdf comments starting with
%% the letter '%' the catcode of '%' will be changed temporarily.

%% must define all optional variants to support creating a file
%% without pdf elements


%% Options
\newif\ifpause@ignore    \pause@ignorefalse
\newif\ifpause@nomarkers \pause@nomarkersfalse
\newif\ifpause@dvipdfm   \pause@dvipdfmfalse

\DeclareOption{ignore}{\pause@ignoretrue}
\DeclareOption{nomarkers}{\pause@nomarkerstrue}
\DeclareOption{dvipdfm}{\pause@dvipdfmtrue}

\ProcessOptions


%% warning if ignore and nomarkers
\ifpause@ignore
 \ifpause@nomarkers
   \message{Warning, options ignore and nomarkers used together}
 \fi
\fi

%% We need to make sure that , and : are not active characters while
%% we read these macro definitions.
%% Save their current catcode settings now and restore them at the end
\def\pppp@x#1{\catcode`\noexpand#1=\the\catcode`#1\relax}%
\xdef\pppp@restoreCatcodes{\relax
 \pppp@x\:\relax
 \pppp@x\,\relax
}
\catcode`\,=12\relax
\catcode`\:=12\relax

\def\pauseDissolve{\pause[trans='Dissolve']}
\def\pauseReplace{\pause[trans='Replace']}
\def\pauseHBlinds{\pause[trans='Blinds,H']}
\def\pauseVBlinds{\pause[trans='Blinds,V']}
\def\pauseHOSplit{\pause[trans='Split,H,O']}
\def\pauseHISplit{\pause[trans='Split,H,I']}
\def\pauseVOSplit{\pause[trans='Split,V,O']}
\def\pauseVISplit{\pause[trans='Split,V,I']}
\def\pauseOBox{\pause[trans='Box,O']}
\def\pauseIBox{\pause[trans='Box,I']}
\def\pauseWipe#1{\pause[trans='Wipe,#1']}
\def\pauseGlitter#1{\pause[trans='Glitter,#1']}
\def\pause{\@ifnextchar [{\pppp@pause}{\pppp@pause[]}}



%% dvipdfm support
\ifpause@dvipdfm
 {\catcode`\^^M=12
 \gdef\pdfliteral#1{\special{pdf: content
     #1
 }}}

 \message{Using color settings for dvipdfm}

 \RequirePackage[dvipdfm]{color}

 %% This is for the support of the dvipdfm color philosophy
 \def\pppp@gettail #1 #2:{#2}
 \def\pppp@gethead #1 #2:{#1}
 \def\pppp@tail #1{\expandafter\pppp@gettail #1:}
 \def\pppp@tailtail #1{\expandafter\pppp@gettail\pppp@gettail #1::}
 \def\pppp@head #1{\expandafter\pppp@gethead #1:}
 \def\pppp@removebrackets[#1]{#1}


 % maps dvipdfm color arguments to pdf color commands
 \def\pppp@dvipdfmmap #1{\expandafter\pppp@grayorother#1:}
 \def\pppp@dvipdfmmapper#1{\csname dvipdfmmapel@#1\endcsname}
 \def\pppp@dvipdfmmapvalue#1{\expandafter\def\csname dvipdfmmapel@#1\endcsname}

 \def\pppp@grayorother#1#2:{\pppp@dvipdfmmapper{#1}[#1#2]}
 \def\pppp@rgborcmyk #1 #2 #3 #4 #5 #6:{\pppp@dvipdfmmapper{#6}[#2 #3 #4 #5]}

 % for the latest dvipdfm.def-File
 \pppp@dvipdfmmapvalue{c}[#1]{\pppp@tail{#1} k \pppp@tail{#1} K}
 \pppp@dvipdfmmapvalue{r}[#1]{\pppp@tail{#1} rg \pppp@tail{#1} RG}
 \pppp@dvipdfmmapvalue{g}[#1]{\pppp@tail{#1} g \pppp@tail{#1} G}

 % for dvipdfm.def with bg-error
 \pppp@dvipdfmmapvalue{b}[#1]{\pppp@tail{#1} g \pppp@tail{#1} G}

 % support of the older format ([...],...)
 \pppp@dvipdfmmapvalue{0}[#1]{#1 g #1 G}
 \pppp@dvipdfmmapvalue{1}[#1]{#1 g #1 G}
 \pppp@dvipdfmmapvalue{[}[#1]{\expandafter\pppp@removebrackets[\expandafter\pppp@rgborcmyk #1 :}
 \pppp@dvipdfmmapvalue{}[#1]{#1rg #1RG}
 \pppp@dvipdfmmapvalue{ }[#1]{#1 k #1 K}

 \def\pppp@colortostring #1{\expandafter\pppp@dvipdfmmap\csname\string\color@#1\endcsname}
\else
 \RequirePackage{color}
 \def\pppp@colortostring #1{\csname\string\color@#1\endcsname}
\fi


\definecolor{pp4red}{rgb}{0.9,0.5,0}

%% We need to make sure that our argument parameters do not contain
%% active characters when we are called. This means we better set the
%% catcodes for some common delimiters in our arguments. Let's hope
%% that nobody is going to change the letters and digits, too.
\gdef\pppp@catcodes{%
 \catcode`\+12\relax
 \catcode`\-12\relax
 \catcode`\:12\relax
 \catcode`\=12\relax
 }
%% now we need a section where % can be written to pdf files.
%% thus make ! a comment character
{\catcode`\%=11\catcode`\!=14
\gdef\pppp@marker#1{!
    \ifpause@ignore
      \relax
    \else
      \pdfliteral{%pause}!
      \ifpause@nomarkers
        \relax
      \else
        \color{pp4red}\vrule width 2truemm height 5truemm\hss ! the marker
      \fi
      \pdfliteral{%esuap #1}!
    \fi}
\gdef\pppp@pause[#1]{!
     \ifvmode
       \vbox to 0pt{\vss\hsize0pt\noindent\hbox to 0pt{\pppp@marker{#1}}}\else!hmode or mmode
       \null\hbox to 0pt{\pppp@marker{#1}}\null!
       !\null\hbox to 0pt{\pppp@marker{#1}}\null
     \fi}


\ifpause@ignore
  !! define dummies, if \pause should be ignored
  \gdef\pauselevel#1{\relax}!
  \gdef\pausecolors#1#2#3{}!
  \gdef\pausecolorreset{\relax}
  \gdef\pausebuild{\relax}
  \gdef\pausehighlight{\relax}
\else
  \gdef\pauselevel{\bgroup\pppp@catcodes\pppp@pauselevel}!
  \gdef\pppp@pauselevel#1{\pdfliteral{%pauselevel #1}\egroup}!
  \gdef\pausecolors#1#2#3{!
    \pdfliteral{%pausecolor \pppp@colortostring{#1}\space \pppp@colortostring{#2}\space \pppp@colortostring{#3}}}!
  \gdef\pausecolorreset{!
    \pdfliteral{%pausecolor reset}}!
  \gdef\pausebuild{!
    \pdfliteral{%pausecolor appear}}!
  \gdef\pausehighlight{!
    \pdfliteral{%pausecolor highlight}}!
\fi
}

\pppp@restoreCatcodes