230 lines
7.5 KiB
TeX
230 lines
7.5 KiB
TeX
%%
|
|
%% This is file `lgrind.sty',
|
|
%% generated with the docstrip utility.
|
|
%%
|
|
%% 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 major 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.
|
|
%%
|
|
%% LGrind contains non-free code written by Van Jacobson, who does not answer
|
|
%% to any request for changing his licence. This software is therefore not
|
|
%% maintained. I also do not accept any cheques anymore.
|
|
%% Based on Van Jacobson's ``tgrindmac'', a macro package for TeX.
|
|
%% Modified, 1987 by Jerry Leichter. Put '@' in all internal names.
|
|
%% Modified, 1991 by George Reilly. Changed name from tgrind to lgrind.
|
|
%% Modified, 1995 by Michael Piefel. Made it work with \LaTeXe.
|
|
%% -1999 Hundreds of bells and whistles. No changelog here.
|
|
\NeedsTeXFormat{LaTeX2e}[1996/06/01]
|
|
\ProvidesPackage{lgrind}
|
|
[2002/01/28 v3.67 LGrind environment and supporting stuff]
|
|
%%stopzone % VIM syncing
|
|
\newcount\lc@unt
|
|
\newcount\ln@xt
|
|
\newcount\LGnuminterval
|
|
\LGnuminterval=10
|
|
\DeclareOption{nolineno}{\LGnuminterval=50000}
|
|
\DeclareOption{lineno5}{\LGnuminterval=5}
|
|
\newif\ifLGleftnum
|
|
\DeclareOption{leftno}{\LGleftnumtrue}
|
|
\newskip\LGindent
|
|
\LGindent=1.6667\parindent
|
|
\DeclareOption{noindent}{\LGindent=0pt}
|
|
\newif\ifLGnorules
|
|
\DeclareOption{norules}{\LGnorulestrue}
|
|
\newlength{\LGsloppy}
|
|
\setlength{\LGsloppy}{7.2pt}
|
|
\DeclareOption{fussy}{\LGsloppy=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}{}
|
|
\newif\ifLGnoprocindex
|
|
\DeclareOption{noprocindex}{\LGnoprocindextrue}
|
|
\ProcessOptions
|
|
\def\BGfont{\sffamily}
|
|
\def\CMfont{\rmfamily\itshape}
|
|
\def\NOfont{\sffamily}
|
|
\def\KWfont{\rmfamily\bfseries}
|
|
\def\STfont{\ttfamily}
|
|
\def\TTfont{\ttfamily\upshape}
|
|
\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}
|
|
%%stopzone % VIM syncing
|
|
\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}}
|
|
\newcommand{\lgrindhead}{}
|
|
\newcommand{\lgrindfilename}{}\newcommand{\lgrindfilesize}{}
|
|
\newcommand{\lgrindmodyear}{}\newcommand{\lgrindmodmonth}{}
|
|
\newcommand{\lgrindmodday}{}\newcommand{\lgrindmodtime}{}
|
|
\newenvironment{lgrind}[1][1]{%
|
|
\def\Line##1{\L{\LB{##1}}}%
|
|
\newcommand{\Head}[1]{\gdef\lgrindhead{##1}}%
|
|
\newcommand{\File}[6]{\gdef\lgrindfilename{##1}\message{(LGround: ##1)}%
|
|
\gdef\lgrindmodyear{##2}\gdef\lgrindmodmonth{##3}%
|
|
\gdef\lgrindmodday{##4}\gdef\lgrindmodtime{##5}%
|
|
\gdef\lgrindfilesize{##6}}%
|
|
\let\Proc=\DefaultProc%
|
|
\let\ProcCont=\DefaultProcCont%
|
|
\ifLGnoprocindex%
|
|
\let\index\@gobble%
|
|
\fi%
|
|
\hfuzz=\LGsloppy%
|
|
\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{\ifnum\lc@unt>\ln@xt%
|
|
\global\advance\ln@xt by\LGnuminterval%
|
|
\llap{{\normalfont\scriptsize\the\lc@unt\quad}}\fi}%
|
|
\def\r@ghtlno{\rlap{\enspace\box\procbox}}%
|
|
\else%
|
|
\def\r@ghtlno{\ifnum\lc@unt>\ln@xt%
|
|
\global\advance\ln@xt by\LGnuminterval%
|
|
\rlap{{\normalfont\scriptsize\enspace\the\lc@unt%
|
|
\enspace\box\procbox}}%
|
|
\else\rlap{\enspace\box\procbox}\fi}%
|
|
\fi%
|
|
\fi%
|
|
\def\L##1{\@@par\setbox\ls@far=\null\strut%
|
|
\global\advance\lc@unt by1%
|
|
\hbox to \linewidth{\hskip\LGindent\l@ftlno ##1\egroup%
|
|
\hfil\r@ghtlno}%
|
|
\ignorespaces}%
|
|
\fi%
|
|
\lc@unt=#1\advance\lc@unt by-1%
|
|
\ln@xt=\LGnuminterval\advance\ln@xt by-1%
|
|
\loop\ifnum\lc@unt>\ln@xt\advance\ln@xt by\LGnuminterval\repeat%
|
|
\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}%
|
|
%%stopzone % VIM syncing
|
|
\def\CH##1##2##3{\relax\ifmmode ##1\relax%
|
|
\else\ifstr@ng ##2\relax\else$##3$\fi\fi }%
|
|
\def\|{\CH|||}% not necessary for T1
|
|
\def\<{\CH<<<}% dto.
|
|
\def\>{\CH>>>}% dto.
|
|
\def\-{\CH---}% minus sign nicer than hyphen
|
|
\def\_{\ifstr@ng {\char'137}\else%
|
|
\leavevmode \kern.06em \vbox{\hrule width.35em}%
|
|
\ifdim\fontdimen\@ne\font=\z@ \kern.06em \fi\fi }%
|
|
\def\#{{\STfont\char'043}}%
|
|
\def\2{\CH\backslash {\char'134}\backslash }% % \
|
|
\def\3{\ifc@mment\ifright@ ''\global\right@false%
|
|
\else``\global\right@true \fi%
|
|
\else{\texttt{\char'042}}\fi}% % "
|
|
\def\5{{\texttt{\char'136}}}% % ^
|
|
\parindent\z@\parskip\z@ plus 1pt%
|
|
\bgroup\BGfont%
|
|
}
|
|
{\egroup\@@par\newpage} % end of environment lgrind
|
|
\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]
|
|
\ifLGnorules\else\hrule\fi
|
|
\vskip .5\baselineskip
|
|
\begin{minipage}\columnwidth\LGsize\LGindent\z@
|
|
\begin{lgrind}
|
|
\input #2\relax
|
|
\end{lgrind}
|
|
\end{minipage}
|
|
\vskip .5\baselineskip plus .5\baselineskip
|
|
\ifLGnorules\else\hrule\fi\vskip .5\baselineskip
|
|
\begingroup
|
|
\setbox\z@=\hbox{#4}%
|
|
\ifdim\wd\z@>\z@
|
|
\caption{#3}%
|
|
\label{#4}%
|
|
\else
|
|
\captcont{#3}%
|
|
\fi
|
|
\endgroup
|
|
\vskip 2pt
|
|
\end{figure}
|
|
}
|
|
\def\@@slagrind[#1]#2#3#4{%
|
|
\begin{figure*}[#1]
|
|
\ifLGnorules\else\hrule\fi
|
|
\vskip .5\baselineskip
|
|
\begin{minipage}\linewidth\LGsize\LGindent\z@
|
|
\begin{lgrind}
|
|
\input #2\relax
|
|
\end{lgrind}
|
|
\end{minipage}
|
|
\vskip .5\baselineskip plus .5\baselineskip
|
|
\ifLGnorules\else\hrule\fi\vskip .5\baselineskip
|
|
\begingroup
|
|
\setbox\z@=\hbox{#4}%
|
|
\ifdim\wd\z@>\z@
|
|
\caption{#3}%
|
|
\label{#4}%
|
|
\else
|
|
\captcont{#3}%
|
|
\fi
|
|
\endgroup
|
|
\vskip 2pt
|
|
\end{figure*}
|
|
}
|
|
\def\lgrindfile#1{%
|
|
\par\addvspace{0.1in}
|
|
\ifLGnorules\else\hrule\fi
|
|
\vskip .5\baselineskip
|
|
\begingroup\LGfsize\LGindent\z@
|
|
\begin{lgrind}
|
|
\input #1\relax
|
|
\end{lgrind}
|
|
\endgroup
|
|
\vskip .5\baselineskip
|
|
\ifLGnorules\else\hrule\vspace{0.1in}\fi
|
|
}
|
|
\endinput
|
|
%%
|
|
%% End of file `lgrind.sty'.
|