% File:        vpe.sty
% Project:     vpe
% Version:     2000/09/15 v0.1
% Author:      Heiko Oberdiek
%
% Function:    Source specials for pdf files.
%
% Copyright:   Copyright (C) 2000 Heiko Oberdiek.
%
%              This program may be distributed and/or modified 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.
%
%              See file `vpe.txt' for a list of files that
%              belong to this project.
%
% Requirement: * Linux/Unix or Windows/Dos
%              * enabled \write18 feature.
%              * LaTeX2e
%
% Use:         * \usepackage{vpe}
%                See file `vpe.txt' for further documentation.
%
% History:     2000/09/15 v0.1:  first public release
%
% \vpe@ is the prefix for internal command names.
%
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{vpe}%
[2000/09/15 v0.1 Source specials for pdf files (HO)]

\RequirePackage{keyval}

%*** options

%*** active/inactive
\DeclareOption{active}{\vpe@oktrue}
\DeclareOption{inactive}{\vpe@okfalse}
\newif\ifvpe@ok
\vpe@oktrue

%*** dupes
\DeclareOption{dupes}{\vpe@dupestrue}
\DeclareOption{nodupes}{\vpe@dupesfalse}
\newif\ifvpe@dupes
\vpe@dupestrue

%*** form, revert, acroform
\DeclareOption{form}{\vpe@formtrue}
\DeclareOption{noform}{\vpe@formfalse}
\newif\ifvpe@form
\vpe@formfalse
\DeclareOption{acroform}{\vpe@acroformtrue}
\DeclareOption{noacroform}{\vpe@acroformfalse}
\newif\ifvpe@acroform
\vpe@acroformtrue

%*** debug
\DeclareOption{debug}{%
  \def\vpe@debug#1{\typeout{*** #1 ***}}%
}
\let\vpe@debug\@gobble

%*** system
\DeclareOption{linux}{\def\vpe@system{linux}}
\DeclareOption{unix}{\def\vpe@system{linux}}
\DeclareOption{win}{\def\vpe@system{win}}
\DeclareOption{dos}{\def\vpe@system{win}}
\let\vpe@system\@empty


%*** driver specific options
\DeclareOption{pdftex}{\let\vpe@annot\vpe@annotpdftex}
\DeclareOption{dvips}{\let\vpe@annot\vpe@annotdvips}
\DeclareOption{ps2pdf}{\let\vpe@annot\vpe@annotdvips}
\DeclareOption{pdfmark}{\let\vpe@annot\vpe@annotdvips}
\def\vpe@annotpdftex#1{\pdfannot\vpe@rule{#1}}
\def\vpe@dvips@pdfmark#1{\special{ps:SDict begin[#1 pdfmark end}}
\def\vpe@annotdvips#1{%
  \vpe@dvips@pdfmark{%
    /Rect[%
      currentpoint
        exch 1 72 div Resolution mul sub
        exch \vpe@depth\space 1 add 72 div Resolution mul add
      currentpoint
        exch \vpe@width\space 1 add 72 div Resolution mul add
        exch \vpe@height\space 1 add 72 div Resolution mul sub%
    ]%
    #1%
    /ANN%
  }%
}
\let\vpe@annot\vpe@annotdvips


\DeclareOption{everyhbox}{\vpe@everyhboxtrue}
\DeclareOption{noeveryhbox}{\vpe@everyhboxfalse}
\newif\ifvpe@everyhbox

%*** disable options
\DeclareOption*{%
  \expandafter\let\csname vpeorg@\expandafter
  \@gobbletwo\CurrentOption\@empty\@empty\endcsname \@empty%
}

%*** keyval options
\def\vpe@revert#1#2{%
  \expandafter\ifx\csname vpe@#1\endcsname\relax
  \else
    \csname vpe@#1%
      \@gobble\iftrue\csname if#1\endcsname
        false%
      \else
        true%
      \fi
    \endcsname
  \fi
}

