%%
%% This is file `sverb.sty',
%% generated with the docstrip utility.
%%
%% The original source files were:
%%
%% sverb.dtx  (with options: `package')
%% 
%% IMPORTANT NOTICE
%%
%% sverb package -- handling of verbatim text
%% Copyright (c) 1996 Mark Wooding
%%
%% This program is free software; you can redistribute it and/or modify
%% it under the terms of the GNU General Public License as published by
%% the Free Software Foundation; either version 2 of the License, or
%% (at your option) any later version.
%%
%% This program is distributed in the hope that it will be useful,
%% but WITHOUT ANY WARRANTY; without even the implied warranty of
%% MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE.  See the
%% GNU General Public License for more details.
%%
%% You should have received a copy of the GNU General Public License
%% along with this program; if not, write to the Free Software
%% Foundation, Inc., 675 Mass Ave, Cambridge, MA 02139, USA.
%%
\NeedsTeXFormat{LaTeX2e}
\ProvidesPackage{sverb}
                [1996/05/08 1.3 Verbatim typesetting]
%% \CharacterTable
%%  {Upper-case    \A\B\C\D\E\F\G\H\I\J\K\L\M\N\O\P\Q\R\S\T\U\V\W\X\Y\Z
%%   Lower-case    \a\b\c\d\e\f\g\h\i\j\k\l\m\n\o\p\q\r\s\t\u\v\w\x\y\z
%%   Digits        \0\1\2\3\4\5\6\7\8\9
%%   Exclamation   \!     Double quote  \"     Hash (number) \#
%%   Dollar        \$     Percent       \%     Ampersand     \&
%%   Acute accent  \'     Left paren    \(     Right paren   \)
%%   Asterisk      \*     Plus          \+     Comma         \,
%%   Minus         \-     Point         \.     Solidus       \/
%%   Colon         \:     Semicolon     \;     Less than     \<
%%   Equals        \=     Greater than  \>     Question mark \?
%%   Commercial at \@     Left bracket  \[     Backslash     \\
%%   Right bracket \]     Circumflex    \^     Underscore    \_
%%   Grave accent  \`     Left brace    \{     Vertical bar  \|
%%   Right brace   \}     Tilde         \~}
%%
\def\@cspecials{%
  \begingroup%
  \catcode`|0%
  \catcode`<1%
  \catcode`>2%
  \catcode`\{12%
  \catcode`\}12%
  \catcode`\\12%
}
\def\sv@startlisting{%
  \def\par{\@@par\penalty\interlinepenalty}%
  \@@par%
  \leftskip\@totalleftmargin%
  \obeylines%
  \@noligs%
  \let\do\@makeother\dospecials%
  \verbatim@font%
  \frenchspacing%
  \@vobeyspaces%
  \settabwidth%
  \catcode9\active%
  \lccode`\~9\lowercase{\let~\sv@vtab}%
  \lccode`\~13\lowercase{\let~\vinput@cr}%
  \interlinepenalty500%
}
\newdimen\svtab
\def\settabwidth{\setbox\z@\hbox{\texttt{\space}}\svtab8\wd\z@}
\def\sv@vtab{%
  \hfill\egroup%
  \@tempdima\wd\z@%
  \divide\@tempdima\svtab%
  \multiply\@tempdima\svtab%
  \advance\@tempdima\svtab%
  \wd\z@\@tempdima%
  \leavevmode\box\z@%
  \setbox\z@\hbox\bgroup%
}
\def\verbinput#1{%
  \begin{listinglist}%
  \listingsize%
  \sv@startlisting%
  \setbox\z@\hbox\bgroup%
  \input{#1}%
  \sv@stripspc%
  \egroup%
  \ifdim\wd\z@=\z@%
    \ifhmode\par\fi%
  \else%
    \leavevmode\box\z@\par%
  \fi%
  \end{listinglist}%
}
\def\vinput@cr{%
  \egroup%
  \leavevmode\box\z@%
  \par%
  \setbox\z@\hbox\bgroup%
}
\newif\if@matched
\def\matcher#1#2#3{%
  \expandafter\def\csname\string#1$match\endcsname##1#2##2##3\end{%
    \ifx##2\relax%
      \@matchedfalse%
    \else%
      \@matchedtrue%
    \fi%
    #3{##1}%
  }%
  \expandafter\def\expandafter#1\expandafter##\expandafter1\expandafter{%
    \csname\string#1$match\endcsname##1#2\relax\end%
  }%
}
\def\sv@stripspc{%
  \unpenalty%
  \ifdim\lastskip=\z@\else%
    \unskip\expandafter\sv@stripspc%
  \fi%
}
\begingroup
\catcode`\%=12
\gdef\sv@percent#1#2\relax
    {\ifx\check@percent\@@undefined
                     \ifx#1\relax\def\@tempa{}\else
                         \def\@tempa{#1#2}\fi\else
                     \ifx#1\relax\def\@tempa{}\else
                         \ifx#1%\def\@tempa{#2}\else
                             \def\@tempa{#1#2}\fi\fi\fi}
\endgroup
\lccode`\~32
\lccode`\!32
\lowercase{%
  \def\@isspaces#1{%
    \ifx#1\relax%
      \def\@tempb{\@tempswafalse}%
    \else\ifx#1~%
      \let\@tempb\@isspaces%
    \else%
      \def\@tempb##1\relax{}%
    \fi\fi%
    \@tempb%
  }
  \def\sv@safespc{%
    \catcode32\active%
    \def~{ }%
  }
}
\def\sv@read#1#2#3{%
  \begingroup%
  \matcher\@match{#1}\sv@read@ii%
  \catcode13\active%
  \catcode32\active%
  \@tempswafalse%
  \lccode`\~13\lowercase{%
    \def\sv@read@i##1~{\@match{##1}}%
  }%
  \def\sv@read@ii##1{%
    \sv@percent##1\relax\relax%
    \if@matched\@tempswafalse\fi%
    \if@tempswa\else\@tempswatrue\expandafter\@isspaces\@tempa\relax\fi%
    \if@tempswa%
      \begingroup%
      \expandafter#2\expandafter{\@tempa}%
      \endgroup%
    \fi%
    \@tempswatrue%
    \if@matched\def\@tempa{\endgroup#3}\else\let\@tempa\sv@read@i\fi%
    \@tempa%
  }%
  \sv@read@i%
}
\begingroup
\lccode`\<=`\{
\lccode`\>=`\}
\lccode`\|=`\\
\lowercase{\endgroup
\def\sv@readenv#1{%
  \expandafter\expandafter\expandafter%
    #1\expandafter\sv@readenv@i\@currenvir\@@%
}
\def\sv@readenv@i#1\@@{{|end<#1>}{\end{#1}}}
}
\def\sv@verbline#1{%
  \setbox\z@\hbox{#1\sv@stripspc}%
  \ifdim\wd\z@=\z@%
    \if@matched\ifhmode\par\relax\fi\else\leavevmode\par\relax\fi%
  \else%
    \leavevmode\box\z@\par\relax%
  \fi%
}
\newdimen\listingindent
\AtBeginDocument{%
  \ifdim\parindent=\z@\listingindent1em\else\listingindent\parindent\fi%
}
\ifx\listingsize\@@undefined
  \let\listingsize\small
\fi
\def\listinglist{%
  \list{}{%
    \if@inlabel%
      \leftmargin\z@%
    \else%
      \leftmargin\listingindent%
    \fi%
    \rightmargin\z@%
    \labelwidth\z@%
    \labelsep\z@%
    \itemindent\z@%
    \listparindent\z@%
    \let\makelabel\relax%
    \parsep\z@skip%
  }%
  \parfillskip\@flushglue%
  \item\relax%
}
\let\endlistinglist\endlist
\def\listing{%
  \listinglist%
  \listingsize%
  \sv@readenv\sv@listing%
}
\def\sv@listing#1#2{%
  \sv@startlisting%
  \sv@read{#1}\sv@verbline{\endlistinglist#2}%
}
\expandafter\def\csname listing*\endcsname{%
  \listinglist%
  \listingsize%
  \begingroup%
  \@noligs%
  \def\@tempa##1{\endgroup\sv@listing{##1}{\end{listing*}}}%
  \@tempa%
}
\def\sv@ignore#1#2{%
  \@bsphack%
  \let\do\@makeother\dospecials%
  \sv@read{#1}\@gobble{\@esphack#2}%
}
\def\ignore{\sv@readenv\sv@ignore}
\def\ignoreenv#1{%
  \expandafter\let\csname #1\endcsname\ignore%
}
\def\unignoreenv#1{%
  \expandafter\def\csname #1\endcsname{\endgroup}%
  \expandafter\def\csname end#1\endcsname%
      {\begingroup\def\@currenvir{#1}}%
}
\newwrite\sv@writefile
\def\sv@write#1#2{%
  \begingroup%
  \@bsphack%
  \let\do\@makeother\dospecials%
  \sv@safespc%
  \sv@read{#1}\sv@writeline{\sv@endwrite#2}%
}
\def\sv@writeline#1{%
  \immediate\write\sv@writefile{#1}%
}
\def\sv@endwrite{%
  \@esphack%
  \endgroup%
}
\def\verbwrite#1{%
  \immediate\openout\sv@writefile#1\relax%
  \sv@readenv\sv@write%
}
\def\endverbwrite{\immediate\closeout\sv@writefile}
\expandafter\def\csname verbwrite*\endcsname#1#2{%
  \immediate\openout\sv@writefile#2\relax%
  \sv@write{#1}{\immediate\closeout\sv@writefile\end{verbwrite*}}%
}
\newcount\sv@nestcount
\def\sv@demoname{demo\number\sv@nestcount.tmp}
\def\sv@demo#1#2{%
  \@ifnextchar[{\sv@demo@i{#1}{#2}}{\sv@demo@i{#1}{#2}[n]}%
}
\def\sv@demo@i#1#2[#3]#4{%
  \advance\sv@nestcount by\@ne%
  \immediate\openout\sv@writefile\sv@demoname\relax%
  \sv@write{#1}{%
    \immediate\closeout\sv@writefile%
    \sv@dodemo{#2}{#3}{#4}%
  }%
}
\def\demo{\sv@readenv\sv@demo}
\expandafter\def\csname demo*\endcsname#1{\sv@demo{#1}{\end{demo*}}}
\def\sv@demosmp{%
  \begin{minipage}[t]{\@tempdima}%
  \vskip8\p@%
  \hrule\@height\z@%
  \raggedright%
  \vbox\bgroup%
}
\def\sv@demoemp{%
    \par\unpenalty\unskip%
  \egroup%
  \vskip8\p@%
  \hrule\@height\z@%
  \end{minipage}%
}
\def\sv@dodemo#1#2#3{%
  \begingroup%
  \@tempdima\linewidth%
  \advance\@tempdima-2em%
  \hsize\@tempdima%
  \if#2w%
    \advance\@tempdima-2em%
  \else%
    \advance\@tempdima-3em%
    \divide\@tempdima2%
  \fi%
  \par%
  \setbox\z@\hbox{\strut\enspace#3\enspace\strut}%
  \@tempdimb.5\dp\z@%
  \advance\@tempdimb-.5\ht\z@%
  \ht\z@\@tempdimb\dp\z@\@tempdimb%
  \noindent\hskip1em\vtop{%
    \hb@xt@\hsize{%
      \hrulefill%
      \raise\@tempdimb\box\z@%
      \hrulefill%
    }%
    \nointerlineskip%
    \hb@xt@\hsize{\vrule\@height5\p@\hfil\vrule\@height5\p@}%
    \nointerlineskip%
    \vskip-\parskip%
    \noindent\hbox{}\hskip1em%
    \sv@demosmp%
    \catcode`\%14\relax%
    \input{\sv@demoname}%
    \sv@demoemp%
    \if#2w%
      \vskip8\p@\hrule\vskip8\p@%
      \noindent\hbox{}%
    \fi%
    \hskip1em%
    \sv@demosmp%
    \listingindent\z@%
    \verbinput\sv@demoname%
    \sv@demoemp%
    \par%
    \nointerlineskip%
    \hb@xt@\hsize{\vrule\@height5\p@\hfil\vrule\@height5\p@}%
    \hrule%
  }%
  \endgroup%
  \par%
  \vskip\baselineskip%
  #1%
}
\endinput
%%
%% End of file `sverb.sty'.
