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'. |
---|