]>
Commit | Line | Data |
---|---|---|
7c673cae FG |
1 | %% |
2 | %% This is file `lgrind.sty', | |
3 | %% generated with the docstrip utility. | |
4 | %% | |
5 | %% The original source files were: | |
6 | %% | |
7 | %% lgrind.dtx (with options: `package') | |
8 | %% | |
9 | %% LGrind is used to format source code of different programming | |
10 | %% languages for LaTeX. | |
11 | %% | |
12 | %% LGrind is a major adaptation of Jerry Leichter's tgrind for LaTeX, | |
13 | %% which was a notable improvement upon Van Jacobsen's tgrind for | |
14 | %% plain TeX, which was adapted from vgrind, a troff prettyprinter. | |
15 | %% | |
16 | %% Author: Michael Piefel, piefel@cs.tu-berlin.de | |
17 | %% Based on Van Jacobson's ``tgrindmac'', a macro package for TeX. | |
18 | %% Modified, 1987 by Jerry Leichter. Put '@' in all internal names. | |
19 | %% Modified, 1991 by George Reilly. Changed name from tgrind to lgrind. | |
20 | %% Modified, 1995 by Michael Piefel. Made it work with \LaTeXe. | |
21 | %% -1999 Hundreds of bells and whistles. No changelog here. | |
22 | \NeedsTeXFormat{LaTeX2e}[1996/06/01] | |
23 | \ProvidesPackage{lgrind} | |
24 | [1999/05/28 v3.6 LGrind environment and supporting stuff] | |
25 | %%stopzone % VIM syncing | |
26 | \newcount\lc@unt | |
27 | \newcount\ln@xt | |
28 | \newcount\LGnuminterval | |
29 | \LGnuminterval=10 | |
30 | \DeclareOption{nolineno}{\LGnuminterval=50000} | |
31 | \DeclareOption{lineno5}{\LGnuminterval=5} | |
32 | \DeclareOption{lineno1}{\LGnuminterval=1} | |
33 | \newif\ifLGleftnum | |
34 | \DeclareOption{leftno}{\LGleftnumtrue} | |
35 | \newskip\LGindent | |
36 | \LGindent=1.0\parindent | |
37 | \DeclareOption{noindent}{\LGindent=0pt} | |
38 | \newif\ifLGnorules | |
39 | \DeclareOption{norules}{\LGnorulestrue} | |
40 | \newlength{\LGsloppy} | |
41 | \setlength{\LGsloppy}{7.2pt} | |
42 | \DeclareOption{fussy}{\LGsloppy=0pt} | |
43 | \newcommand{\DefaultProc}{\@gobble} | |
44 | \newcommand{\DefaultProcCont}{\@gobble} | |
45 | \DeclareOption{procnames}{ | |
46 | \renewcommand{\DefaultProc}[1]{\renewcommand{\Procname}{#1}% | |
47 | \global\setbox\procbox=\hbox{\PNsize #1}} | |
48 | \renewcommand{\DefaultProcCont}[1]{\renewcommand\Procname{#1} | |
49 | \global\setbox\procbox=\hbox{\PNsize\dots #1}}} | |
50 | \newbox\procbox | |
51 | \newcommand{\Procname}{} | |
52 | \newif\ifLGnoprocindex | |
53 | \DeclareOption{noprocindex}{\LGnoprocindextrue} | |
54 | \ProcessOptions | |
55 | %\def\BGfont{\sffamily} | |
56 | \def\BGfont{\ttfamily\bfseries} | |
57 | \def\CMfont{\rmfamily\itshape} | |
58 | \def\NOfont{\sffamily} | |
59 | %\def\NOfont{\ttfamily} | |
60 | %\def\KWfont{\rmfamily\bfseries} | |
61 | \def\KWfont{\rmfamily\itshape\bfseries} | |
62 | %\def\KWfont{\ttfamily} | |
63 | %\def\STfont{\ttfamily} | |
64 | \def\STfont{\rmfamily\itshape\bfseries} | |
65 | %\def\TTfont{\ttfamily\upshape} | |
66 | \def\TTfont{\rmfamily\itshape\bfseries} | |
67 | %\def\VRfont{\ttfamily} | |
68 | \def\VRfont{\rmfamily\itshape\bfseries} | |
69 | \def\PNsize{\BGfont\small} | |
70 | \def\LGsize{\small} | |
71 | \def\LGfsize{\footnotesize} | |
72 | \newif\ifLGinline | |
73 | \newif\ifLGd@fault | |
74 | \def\LGbegin{\ifLGinline$\hbox\else$$\vbox\fi\bgroup\LGd@faulttrue} | |
75 | \def\LGend{\ifLGd@fault\egroup\ifLGinline$\else$$\fi\LGd@faultfalse\fi} | |
76 | %%stopzone % VIM syncing | |
77 | \newif\ifc@mment | |
78 | \newif\ifstr@ng | |
79 | \newif\ifright@ | |
80 | \newbox\ls@far | |
81 | \newbox\tb@x | |
82 | \newdimen\TBw@d | |
83 | \newdimen\@ts | |
84 | {\catcode`\_=\active \gdef\@setunder{\let_=\sp@ce}} | |
85 | \newcommand{\lgrindhead}{} | |
86 | \newcommand{\lgrindfilename}{}\newcommand{\lgrindfilesize}{} | |
87 | \newcommand{\lgrindmodyear}{}\newcommand{\lgrindmodmonth}{} | |
88 | \newcommand{\lgrindmodday}{}\newcommand{\lgrindmodtime}{} | |
89 | \newenvironment{lgrind}[1][1]{% | |
90 | \def\Line##1{\L{\LB{##1}}}% | |
91 | \newcommand{\Head}[1]{\gdef\lgrindhead{##1}}% | |
92 | \newcommand{\File}[6]{\gdef\lgrindfilename{##1}\message{(LGround: ##1)}% | |
93 | \gdef\lgrindmodyear{##2}\gdef\lgrindmodmonth{##3}% | |
94 | \gdef\lgrindmodday{##4}\gdef\lgrindmodtime{##5}% | |
95 | \gdef\lgrindfilesize{##6}}% | |
96 | \let\Proc=\DefaultProc% | |
97 | \let\ProcCont=\DefaultProcCont% | |
98 | \ifLGnoprocindex% | |
99 | \let\index\@gobble% | |
100 | \fi% | |
101 | \hfuzz=\LGsloppy | |
102 | \def\NewPage{\filbreak\bigskip}% | |
103 | \ifLGinline | |
104 | \def\L##1{\setbox\ls@far\null{\CF\strut##1}\ignorespaces}% | |
105 | \else | |
106 | \let\r@ghtlno\relax\let\l@ftlno\relax | |
107 | \ifnum\LGnuminterval>\z@ | |
108 | \ifLGleftnum | |
109 | \def\l@ftlno{\ifnum\lc@unt>\ln@xt | |
110 | \global\advance\ln@xt by\LGnuminterval | |
111 | \llap{{\normalfont\scriptsize\the\lc@unt\quad}}\fi} | |
112 | \def\r@ghtlno{\rlap{\enspace\box\procbox}}% | |
113 | \else | |
114 | \def\r@ghtlno{\ifnum\lc@unt>\ln@xt | |
115 | \global\advance\ln@xt by\LGnuminterval | |
116 | \rlap{{\normalfont\scriptsize\enspace\the\lc@unt% | |
117 | \enspace\box\procbox}} | |
118 | \else\rlap{\enspace\box\procbox}\fi}% | |
119 | \fi | |
120 | \fi | |
121 | \def\L##1{\@@par\setbox\ls@far=\null\strut | |
122 | \global\advance\lc@unt by1% | |
123 | \hbox to \linewidth{\hskip\LGindent\l@ftlno ##1\egroup% | |
124 | \hfil\r@ghtlno}% | |
125 | \ignorespaces}% | |
126 | \fi | |
127 | \lc@unt=#1\advance\lc@unt by-1% | |
128 | \ln@xt=\LGnuminterval\advance\ln@xt by-1% | |
129 | \loop\ifnum\lc@unt>\ln@xt\advance\ln@xt by\LGnuminterval\repeat% | |
130 | \def\LB{\hbox\bgroup\bgroup\box\ls@far\CF\let\next=}% | |
131 | \def\Tab##1{\egroup\setbox\tb@x=\lastbox\TBw@d=\wd\tb@x% | |
132 | \advance\TBw@d by 1\@ts\ifdim\TBw@d>##1\@ts | |
133 | \setbox\ls@far=\hbox{\box\ls@far \box\tb@x \sp@ce}\else | |
134 | \setbox\ls@far=\hbox to ##1\@ts{\box\ls@far \box\tb@x \hfil}\fi\LB}% | |
135 | \ifLGinline\def\sp@ce{{\hskip .3333em}}% | |
136 | \else \setbox\tb@x=\hbox{\texttt{0}}% | |
137 | \@ts=0.8\wd\tb@x \def\sp@ce{{\hskip 1\@ts}}\fi | |
138 | \catcode`\_=\active \@setunder | |
139 | \def\CF{\ifc@mment\CMfont\else\ifstr@ng\STfont\fi\fi} | |
140 | \def\N##1{{\NOfont ##1}\global\futurelet\next\ic@r}% | |
141 | \def\K##1{{\KWfont ##1}\global\futurelet\next\ic@r}% | |
142 | \def\V##1{{\VRfont ##1}\global\futurelet\next\ic@r}% | |
143 | \def\ic@r{\let\@tempa\/\ifx.\next\let\@tempa\relax% | |
144 | \else\ifx,\next\let\@tempa\relax\fi\fi\@tempa}% | |
145 | \def\C{\egroup\bgroup\CMfont \global\c@mmenttrue \global\right@false}% | |
146 | \def\CE{\egroup\bgroup \global\c@mmentfalse}% | |
147 | \def\S{\egroup\bgroup\STfont \global\str@ngtrue}% | |
148 | \def\SE{\egroup\bgroup \global\str@ngfalse}% | |
149 | \def\,{\relax \ifmmode\mskip\thinmuskip \else\thinspace \fi}% | |
150 | \def\!{\relax \ifmmode\mskip-\thinmuskip \else\negthinspace \fi}% | |
151 | %%stopzone % VIM syncing | |
152 | \def\CH##1##2##3{\relax\ifmmode ##1\relax | |
153 | \else\ifstr@ng ##2\relax\else$##3$\fi\fi }% | |
154 | \def\|{\CH|||}% not necessary for T1 | |
155 | \def\<{\CH<<<}% dto. | |
156 | \def\>{\CH>>>}% dto. | |
157 | \def\-{\CH---}% minus sign nicer than hyphen | |
158 | \def\_{\ifstr@ng {\char'137}\else | |
159 | \leavevmode \kern.06em \vbox{\hrule width.35em}% | |
160 | \ifdim\fontdimen\@ne\font=\z@ \kern.06em \fi\fi }% | |
161 | \def\#{{\STfont\char'043}}% | |
162 | \def\2{\CH\backslash {\char'134}\backslash }% % \ | |
163 | \def\3{\ifc@mment\ifright@ ''\global\right@false% | |
164 | \else``\global\right@true \fi | |
165 | \else{\texttt{\char'042}}\fi}% % " | |
166 | \def\5{{\texttt{\char'136}}}% % ^ | |
167 | \parindent\z@\parskip\z@ plus 1pt% | |
168 | \bgroup\BGfont | |
169 | } | |
170 | {\egroup\@@par} % end of environment lgrind | |
171 | \def\lgrinde{\ifLGinline\else\LGsize\fi\begin{lgrind}} | |
172 | \def\endlgrinde{\end{lgrind}} | |
173 | \def\lagrind{\@ifstar{\@slagrind}{\@lagrind}} | |
174 | ||
175 | \def\@lagrind{\@ifnextchar[{\@@lagrind}{\@@lagrind[t]}} | |
176 | \def\@slagrind{\@ifnextchar[{\@@slagrind}{\@@slagrind[t]}} | |
177 | \def\@@lagrind[#1]#2#3#4{% | |
178 | \begin{figure}[#1] | |
179 | \ifLGnorules\else\hrule\fi | |
180 | \vskip .5\baselineskip | |
181 | \begin{minipage}\columnwidth\LGsize\LGindent\z@ | |
182 | \begin{lgrind} | |
183 | \input #2\relax | |
184 | \end{lgrind} | |
185 | \end{minipage} | |
186 | \vskip .5\baselineskip plus .5\baselineskip | |
187 | \ifLGnorules\else\hrule\fi\vskip .5\baselineskip | |
188 | \begingroup | |
189 | \setbox\z@=\hbox{#4}% | |
190 | \ifdim\wd\z@>\z@ | |
191 | \caption{#3}% | |
192 | \label{#4}% | |
193 | \else | |
194 | \captcont{#3}% | |
195 | \fi | |
196 | \endgroup | |
197 | \vskip 2pt | |
198 | \end{figure} | |
199 | } | |
200 | \def\@@slagrind[#1]#2#3#4{% | |
201 | \begin{figure*}[#1] | |
202 | \ifLGnorules\else\hrule\fi | |
203 | \vskip .5\baselineskip | |
204 | \begin{minipage}\linewidth\LGsize\LGindent\z@ | |
205 | \begin{lgrind} | |
206 | \input #2\relax | |
207 | \end{lgrind} | |
208 | \end{minipage} | |
209 | \vskip .5\baselineskip plus .5\baselineskip | |
210 | \ifLGnorules\else\hrule\fi\vskip .5\baselineskip | |
211 | \begingroup | |
212 | \setbox\z@=\hbox{#4}% | |
213 | \ifdim\wd\z@>\z@ | |
214 | \caption{#3}% | |
215 | \label{#4}% | |
216 | \else | |
217 | \captcont{#3}% | |
218 | \fi | |
219 | \endgroup | |
220 | \vskip 2pt | |
221 | \end{figure*} | |
222 | } | |
223 | \def\lgrindfile#1{% | |
224 | \par\addvspace{0.1in} | |
225 | \ifLGnorules\else\hrule\fi | |
226 | \vskip .5\baselineskip | |
227 | \begingroup\LGfsize\LGindent\z@ | |
228 | \begin{lgrind} | |
229 | \input #1\relax | |
230 | \end{lgrind} | |
231 | \endgroup | |
232 | \vskip .5\baselineskip | |
233 | \ifLGnorules\else\hrule\fi | |
234 | \addvspace{0.1in} | |
235 | } | |
236 | \endinput | |
237 | %% | |
238 | %% End of file `lgrind.sty'. |