home
***
CD-ROM
|
disk
|
FTP
|
other
***
search
/
Dream 45
/
Amiga_Dream_45.iso
/
Amiga
/
Magazine
/
Dossier-LaTeX
/
lgrind-amiga.lha
/
lgrind
/
lgrind.sty
< prev
next >
Wrap
Text File
|
1996-08-09
|
7KB
|
227 lines
%%
%% This is file `lgrind.sty', generated
%% on <1996/1/11> with the docstrip utility (2.2i).
%%
%% The original source files were:
%%
%% lgrind.dtx (with options: `package')
%%
%% LGrind is used to format source code of different programming
%% languages for LaTeX.
%%
%% LGrind is a minor adaptation of Jerry Leichter's tgrind for LaTeX,
%% which was a notable improvement upon Van Jacobsen's tgrind for
%% plain TeX, which was adapted from vgrind, a troff prettyprinter.
%%
%% This file provides the necessary macros and environments.
%%
%% Based on Van Jacobson's ``tgrindmac'', a macro package for TeX grinding
%% Our job here is to simplify it quite a bit and make it conform to LaTeX
%%
%% Modified, 8-Oct-87 by Jerry Leichter to work with various changes made
%% while adapting to VMS. Made all the internal variables contain an "@".
%%
%% Modified, 17-Jan-87 by Jerry Leichter. Many changes to correspond to
%% modifications in tgrind.exe.
%%
%% Modified, 6-Sep-91 by George Reilly. Changed the name from tgrind to
%% lgrind. Minor changes to get rid of superfluous spaces.
%%
%% Modified, 3-Oct-95 by Michael Piefel. Made it work with \LaTeXe, intro-
%% duced package options and reintroduced Proc...
%%
%% LaTeX lgrind environment
\NeedsTeXFormat{LaTeX2e}[1994/12/01]
\ProvidesPackage{lgrind}
[1995/11/12 v3.1 LGrind environment and supporting stuff]
\newcount\lc@unt
\newcount\ln@xt
\newcount\LGnuminterval
\LGnuminterval=10
\DeclareOption{nolineno}{\LGnuminterval=50000}
\DeclareOption{lineno5}{\LGnuminterval=5}
\newif\ifLGleftnum
\DeclareOption{leftnum}{\LGleftnumtrue}
\newskip\LGindent
\LGindent=1.6667\parindent
\DeclareOption{noindent}{\LGindent=0pt}
\newcommand{\DefaultProc}{\@gobble}
\newcommand{\DefaultProcCont}{\@gobble}
\DeclareOption{procnames}{
\renewcommand{\DefaultProc}[1]{\renewcommand{\Procname}{#1}%
\global\setbox\procbox=\hbox{\PNsize #1}}
\renewcommand{\DefaultProcCont}[1]{\renewcommand\Procname{#1}
\global\setbox\procbox=\hbox{\PNsize\dots #1}}}
\newbox\procbox
\newcommand{\Procname}{}
\ProcessOptions
\def\BGfont{\sffamily}
\def\CMfont{\rmfamily\itshape}
\def\NOfont{\sffamily}
\def\KWfont{\rmfamily\bfseries}
\def\STfont{\ttfamily}
\def\VRfont{\rmfamily}
\def\PNsize{\BGfont\small}
\def\LGsize{\small}
\def\LGfsize{\footnotesize}
\newif\ifLGinline
\newif\ifLGd@fault
\def\LGbegin{\ifLGinline$\hbox\else$$\vbox\fi\bgroup\LGd@faulttrue}
\def\LGend{\ifLGd@fault\egroup\ifLGinline$\else$$\fi\LGd@faultfalse\fi}
\newif\ifc@mment
\newif\ifstr@ng
\newif\ifright@
\newbox\ls@far
\newbox\tb@x
\newdimen\TBw@d
\newdimen\@ts
{\catcode`\_=\active \gdef\@setunder{\let_=\sp@ce}}
\def\lgrind{%
\def\Line##1{\L{\LB{##1}}}%
\let\Head=\@gobble%
\def\File##1,##2,##3{\message{(LGround: ##1)}}%
\let\Proc=\DefaultProc%
\let\ProcCont=\DefaultProcCont%
\def\NewPage{\filbreak\bigskip}%
\ifLGinline
\def\L##1{\setbox\ls@far\null{\CF\strut##1}\ignorespaces}%
\else
\let\r@ghtlno\relax\let\l@ftlno\relax
\ifnum\LGnuminterval>\z@
\ifLGleftnum
\def\l@ftlno{\ifvoid\procbox\ifnum\lc@unt>\ln@xt
\global\advance\ln@xt by\LGnuminterval
\llap{{\normalfont\scriptsize\the\lc@unt\quad}}\fi
\else\llap{\box\procbox\quad}\fi}%
\else
\def\r@ghtlno{\ifvoid\procbox\ifnum\lc@unt>\ln@xt
\global\advance\ln@xt by\LGnuminterval
\rlap{{\normalfont\scriptsize\enspace\the\lc@unt}}\fi
\else\rlap{\enspace\box\procbox}\fi}%
\fi
\fi
\def\L##1{\@@par\setbox\ls@far=\null\strut
\global\advance\lc@unt by1%
\hbox to\hsize{\hskip\LGindent\l@ftlno ##1\egroup\hfil\r@ghtlno}%
\ignorespaces}%
\fi
\lc@unt=0\ln@xt=\LGnuminterval\advance\ln@xt by-1%
\def\LB{\hbox\bgroup\bgroup\box\ls@far\CF\let\next=}%
\def\Tab##1{\egroup\setbox\tb@x=\lastbox\TBw@d=\wd\tb@x%
\advance\TBw@d by 1\@ts\ifdim\TBw@d>##1\@ts
\setbox\ls@far=\hbox{\box\ls@far \box\tb@x \sp@ce}\else
\setbox\ls@far=\hbox to ##1\@ts{\box\ls@far \box\tb@x \hfil}\fi\LB}%
\ifLGinline\def\sp@ce{\hskip .3333em}%
\else \setbox\tb@x=\hbox{\texttt{0}}%
\@ts=0.8\wd\tb@x \def\sp@ce{\hskip 1\@ts}\fi
\catcode`\_=\active \@setunder
\def\CF{\ifc@mment\CMfont\else\ifstr@ng\STfont\fi\fi}
\def\N##1{{\NOfont ##1}\global\futurelet\next\ic@r}%
\def\K##1{{\KWfont ##1}\global\futurelet\next\ic@r}%
\def\V##1{{\VRfont ##1}\global\futurelet\next\ic@r}%
\def\ic@r{\let\@tempa\/\ifx.\next\let\@tempa\relax%
\else\ifx,\next\let\@tempa\relax\fi\fi\@tempa}%
\def\C{\egroup\bgroup\CMfont \global\c@mmenttrue \global\right@false}%
\def\CE{\egroup\bgroup \global\c@mmentfalse}%
\def\S{\egroup\bgroup\STfont \global\str@ngtrue}%
\def\SE{\egroup\bgroup \global\str@ngfalse}%
\def\,{\relax \ifmmode\mskip\thinmuskip \else\thinspace \fi}%
\def\!{\relax \ifmmode\mskip-\thinmuskip \else\negthinspace \fi}%
\def\CH##1##2##3{\relax\ifmmode ##1\relax
\else\ifstr@ng ##2\relax\else$##3$\fi\fi }%
\def\{{\CH\lbrace {\char'173}\lbrace }%
\def\}{\CH\rbrace {\char'175}\rbrace }%
\def\1{\CH///}% % /
\def\2{\CH\backslash {\char'134}\backslash }% % \
\def\|{\CH|{\char'174}|}%
\def\<{\CH<<<}%
\def\>{\CH>>>}%
\def\*{\CH***}\relax %\relax for DOCSTY
\def\-{\CH---}%
\def\_{\ifstr@ng {\char'137}\else
\leavevmode \kern.06em \vbox{\hrule width.35em}%
\ifdim\fontdimen\@ne\font=\z@ \kern.06em \fi\fi }%
\def\&{\textsf{\char'046}}%
\def\#{{\STfont\char'043}}%
\def\%{{\char'045}}%
\def\~{{\char'176}}%
\def\3{\ifc@mment\ifright@ ''\global\right@false%
\else``\global\right@true \fi
\else{\texttt{\char'042}}\fi}%
\def\4{\ifc@mment'\else {\texttt{\char'015}}\fi}%
\def\5{{\texttt{\char'136}}}%
\def\${{\ifmmode\slshape\else\ifdim\fontdimen\@ne\font>\z@\slshape\fi\fi
\char'044}}% %No $ in \it, use \sl
\parindent\z@\parskip\z@ plus 1pt\hsize\linewidth%
\bgroup\BGfont
}
\def\endlgrind{\egroup\@@par}
\def\lgrinde{\ifLGinline\else\LGsize\fi\begin{lgrind}}
\def\endlgrinde{\end{lgrind}}
\def\lagrind{\@ifstar{\@slagrind}{\@lagrind}}
\def\@lagrind{\@ifnextchar[{\@@lagrind}{\@@lagrind[t]}}
\def\@slagrind{\@ifnextchar[{\@@slagrind}{\@@slagrind[t]}}
\def\@@lagrind[#1]#2#3#4{%
\begin{figure}[#1]
\hrule
\vskip .5\baselineskip
\begin{minipage}\columnwidth\LGsize\LGindent\z@
\begin{lgrind}
\input #2\relax
\end{lgrind}
\end{minipage}
\vskip .5\baselineskip plus .5\baselineskip
\begingroup
\setbox\z@=\hbox{#4}%
\ifdim\wd\z@>\z@
\caption{#3}%
\label{#4}%
\else
\captcont{#3}%
\fi
\endgroup
\vskip 2pt
\hrule
\end{figure}
}
\def\@@slagrind[#1]#2#3#4{%
\begin{figure*}[#1]
\hrule
\vskip .5\baselineskip
\begin{minipage}\textwidth\LGsize\LGindent\z@
\begin{lgrind}
\input #2\relax
\end{lgrind}
\end{minipage}
\vskip .5\baselineskip plus .5\baselineskip
\begingroup
\setbox\z@=\hbox{#4}%
\ifdim\wd\z@>\z@
\caption{#3}%
\label{#4}%
\else
\captcont{#3}%
\fi
\endgroup
\vskip 2pt
\hrule
\end{figure*}
}
\def\lgrindfile#1{%
\par\addvspace{0.1in}
\hrule
\vskip .5\baselineskip
\begingroup\LGfsize\LGindent\z@
\begin{lgrind}
\input #1\relax
\end{lgrind}
\endgroup
\vskip .5\baselineskip
\hrule
\addvspace{0.1in}
}
\endinput
%%
%% End of file `lgrind.sty'.