123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238 |
- %%
- %% 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.
- %%
- %% Author: Michael Piefel, piefel@cs.tu-berlin.de
- %% 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}
- [1999/05/28 v3.6 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}
- \DeclareOption{lineno1}{\LGnuminterval=1}
- \newif\ifLGleftnum
- \DeclareOption{leftno}{\LGleftnumtrue}
- \newskip\LGindent
- \LGindent=1.0\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\BGfont{\ttfamily\bfseries}
- \def\CMfont{\rmfamily\itshape}
- \def\NOfont{\sffamily}
- %\def\NOfont{\ttfamily}
- %\def\KWfont{\rmfamily\bfseries}
- \def\KWfont{\rmfamily\itshape\bfseries}
- %\def\KWfont{\ttfamily}
- %\def\STfont{\ttfamily}
- \def\STfont{\rmfamily\itshape\bfseries}
- %\def\TTfont{\ttfamily\upshape}
- \def\TTfont{\rmfamily\itshape\bfseries}
- %\def\VRfont{\ttfamily}
- \def\VRfont{\rmfamily\itshape\bfseries}
- \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} % 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\fi
- \addvspace{0.1in}
- }
- \endinput
- %%
- %% End of file `lgrind.sty'.
|