\define@key{vpe}{active}[true]{\csname vpe@ok#1\endcsname}
\define@key{vpe}{inactive}[true]{\vpe@revert{ok}{#1}}
\define@key{vpe}{dupes}[true]{\csname vpe@dupes#1\endcsname}
\define@key{vpe}{nodupes}[true]{\vpe@revert{dupes}{#1}}
\define@key{vpe}{form}[true]{\csname vpe@form#1\endcsname}
\define@key{vpe}{noform}[true]{\vpe@revert{form}{#1}}
\define@key{vpe}{acroform}[true]{\csname vpe@acroform#1\endcsname}
\define@key{vpe}{noacroform}[true]{\vpe@revert{acroform}{#1}}
\define@key{vpe}{command}{\def\vpe@command{#1}}
\define@key{vpe}{system}{\def\vpe@system{#1}}
\define@key{vpe}{width}{\def\vpe@width{#1}}
\define@key{vpe}{height}{\def\vpe@height{#1}}
\define@key{vpe}{depth}{\def\vpe@depth{#1}}
\define@key{vpe}{color}{\def\vpe@color{#1}}
\define@key{vpe}{border}{\def\vpe@border{#1}}
\define@key{vpe}{flag}{\def\vpe@flag{#1}}
\define@key{vpe}{attr}{\def\vpe@attr{#1}}
\define@key{vpe}{application}{\def\vpe@application{#1}}
\define@key{vpe}{parameters}{\def\vpe@parameters{#1}}
\define@key{vpe}{progname}{\def\vpe@progname{#1}}
\define@key{vpe}{everyhbox}[true]{\csname vpe@everyhbox#1\endcsname}
\def\vpesetup{\setkeys{vpe}}
\def\vpe@command{vpe}
\def\vpe@width{12}
\def\vpe@height{12}
\def\vpe@depth{2}
\def\vpe@border{0 0 1}
\def\vpe@color{1 1 0}
\def\vpe@flag{0}%  8 = not zoomed, 16 = not rotated
\let\vpe@attr\@empty
\def\vpe@application{pfe.exe}
\def\vpe@parameters{-g $d $s}
\newif\ifvpe@pdftex
\ifx\eTeXversion\@undefined
  \def\vpe@progname{latex}
\else
  \def\vpe@progname{elatex}
\fi
\ifx\pdfoutput\@undefined
\else
  \ifx\pdfoutput\relax
  \else
    \ifcase\pdfoutput
    \else
      \let\vpe@annot\vpe@annotpdftex
      \vpe@pdftextrue
      \ifx\eTeXversion\@undefined
        \def\vpe@progname{pdflatex}%
      \else
        \def\vpe@progname{pdfelatex}%
      \fi
    \fi
  \fi
\fi

%*** option processing

\InputIfFileExists{vpe.cfg}{}{}

\ProcessOptions

%*** help file
% File for read informations of commands
% launched by \write18:
\newread\vpe@read
\immediate\openout\vpe@read=\jobname.vpe
\immediate\closeout\vpe@read
\openin\vpe@read=\jobname.vpe

%*** get system info
\ifx\vpe@system\@empty
  \immediate\write18{\vpe@command\space -system \jobname.vpe}
  \def\vpesystem#1{\gdef\vpe@system{#1}}%
  \begingroup
    \endlinechar-1 %
    \read\vpe@read to \vpe@temp
    \vpe@temp
  \endgroup
  \ifx\vpe@system\@empty
    \PackageWarningNoLine{vpe}{%
      Option \string`system\string' is not specified and\MessageBreak
      the automatic detection failed,\MessageBreak
      therefore package loading is aborted%
    }%
    \closein\vpe@read
    \let\VPE\relax
    \expandafter\expandafter\expandafter\endinput
  \fi
\fi
\let\vpesystem\@gobble

\newif\ifvpe@linux
\def\vpe@temp{linux}
\ifx\vpe@system\vpe@temp
  \vpe@linuxtrue
\else
  \def\vpe@temp{win}
  \ifx\vpe@system\vpe@temp
  \else
    \PackageWarningNoLine{vpe}{%
      Unknown value `\vpe@system' of option \string`system\string',%
      \MessageBreak
      therfore package loading is aborted%
    }%
    \closein\vpe@read
    \let\VPE\relax
    \expandafter\expandafter\expandafter\endinput
  \fi
\fi

%*** /AcroForm in the catalog for `revert' menu item of AR4.05
\ifvpe@acroform
  \ifvpe@pdftex
    \AtEndDocument{%
      \@ifundefined{SubmitObject}{%
        \pdfcatalog{/AcroForm<</Fields[]/NeedAppearances true>>}%
      }{%
        % /AcroForm already set by hyperref's pdftex driver
      }%
    }%
  \else
    \vpe@dvips@pdfmark{%
      \string{Catalog\string}%
      <</AcroForm<</Fields[]/NeedAppearances true>>>>%
      /PUT%
    }%
  \fi
\fi

%*** form variant

% definition without form:
\def\vpe@insertmark{%
  \vpe@annot{%
    /Subtype/Link%
    \ifx\vpe@border\vpe@borderdefault
    \else
      /Border[\vpe@border]%
    \fi
    \ifx\vpe@color\vpe@colordefault
    \else
      /C[\vpe@color]%
    \fi
    \ifnum\vpe@flag=0
    \else
      /F \vpe@flag
    \fi
    /A<<%
      /Type/Action%
      /S/Launch%
      \ifvpe@linux
        /F(\vpe@temp\vpe@removeslash\vpe@peekfile.vpe)%
      \else
        /Win<<%
          /F(\vpe@application)%
          /P(\vpe@temp)%
        >>%
      \fi
    >>%
    \vpe@attr
  }%
}%

\ifvpe@form
  \ifvpe@pdftex

    \RequirePackage[pdftex]{color}
    \RequirePackage{pifont}

    \newcount\vpe@count
    \vpe@count0

    \setbox\@tempboxa=\hbox{%
      \color{yellow}%
      \raisebox{-.4\totalheight}{%
        \ding{56}%
      }%
    }
    \edef\vpe@mark@width{\the\wd\@tempboxa}
    \edef\vpe@mark@height{\the\ht\@tempboxa}
    \edef\vpe@mark@depth{\the\dp\@tempboxa}
    \immediate\pdfxform\@tempboxa
    \edef\vpe@mark@objN{ \the\pdflastxform\space 0 R}
    \setbox\@tempboxa=\hbox{%
      \colorbox{yellow}{%
        \color{black}%
        \ding{56}%
      }%
    }
    \immediate\pdfxform\@tempboxa
    \edef\vpe@mark@objD{ \the\pdflastxform\space 0 R}

    \def\vpe@insertmark{%
      \global\advance\vpe@count1 %
      \begingroup
        \setbox\@tempboxa\hbox{%
          \normalfont
          \kern\vpe@mark@width
          \scriptsize\ttfamily
          \setlength{\fboxsep}{0.5ex}%
          \colorbox{yellow}{%
            \color{black}%
            \space\vpe@peekfile, \vpe@line
          }%
        }%
        \dimen@\ht\@tempboxa
        \advance\dimen@-\vpe@mark@height
        \advance\dimen@-\vpe@mark@depth
        \edef\vpe@temp{%
          width\the\wd\@tempboxa
          height\the\dimen@
        }%
        \dimen@\dp\@tempboxa
        \advance\dimen@\vpe@mark@height
        \advance\dimen@\vpe@mark@depth
        \edef\vpe@temp{%
          \vpe@temp
          depth\the\dimen@
        }%
        \immediate\pdfxform\@tempboxa
        \pdfannot\vpe@temp{%
          /Subtype/Widget%
          /FT/Btn%
          /Ff 65537% readonly (bit 1) + checkbox button (bit 17)
          /T(v\the\vpe@count)%
          /AS/X%
          /AP<</N<</F \the\pdflastxform\space 0 R>>>>%
        }%
      \endgroup
      \pdfannot width\vpe@mark@width
                height\vpe@mark@height
                depth\vpe@mark@depth{%
        /Subtype/Widget%
        /FT/Btn%
        /Ff 65536%
        /T(m\the\vpe@count)%
        /H/P%
        /AP<</N\vpe@mark@objN/D\vpe@mark@objD>>%
        /AA<<%
          /E<<%
            /Type/Action%
            /S/SetState%
            /T(v\the\vpe@count)%
            /AS/F%
          >>%
          /X<<%
            /Type/Action%
            /S/SetState%
            /T(v\the\vpe@count)%
            /AS/X%
          >>%
        >>%
        /A<<%
          /Type/Action%
          /S/Launch%
          \ifvpe@linux
            /F(\vpe@temp\vpe@removeslash\vpe@peekfile.vpe)%
          \else
            /Win<<%
              /F(\vpe@application)%
              /P(\vpe@temp)%
            >>%
          \fi
        >>%
        \vpe@attr
      }%
    }%
  \fi
\fi
\let\vpe@formtrue\relax
\let\vpe@formfalse\relax

%*** src marker

\def\vpe@src{\vpe@special{\the\inputlineno}}
\def\vpe@src@sphack{\vpe@special@sphack{\the\inputlineno}}
\def\vpe@srcfirst{\vpe@special1}
\def\vpe@srclast{\vpe@special\vpe@peeklast}

\let\VPE\vpe@src

\newif\ifvpe@document
\AtBeginDocument{%
  \vpe@documenttrue
  \vpe@src
}

\def\vpe@special{%
  \ifcase
    \ifvpe@ok
      \ifvpe@document
        \ifnum\lastpenalty=\z@
          \ifdim\lastskip=\z@
          \else 1%
          \fi
        \else 1%
        \fi
      \else 1%
      \fi
    \else 1%
    \fi
    0 %
    \expandafter\vpe@@special
  \else
    \expandafter\@gobble
  \fi
}
\def\vpe@special@sphack{%
  \ifcase
    \ifvpe@ok
      \ifvpe@document
        \ifhmode
        \else 1%
        \fi
      \else 1%
      \fi
    \else 1%
    \fi
    0 %
    \expandafter\vpe@@special
  \else
    \expandafter\@gobble
  \fi
}
\let\vpe@lastspecial\@empty
\def\vpe@@special#1{%
  \begingroup
    \vpe@okfalse % prevent nesting
    \let\vpe@temp\vpe@lastspecial
    \xdef\vpe@lastspecial{#1 \vpe@peekfile}%
    \ifvpe@dupes
      \vpe@@@special{#1}%
    \else
      \ifx\vpe@temp\vpe@lastspecial
      \else
        \vpe@@@special{#1}%
      \fi
    \fi
  \endgroup
}
\def\vpe@@@special#1{%
  \count@=#1\relax
  \ifnum\count@<1 \count@=1 \fi
  \edef\vpe@line{\the\count@}%
  \ifvpe@linux
    \let\vpe@temp\@empty
    \expandafter\vpe@scan\the\count@\@nil
    \vpe@debug{SRC: \vpe@peekfile, \vpe@line\space(\vpe@temp)}%
  \else
    \let\vpe@temp\vpe@parameters
    \expandafter\vpe@setline\vpe@temp$d\@nil{\the\count@}%
    \expandafter\vpe@setfile\vpe@temp$s\@nil\vpe@peekfile
    \vpe@debug{SRC: \vpe@peekfile, \vpe@line}%
  \fi
  \vpe@insertmark
}

\def\vpe@rule{%
  width\vpe@width bp height\vpe@height bp depth\vpe@depth bp%
}
\def\vpe@borderdefault{0 0 1}
\def\vpe@colordefault{0 0 0}
\def\vpe@scan#1#2\@nil{%
  \count@=#1\relax
  \ifnum\count@>\ifx\vpe@temp\@empty 5 \else 4 \fi
    \advance\count@ by -5
    \def\p{.}%
  \else
    \let\p\@empty
  \fi
  \@whilenum\count@>0 \do{%
    \advance\count@ by -1
    \edef\vpe@temp{\vpe@temp/}%
  }%
  \edef\vpe@temp{\vpe@temp\p./}%
  \ifx\\#2\\%
  \else
    \@ReturnAfterFi{%
      \vpe@scan#2\@nil
    }%
  \fi
}
\long\def\@ReturnAfterFi#1\fi{\fi#1}

\def\vpe@removeslash#1{%
  \if/#1%
  \else
    #1%
  \fi
}

\def\vpe@setline#1$d#2\@nil#3{%
  \ifx\limits#2\limits
  \else
    \edef\vpe@temp{#1#3\vpe@remline#2\@nil}%
  \fi
}
\def\vpe@remline#1$d\@nil{#1}
\def\vpe@setfile#1$s#2\@nil#3{%
  \ifx\limits#2\limits
  \else
    \def\vpe@temp{#1#3\vpe@remfile#2\@nil}%
  \fi
}
\def\vpe@remfile#1$s\@nil{#1}

%*** def check
\def\vpe@redef#1{%
  \expandafter\ifx\csname vpeorg@#1\endcsname\@empty
    \begingroup
      \let\on@line\@empty
      \PackageInfo{vpe}{src marker in %
        \expandafter\string\csname #1\endcsname\space
        disabled%
      }%
    \endgroup
    \expandafter\@gobble
  \else
    \expandafter\let
    \csname vpeorg@#1\expandafter\endcsname
    \csname #1\endcsname
    \expandafter\@firstofone
  \fi
}
% #1: active character or special case (eg: ~, \\)
% #2: string for command names (eg: TILDE, NL)
\def\vpe@redefspecial#1#2{%
  \expandafter\ifx\csname vpeorg@#2\endcsname\@empty
    \begingroup
      \let\on@line\@empty
      \PackageInfo{vpe}{src marker in \string#1 disabled}%
    \endgroup
    \expandafter\@gobble
  \else
    \expandafter\let\csname vpeorg@#2\endcsname#1%
    \expandafter\@firstofone
  \fi
}
\def\vpe@check#1{%
  \expandafter\ifx\csname vpeorg@#1\endcsname\@empty
    \begingroup
      \let\on@line\@empty
      \PackageInfo{vpe}{src marker in %
        \expandafter\string\csname #1\endcsname\space
        disabled%
      }%
    \endgroup
    \expandafter\@gobble
  \else
    \expandafter\@firstofone
  \fi
}

%*** file name stack
\newcount\vpe@sp % stack pointer
\global\vpe@sp=0

\newif\ifvpe@stack
\vpe@stacktrue
\AtEndDocument{\global\vpe@stackfalse}

\def\vpe@push#1{%
  \ifvpe@stack
    \global\advance\vpe@sp by 1
    \vpe@debug{PUSH(\the\vpe@sp): #1}%
    \immediate\write18{%
      \vpe@command\space
        -sty
        -progname=\vpe@progname\space
        \ifx\vpe@debug\@gobble\else -v \fi
        #1 %
        \jobname.vpe%
    }%
    \gdef\vpe@file{#1}%
    \gdef\vpe@last{10000}%
    \ifeof\vpe@read
      \vpe@debug{EOF: \jobname.vpe}%
    \else
      \begingroup
        \endlinechar-1 %
        \read\vpe@read to \vpe@temp
        \vpe@temp
      \endgroup
    \fi
    \vpe@debug{%
      LEVEL: \the\vpe@sp, FILE: \vpe@file, LAST: \vpe@last
    }%
    \expandafter\xdef\csname vpeF\the\vpe@sp\endcsname{\vpe@file}%
    \expandafter\xdef\csname vpeL\the\vpe@sp\endcsname{\vpe@last}%
  \fi
}
\def\vpeentry#1#2{%
  \gdef\vpe@file{#1}%
  \gdef\vpe@last{#2}%
}
\def\vpe@pop{%
  \ifvpe@stack
    \global\advance\vpe@sp by -1 %
    \vpe@debug{POP(\the\vpe@sp)}%
  \fi
}
\def\vpe@peekfile{%
  \csname vpeF\the\vpe@sp\endcsname
}
\def\vpe@peeklast{%
  \csname vpeL\the\vpe@sp\endcsname
}

\vpe@push{\jobname}

\AtEndDocument{%
  \vpe@debug{MAKE SYMBOL LINKS}%
  \immediate\write18{%
    \vpe@command\space
    \ifx\vpe@debug\@gobble\else -v \fi\jobname.pdf%
  }%
}

%*** file input
\def\vpe@doinput#1#2{%
  \VPE
  \vpe@push{#2}%
  \vpe@srcfirst
  #1{#2}%
  \vpe@srclast
  \vpe@pop
  \VPE
}

\vpe@redef{input}{%
  \def\input{\@ifnextchar\bgroup\vpe@input\vpeorg@input}
  \def\vpe@input{\vpe@doinput\vpeorg@input}
}
\vpe@redef{@input}{%
  \def\@input#1{%
    \IfFileExists{#1}\@firstofone\@gobble\vpe@doinput
    \vpeorg@@input{#1}%
  }%
}

\vpe@redef{include}{\def\include{\vpe@doinput\vpeorg@include}}

\vpe@redef{newpage}{%
  \def\newpage{%
    \VPE
    \vpeorg@newpage
    \vpe@emptyeverypar
  }%
}
\vpe@redef{clearpage}{\def\clearpage{\vpeorg@clearpage\VPE}}

%*** everypar
\def\vpe@everypar{\everypar\expandafter{\the\everypar\VPE}}
\def\vpe@emptyeverypar{%
  \edef\vpe@temp{\the\everypar}%
  \ifx\vpe@temp\@empty
    \everypar{\VPE}%
  \fi
}
\iffalse
\vpe@redef{everypar}{%
  \def\everypar#1#{\vpe@everypar}
  \def\vpe@everypar#1{%
    \vpeorg@everypar{#1\VPE}%
  }%
}
\fi
\vpe@redef{document}{%
  \def\document{%
    \global\vpe@stackfalse
    \vpeorg@document
    \global\vpe@stacktrue
    \VPE
    \vpe@emptyeverypar
    \ignorespaces
  }%
}
\vpe@redef{@item}{%
  \def\@item[#1]{%
    \vpeorg@@item[{#1}]%
    \VPE
    \vpe@doubleeverypar
    \ignorespaces
  }%
}
\iffalse
\vpe@redef{@verbatim}{%
  \def\@verbatim{%
    \vpeorg@@verbatim
    \vpe@everypar
  }%
}
\fi
\vpe@check{@doendpe}{%
  \def\@doendpe{%
    \@endpetrue
    \def\par{%
      \@restorepar
      \everypar{\VPE}%
      \par
      \@endpefalse
    }%
    \everypar{%
      {\setbox\z@\lastbox}%
      \everypar{\VPE}%
      \@endpefalse
      \VPE
    }%
  }%
}
\vpe@redef{@arrayparboxrestore}{%
  \def\@arrayparboxrestore{%
    \vpeorg@@arrayparboxrestore
    \vpe@everypar
  }%
}
\vpe@redef{@xsect}{%
  \def\@xsect#1{%
    \vpeorg@@xsect{#1}%
    \vpe@doubleeverypar
    \ignorespaces
  }%
}
\vpe@redef{@afterheading}{%
  \def\@afterheading{%
    \vpeorg@@afterheading
    \vpe@doubleeverypar
  }%
}
\vpe@redef{@setminipage}{%
  \def\@setminipage{%
    \vpeorg@@setminipage
    \vpe@doubleeverypar
  }%
}
\def\vpe@doubleeverypar{%
  \expandafter\vpe@@doubleeverypar\the\everypar\everypar!!\@nil
}
\def\vpe@@doubleeverypar#1\everypar#2#3\@nil{%
  \def\vpe@temp{#2}%
  \ifx\vpe@temp\@empty
    \everypar\expandafter{\the\everypar\vpe@everypar}%
  \fi
  \vpe@everypar
}
\vpe@redef{@startsection}{%
  \def\@startsection{%
    \if@nobreak
      \let\vpe@orgeverypar\everypar
      \let\everypar\vpe@tempeverypar
    \fi
    \vpeorg@@startsection
  }%
}
\def\vpe@tempeverypar#1{%
  \let\everypar\vpe@orgeverypar
  \everypar{#1\VPE}%
}

\vpe@check{everymath}{\everymath{\VPE}}

\ifvpe@everyhbox
  \everyhbox\expandafter{\the\everyhbox\VPE}%
\fi

\vpe@redef{newline}{\def\newline{\VPE\vpeorg@newline}}
\vpe@redefspecial{\\}{NL}{\def\\{\VPE\vpeorg@NL}}
\vpe@redef{tabularnewline}{%
  \def\tabularnewline{\VPE\tabularnewline}
}

\vpe@redef{mbox}{%
  \def\mbox{\VPE\vpe@mbox}
  \long\def\vpe@mbox#1{\vpeorg@mbox{#1\VPE}}
}

\vpe@redefspecial{~}{TILDE}{\def~{\VPE\vpeorg@TILDE}}

\vpe@redef{ref}{\def\ref{\VPE\vpeorg@ref}}
\vpe@redef{cite}{\def\cite{\VPE\vpeorg@cite}}

\vpe@redef{item}{\def\item{\VPE\vpeorg@item}}
\vpe@redef{trivlist}{\def\trivlist{\VPE\vpeorg@trivlist}}
\vpe@redef{endtrivlist}{\def\endtrivlist{\VPE\vpeorg@endtrivlist}}

\vpe@redef{@bsphack}{\def\@bsphack{\vpeorg@@bsphack\VPE}}
\vpe@redef{@esphack}{\def\@esphack{\VPE\vpeorg@@esphack}}
\vpe@redef{@Esphack}{\def\@Esphack{\VPE\vpeorg@@Esphack}}
\vpe@redef{@xaddvskip}{\def\@xaddvskip{\vpeorg@@xaddvskip\VPE}}

\vpe@redef{@tabularcr}{\def\@tabularcr{\VPE\vpeorg@@tabularcr}}
\vpe@redef{@arraycr}{\def\@arraycr{\VPE\vpeorg@@arraycr}}

\vpe@redef{hrule}{\def\hrule{\VPE\vpeorg@hrule}}
\vpe@redef{vrule}{\def\vrule{\VPE\vpeorg@vrule}}
\endinput