Mercurial > hg > Papers > 2008 > kent-dsw
comparison nonDefaultPackage/lstmisc.sty @ 0:f2fa5b673868
*** empty log message ***
author | kent |
---|---|
date | Sun, 15 Jun 2008 10:40:55 +0900 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:f2fa5b673868 |
---|---|
1 %% | |
2 %% This is file `lstmisc.sty', | |
3 %% generated with the docstrip utility. | |
4 %% | |
5 %% The original source files were: | |
6 %% | |
7 %% listings-1.3.dtx (with options: `misc,0.21') | |
8 %% | |
9 %% Please read the software license in listings-1.3.dtx or listings-1.3.pdf. | |
10 %% | |
11 %% (w)(c) 1996--2004 Carsten Heinz and/or any other author listed | |
12 %% elsewhere in this file. | |
13 %% | |
14 %% Send comments and ideas on the package, error reports and additional | |
15 %% programming languages to <cheinz@gmx.de>. | |
16 %% | |
17 \def\filedate{2004/09/07} | |
18 \def\fileversion{1.3} | |
19 \ProvidesFile{lstmisc.sty} | |
20 [\filedate\space\fileversion\space(Carsten Heinz)] | |
21 \lst@CheckVersion\fileversion | |
22 {\typeout{^^J% | |
23 ***^^J% | |
24 *** This file requires `listings.sty' version \fileversion.^^J% | |
25 *** You have a serious problem, so I'm exiting ...^^J% | |
26 ***^^J}% | |
27 \batchmode \@@end} | |
28 \lst@BeginAspect{writefile} | |
29 \newtoks\lst@WFtoken % global | |
30 \lst@AddToHook{InitVarsBOL}{\global\lst@WFtoken{}} | |
31 \newwrite\lst@WF | |
32 \global\let\lst@WFifopen\iffalse % init | |
33 \gdef\lst@WFWriteToFile{% | |
34 \begingroup | |
35 \let\lst@UM\@empty | |
36 \expandafter\edef\expandafter\lst@temp\expandafter{\the\lst@WFtoken}% | |
37 \immediate\write\lst@WF{\lst@temp}% | |
38 \endgroup | |
39 \global\lst@WFtoken{}} | |
40 \gdef\lst@WFAppend#1{% | |
41 \global\lst@WFtoken=\expandafter{\the\lst@WFtoken#1}} | |
42 \gdef\lst@BeginWriteFile{\lst@WFBegin\@gobble} | |
43 \gdef\lst@BeginAlsoWriteFile{\lst@WFBegin\lst@OutputBox} | |
44 \begingroup \catcode`\^^I=11 | |
45 \gdef\lst@WFBegin#1#2{% | |
46 \begingroup | |
47 \let\lst@OutputBox#1% | |
48 \def\lst@Append##1{% | |
49 \advance\lst@length\@ne | |
50 \expandafter\lst@token\expandafter{\the\lst@token##1}% | |
51 \ifx ##1\lst@outputspace \else | |
52 \lst@WFAppend##1% | |
53 \fi}% | |
54 \lst@lAddTo\lst@PreGotoTabStop{\lst@WFAppend{^^I}}% | |
55 \lst@lAddTo\lst@ProcessSpace{\lst@WFAppend{ }}% | |
56 \let\lst@DeInit\lst@WFDeInit | |
57 \let\lst@MProcessListing\lst@WFMProcessListing | |
58 \lst@WFifopen\else | |
59 \immediate\openout\lst@WF=#2\relax | |
60 \global\let\lst@WFifopen\iftrue | |
61 \@gobbletwo\fi\fi | |
62 \fi} | |
63 \endgroup | |
64 \gdef\lst@EndWriteFile{% | |
65 \immediate\closeout\lst@WF \endgroup | |
66 \global\let\lst@WFifopen\iffalse} | |
67 \global\let\lst@WFMProcessListing\lst@MProcessListing | |
68 \global\let\lst@WFDeInit\lst@DeInit | |
69 \lst@AddToAtTop\lst@WFMProcessListing{\lst@WFWriteToFile} | |
70 \lst@AddToAtTop\lst@WFDeInit{% | |
71 \ifnum\lst@length=\z@\else \lst@WFWriteToFile \fi} | |
72 \lst@EndAspect | |
73 \lst@BeginAspect{strings} | |
74 \gdef\lst@stringtypes{d,b,m,bd,db} | |
75 \gdef\lst@StringKey#1#2{% | |
76 \lst@Delim\lst@stringstyle #2\relax | |
77 {String}\lst@stringtypes #1% | |
78 {\lst@BeginString\lst@EndString}% | |
79 \@@end\@empty{}} | |
80 \lst@Key{string}\relax{\lst@StringKey\@empty{#1}} | |
81 \lst@Key{morestring}\relax{\lst@StringKey\relax{#1}} | |
82 \lst@Key{deletestring}\relax{\lst@StringKey\@nil{#1}} | |
83 \lst@Key{stringstyle}{}{\def\lst@stringstyle{#1}} | |
84 \lst@AddToHook{EmptyStyle}{\let\lst@stringstyle\@empty} | |
85 \lst@Key{showstringspaces}t[t]{\lstKV@SetIf{#1}\lst@ifshowstringspaces} | |
86 \gdef\lst@BeginString{% | |
87 \lst@DelimOpen | |
88 \lst@ifexstrings\else | |
89 {\lst@ifshowstringspaces | |
90 \lst@keepspacestrue | |
91 \let\lst@outputspace\lst@visiblespace | |
92 \fi}} | |
93 \lst@AddToHookExe{ExcludeDelims}{\let\lst@ifexstrings\iffalse} | |
94 \gdef\lst@EndString{\lst@DelimClose\lst@ifexstrings\else} | |
95 \gdef\lst@StringDM@d#1#2\@empty#3#4#5{% | |
96 \lst@CArg #2\relax\lst@DefDelimBE{}{}{}#3{#1}{#5}#4} | |
97 \gdef\lst@StringDM@b#1#2\@empty#3#4#5{% | |
98 \let\lst@ifbstring\iftrue | |
99 \lst@CArg #2\relax\lst@DefDelimBE | |
100 {\lst@ifletter \lst@Output \lst@letterfalse \fi}% | |
101 {\ifx\lst@lastother\lstum@backslash | |
102 \expandafter\@gobblethree | |
103 \fi}{}#3{#1}{#5}#4} | |
104 \global\let\lst@ifbstring\iffalse % init | |
105 \lst@AddToHook{SelectCharTable}{% | |
106 \lst@ifbstring | |
107 \lst@CArgX \\\\\relax \lst@CDefX{}% | |
108 {\lst@ProcessOther\lstum@backslash | |
109 \lst@ProcessOther\lstum@backslash | |
110 \let\lst@lastother\relax}% | |
111 {}% | |
112 \fi} | |
113 \global\let\lst@StringDM@bd\lst@StringDM@b | |
114 \global\let\lst@StringDM@db\lst@StringDM@bd | |
115 \gdef\lst@StringDM@a#1#2\@empty#3#4#5{% | |
116 \lst@CArg #2\relax\lst@DefDelimBE{}{}% | |
117 {\let\lst@next\@gobblethree | |
118 \lst@ifletter\else | |
119 \ifx\lst@lastother)\else \ifx\lst@lastother]\else | |
120 \let\lst@next\@empty | |
121 \fi \fi \fi | |
122 \lst@next}#3{#1}{#5}#4} | |
123 \gdef\lst@StringDM@m#1#2\@empty#3#4#5{% | |
124 \lst@CArg #2\relax\lst@DefDelimBE{}{}% | |
125 {\let\lst@next\@gobblethree | |
126 \lst@ifletter\else | |
127 \lst@IfLastOtherOneOf{)].0123456789\lstum@rbrace'}% | |
128 {}% | |
129 {\let\lst@next\@empty}% | |
130 \fi | |
131 \lst@next}#3{#1}{#5}#4} | |
132 \lst@SaveOutputDef{"7D}\lstum@rbrace | |
133 \lst@EndAspect | |
134 \lst@BeginAspect{mf} | |
135 \lst@AddTo\lst@stringtypes{,mf} | |
136 \lst@NewMode\lst@mfinputmode | |
137 \gdef\lst@String@mf#1\@empty#2#3#4{% | |
138 \lst@CArg #1\relax\lst@DefDelimB | |
139 {}{}{\lst@ifletter \expandafter\@gobblethree \fi}% | |
140 \lst@BeginStringMFinput\lst@mfinputmode{#4\lst@Lmodetrue}% | |
141 \@ifundefined{lsts@semicolon}% | |
142 {\lst@DefSaveDef{`\;}\lsts@semicolon{% ; and space end the filename | |
143 \ifnum\lst@mode=\lst@mfinputmode | |
144 \lst@XPrintToken | |
145 \expandafter\lst@LeaveMode | |
146 \fi | |
147 \lsts@semicolon}% | |
148 \lst@DefSaveDef{`\ }\lsts@space{% | |
149 \ifnum\lst@mode=\lst@mfinputmode | |
150 \lst@XPrintToken | |
151 \expandafter\lst@LeaveMode | |
152 \fi | |
153 \lsts@space}% | |
154 }{}} | |
155 \gdef\lst@BeginStringMFinput#1#2#3\@empty{% | |
156 \lst@TrackNewLines \lst@XPrintToken | |
157 \begingroup | |
158 \lst@mode\lst@nomode | |
159 #3\lst@XPrintToken | |
160 \endgroup | |
161 \lst@ResetToken | |
162 \lst@EnterMode{#1}{\def\lst@currstyle#2}% | |
163 \lst@ifshowstringspaces | |
164 \lst@keepspacestrue | |
165 \let\lst@outputspace\lst@visiblespace | |
166 \fi} | |
167 \lst@EndAspect | |
168 \lst@BeginAspect{comments} | |
169 \lst@NewMode\lst@commentmode | |
170 \gdef\lst@commenttypes{l,f,s,n} | |
171 \gdef\lst@CommentKey#1#2{% | |
172 \lst@Delim\lst@commentstyle #2\relax | |
173 {Comment}\lst@commenttypes #1% | |
174 {\lst@BeginComment\lst@EndComment}% | |
175 i\@empty{\lst@BeginInvisible\lst@EndInvisible}} | |
176 \lst@Key{comment}\relax{\lst@CommentKey\@empty{#1}} | |
177 \lst@Key{morecomment}\relax{\lst@CommentKey\relax{#1}} | |
178 \lst@Key{deletecomment}\relax{\lst@CommentKey\@nil{#1}} | |
179 \lst@Key{commentstyle}{}{\def\lst@commentstyle{#1}} | |
180 \lst@AddToHook{EmptyStyle}{\let\lst@commentstyle\itshape} | |
181 \gdef\lst@BeginComment{% | |
182 \lst@DelimOpen | |
183 \lst@ifexcomments\else | |
184 \lsthk@AfterBeginComment} | |
185 \gdef\lst@EndComment{\lst@DelimClose\lst@ifexcomments\else} | |
186 \lst@AddToHook{AfterBeginComment}{} | |
187 \lst@AddToHookExe{ExcludeDelims}{\let\lst@ifexcomments\iffalse} | |
188 \gdef\lst@BeginInvisible#1#2#3\@empty{% | |
189 \lst@TrackNewLines \lst@XPrintToken | |
190 \lst@BeginDropOutput{#1}} | |
191 \gdef\lst@EndInvisible#1\@empty{\lst@EndDropOutput} | |
192 \gdef\lst@CommentDM@l#1#2\@empty#3#4#5{% | |
193 \lst@CArg #2\relax\lst@DefDelimB{}{}{}#3{#1}{#5\lst@Lmodetrue}} | |
194 \gdef\lst@CommentDM@f#1{% | |
195 \@ifnextchar[{\lst@Comment@@f{#1}}% | |
196 {\lst@Comment@@f{#1}[0]}} | |
197 \gdef\lst@Comment@@f#1[#2]#3\@empty#4#5#6{% | |
198 \lst@CArg #3\relax\lst@DefDelimB{}{}% | |
199 {\lst@CalcColumn | |
200 \ifnum #2=\@tempcnta\else | |
201 \expandafter\@gobblethree | |
202 \fi}% | |
203 #4{#1}{#6\lst@Lmodetrue}} | |
204 \gdef\lst@CommentDM@s#1#2#3\@empty#4#5#6{% | |
205 \lst@CArg #2\relax\lst@DefDelimB{}{}{}#4{#1}{#6}% | |
206 \lst@CArg #3\relax\lst@DefDelimE{}{}{}#5{#1}} | |
207 \gdef\lst@CommentDM@n#1#2#3\@empty#4#5#6{% | |
208 \ifx\@empty#3\@empty\else | |
209 \def\@tempa{#2}\def\@tempb{#3}% | |
210 \ifx\@tempa\@tempb | |
211 \PackageError{Listings}{Identical delimiters}% | |
212 {These delimiters make no sense with nested comments.}% | |
213 \else | |
214 \lst@CArg #2\relax\lst@DefDelimB | |
215 {}% | |
216 {\ifnum\lst@mode=#1\relax \expandafter\@gobble \fi}% | |
217 {}#4{#1}{#6}% | |
218 \lst@CArg #3\relax\lst@DefDelimE{}{}{}#5{#1}% | |
219 \fi | |
220 \fi} | |
221 \lst@EndAspect | |
222 \lst@BeginAspect{pod} | |
223 \lst@Key{printpod}{false}[t]{\lstKV@SetIf{#1}\lst@ifprintpod} | |
224 \lst@Key{podcomment}{false}[t]{\lstKV@SetIf{#1}\lst@ifpodcomment} | |
225 \lst@AddToHookExe{SetLanguage}{\let\lst@ifpodcomment\iffalse} | |
226 \lst@NewMode\lst@PODmode | |
227 \lst@AddToHook{SelectCharTable} | |
228 {\lst@ifpodcomment | |
229 \lst@CArgX =\relax\lst@DefDelimB{}{}% | |
230 {\ifnum\@tempcnta=\z@ | |
231 \lst@ifprintpod\else | |
232 \def\lst@bnext{\lst@BeginDropOutput\lst@PODmode}% | |
233 \expandafter\expandafter\expandafter\@gobblethree | |
234 \fi | |
235 \else | |
236 \expandafter\@gobblethree | |
237 \fi}% | |
238 \lst@BeginComment\lst@PODmode{{\lst@commentstyle}}% | |
239 \lst@CArgX =cut\^^M\relax\lst@DefDelimE | |
240 {\lst@CalcColumn}% | |
241 {\ifnum\@tempcnta=\z@\else | |
242 \expandafter\@gobblethree | |
243 \fi}% | |
244 {}% | |
245 \lst@EndComment\lst@PODmode | |
246 \fi} | |
247 \lst@EndAspect | |
248 \lst@BeginAspect[keywords]{html} | |
249 \gdef\lst@tagtypes{s} | |
250 \gdef\lst@TagKey#1#2{% | |
251 \lst@Delim\lst@tagstyle #2\relax | |
252 {Tag}\lst@tagtypes #1% | |
253 {\lst@BeginTag\lst@EndTag}% | |
254 \@@end\@empty{}} | |
255 \lst@Key{tag}\relax{\lst@TagKey\@empty{#1}} | |
256 \lst@Key{tagstyle}{}{\def\lst@tagstyle{#1}} | |
257 \lst@AddToHook{EmptyStyle}{\let\lst@tagstyle\@empty} | |
258 \gdef\lst@BeginTag{% | |
259 \lst@DelimOpen | |
260 \lst@ifextags\else | |
261 {\let\lst@ifkeywords\iftrue | |
262 \lst@ifmarkfirstintag \lst@firstintagtrue \fi}} | |
263 \lst@AddToHookExe{ExcludeDelims}{\let\lst@ifextags\iffalse} | |
264 \gdef\lst@EndTag{\lst@DelimClose\lst@ifextags\else} | |
265 \lst@Key{usekeywordsintag}t[t]{\lstKV@SetIf{#1}\lst@ifusekeysintag} | |
266 \lst@Key{markfirstintag}f[t]{\lstKV@SetIf{#1}\lst@ifmarkfirstintag} | |
267 \gdef\lst@firstintagtrue{\global\let\lst@iffirstintag\iftrue} | |
268 \global\let\lst@iffirstintag\iffalse | |
269 \lst@AddToHook{PostOutput}{\lst@tagresetfirst} | |
270 \lst@AddToHook{Output} | |
271 {\gdef\lst@tagresetfirst{\global\let\lst@iffirstintag\iffalse}} | |
272 \lst@AddToHook{OutputOther}{\gdef\lst@tagresetfirst{}} | |
273 \lst@AddToHook{Output} | |
274 {\ifnum\lst@mode=\lst@tagmode | |
275 \lst@iffirstintag \let\lst@thestyle\lst@gkeywords@sty \fi | |
276 \lst@ifusekeysintag\else \let\lst@thestyle\lst@gkeywords@sty\fi | |
277 \fi} | |
278 \lst@NewMode\lst@tagmode | |
279 \lst@AddToHook{Init}{\global\let\lst@ifnotag\iftrue} | |
280 \lst@AddToHook{SelectCharTable}{\let\lst@ifkeywords\lst@ifnotag} | |
281 \gdef\lst@Tag@s#1#2\@empty#3#4#5{% | |
282 \global\let\lst@ifnotag\iffalse | |
283 \lst@CArg #1\relax\lst@DefDelimB {}{}% | |
284 {\ifnum\lst@mode=\lst@tagmode \expandafter\@gobblethree \fi}% | |
285 #3\lst@tagmode{#5}% | |
286 \lst@CArg #2\relax\lst@DefDelimE {}{}{}#4\lst@tagmode}% | |
287 \gdef\lst@BeginCDATA#1\@empty{% | |
288 \lst@TrackNewLines \lst@PrintToken | |
289 \lst@EnterMode\lst@GPmode{}\let\lst@ifmode\iffalse | |
290 \lst@mode\lst@tagmode #1\lst@mode\lst@GPmode\relax\lst@modetrue} | |
291 \lst@EndAspect | |
292 \lst@BeginAspect{escape} | |
293 \lst@Key{texcl}{false}[t]{\lstKV@SetIf{#1}\lst@iftexcl} | |
294 \lst@AddToHook{TextStyle}{\let\lst@iftexcl\iffalse} | |
295 \lst@AddToHook{EOL} | |
296 {\ifnum\lst@mode=\lst@TeXLmode | |
297 \expandafter\lst@escapeend | |
298 \expandafter\lst@LeaveAllModes | |
299 \expandafter\lst@ReenterModes | |
300 \fi} | |
301 \lst@AddToHook{AfterBeginComment} | |
302 {\lst@iftexcl \lst@ifLmode \lst@ifdropinput\else | |
303 \lst@PrintToken | |
304 \lst@LeaveMode \lst@InterruptModes | |
305 \lst@EnterMode{\lst@TeXLmode}{\lst@modetrue\lst@commentstyle}% | |
306 \expandafter\expandafter\expandafter\lst@escapebegin | |
307 \fi \fi \fi} | |
308 \lst@NewMode\lst@TeXLmode | |
309 \gdef\lst@ActiveCDefX#1{\lst@ActiveCDefX@#1} | |
310 \gdef\lst@ActiveCDefX@#1#2#3{ | |
311 \catcode`#1\active\lccode`\~=`#1% | |
312 \lowercase{\lst@CDefIt~}{#2}{#3}{}} | |
313 \gdef\lst@Escape#1#2#3#4{% | |
314 \lst@CArgX #1\relax\lst@CDefX | |
315 {}% | |
316 {\lst@ifdropinput\else | |
317 \lst@TrackNewLines\lst@OutputLostSpace \lst@XPrintToken | |
318 \lst@InterruptModes | |
319 \lst@EnterMode{\lst@TeXmode}{\lst@modetrue}% | |
320 \ifx\^^M#2% | |
321 \lst@CArg #2\relax\lst@ActiveCDefX | |
322 {}% | |
323 {\lst@escapeend #4\lst@LeaveAllModes\lst@ReenterModes}% | |
324 {\lst@MProcessListing}% | |
325 \else | |
326 \lst@CArg #2\relax\lst@ActiveCDefX | |
327 {}% | |
328 {\lst@escapeend #4\lst@LeaveAllModes\lst@ReenterModes | |
329 \lst@whitespacefalse}% | |
330 {}% | |
331 \fi | |
332 #3\lst@escapebegin | |
333 \fi}% | |
334 {}} | |
335 \lst@NewMode\lst@TeXmode | |
336 \lst@Key{escapebegin}{}{\def\lst@escapebegin{#1}} | |
337 \lst@Key{escapeend}{}{\def\lst@escapeend{#1}} | |
338 \lst@Key{escapechar}{} | |
339 {\ifx\@empty#1\@empty | |
340 \let\lst@DefEsc\relax | |
341 \else | |
342 \def\lst@DefEsc{\lst@Escape{#1}{#1}{}{}}% | |
343 \fi} | |
344 \lst@AddToHook{TextStyle}{\let\lst@DefEsc\@empty} | |
345 \lst@AddToHook{SelectCharTable}{\lst@DefEsc} | |
346 \lst@Key{escapeinside}{}{\lstKV@TwoArg{#1}% | |
347 {\let\lst@DefEsc\@empty | |
348 \ifx\@empty##1@empty\else \ifx\@empty##2\@empty\else | |
349 \def\lst@DefEsc{\lst@Escape{##1}{##2}{}{}}% | |
350 \fi\fi}} | |
351 \lst@Key{mathescape}{false}[t]{\lstKV@SetIf{#1}\lst@ifmathescape} | |
352 \lst@AddToHook{SelectCharTable} | |
353 {\lst@ifmathescape \lst@Escape{\$}{\$}% | |
354 {\setbox\@tempboxa=\hbox\bgroup$}% | |
355 {$\egroup \lst@CalcLostSpaceAndOutput}\fi} | |
356 \lst@EndAspect | |
357 \lst@BeginAspect{keywords} | |
358 \global\let\lst@ifsensitive\iftrue % init | |
359 \global\let\lst@ifsensitivedefed\iffalse % init % \global | |
360 \lst@ifsavemem\else | |
361 \gdef\lst@KeywordTest#1#2#3{% | |
362 \begingroup \let\lst@UM\@empty | |
363 \global\expandafter\let\expandafter\@gtempa | |
364 \csname\@lst#1@\the\lst@token\endcsname | |
365 \endgroup | |
366 \ifx\@gtempa\relax\else | |
367 \let\lst@thestyle\@gtempa | |
368 \fi} | |
369 \gdef\lst@KEYWORDTEST{% | |
370 \uppercase\expandafter{\expandafter | |
371 \lst@KEYWORDTEST@\the\lst@token}\relax} | |
372 \gdef\lst@KEYWORDTEST@#1\relax#2#3#4{% | |
373 \begingroup \let\lst@UM\@empty | |
374 \global\expandafter\let\expandafter\@gtempa | |
375 \csname\@lst#2@#1\endcsname | |
376 \endgroup | |
377 \ifx\@gtempa\relax\else | |
378 \let\lst@thestyle\@gtempa | |
379 \fi} | |
380 \gdef\lst@WorkingTest#1#2#3{% | |
381 \begingroup \let\lst@UM\@empty | |
382 \global\expandafter\let\expandafter\@gtempa | |
383 \csname\@lst#1@\the\lst@token\endcsname | |
384 \endgroup | |
385 \@gtempa} | |
386 \gdef\lst@WORKINGTEST{% | |
387 \uppercase\expandafter{\expandafter | |
388 \lst@WORKINGTEST@\the\lst@token}\relax} | |
389 \gdef\lst@WORKINGTEST@#1\relax#2#3#4{% | |
390 \begingroup \let\lst@UM\@empty | |
391 \global\expandafter\let\expandafter\@gtempa | |
392 \csname\@lst#2@#1\endcsname | |
393 \endgroup | |
394 \@gtempa} | |
395 \gdef\lst@DefineKeywords#1#2#3{% | |
396 \lst@ifsensitive | |
397 \def\lst@next{\lst@for#2}% | |
398 \else | |
399 \def\lst@next{\uppercase\expandafter{\expandafter\lst@for#2}}% | |
400 \fi | |
401 \lst@next\do | |
402 {\expandafter\ifx\csname\@lst#1@##1\endcsname\relax | |
403 \global\expandafter\let\csname\@lst#1@##1\endcsname#3% | |
404 \fi}} | |
405 \gdef\lst@UndefineKeywords#1#2#3{% | |
406 \lst@ifsensitivedefed | |
407 \def\lst@next{\lst@for#2}% | |
408 \else | |
409 \def\lst@next{\uppercase\expandafter{\expandafter\lst@for#2}}% | |
410 \fi | |
411 \lst@next\do | |
412 {\expandafter\ifx\csname\@lst#1@##1\endcsname#3% | |
413 \global\expandafter\let\csname\@lst#1@##1\endcsname\relax | |
414 \fi}} | |
415 \fi | |
416 \lst@ifsavemem | |
417 \gdef\lst@IfOneOutOf#1\relax#2{% | |
418 \def\lst@temp##1,#1,##2##3\relax{% | |
419 \ifx\@empty##2\else \expandafter\lst@IOOOfirst \fi}% | |
420 \def\lst@next{\lst@IfOneOutOf@#1\relax}% | |
421 \expandafter\lst@next#2\relax\relax} | |
422 \gdef\lst@IfOneOutOf@#1\relax#2#3{% | |
423 \ifx#2\relax | |
424 \expandafter\@secondoftwo | |
425 \else | |
426 \expandafter\lst@temp\expandafter,#2,#1,\@empty\relax | |
427 \expandafter\lst@next | |
428 \fi} | |
429 \ifx\iffalse\else\fi | |
430 \gdef\lst@IOOOfirst#1\relax#2#3{\fi#2} | |
431 \gdef\lst@IFONEOUTOF#1\relax#2{% | |
432 \uppercase{\def\lst@temp##1,#1},##2##3\relax{% | |
433 \ifx\@empty##2\else \expandafter\lst@IOOOfirst \fi}% | |
434 \def\lst@next{\lst@IFONEOUTOF@#1\relax}% | |
435 \expandafter\lst@next#2\relax} | |
436 \gdef\lst@IFONEOUTOF@#1\relax#2#3{% | |
437 \ifx#2\relax | |
438 \expandafter\@secondoftwo | |
439 \else | |
440 \uppercase | |
441 {\expandafter\lst@temp\expandafter,#2,#1,\@empty\relax}% | |
442 \expandafter\lst@next | |
443 \fi} | |
444 \gdef\lst@KWTest{% | |
445 \begingroup \let\lst@UM\@empty | |
446 \expandafter\xdef\expandafter\@gtempa\expandafter{\the\lst@token}% | |
447 \endgroup | |
448 \expandafter\lst@IfOneOutOf\@gtempa\relax} | |
449 \gdef\lst@KeywordTest#1#2#3{\lst@KWTest #2{\let\lst@thestyle#3}{}} | |
450 \global\let\lst@KEYWORDTEST\lst@KeywordTest | |
451 \gdef\lst@WorkingTest#1#2#3{\lst@KWTest #2#3{}} | |
452 \global\let\lst@WORKINGTEST\lst@WorkingTest | |
453 \fi | |
454 \lst@Key{sensitive}\relax[t]{\lstKV@SetIf{#1}\lst@ifsensitive} | |
455 \lst@AddToHook{SetLanguage}{\let\lst@ifsensitive\iftrue} | |
456 \lst@AddToHook{Init} | |
457 {\lst@ifsensitive\else | |
458 \let\lst@KeywordTest\lst@KEYWORDTEST | |
459 \let\lst@WorkingTest\lst@WORKINGTEST | |
460 \let\lst@IfOneOutOf\lst@IFONEOUTOF | |
461 \fi} | |
462 \gdef\lst@MakeMacroUppercase#1{% | |
463 \ifx\@undefined#1\else \uppercase\expandafter | |
464 {\expandafter\def\expandafter#1\expandafter{#1}}% | |
465 \fi} | |
466 \gdef\lst@InstallTest#1#2#3#4#5#6#7#8{% | |
467 \lst@AddToHook{TrackKeywords}{\lst@TrackKeywords{#1}#2#4#6#7#8}% | |
468 \lst@AddToHook{PostTrackKeywords}{\lst@PostTrackKeywords#2#3#4#5}} | |
469 \lst@AddToHook{Init}{\lsthk@TrackKeywords\lsthk@PostTrackKeywords} | |
470 \lst@AddToHook{TrackKeywords} | |
471 {\global\let\lst@DoDefineKeywords\@empty}% init | |
472 \lst@AddToHook{PostTrackKeywords} | |
473 {\lst@DoDefineKeywords | |
474 \global\let\lst@DoDefineKeywords\@empty}% init | |
475 \lst@AddToHook{Output}{\lst@ifkeywords \lsthk@DetectKeywords \fi} | |
476 \lst@AddToHook{DetectKeywords}{}% init | |
477 \lst@AddToHook{ModeTrue}{\let\lst@ifkeywords\iffalse} | |
478 \lst@AddToHookExe{Init}{\let\lst@ifkeywords\iftrue} | |
479 \gdef\lst@InstallTestNow#1#2#3#4#5{% | |
480 \@ifundefined{\string#2#1}% | |
481 {\global\@namedef{\string#2#1}{}% | |
482 \edef\@tempa{% | |
483 \noexpand\lst@AddToHook{\ifx#5dDetectKeywords\else Output\fi}% | |
484 {\ifx #4w\noexpand\lst@WorkingTest | |
485 \else\noexpand\lst@KeywordTest \fi | |
486 {#1}\noexpand#2\noexpand#3}}% | |
487 \lst@ifsavemem | |
488 \@tempa | |
489 \else | |
490 \@ifundefined{\@lst#1@if@ins}% | |
491 {\@tempa \global\@namedef{\@lst#1@if@ins}{}}% | |
492 {}% | |
493 \fi} | |
494 {}} | |
495 \gdef\lst@TrackKeywords#1#2#3#4#5#6{% | |
496 \lst@false | |
497 \def\lst@arg{{#1}#4}% | |
498 \expandafter\expandafter\expandafter\lst@TK@ | |
499 \expandafter\lst@arg#2\relax\relax | |
500 \lst@ifsavemem\else | |
501 \def\lst@arg{{#1}#4#2}% | |
502 \expandafter\expandafter\expandafter\lst@TK@@ | |
503 \expandafter\lst@arg#3\relax\relax | |
504 \fi | |
505 \lst@if \lst@InstallTestNow{#1}#2#4#5#6\fi} | |
506 \gdef\lst@TK@#1#2#3#4{% | |
507 \ifx\lst@ifsensitive\lst@ifsensitivedefed | |
508 \ifx#3#4\else | |
509 \lst@true | |
510 \lst@ifsavemem\else | |
511 \lst@UndefineKeywords{#1}#4#2% | |
512 \lst@AddTo\lst@DoDefineKeywords{\lst@DefineKeywords{#1}#3#2}% | |
513 \fi | |
514 \fi | |
515 \else | |
516 \ifx#3\relax\else | |
517 \lst@true | |
518 \lst@ifsavemem\else | |
519 \lst@UndefineKeywords{#1}#4#2% | |
520 \lst@AddTo\lst@DoDefineKeywords{\lst@DefineKeywords{#1}#3#2}% | |
521 \fi | |
522 \fi | |
523 \fi | |
524 \lst@ifsavemem \ifx#3\relax\else | |
525 \lst@ifsensitive\else \lst@MakeMacroUppercase#3\fi | |
526 \fi \fi | |
527 \ifx#3\relax | |
528 \expandafter\@gobblethree | |
529 \fi | |
530 \lst@TK@{#1}#2} | |
531 \gdef\lst@TK@@#1#2#3#4#5{% | |
532 \ifx#4\relax | |
533 \expandafter\@gobblefour | |
534 \else | |
535 \lst@IfSubstring{#4#5}#3{}{\lst@UndefineKeywords{#1}#5#2}% | |
536 \fi | |
537 \lst@TK@@{#1}#2#3} | |
538 \lst@AddToHook{InitVars} | |
539 {\global\let\lst@ifsensitivedefed\lst@ifsensitive} | |
540 \gdef\lst@PostTrackKeywords#1#2#3#4{% | |
541 \lst@ifsavemem\else | |
542 \global\let#3#1% | |
543 \global\let#4#2% | |
544 \fi} | |
545 \lst@Key{classoffset}\z@{\def\lst@classoffset{#1}} | |
546 \gdef\lst@InstallFamily#1#2#3#4#5{% | |
547 \lst@Key{#2}\relax{\lst@UseFamily{#2}##1\relax\lst@MakeKeywords}% | |
548 \lst@Key{more#2}\relax | |
549 {\lst@UseFamily{#2}##1\relax\lst@MakeMoreKeywords}% | |
550 \lst@Key{delete#2}\relax | |
551 {\lst@UseFamily{#2}##1\relax\lst@DeleteKeywords}% | |
552 \ifx\@empty#3\@empty\else | |
553 \lst@Key{#3}{#4}{\lstKV@OptArg[\@ne]{##1}% | |
554 {\@tempcnta\lst@classoffset \advance\@tempcnta####1\relax | |
555 \@namedef{lst@#3\ifnum\@tempcnta=\@ne\else \the\@tempcnta | |
556 \fi}{####2}}}% | |
557 \fi | |
558 \expandafter\lst@InstallFamily@ | |
559 \csname\@lst @#2@data\expandafter\endcsname | |
560 \csname\@lst @#5\endcsname {#1}{#2}{#3}} | |
561 \gdef\lst@InstallFamily@#1#2#3#4#5#6#7#8{% | |
562 \gdef#1{{#3}{#4}{#5}#2#7}% | |
563 \long\def\lst@temp##1{#6}% | |
564 \ifx\lst@temp\@gobble | |
565 \lst@AddTo#1{s#8}% | |
566 \else | |
567 \lst@AddTo#1{w#8}% | |
568 \global\@namedef{lst@g#4@wp}##1{#6}% | |
569 \fi} | |
570 \gdef\lst@UseFamily#1{% | |
571 \def\lst@family{#1}% | |
572 \@ifnextchar[\lst@UseFamily@{\lst@UseFamily@[\@ne]}} | |
573 \gdef\lst@UseFamily@[#1]{% | |
574 \@tempcnta\lst@classoffset \advance\@tempcnta#1\relax | |
575 \lst@ProvideFamily\lst@family | |
576 \lst@UseFamily@a | |
577 {\lst@family\ifnum\@tempcnta=\@ne\else \the\@tempcnta \fi}} | |
578 \gdef\lst@UseFamily@a#1{% | |
579 \expandafter\lst@UseFamily@b | |
580 \csname\@lst @#1@list\expandafter\endcsname | |
581 \csname\@lst @#1\expandafter\endcsname | |
582 \csname\@lst @#1@also\expandafter\endcsname | |
583 \csname\@lst @g#1\endcsname} | |
584 \gdef\lst@UseFamily@b#1#2#3#4#5\relax#6{\lstKV@XOptArg[]{#5}#6#1#2#3#4} | |
585 \gdef\lst@ProvideFamily#1{% | |
586 \@ifundefined{lstfam@#1\ifnum\@tempcnta=\@ne\else\the\@tempcnta\fi}% | |
587 {\global\@namedef{lstfam@#1\ifnum\@tempcnta=\@ne\else | |
588 \the\@tempcnta\fi}{}% | |
589 \expandafter\expandafter\expandafter\lst@ProvideFamily@ | |
590 \csname\@lst @#1@data\endcsname | |
591 {\ifnum\@tempcnta=\@ne\else \the\@tempcnta \fi}}% | |
592 {}}% | |
593 \gdef\lst@ProvideFamily@#1#2#3#4#5#6#7#8{% | |
594 \expandafter\xdef\csname\@lst @g#2#8@sty\endcsname | |
595 {\if #6w% | |
596 \expandafter\noexpand\csname\@lst @g#2@wp\endcsname{#8}% | |
597 \else | |
598 \expandafter\noexpand\csname\@lst @#3#8\endcsname | |
599 \fi}% | |
600 \ifx\@empty#3\@empty\else | |
601 \edef\lst@temp{\noexpand\lst@AddToHook{Init}{% | |
602 \noexpand\lst@ProvideStyle\expandafter\noexpand | |
603 \csname\@lst @#3#8\endcsname\noexpand#4}}% | |
604 \lst@temp | |
605 \fi | |
606 \expandafter\lst@ProvideFamily@@ | |
607 \csname\@lst @#2#8@list\expandafter\endcsname | |
608 \csname\@lst @#2#8\expandafter\endcsname | |
609 \csname\@lst @#2#8@also\expandafter\endcsname | |
610 \csname\@lst @g#2#8@list\expandafter\endcsname | |
611 \csname\@lst @g#2#8\expandafter\endcsname | |
612 \csname\@lst @g#2#8@sty\expandafter\endcsname | |
613 {#1}#5#6#7} | |
614 \gdef\lst@ProvideFamily@@#1#2#3#4#5#6#7#8{% | |
615 \gdef#1{#2#5}\global\let#2\@empty \global\let#3\@empty % init | |
616 \gdef#4{#2#5}\global\let#5\@empty % init | |
617 \if #8l\relax | |
618 \lst@AddToHook{SetLanguage}{\def#1{#2#5}\let#2\@empty}% | |
619 \fi | |
620 \lst@InstallTest{#7}#1#2#4#5#6} | |
621 \gdef\lst@InstallKeywords#1#2#3#4#5{% | |
622 \lst@Key{#2}\relax | |
623 {\lst@UseFamily{#2}[\@ne]##1\relax\lst@MakeKeywords}% | |
624 \lst@Key{more#2}\relax | |
625 {\lst@UseFamily{#2}[\@ne]##1\relax\lst@MakeMoreKeywords}% | |
626 \lst@Key{delete#2}\relax | |
627 {\lst@UseFamily{#2}[\@ne]##1\relax\lst@DeleteKeywords}% | |
628 \ifx\@empty#3\@empty\else | |
629 \lst@Key{#3}{#4}{\@namedef{lst@#3}{##1}}% | |
630 \fi | |
631 \expandafter\lst@InstallFamily@ | |
632 \csname\@lst @#2@data\expandafter\endcsname | |
633 \csname\@lst @#5\endcsname {#1}{#2}{#3}} | |
634 \gdef\lst@ProvideStyle#1#2{% | |
635 \ifx#1\@undefined \let#1#2% | |
636 \else\ifx#1\relax \let#1#2\fi\fi} | |
637 \gdef\lst@BuildClassList#1#2,{% | |
638 \ifx\relax#2\@empty\else | |
639 \ifx\@empty#2\@empty\else | |
640 \lst@lExtend#1{\csname\@lst @#2\expandafter\endcsname | |
641 \csname\@lst @g#2\endcsname}% | |
642 \fi | |
643 \expandafter\lst@BuildClassList\expandafter#1 | |
644 \fi} | |
645 \gdef\lst@DeleteClassesIn#1#2{% | |
646 \expandafter\lst@DCI@\expandafter#1#2\relax\relax} | |
647 \gdef\lst@DCI@#1#2#3{% | |
648 \ifx#2\relax | |
649 \expandafter\@gobbletwo | |
650 \else | |
651 \def\lst@temp##1#2#3##2{% | |
652 \lst@lAddTo#1{##1}% | |
653 \ifx ##2\relax\else | |
654 \expandafter\lst@temp | |
655 \fi ##2}% | |
656 \let\@tempa#1\let#1\@empty | |
657 \expandafter\lst@temp\@tempa#2#3\relax | |
658 \fi | |
659 \lst@DCI@#1} | |
660 \gdef\lst@MakeKeywords[#1]#2#3#4#5#6{% | |
661 \def#3{#4#6}\let#4\@empty \let#5\@empty | |
662 \lst@MakeMoreKeywords[#1]{#2}#3#4#5#6} | |
663 \gdef\lst@MakeMoreKeywords[#1]#2#3#4#5#6{% | |
664 \lst@BuildClassList#3#1,\relax,% | |
665 \lst@DefOther\lst@temp{,#2}\lst@lExtend#4\lst@temp} | |
666 \gdef\lst@DeleteKeywords[#1]#2#3#4#5#6{% | |
667 \lst@MakeKeywords[#1]{#2}\@tempa\@tempb#5#6% | |
668 \lst@DeleteClassesIn#3\@tempa | |
669 \lst@DeleteKeysIn#4\@tempb} | |
670 \lst@InstallFamily k{keywords}{keywordstyle}\bfseries{keywordstyle}{}ld | |
671 \gdef\lst@DefKeywordstyle#1#2\@nil@{% | |
672 \@namedef{lst@keywordstyle\ifnum\@tempcnta=\@ne\else\the\@tempcnta | |
673 \fi}{#1#2}}% | |
674 \lst@Key{keywordstyle}{\bfseries}{\lstKV@OptArg[\@ne]{#1}% | |
675 {\@tempcnta\lst@classoffset \advance\@tempcnta##1\relax | |
676 \@ifstar{\lst@DefKeywordstyle{\uppercase\expandafter{% | |
677 \expandafter\lst@token | |
678 \expandafter{\the\lst@token}}}}% | |
679 {\lst@DefKeywordstyle{}}##2\@nil@}} | |
680 \lst@Key{ndkeywords}\relax | |
681 {\lst@UseFamily{keywords}[\tw@]#1\relax\lst@MakeKeywords}% | |
682 \lst@Key{morendkeywords}\relax | |
683 {\lst@UseFamily{keywords}[\tw@]#1\relax\lst@MakeMoreKeywords}% | |
684 \lst@Key{deletendkeywords}\relax | |
685 {\lst@UseFamily{keywords}[\tw@]#1\relax\lst@DeleteKeywords}% | |
686 \lst@Key{ndkeywordstyle}\relax{\@namedef{lst@keywordstyle2}{#1}}% | |
687 \lst@Key{keywordsprefix}\relax{\lst@DefActive\lst@keywordsprefix{#1}} | |
688 \global\let\lst@keywordsprefix\@empty | |
689 \lst@AddToHook{SelectCharTable} | |
690 {\ifx\lst@keywordsprefix\@empty\else | |
691 \expandafter\lst@CArg\lst@keywordsprefix\relax | |
692 \lst@CDef{}% | |
693 {\lst@ifletter\else | |
694 \global\let\lst@prefixkeyword\@empty | |
695 \fi}% | |
696 {}% | |
697 \fi} | |
698 \lst@AddToHook{Init}{\global\let\lst@prefixkeyword\relax} | |
699 \lst@AddToHook{Output} | |
700 {\ifx\lst@prefixkeyword\@empty | |
701 \let\lst@thestyle\lst@gkeywords@sty | |
702 \global\let\lst@prefixkeyword\relax | |
703 \fi}% | |
704 \lst@Key{otherkeywords}{}{% | |
705 \let\lst@otherkeywords\@empty | |
706 \lst@for{#1}\do{% | |
707 \lst@MakeActive{##1}% | |
708 \lst@lExtend\lst@otherkeywords{% | |
709 \expandafter\lst@CArg\lst@temp\relax\lst@CDef | |
710 {}\lst@PrintOtherKeyword\@empty}}} | |
711 \lst@AddToHook{SelectCharTable}{\lst@otherkeywords} | |
712 \gdef\lst@PrintOtherKeyword#1\@empty{% | |
713 \lst@XPrintToken | |
714 \begingroup | |
715 \lst@modetrue \lsthk@TextStyle | |
716 \let\lst@ProcessDigit\lst@ProcessLetter | |
717 \let\lst@ProcessOther\lst@ProcessLetter | |
718 \lst@lettertrue | |
719 #1% | |
720 \lst@SaveToken | |
721 \endgroup | |
722 \lst@RestoreToken | |
723 \global\let\lst@savedcurrstyle\lst@currstyle | |
724 \let\lst@currstyle\lst@gkeywords@sty | |
725 \lst@Output | |
726 \let\lst@currstyle\lst@savedcurrstyle} | |
727 \lst@EndAspect | |
728 \lst@BeginAspect[keywords]{emph} | |
729 \lst@InstallFamily e{emph}{emphstyle}{}{emphstyle}{}od | |
730 \lst@EndAspect | |
731 \lst@BeginAspect[keywords]{tex} | |
732 \lst@InstallFamily {cs}{texcs}{texcsstyle}\relax{keywordstyle} | |
733 {\ifx\lst@lastother\lstum@backslash | |
734 \expandafter\let\expandafter\lst@thestyle | |
735 \csname lst@texcsstyle#1\endcsname | |
736 \fi} | |
737 ld | |
738 \lst@Key{texcsstyle}\relax | |
739 {\@ifstar{\lst@true\lst@DefTexcsstyle}% | |
740 {\lst@false\lst@DefTexcsstyle}#1\@nil@} | |
741 \gdef\lst@DefTexcsstyle#1\@nil@{% | |
742 \let\lst@iftexcsincludebs\lst@if | |
743 \lstKV@OptArg[\@ne]{#1}% | |
744 {\@tempcnta\lst@classoffset \advance\@tempcnta##1\relax | |
745 \@namedef{lst@texcsstyle\ifnum\@tempcnta=\@ne\else | |
746 \the\@tempcnta \fi}{##2}}}% | |
747 \global\let\lst@iftexcsincludebs\iffalse | |
748 \let\lst@iftexcsincludebs\iffalse | |
749 \lst@AddToHook{SelectCharTable} | |
750 {\lst@iftexcsincludebs \ifx\@empty\lst@texcs\else | |
751 \lst@DefSaveDef{`\\}\lsts@texcsbs | |
752 {\ifx\lst@lastother\lstum@backslash | |
753 \lsts@texcsbs\lst@XPrintToken | |
754 \else | |
755 \lst@Merge\lsts@texcsbs | |
756 \fi}% | |
757 \fi \fi} | |
758 \lst@EndAspect | |
759 \lst@BeginAspect[keywords]{directives} | |
760 \lst@NewMode\lst@CDmode | |
761 \lst@AddToHook{EOL}{\ifnum\lst@mode=\lst@CDmode \lst@LeaveMode \fi} | |
762 \lst@InstallKeywords{d}{directives}{directivestyle}\relax{keywordstyle} | |
763 {\ifnum\lst@mode=\lst@CDmode | |
764 \let\lst@thestyle\lst@directivestyle | |
765 \fi} | |
766 ld | |
767 \global\let\lst@directives\@empty % init | |
768 \lst@AddTo\lst@delimtypes{,directive} | |
769 \gdef\lst@Delim@directive#1\@empty#2#3#4{% | |
770 \lst@CArg #1\relax\lst@DefDelimB | |
771 {\lst@CalcColumn}% | |
772 {}% | |
773 {\ifnum\@tempcnta=\z@ | |
774 \def\lst@bnext{#2\lst@CDmode{#4\lst@Lmodetrue}% | |
775 \let\lst@currstyle\lst@directivestyle}% | |
776 \fi | |
777 \@gobblethree}% | |
778 #2\lst@CDmode{#4\lst@Lmodetrue}} | |
779 \lst@AddTo\lst@stringtypes{,directive} | |
780 \gdef\lst@StringDM@directive#1#2#3\@empty{% | |
781 \lst@CArg #2\relax\lst@CDef | |
782 {}% | |
783 {\let\lst@bnext\lst@CArgEmpty | |
784 \ifnum\lst@mode=\lst@CDmode | |
785 \def\lst@bnext{\lst@BeginString{#1}}% | |
786 \fi | |
787 \lst@bnext}% | |
788 \@empty | |
789 \lst@CArg #3\relax\lst@CDef | |
790 {}% | |
791 {\let\lst@enext\lst@CArgEmpty | |
792 \ifnum #1=\lst@mode | |
793 \let\lst@bnext\lst@EndString | |
794 \fi | |
795 \lst@bnext}% | |
796 \@empty} | |
797 \lst@EndAspect | |
798 \lst@BeginAspect[keywords,comments]{keywordcomments} | |
799 \lst@NewMode\lst@KCmode \lst@NewMode\lst@KCSmode | |
800 \gdef\lst@BeginKC{\aftergroup\aftergroup\aftergroup\lst@BeginKC@}% | |
801 \gdef\lst@BeginKC@{% | |
802 \lst@ResetToken | |
803 \lst@BeginComment\lst@KCmode{{\lst@commentstyle}\lst@modetrue}% | |
804 \@empty}% | |
805 \gdef\lst@BeginKCS{\aftergroup\aftergroup\aftergroup\lst@BeginKCS@}% | |
806 \gdef\lst@BeginKCS@{% | |
807 \lst@ResetToken | |
808 \lst@BeginComment\lst@KCSmode{{\lst@commentstyle}\lst@modetrue}% | |
809 \@empty}% | |
810 \lst@AddToHook{PostOutput}{\lst@KCpost \global\let\lst@KCpost\@empty} | |
811 \global\let\lst@KCpost\@empty % init | |
812 \gdef\lst@EndKC{\lst@SaveToken \lst@LeaveMode \lst@RestoreToken | |
813 \let\lst@thestyle\lst@identifierstyle \lsthk@Output} | |
814 \lst@InstallKeywords{kc}{keywordcomment}{}\relax{} | |
815 {\ifnum\lst@mode=\lst@KCmode | |
816 \edef\lst@temp{\the\lst@token}% | |
817 \ifx\lst@temp\lst@KCmatch | |
818 \lst@EndKC | |
819 \fi | |
820 \else | |
821 \lst@ifmode\else | |
822 \xdef\lst@KCmatch{\the\lst@token}% | |
823 \global\let\lst@KCpost\lst@BeginKC | |
824 \fi | |
825 \fi} | |
826 lo | |
827 \lst@Key{keywordcommentsemicolon}{}{\lstKV@ThreeArg{#1}% | |
828 {\def\lst@KCAkeywordsB{##1}% | |
829 \def\lst@KCAkeywordsE{##2}% | |
830 \def\lst@KCBkeywordsB{##3}% | |
831 \def\lst@KCkeywords{##1##2##3}}} | |
832 \lst@AddToHook{SetLanguage}{% | |
833 \let\lst@KCAkeywordsB\@empty \let\lst@KCAkeywordsE\@empty | |
834 \let\lst@KCBkeywordsB\@empty \let\lst@KCkeywords\@empty} | |
835 \lst@AddToHook{SelectCharTable} | |
836 {\ifx\lst@KCkeywords\@empty\else | |
837 \lst@DefSaveDef{`\;}\lsts@EKC | |
838 {\lst@XPrintToken | |
839 \ifnum\lst@mode=\lst@KCmode \lst@EndComment\@empty \else | |
840 \ifnum\lst@mode=\lst@KCSmode \lst@EndComment\@empty | |
841 \fi \fi | |
842 \lsts@EKC}% | |
843 \fi} | |
844 \gdef\lst@KCAWorkB{% | |
845 \lst@ifmode\else \global\let\lst@KCpost\lst@BeginKC \fi} | |
846 \gdef\lst@KCBWorkB{% | |
847 \lst@ifmode\else \global\let\lst@KCpost\lst@BeginKCS \fi} | |
848 \gdef\lst@KCAWorkE{\ifnum\lst@mode=\lst@KCmode \lst@EndKC \fi} | |
849 \lst@ProvideFamily@@ | |
850 \lst@KCAkeywordsB@list\lst@KCAkeywordsB \lst@KC@also | |
851 \lst@gKCAkeywordsB@list\lst@gKCAkeywordsB \lst@KCAWorkB | |
852 {kcb}owo % prefix, other key, working procedure, Output hook | |
853 \lst@ProvideFamily@@ | |
854 \lst@KCAkeywordsE@list\lst@KCAkeywordsE \lst@KC@also | |
855 \lst@gKCAkeywordsE@list\lst@gKCAkeywordsE \lst@KCAWorkE | |
856 {kce}owo | |
857 \lst@ProvideFamily@@ | |
858 \lst@KCBkeywordsB@list\lst@KCBkeywordsB \lst@KC@also | |
859 \lst@gKCBkeywordsB@list\lst@gKCBkeywordsB \lst@KCBWorkB | |
860 {kcs}owo | |
861 \lst@EndAspect | |
862 \lst@BeginAspect[keywords]{index} | |
863 \lst@InstallFamily w{index}{indexstyle}\lstindexmacro{indexstyle} | |
864 {\csname\@lst @indexstyle#1\expandafter\endcsname | |
865 \expandafter{\the\lst@token}} | |
866 od | |
867 \lst@UserCommand\lstindexmacro#1{\index{{\ttfamily#1}}} | |
868 \lst@EndAspect | |
869 \lst@BeginAspect[keywords]{procnames} | |
870 \gdef\lst@procnametrue{\global\let\lst@ifprocname\iftrue} | |
871 \gdef\lst@procnamefalse{\global\let\lst@ifprocname\iffalse} | |
872 \lst@AddToHook{Init}{\lst@procnamefalse} | |
873 \lst@AddToHook{DetectKeywords} | |
874 {\lst@ifprocname | |
875 \let\lst@thestyle\lst@procnamestyle | |
876 \lst@ifindexproc \csname\@lst @gindex@sty\endcsname \fi | |
877 \lst@procnamefalse | |
878 \fi} | |
879 \lst@Key{procnamestyle}{}{\def\lst@procnamestyle{#1}} | |
880 \lst@Key{indexprocnames}{false}[t]{\lstKV@SetIf{#1}\lst@ifindexproc} | |
881 \lst@AddToHook{Init}{\lst@ifindexproc \lst@indexproc \fi} | |
882 \gdef\lst@indexproc{% | |
883 \@ifundefined{lst@indexstyle1}% | |
884 {\@namedef{lst@indexstyle1}##1{}}% | |
885 {}} | |
886 \lst@InstallKeywords w{procnamekeys}{}\relax{} | |
887 {\global\let\lst@PNpost\lst@procnametrue} | |
888 od | |
889 \lst@AddToHook{PostOutput}{\lst@PNpost\global\let\lst@PNpost\@empty} | |
890 \global\let\lst@PNpost\@empty % init | |
891 \lst@EndAspect | |
892 \lst@BeginAspect{style} | |
893 \@ifundefined{lststylefiles} | |
894 {\lst@UserCommand\lststylefiles{lststy0.sty}}{} | |
895 \lst@UserCommand\lstdefinestyle{\lst@DefStyle\iftrue} | |
896 \lst@UserCommand\lst@definestyle{\lst@DefStyle\iffalse} | |
897 \gdef\lst@DefStyle{\lst@DefDriver{style}{sty}\lstset} | |
898 \global\@namedef{lststy@$}{\lsthk@EmptyStyle} | |
899 \lst@AddToHook{EmptyStyle}{}% init | |
900 \lst@Key{style}\relax{% | |
901 \lst@LAS{style}{sty}{[]{#1}}\lst@NoAlias\lststylefiles | |
902 \lsthk@SetStyle | |
903 {}} | |
904 \lst@AddToHook{SetStyle}{}% init | |
905 \lst@EndAspect | |
906 \lst@BeginAspect{language} | |
907 \@ifundefined{lstdriverfiles} | |
908 {\lst@UserCommand\lstlanguagefiles{lstlang0.sty}}{} | |
909 \lst@UserCommand\lstdefinelanguage{\lst@DefLang\iftrue} | |
910 \lst@UserCommand\lst@definelanguage{\lst@DefLang\iffalse} | |
911 \gdef\lst@DefLang{\lst@DefDriver{language}{lang}\lstset} | |
912 \lstdefinelanguage{}{} | |
913 \lst@Key{language}\relax{\lstKV@OptArg[]{#1}% | |
914 {\lst@LAS{language}{lang}{[##1]{##2}}\lst@FindAlias\lstlanguagefiles | |
915 \lsthk@SetLanguage | |
916 {\lst@FindAlias[##1]{##2}% | |
917 \let\lst@language\lst@malias | |
918 \let\lst@dialect\lst@oalias}}} | |
919 \lst@Key{alsolanguage}\relax{\lstKV@OptArg[]{#1}% | |
920 {\lst@LAS{language}{lang}{[##1]{##2}}\lst@FindAlias\lstlanguagefiles | |
921 {}% | |
922 {\lst@FindAlias[##1]{##2}% | |
923 \let\lst@language\lst@malias | |
924 \let\lst@dialect\lst@oalias}}} | |
925 \lst@AddToHook{SetLanguage}{}% init | |
926 \lst@UserCommand\lstalias{\@ifnextchar[\lstalias@\lstalias@@} | |
927 \gdef\lstalias@[#1]#2{\lstalias@b #2$#1} | |
928 \gdef\lstalias@b#1[#2]#3{\lst@NormedNameDef{lsta@#1}{#3$#2}} | |
929 \gdef\lstalias@@#1#2{\lst@NormedNameDef{lsta@#1}{#2}} | |
930 \lst@Key{defaultdialect}\relax | |
931 {\lstKV@OptArg[]{#1}{\lst@NormedNameDef{lstdd@##2}{##1}}} | |
932 \gdef\lst@FindAlias[#1]#2{% | |
933 \lst@NormedDef\lst@oalias{#1}% | |
934 \lst@NormedDef\lst@malias{#2}% | |
935 \@ifundefined{lsta@\lst@malias}{}% | |
936 {\edef\lst@malias{\csname\@lst a@\lst@malias\endcsname}}% | |
937 \ifx\@empty\lst@oalias \@ifundefined{lstdd@\lst@malias}{}% | |
938 {\edef\lst@oalias{\csname\@lst dd@\lst@malias\endcsname}}% | |
939 \fi | |
940 \edef\lst@temp{\lst@malias $\lst@oalias}% | |
941 \@ifundefined{lsta@\lst@temp}{}% | |
942 {\edef\lst@temp{\csname\@lst a@\lst@temp\endcsname}}% | |
943 \expandafter\lst@FindAlias@\lst@temp $} | |
944 \gdef\lst@FindAlias@#1$#2${% | |
945 \def\lst@malias{#1}\def\lst@oalias{#2}% | |
946 \ifx\@empty\lst@oalias \@ifundefined{lstdd@\lst@malias}{}% | |
947 {\edef\lst@oalias{\csname\@lst dd@\lst@malias\endcsname}}% | |
948 \fi} | |
949 \gdef\lst@RequireLanguages#1{% | |
950 \lst@Require{language}{lang}{#1}\lst@FindAlias\lstlanguagefiles | |
951 \ifx\lst@loadaspects\@empty\else | |
952 \lst@RequireAspects\lst@loadaspects | |
953 \fi} | |
954 \global\let\lstloadlanguages\lst@RequireLanguages | |
955 \lst@EndAspect | |
956 \lst@BeginAspect{formats} | |
957 \@ifundefined{lstformatfiles} | |
958 {\lst@UserCommand\lstformatfiles{lstfmt0.sty}}{} | |
959 \lst@UserCommand\lstdefineformat{\lst@DefFormat\iftrue} | |
960 \lst@UserCommand\lst@defineformat{\lst@DefFormat\iffalse} | |
961 \gdef\lst@DefFormat{\lst@DefDriver{format}{fmt}\lst@UseFormat} | |
962 \lstdefineformat{}{} | |
963 \lst@Key{format}\relax{% | |
964 \lst@LAS{format}{fmt}{[]{#1}}\lst@NoAlias\lstformatfiles | |
965 \lsthk@SetFormat | |
966 {}} | |
967 \lst@AddToHook{SetFormat}{\let\lst@fmtformat\@empty}% init | |
968 \gdef\lst@fmtSplit#1#2{% | |
969 \def\lst@temp##1#2##2\relax##3{% | |
970 \ifnum##3=\z@ | |
971 \ifx\@empty##2\@empty | |
972 \lst@false | |
973 \let\lst@fmta#1% | |
974 \let\lst@fmtb\@empty | |
975 \else | |
976 \expandafter\lst@temp#1\relax\@ne | |
977 \fi | |
978 \else | |
979 \def\lst@fmta{##1}\def\lst@fmtb{##2}% | |
980 \fi}% | |
981 \lst@true | |
982 \expandafter\lst@temp#1#2\relax\z@} | |
983 \gdef\lst@IfNextCharWhitespace#1#2#3{% | |
984 \lst@IfSubstring#3\lst@whitespaces{#1}{#2}#3} | |
985 \begingroup | |
986 \catcode`\^^I=12\catcode`\^^J=12\catcode`\^^M=12\catcode`\^^L=12\relax% | |
987 \lst@DefActive\lst@whitespaces{\ ^^I^^J^^M}% add ^^L | |
988 \global\let\lst@whitespaces\lst@whitespaces% | |
989 \endgroup | |
990 \gdef\lst@fmtIfIdentifier#1{% | |
991 \ifx\relax#1\@empty | |
992 \expandafter\@secondoftwo | |
993 \else | |
994 \expandafter\lst@fmtIfIdentifier@\expandafter#1% | |
995 \fi} | |
996 \gdef\lst@fmtIfIdentifier@#1#2\relax{% | |
997 \let\lst@next\@secondoftwo | |
998 \ifnum`#1=`_\else | |
999 \ifnum`#1<64\else | |
1000 \ifnum`#1<91\let\lst@next\@firstoftwo\else | |
1001 \ifnum`#1<97\else | |
1002 \ifnum`#1<123\let\lst@next\@firstoftwo\else | |
1003 \fi \fi \fi \fi \fi | |
1004 \lst@next} | |
1005 \gdef\lst@fmtIfNextCharIn#1{% | |
1006 \ifx\@empty#1\@empty \expandafter\@secondoftwo \else | |
1007 \def\lst@next{\lst@fmtIfNextCharIn@{#1}}% | |
1008 \expandafter\lst@next\fi} | |
1009 \gdef\lst@fmtIfNextCharIn@#1#2#3#4{% | |
1010 \def\lst@temp##1#4##2##3\relax{% | |
1011 \ifx \@empty##2\expandafter\@secondoftwo | |
1012 \else \expandafter\@firstoftwo \fi}% | |
1013 \lst@temp#1#4\@empty\relax{#2}{#3}#4} | |
1014 \gdef\lst@fmtCDef#1{\lst@fmtCDef@#1} | |
1015 \gdef\lst@fmtCDef@#1#2#3#4#5#6#7{% | |
1016 \lst@CDefIt#1{#2}{#3}% | |
1017 {\lst@fmtIfNextCharIn{#5}{#4#2#3}{#6#4#2#3#7}}% | |
1018 #4% | |
1019 {}{}{}} | |
1020 \gdef\lst@fmtCDefX#1{\lst@fmtCDefX@#1} | |
1021 \gdef\lst@fmtCDefX@#1#2#3#4#5#6#7{% | |
1022 \let#4#1% | |
1023 \ifx\@empty#2\@empty | |
1024 \def#1{\lst@fmtIfNextCharIn{#5}{#4}{#6#7}}% | |
1025 \else \ifx\@empty#3\@empty | |
1026 \def#1##1{% | |
1027 \ifx##1#2% | |
1028 \def\lst@next{\lst@fmtIfNextCharIn{#5}{#4##1}% | |
1029 {#6#7}}% | |
1030 \else | |
1031 \def\lst@next{#4##1}% | |
1032 \fi | |
1033 \lst@next}% | |
1034 \else | |
1035 \def#1{% | |
1036 \lst@IfNextCharsArg{#2#3}% | |
1037 {\lst@fmtIfNextCharIn{#5}{\expandafter#4\lst@eaten}% | |
1038 {#6#7}}% | |
1039 {\expandafter#4\lst@eaten}}% | |
1040 \fi \fi} | |
1041 \gdef\lst@UseFormat#1{% | |
1042 \def\lst@fmtwhole{#1}% | |
1043 \lst@UseFormat@} | |
1044 \gdef\lst@UseFormat@{% | |
1045 \lst@fmtSplit\lst@fmtwhole,% | |
1046 \let\lst@fmtwhole\lst@fmtb | |
1047 \ifx\lst@fmta\@empty\else | |
1048 \lst@fmtSplit\lst@fmta=% | |
1049 \ifx\@empty\lst@fmta\else | |
1050 \expandafter\lstKV@XOptArg\expandafter[\expandafter]% | |
1051 \expandafter{\lst@fmtb}\lst@UseFormat@b | |
1052 \fi | |
1053 \fi | |
1054 \ifx\lst@fmtwhole\@empty\else | |
1055 \expandafter\lst@UseFormat@ | |
1056 \fi} | |
1057 \gdef\lst@UseFormat@b[#1]#2{% | |
1058 \def\lst@fmtc{{#1}}\lst@lExtend\lst@fmtc{\expandafter{\lst@fmta}}% | |
1059 \def\lst@fmtb{#2}% | |
1060 \lst@fmtSplit\lst@fmtb\string | |
1061 \ifx\@empty\lst@fmta | |
1062 \lst@lAddTo\lst@fmtc{{}}% | |
1063 \else | |
1064 \lst@lExtend\lst@fmtc{\expandafter | |
1065 {\expandafter\lst@fmtPre\expandafter{\lst@fmta}}}% | |
1066 \fi | |
1067 \ifx\@empty\lst@fmtb | |
1068 \lst@lAddTo\lst@fmtc{{}}% | |
1069 \else | |
1070 \lst@lExtend\lst@fmtc{\expandafter | |
1071 {\expandafter\lst@fmtPost\expandafter{\lst@fmtb}}}% | |
1072 \fi | |
1073 \expandafter\lst@UseFormat@c\lst@fmtc} | |
1074 \gdef\lst@UseFormat@c#1#2#3#4{% | |
1075 \lst@fmtIfIdentifier#2\relax | |
1076 {\lst@fmtIdentifier{#2}% | |
1077 \lst@if\else \PackageWarning{Listings}% | |
1078 {Cannot drop identifier in format definition}% | |
1079 \fi}% | |
1080 {\lst@if | |
1081 \lst@lAddTo\lst@fmtformat{\lst@CArgX#2\relax\lst@fmtCDef}% | |
1082 \else | |
1083 \lst@lAddTo\lst@fmtformat{\lst@CArgX#2\relax\lst@fmtCDefX}% | |
1084 \fi | |
1085 \lst@DefActive\lst@fmtc{#1}% | |
1086 \lst@lExtend\lst@fmtformat{\expandafter{\lst@fmtc}{#3}{#4}}}} | |
1087 \lst@AddToHook{SelectCharTable}{\lst@fmtformat} | |
1088 \global\let\lst@fmtformat\@empty | |
1089 \gdef\lst@fmtPre#1{% | |
1090 \lst@PrintToken | |
1091 \begingroup | |
1092 \let\newline\lst@fmtEnsureNewLine | |
1093 \let\space\lst@fmtEnsureSpace | |
1094 \let\indent\lst@fmtIndent | |
1095 \let\noindent\lst@fmtNoindent | |
1096 #1% | |
1097 \endgroup} | |
1098 \gdef\lst@fmtPost#1{% | |
1099 \global\let\lst@fmtPostOutput\@empty | |
1100 \begingroup | |
1101 \def\newline{\lst@AddTo\lst@fmtPostOutput\lst@fmtEnsureNewLine}% | |
1102 \def\space{\aftergroup\lst@fmtEnsurePostSpace}% | |
1103 \def\indent{\lst@AddTo\lst@fmtPostOutput\lst@fmtIndent}% | |
1104 \def\noindent{\lst@AddTo\lst@fmtPostOutput\lst@fmtNoindent}% | |
1105 \aftergroup\lst@PrintToken | |
1106 #1% | |
1107 \endgroup} | |
1108 \lst@AddToHook{Init}{\global\let\lst@fmtPostOutput\@empty} | |
1109 \lst@AddToHook{PostOutput} | |
1110 {\lst@fmtPostOutput \global\let\lst@fmtPostOutput\@empty} | |
1111 \gdef\lst@fmtEnsureSpace{% | |
1112 \lst@ifwhitespace\else \expandafter\lst@ProcessSpace \fi} | |
1113 \gdef\lst@fmtEnsurePostSpace{% | |
1114 \lst@IfNextCharWhitespace{}{\lst@ProcessSpace}} | |
1115 \lst@Key{fmtindent}{20pt}{\def\lst@fmtindent{#1}} | |
1116 \newdimen\lst@fmtcurrindent | |
1117 \lst@AddToHook{InitVars}{\global\lst@fmtcurrindent\z@} | |
1118 \gdef\lst@fmtIndent{\global\advance\lst@fmtcurrindent\lst@fmtindent} | |
1119 \gdef\lst@fmtNoindent{\global\advance\lst@fmtcurrindent-\lst@fmtindent} | |
1120 \gdef\lst@fmtEnsureNewLine{% | |
1121 \global\advance\lst@newlines\@ne | |
1122 \global\advance\lst@newlinesensured\@ne | |
1123 \lst@fmtignoretrue} | |
1124 \lst@AddToAtTop\lst@DoNewLines{% | |
1125 \ifnum\lst@newlines>\lst@newlinesensured | |
1126 \global\advance\lst@newlines-\lst@newlinesensured | |
1127 \fi | |
1128 \global\lst@newlinesensured\z@} | |
1129 \newcount\lst@newlinesensured % global | |
1130 \lst@AddToHook{Init}{\global\lst@newlinesensured\z@} | |
1131 \gdef\lst@fmtignoretrue{\let\lst@fmtifignore\iftrue} | |
1132 \gdef\lst@fmtignorefalse{\let\lst@fmtifignore\iffalse} | |
1133 \lst@AddToHook{InitVars}{\lst@fmtignorefalse} | |
1134 \lst@AddToHook{Output}{\lst@fmtignorefalse} | |
1135 \gdef\lst@fmtUseLostSpace{% | |
1136 \lst@ifnewline \kern\lst@fmtcurrindent \global\lst@lostspace\z@ | |
1137 \else | |
1138 \lst@OldOLS | |
1139 \fi} | |
1140 \lst@AddToHook{Init} | |
1141 {\lst@true | |
1142 \ifx\lst@fmtformat\@empty \ifx\lst@fmt\@empty \lst@false \fi\fi | |
1143 \lst@if | |
1144 \let\lst@OldOLS\lst@OutputLostSpace | |
1145 \let\lst@OutputLostSpace\lst@fmtUseLostSpace | |
1146 \let\lst@ProcessSpace\lst@fmtProcessSpace | |
1147 \fi} | |
1148 \gdef\lst@fmtProcessSpace{% | |
1149 \lst@ifletter | |
1150 \lst@Output | |
1151 \lst@fmtifignore\else | |
1152 \lst@AppendOther\lst@outputspace | |
1153 \fi | |
1154 \else \lst@ifkeepspaces | |
1155 \lst@AppendOther\lst@outputspace | |
1156 \else \ifnum\lst@newlines=\z@ | |
1157 \lst@AppendSpecialSpace | |
1158 \else \ifnum\lst@length=\z@ | |
1159 \global\advance\lst@lostspace\lst@width | |
1160 \global\advance\lst@pos\m@ne | |
1161 \else | |
1162 \lst@AppendSpecialSpace | |
1163 \fi | |
1164 \fi \fi \fi | |
1165 \lst@whitespacetrue} | |
1166 \lst@InstallTest{f} | |
1167 \lst@fmt@list\lst@fmt \lst@gfmt@list\lst@gfmt | |
1168 \lst@gfmt@wp | |
1169 wd | |
1170 \gdef\lst@fmt@list{\lst@fmt\lst@gfmt}\global\let\lst@fmt\@empty | |
1171 \gdef\lst@gfmt@list{\lst@fmt\lst@gfmt}\global\let\lst@gfmt\@empty | |
1172 \gdef\lst@gfmt@wp{% | |
1173 \begingroup \let\lst@UM\@empty | |
1174 \let\lst@PrintToken\@empty | |
1175 \csname\@lst @fmt$\the\lst@token\endcsname | |
1176 \endgroup} | |
1177 \gdef\lst@fmtIdentifier#1#2#3#4{% | |
1178 \lst@DefOther\lst@fmta{#2}\edef\lst@fmt{\lst@fmt,\lst@fmta}% | |
1179 \@namedef{\@lst @fmt$\lst@fmta}{#3#4}} | |
1180 \lst@EndAspect | |
1181 \lst@BeginAspect{labels} | |
1182 \lst@Key{numbers}{none}{% | |
1183 \let\lst@PlaceNumber\@empty | |
1184 \lstKV@SwitchCases{#1}% | |
1185 {none&\\% | |
1186 left&\def\lst@PlaceNumber{\llap{\normalfont | |
1187 \lst@numberstyle{\thelstnumber}\kern\lst@numbersep}}\\% | |
1188 right&\def\lst@PlaceNumber{\rlap{\normalfont | |
1189 \kern\linewidth \kern\lst@numbersep | |
1190 \lst@numberstyle{\thelstnumber}}}% | |
1191 }{\PackageError{Listings}{Numbers #1 unknown}\@ehc}} | |
1192 \lst@Key{numberstyle}{}{\def\lst@numberstyle{#1}} | |
1193 \lst@Key{numbersep}{10pt}{\def\lst@numbersep{#1}} | |
1194 \lst@Key{stepnumber}{1}{\def\lst@stepnumber{#1\relax}} | |
1195 \lst@AddToHook{EmptyStyle}{\let\lst@stepnumber\@ne} | |
1196 \lst@Key{numberblanklines}{true}[t] | |
1197 {\lstKV@SetIf{#1}\lst@ifnumberblanklines} | |
1198 \lst@Key{numberfirstline}{f}[t]{\lstKV@SetIf{#1}\lst@ifnumberfirstline} | |
1199 \gdef\lst@numberfirstlinefalse{\let\lst@ifnumberfirstline\iffalse} | |
1200 \lst@Key{firstnumber}{auto}{% | |
1201 \lstKV@SwitchCases{#1}% | |
1202 {auto&\let\lst@firstnumber\@undefined\\% | |
1203 last&\let\lst@firstnumber\c@lstnumber | |
1204 }{\def\lst@firstnumber{#1\relax}}} | |
1205 \lst@AddToHook{PreSet}{\let\lst@advancenumber\z@} | |
1206 \lst@AddToHook{PreInit} | |
1207 {\ifx\lst@firstnumber\@undefined | |
1208 \let\lst@firstnumber\lst@firstline | |
1209 \fi} | |
1210 \gdef\lst@SetFirstNumber{% | |
1211 \ifx\lst@firstnumber\@undefined | |
1212 \@tempcnta 0\csname\@lst no@\lst@intname\endcsname\relax | |
1213 \ifnum\@tempcnta=\z@ \@tempcnta\lst@firstline | |
1214 \else \lst@nololtrue \fi | |
1215 \advance\@tempcnta\lst@advancenumber | |
1216 \edef\lst@firstnumber{\the\@tempcnta\relax}% | |
1217 \fi} | |
1218 \gdef\lst@SaveFirstNumber{% | |
1219 \expandafter\xdef | |
1220 \csname\@lst no\ifx\lst@intname\@empty @ \else @\lst@intname\fi | |
1221 \endcsname{\the\c@lstnumber}} | |
1222 \newcounter{lstnumber}% \global | |
1223 \global\c@lstnumber\@ne % init | |
1224 \renewcommand*\thelstnumber{\@arabic\c@lstnumber} | |
1225 \lst@AddToHook{EveryPar} | |
1226 {\global\advance\c@lstnumber\lst@advancelstnum | |
1227 \global\advance\c@lstnumber\m@ne \refstepcounter{lstnumber}% | |
1228 \lst@SkipOrPrintLabel}% | |
1229 \global\let\lst@advancelstnum\@ne | |
1230 \lst@AddToHook{Init}{\def\@currentlabel{\thelstnumber}} | |
1231 \lst@AddToHook{InitVars} | |
1232 {\global\c@lstnumber\lst@firstnumber | |
1233 \global\advance\c@lstnumber\lst@advancenumber | |
1234 \global\advance\c@lstnumber-\lst@advancelstnum | |
1235 \ifx \lst@firstnumber\c@lstnumber | |
1236 \global\advance\c@lstnumber-\lst@advancelstnum | |
1237 \fi} | |
1238 \lst@AddToHook{ExitVars} | |
1239 {\global\advance\c@lstnumber\lst@advancelstnum} | |
1240 \AtBeginDocument{% | |
1241 \def\theHlstnumber{\ifx\lst@@caption\@empty \lst@neglisting | |
1242 \else \thelstlisting \fi | |
1243 .\thelstnumber}} | |
1244 \newcount\lst@skipnumbers % \global | |
1245 \lst@AddToHook{Init} | |
1246 {\ifnum \z@>\lst@stepnumber | |
1247 \let\lst@advancelstnum\m@ne | |
1248 \edef\lst@stepnumber{-\lst@stepnumber}% | |
1249 \fi | |
1250 \ifnum \z@<\lst@stepnumber | |
1251 \global\lst@skipnumbers\lst@firstnumber | |
1252 \global\divide\lst@skipnumbers\lst@stepnumber | |
1253 \global\multiply\lst@skipnumbers-\lst@stepnumber | |
1254 \global\advance\lst@skipnumbers\lst@firstnumber | |
1255 \ifnum\lst@skipnumbers>\z@ | |
1256 \global\advance\lst@skipnumbers -\lst@stepnumber | |
1257 \fi | |
1258 \else | |
1259 \let\lst@SkipOrPrintLabel\relax | |
1260 \fi} | |
1261 \gdef\lst@SkipOrPrintLabel{% | |
1262 \ifnum\lst@skipnumbers=\z@ | |
1263 \global\advance\lst@skipnumbers-\lst@stepnumber\relax | |
1264 \lst@PlaceNumber | |
1265 \lst@numberfirstlinefalse | |
1266 \else | |
1267 \lst@ifnumberfirstline | |
1268 \lst@PlaceNumber | |
1269 \lst@numberfirstlinefalse | |
1270 \fi | |
1271 \fi | |
1272 \global\advance\lst@skipnumbers\@ne}% | |
1273 \lst@AddToHook{OnEmptyLine}{% | |
1274 \lst@ifnumberblanklines\else \ifnum\lst@skipnumbers=\z@ | |
1275 \global\advance\lst@skipnumbers-\lst@stepnumber\relax | |
1276 \fi\fi} | |
1277 \lst@EndAspect | |
1278 \lst@BeginAspect{lineshape} | |
1279 \lst@Key{xleftmargin}{\z@}{\def\lst@xleftmargin{#1}} | |
1280 \lst@Key{xrightmargin}{\z@}{\def\lst@xrightmargin{#1}} | |
1281 \lst@Key{resetmargins}{false}[t]{\lstKV@SetIf{#1}\lst@ifresetmargins} | |
1282 \lst@AddToHook{BoxUnsafe}{\let\lst@xleftmargin\z@ | |
1283 \let\lst@xrightmargin\z@} | |
1284 \lst@AddToHook{TextStyle}{% | |
1285 \let\lst@xleftmargin\z@ \let\lst@xrightmargin\z@ | |
1286 \let\lst@ifresetmargins\iftrue} | |
1287 \lst@Key{linewidth}\linewidth{\def\lst@linewidth{#1}} | |
1288 \lst@AddToHook{PreInit}{\linewidth\lst@linewidth\relax} | |
1289 \gdef\lst@parshape{% | |
1290 \parshape\@ne \@totalleftmargin \linewidth} | |
1291 \lst@AddToHook{Init} | |
1292 {\lst@ifresetmargins | |
1293 \advance\linewidth\@totalleftmargin | |
1294 \advance\linewidth\rightmargin | |
1295 \@totalleftmargin\z@ | |
1296 \fi | |
1297 \advance\linewidth-\lst@xleftmargin | |
1298 \advance\linewidth-\lst@xrightmargin | |
1299 \advance\@totalleftmargin\lst@xleftmargin\relax} | |
1300 \lst@Key{lineskip}{\z@}{\def\lst@lineskip{#1\relax}} | |
1301 \lst@AddToHook{Init} | |
1302 {\parskip\z@ | |
1303 \ifdim\z@=\lst@lineskip\else | |
1304 \@tempdima\baselineskip | |
1305 \advance\@tempdima\lst@lineskip | |
1306 \multiply\@tempdima\@cclvi | |
1307 \divide\@tempdima\baselineskip\relax | |
1308 \multiply\@tempdima\@cclvi | |
1309 \edef\baselinestretch{\strip@pt\@tempdima}% | |
1310 \selectfont | |
1311 \fi} | |
1312 \lst@Key{breaklines}{false}[t]{\lstKV@SetIf{#1}\lst@ifbreaklines} | |
1313 \lst@Key{breakindent}{20pt}{\def\lst@breakindent{#1}} | |
1314 \lst@Key{breakautoindent}{t}[t]{\lstKV@SetIf{#1}\lst@ifbreakautoindent} | |
1315 \lst@Key{breakatwhitespace}{false}[t]% | |
1316 {\lstKV@SetIf{#1}\lst@ifbreakatwhitespace} | |
1317 \lst@Key{prebreak}{}{\def\lst@prebreak{#1}} | |
1318 \lst@Key{postbreak}{}{\def\lst@postbreak{#1}} | |
1319 \lst@AddToHook{Init} | |
1320 {\lst@ifbreaklines | |
1321 \hbadness\@M \pretolerance\@M | |
1322 \@rightskip\@flushglue \rightskip\@rightskip % \raggedright | |
1323 \leftskip\z@skip \parindent\z@ | |
1324 \def\lst@parshape{\parshape\tw@ \@totalleftmargin\linewidth | |
1325 \lst@breakshape}% | |
1326 \else | |
1327 \let\lst@discretionary\@empty | |
1328 \fi} | |
1329 \lst@AddToHook{OnNewLine} | |
1330 {\lst@ifbreaklines \lst@breakNewLine \fi} | |
1331 \gdef\lst@discretionary{% | |
1332 \lst@ifbreakatwhitespace | |
1333 \lst@ifwhitespace \lst@@discretionary \fi | |
1334 \else | |
1335 \lst@@discretionary | |
1336 \fi}% | |
1337 \gdef\lst@@discretionary{% | |
1338 \discretionary{\let\space\lst@spacekern\lst@prebreak}% | |
1339 {\llap{\lsthk@EveryLine | |
1340 \kern\lst@breakcurrindent \kern-\@totalleftmargin}% | |
1341 \let\space\lst@spacekern\lst@postbreak}{}} | |
1342 \lst@AddToHook{PostOutput}{\lst@discretionary} | |
1343 \gdef\lst@spacekern{\kern\lst@width} | |
1344 \gdef\lst@breakNewLine{% | |
1345 \@tempdima\lst@breakindent\relax | |
1346 \lst@ifbreakautoindent \advance\@tempdima\lst@lostspace \fi | |
1347 \@tempdimc-\@tempdima \advance\@tempdimc\linewidth | |
1348 \advance\@tempdima\@totalleftmargin | |
1349 \xdef\lst@breakshape{\noexpand\lst@breakcurrindent \the\@tempdimc}% | |
1350 \xdef\lst@breakcurrindent{\the\@tempdima}} | |
1351 \global\let\lst@breakcurrindent\z@ % init | |
1352 \gdef\lst@breakshape{\@totalleftmargin \linewidth} | |
1353 \gdef\lst@breakProcessOther#1{\lst@ProcessOther#1\lst@OutputOther} | |
1354 \lst@AddToHook{SelectCharTable} | |
1355 {\lst@ifbreaklines \lst@Def{`)}{\lst@breakProcessOther)}\fi} | |
1356 \lst@EndAspect | |
1357 \lst@BeginAspect[lineshape]{frames} | |
1358 \lst@Key{framexleftmargin}{\z@}{\def\lst@framexleftmargin{#1}} | |
1359 \lst@Key{framexrightmargin}{\z@}{\def\lst@framexrightmargin{#1}} | |
1360 \lst@Key{framextopmargin}{\z@}{\def\lst@framextopmargin{#1}} | |
1361 \lst@Key{framexbottommargin}{\z@}{\def\lst@framexbottommargin{#1}} | |
1362 \lst@Key{backgroundcolor}{}{\def\lst@bkgcolor{#1}} | |
1363 \lst@Key{fillcolor}{}{\def\lst@fillcolor{#1}} | |
1364 \lst@Key{rulecolor}{}{\def\lst@rulecolor{#1}} | |
1365 \lst@Key{rulesepcolor}{}{\def\lst@rulesepcolor{#1}} | |
1366 \lst@AddToHook{Init}{% | |
1367 \ifx\lst@fillcolor\@empty | |
1368 \let\lst@fillcolor\lst@bkgcolor | |
1369 \fi | |
1370 \ifx\lst@rulesepcolor\@empty | |
1371 \let\lst@rulesepcolor\lst@fillcolor | |
1372 \fi} | |
1373 \lst@Key{rulesep}{2pt}{\def\lst@rulesep{#1}} | |
1374 \lst@Key{framerule}{.4pt}{\def\lst@framerulewidth{#1}} | |
1375 \lst@Key{framesep}{3pt}{\def\lst@frametextsep{#1}} | |
1376 \lst@Key{frameshape}{}{% | |
1377 \let\lst@xrulecolor\@empty | |
1378 \lstKV@FourArg{#1}% | |
1379 {\uppercase{\def\lst@frametshape{##1}}% | |
1380 \uppercase{\def\lst@framelshape{##2}}% | |
1381 \uppercase{\def\lst@framershape{##3}}% | |
1382 \uppercase{\def\lst@framebshape{##4}}% | |
1383 \let\lst@ifframeround\iffalse | |
1384 \lst@IfSubstring R\lst@frametshape{\let\lst@ifframeround\iftrue}{}% | |
1385 \lst@IfSubstring R\lst@framebshape{\let\lst@ifframeround\iftrue}{}% | |
1386 \def\lst@frame{##1##2##3##4}}} | |
1387 \lst@Key{frameround}\relax | |
1388 {\uppercase{\def\lst@frameround{#1}}% | |
1389 \expandafter\lstframe@\lst@frameround ffff\relax} | |
1390 \global\let\lst@frameround\@empty | |
1391 \lst@Key{frame}\relax{% | |
1392 \let\lst@xrulecolor\@empty | |
1393 \lstKV@SwitchCases{#1}% | |
1394 {none&\let\lst@frame\@empty\\% | |
1395 leftline&\def\lst@frame{l}\\% | |
1396 topline&\def\lst@frame{t}\\% | |
1397 bottomline&\def\lst@frame{b}\\% | |
1398 lines&\def\lst@frame{tb}\\% | |
1399 single&\def\lst@frame{trbl}\\% | |
1400 shadowbox&\def\lst@frame{tRBl}% | |
1401 \def\lst@xrulecolor{\lst@rulesepcolor}% | |
1402 \def\lst@rulesep{\lst@frametextsep}% | |
1403 }{\def\lst@frame{#1}}% | |
1404 \expandafter\lstframe@\lst@frameround ffff\relax} | |
1405 \gdef\lstframe@#1#2#3#4#5\relax{% | |
1406 \lst@IfSubstring T\lst@frame{\edef\lst@frame{t\lst@frame}}{}% | |
1407 \lst@IfSubstring R\lst@frame{\edef\lst@frame{r\lst@frame}}{}% | |
1408 \lst@IfSubstring B\lst@frame{\edef\lst@frame{b\lst@frame}}{}% | |
1409 \lst@IfSubstring L\lst@frame{\edef\lst@frame{l\lst@frame}}{}% | |
1410 \let\lst@frametshape\@empty \let\lst@framebshape\@empty | |
1411 \lst@frameCheck | |
1412 ltr\lst@framelshape\lst@frametshape\lst@framershape #4#1% | |
1413 \lst@frameCheck | |
1414 LTR\lst@framelshape\lst@frametshape\lst@framershape #4#1% | |
1415 \lst@frameCheck | |
1416 lbr\lst@framelshape\lst@framebshape\lst@framershape #3#2% | |
1417 \lst@frameCheck | |
1418 LBR\lst@framelshape\lst@framebshape\lst@framershape #3#2% | |
1419 \let\lst@ifframeround\iffalse | |
1420 \lst@IfSubstring R\lst@frametshape{\let\lst@ifframeround\iftrue}{}% | |
1421 \lst@IfSubstring R\lst@framebshape{\let\lst@ifframeround\iftrue}{}% | |
1422 \let\lst@framelshape\@empty \let\lst@framershape\@empty | |
1423 \lst@IfSubstring L\lst@frame | |
1424 {\def\lst@framelshape{YY}}% | |
1425 {\lst@IfSubstring l\lst@frame{\def\lst@framelshape{Y}}{}}% | |
1426 \lst@IfSubstring R\lst@frame | |
1427 {\def\lst@framershape{YY}}% | |
1428 {\lst@IfSubstring r\lst@frame{\def\lst@framershape{Y}}{}}} | |
1429 \gdef\lst@frameCheck#1#2#3#4#5#6#7#8{% | |
1430 \lst@IfSubstring #1\lst@frame | |
1431 {\if #7T\def#4{R}\else \def#4{Y}\fi}% | |
1432 {\def#4{N}}% | |
1433 \lst@IfSubstring #3\lst@frame | |
1434 {\if #8T\def#6{R}\else \def#6{Y}\fi}% | |
1435 {\def#6{N}}% | |
1436 \lst@IfSubstring #2\lst@frame{\edef#5{#5#4Y#6}}{}} | |
1437 \lst@AddToHook{TextStyle} | |
1438 {\let\lst@frame\@empty | |
1439 \let\lst@frametshape\@empty | |
1440 \let\lst@framershape\@empty | |
1441 \let\lst@framebshape\@empty | |
1442 \let\lst@framelshape\@empty} | |
1443 \gdef\lst@frameMakeBoxV#1#2#3{% | |
1444 \setbox#1\hbox{% | |
1445 \color@begingroup \lst@rulecolor | |
1446 \llap{\setbox\z@\hbox{\vrule\@width\z@\@height#2\@depth#3% | |
1447 \lst@frameL}% | |
1448 \rlap{\lst@frameBlock\lst@rulesepcolor{\wd\z@}% | |
1449 {\ht\z@}{\dp\z@}}% | |
1450 \box\z@ | |
1451 \ifx\lst@framelshape\@empty | |
1452 \kern\lst@frametextsep\relax | |
1453 \else | |
1454 \lst@frameBlock\lst@fillcolor\lst@frametextsep{#2}{#3}% | |
1455 \fi | |
1456 \kern\lst@framexleftmargin}% | |
1457 \rlap{\kern-\lst@framexleftmargin | |
1458 \@tempdima\linewidth | |
1459 \advance\@tempdima\lst@framexleftmargin | |
1460 \advance\@tempdima\lst@framexrightmargin | |
1461 \lst@frameBlock\lst@bkgcolor\@tempdima{#2}{#3}% | |
1462 \ifx\lst@framershape\@empty | |
1463 \kern\lst@frametextsep\relax | |
1464 \else | |
1465 \lst@frameBlock\lst@fillcolor\lst@frametextsep{#2}{#3}% | |
1466 \fi | |
1467 \setbox\z@\hbox{\vrule\@width\z@\@height#2\@depth#3% | |
1468 \lst@frameR}% | |
1469 \rlap{\lst@frameBlock\lst@rulesepcolor{\wd\z@}% | |
1470 {\ht\z@}{\dp\z@}}% | |
1471 \box\z@}% | |
1472 \color@endgroup}} | |
1473 \gdef\lst@frameBlock#1#2#3#4{% | |
1474 \color@begingroup | |
1475 #1% | |
1476 \setbox\z@\hbox{\vrule\@height#3\@depth#4% | |
1477 \ifx#1\@empty \@width\z@ \kern#2\relax | |
1478 \else \@width#2\relax \fi}% | |
1479 \box\z@ | |
1480 \color@endgroup} | |
1481 \gdef\lst@frameR{% | |
1482 \expandafter\lst@frameR@\lst@framershape\relax | |
1483 \kern-\lst@rulesep} | |
1484 \gdef\lst@frameR@#1{% | |
1485 \ifx\relax#1\@empty\else | |
1486 \if #1Y\lst@framevrule \else \kern\lst@framerulewidth \fi | |
1487 \kern\lst@rulesep | |
1488 \expandafter\lst@frameR@b | |
1489 \fi} | |
1490 \gdef\lst@frameR@b#1{% | |
1491 \ifx\relax#1\@empty | |
1492 \else | |
1493 \if #1Y\color@begingroup | |
1494 \lst@xrulecolor | |
1495 \lst@framevrule | |
1496 \color@endgroup | |
1497 \else | |
1498 \kern\lst@framerulewidth | |
1499 \fi | |
1500 \kern\lst@rulesep | |
1501 \expandafter\lst@frameR@ | |
1502 \fi} | |
1503 \gdef\lst@frameL{% | |
1504 \kern-\lst@rulesep | |
1505 \expandafter\lst@frameL@\lst@framelshape\relax} | |
1506 \gdef\lst@frameL@#1{% | |
1507 \ifx\relax#1\@empty\else | |
1508 \kern\lst@rulesep | |
1509 \if#1Y\lst@framevrule \else \kern\lst@framerulewidth \fi | |
1510 \expandafter\lst@frameL@ | |
1511 \fi} | |
1512 \gdef\lst@frameH#1#2{% | |
1513 \global\let\lst@framediml\z@ \global\let\lst@framedimr\z@ | |
1514 \setbox\z@\hbox{}\@tempcntb\z@ | |
1515 \expandafter\lst@frameH@\expandafter#1#2\relax\relax\relax | |
1516 \@tempdimb\lst@frametextsep\relax | |
1517 \advance\@tempdimb\lst@framerulewidth\relax | |
1518 \@tempdimc-\@tempdimb | |
1519 \advance\@tempdimc\ht\z@ | |
1520 \advance\@tempdimc\dp\z@ | |
1521 \setbox\z@=\hbox{% | |
1522 \lst@frameHBkg\lst@fillcolor\@tempdimb\@firstoftwo | |
1523 \if#1T\rlap{\raise\dp\@tempboxa\box\@tempboxa}% | |
1524 \else\rlap{\lower\ht\@tempboxa\box\@tempboxa}\fi | |
1525 \lst@frameHBkg\lst@rulesepcolor\@tempdimc\@secondoftwo | |
1526 \advance\@tempdimb\ht\@tempboxa | |
1527 \if#1T\rlap{\raise\lst@frametextsep\box\@tempboxa}% | |
1528 \else\rlap{\lower\@tempdimb\box\@tempboxa}\fi | |
1529 \rlap{\box\z@}% | |
1530 }} | |
1531 \gdef\lst@frameH@#1#2#3#4{% | |
1532 \ifx\relax#4\@empty\else | |
1533 \lst@frameh \@tempcntb#1#2#3#4% | |
1534 \advance\@tempcntb\@ne | |
1535 \expandafter\lst@frameH@\expandafter#1% | |
1536 \fi} | |
1537 \gdef\lst@frameHBkg#1#2#3{% | |
1538 \setbox\@tempboxa\hbox{% | |
1539 \kern-\lst@framexleftmargin | |
1540 #3{\kern-\lst@framediml\relax}{\@tempdima\z@}% | |
1541 \ifdim\lst@framediml>\@tempdimb | |
1542 #3{\@tempdima\lst@framediml \advance\@tempdima-\@tempdimb | |
1543 \lst@frameBlock\lst@rulesepcolor\@tempdima\@tempdimb\z@}% | |
1544 {\kern-\lst@framediml | |
1545 \advance\@tempdima\lst@framediml\relax}% | |
1546 \fi | |
1547 #3{\@tempdima\z@ | |
1548 \ifx\lst@framelshape\@empty\else | |
1549 \advance\@tempdima\@tempdimb | |
1550 \fi | |
1551 \ifx\lst@framershape\@empty\else | |
1552 \advance\@tempdima\@tempdimb | |
1553 \fi}% | |
1554 {\ifdim\lst@framedimr>\@tempdimb | |
1555 \advance\@tempdima\lst@framedimr\relax | |
1556 \fi}% | |
1557 \advance\@tempdima\linewidth | |
1558 \advance\@tempdima\lst@framexleftmargin | |
1559 \advance\@tempdima\lst@framexrightmargin | |
1560 \lst@frameBlock#1\@tempdima#2\z@ | |
1561 #3{\ifdim\lst@framedimr>\@tempdimb | |
1562 \@tempdima-\@tempdimb | |
1563 \advance\@tempdima\lst@framedimr\relax | |
1564 \lst@frameBlock\lst@rulesepcolor\@tempdima\@tempdimb\z@ | |
1565 \fi}{}% | |
1566 }} | |
1567 \gdef\lst@frameh#1#2#3#4#5{% | |
1568 \lst@frameCalcDimA#1% | |
1569 \lst@ifframeround \@getcirc\@tempdima \fi | |
1570 \setbox\z@\hbox{% | |
1571 \begingroup | |
1572 \setbox\z@\hbox{% | |
1573 \kern-\lst@framexleftmargin | |
1574 \color@begingroup | |
1575 \ifnum#1=\z@ \lst@rulecolor \else \lst@xrulecolor \fi | |
1576 \lst@frameCornerX\llap{#2L}#3#1% | |
1577 \ifdim\lst@framediml<\@tempdimb | |
1578 \xdef\lst@framediml{\the\@tempdimb}% | |
1579 \fi | |
1580 \begingroup | |
1581 \if#4Y\else \let\lst@framerulewidth\z@ \fi | |
1582 \@tempdima\lst@framexleftmargin | |
1583 \advance\@tempdima\lst@framexrightmargin | |
1584 \advance\@tempdima\linewidth | |
1585 \vrule\@width\@tempdima\@height\lst@framerulewidth \@depth\z@ | |
1586 \endgroup | |
1587 \lst@frameCornerX\rlap{#2R}#5#1% | |
1588 \ifdim\lst@framedimr<\@tempdimb | |
1589 \xdef\lst@framedimr{\the\@tempdimb}% | |
1590 \fi | |
1591 \color@endgroup}% | |
1592 \if#2T\rlap{\raise\dp\z@\box\z@}% | |
1593 \else\rlap{\lower\ht\z@\box\z@}\fi | |
1594 \endgroup | |
1595 \box\z@}} | |
1596 \gdef\lst@frameCornerX#1#2#3#4{% | |
1597 \setbox\@tempboxa\hbox{\csname\@lst @frame\if#3RR\fi #2\endcsname}% | |
1598 \@tempdimb\wd\@tempboxa | |
1599 \if #3R% | |
1600 #1{\box\@tempboxa}% | |
1601 \else | |
1602 \if #3Y\expandafter#1\else | |
1603 \@tempdimb\z@ \expandafter\vphantom \fi | |
1604 {\box\@tempboxa}% | |
1605 \fi} | |
1606 \gdef\lst@frameCalcDimA#1{% | |
1607 \@tempdima\lst@rulesep | |
1608 \advance\@tempdima\lst@framerulewidth | |
1609 \multiply\@tempdima#1\relax | |
1610 \advance\@tempdima\lst@frametextsep | |
1611 \advance\@tempdima\lst@framerulewidth | |
1612 \multiply\@tempdima\tw@} | |
1613 \lst@AddToHook{Init}{\lst@frameInit} | |
1614 \newbox\lst@framebox | |
1615 \gdef\lst@frameInit{% | |
1616 \ifx\lst@framelshape\@empty \let\lst@frameL\@empty \fi | |
1617 \ifx\lst@framershape\@empty \let\lst@frameR\@empty \fi | |
1618 \def\lst@framevrule{\vrule\@width\lst@framerulewidth\relax}% | |
1619 \lst@ifframeround | |
1620 \lst@frameCalcDimA\z@ \@getcirc\@tempdima | |
1621 \@tempdimb\@tempdima \divide\@tempdimb\tw@ | |
1622 \advance\@tempdimb -\@wholewidth | |
1623 \edef\lst@frametextsep{\the\@tempdimb}% | |
1624 \edef\lst@framerulewidth{\the\@wholewidth}% | |
1625 \lst@frameCalcDimA\@ne \@getcirc\@tempdima | |
1626 \@tempdimb\@tempdima \divide\@tempdimb\tw@ | |
1627 \advance\@tempdimb -\tw@\@wholewidth | |
1628 \advance\@tempdimb -\lst@frametextsep | |
1629 \edef\lst@rulesep{\the\@tempdimb}% | |
1630 \fi | |
1631 \lst@frameMakeBoxV\lst@framebox{\ht\strutbox}{\dp\strutbox}% | |
1632 \def\lst@framelr{\copy\lst@framebox}% | |
1633 \ifx\lst@frametshape\@empty\else | |
1634 \lst@frameH T\lst@frametshape | |
1635 \ifvoid\z@\else | |
1636 \par\lst@parshape | |
1637 \@tempdima-\baselineskip \advance\@tempdima\ht\z@ | |
1638 \ifdim\prevdepth<\@cclvi\p@\else | |
1639 \advance\@tempdima\prevdepth | |
1640 \fi | |
1641 \ifdim\@tempdima<\z@ | |
1642 \vskip\@tempdima\vskip\lineskip | |
1643 \fi | |
1644 \noindent\box\z@\par | |
1645 \lineskiplimit\maxdimen \lineskip\z@ | |
1646 \fi | |
1647 \lst@frameSpreadV\lst@framextopmargin | |
1648 \fi} | |
1649 \lst@AddToHook{EveryLine}{\lst@framelr} | |
1650 \global\let\lst@framelr\@empty | |
1651 \lst@AddToHook{DeInit} | |
1652 {\ifx\lst@framebshape\@empty\else \lst@frameExit \fi} | |
1653 \gdef\lst@frameExit{% | |
1654 \lst@frameSpreadV\lst@framexbottommargin | |
1655 \lst@frameH B\lst@framebshape | |
1656 \ifvoid\z@\else | |
1657 \everypar{}\par\lst@parshape\nointerlineskip\noindent\box\z@ | |
1658 \fi} | |
1659 \gdef\lst@frameSpreadV#1{% | |
1660 \ifdim\z@=#1\else | |
1661 \everypar{}\par\lst@parshape\nointerlineskip\noindent | |
1662 \lst@frameMakeBoxV\z@{#1}{\z@}% | |
1663 \box\z@ | |
1664 \fi} | |
1665 \gdef\lst@frameTR{% | |
1666 \vrule\@width.5\@tempdima\@height\lst@framerulewidth\@depth\z@ | |
1667 \kern-\lst@framerulewidth | |
1668 \raise\lst@framerulewidth\hbox{% | |
1669 \vrule\@width\lst@framerulewidth\@height\z@\@depth.5\@tempdima}} | |
1670 \gdef\lst@frameBR{% | |
1671 \vrule\@width.5\@tempdima\@height\lst@framerulewidth\@depth\z@ | |
1672 \kern-\lst@framerulewidth | |
1673 \vrule\@width\lst@framerulewidth\@height.5\@tempdima\@depth\z@} | |
1674 \gdef\lst@frameBL{% | |
1675 \vrule\@width\lst@framerulewidth\@height.5\@tempdima\@depth\z@ | |
1676 \kern-\lst@framerulewidth | |
1677 \vrule\@width.5\@tempdima\@height\lst@framerulewidth\@depth\z@} | |
1678 \gdef\lst@frameTL{% | |
1679 \raise\lst@framerulewidth\hbox{% | |
1680 \vrule\@width\lst@framerulewidth\@height\z@\@depth.5\@tempdima}% | |
1681 \kern-\lst@framerulewidth | |
1682 \vrule\@width.5\@tempdima\@height\lst@framerulewidth\@depth\z@} | |
1683 \gdef\lst@frameRoundT{% | |
1684 \setbox\@tempboxa\hbox{\@circlefnt\char\@tempcnta}% | |
1685 \ht\@tempboxa\lst@framerulewidth | |
1686 \box\@tempboxa} | |
1687 \gdef\lst@frameRoundB{% | |
1688 \setbox\@tempboxa\hbox{\@circlefnt\char\@tempcnta}% | |
1689 \dp\@tempboxa\z@ | |
1690 \box\@tempboxa} | |
1691 \gdef\lst@frameRTR{% | |
1692 \hb@xt@.5\@tempdima{\kern-\lst@framerulewidth | |
1693 \kern.5\@tempdima \lst@frameRoundT \hss}} | |
1694 \gdef\lst@frameRBR{% | |
1695 \hb@xt@.5\@tempdima{\kern-\lst@framerulewidth | |
1696 \advance\@tempcnta\@ne \kern.5\@tempdima \lst@frameRoundB \hss}} | |
1697 \gdef\lst@frameRBL{% | |
1698 \advance\@tempcnta\tw@ \lst@frameRoundB | |
1699 \kern-.5\@tempdima} | |
1700 \gdef\lst@frameRTL{% | |
1701 \advance\@tempcnta\thr@@\lst@frameRoundT | |
1702 \kern-.5\@tempdima} | |
1703 \lst@EndAspect | |
1704 \lst@BeginAspect[keywords]{make} | |
1705 \lst@NewMode\lst@makemode | |
1706 \lst@AddToHook{Output}{% | |
1707 \ifnum\lst@mode=\lst@makemode | |
1708 \ifx\lst@thestyle\lst@gkeywords@sty | |
1709 \lst@makekeytrue | |
1710 \fi | |
1711 \fi} | |
1712 \gdef\lst@makekeytrue{\let\lst@ifmakekey\iftrue} | |
1713 \gdef\lst@makekeyfalse{\let\lst@ifmakekey\iffalse} | |
1714 \global\lst@makekeyfalse % init | |
1715 \lst@Key{makemacrouse}f[t]{\lstKV@SetIf{#1}\lst@ifmakemacrouse} | |
1716 \gdef\lst@MakeSCT{% | |
1717 \lst@ifmakemacrouse | |
1718 \lst@ReplaceInput{$(}{% | |
1719 \lst@PrintToken | |
1720 \lst@EnterMode\lst@makemode{\lst@makekeyfalse}% | |
1721 \lst@Merge{\lst@ProcessOther\$\lst@ProcessOther(}}% | |
1722 \lst@ReplaceInput{)}{% | |
1723 \ifnum\lst@mode=\lst@makemode | |
1724 \lst@PrintToken | |
1725 \begingroup | |
1726 \lst@ProcessOther)% | |
1727 \lst@ifmakekey | |
1728 \let\lst@currstyle\lst@gkeywords@sty | |
1729 \fi | |
1730 \lst@OutputOther | |
1731 \endgroup | |
1732 \lst@LeaveMode | |
1733 \else | |
1734 \expandafter\lst@ProcessOther\expandafter)% | |
1735 \fi}% | |
1736 \else | |
1737 \lst@ReplaceInput{$(}{\lst@ProcessOther\$\lst@ProcessOther(}% | |
1738 \fi} | |
1739 \lst@EndAspect | |
1740 \lst@BeginAspect{0.21} | |
1741 \lst@Key{labelstyle}{}{\def\lst@numberstyle{#1}} | |
1742 \lst@Key{labelsep}{10pt}{\def\lst@numbersep{#1}} | |
1743 \lst@Key{labelstep}{0}{% | |
1744 \ifnum #1=\z@ \KV@lst@numbers{none}% | |
1745 \else \KV@lst@numbers{left}\fi | |
1746 \def\lst@stepnumber{#1\relax}} | |
1747 \lst@Key{firstlabel}\relax{\def\lst@firstnumber{#1\relax}} | |
1748 \lst@Key{advancelabel}\relax{\def\lst@advancenumber{#1\relax}} | |
1749 \let\c@lstlabel\c@lstnumber | |
1750 \lst@AddToHook{Init}{\def\thelstnumber{\thelstlabel}} | |
1751 \newcommand*\thelstlabel{\@arabic\c@lstlabel} | |
1752 \lst@Key{first}\relax{\def\lst@firstline{#1\relax}} | |
1753 \lst@Key{last}\relax{\def\lst@lastline{#1\relax}} | |
1754 \lst@Key{framerulewidth}{.4pt}{\def\lst@framerulewidth{#1}} | |
1755 \lst@Key{framerulesep}{2pt}{\def\lst@rulesep{#1}} | |
1756 \lst@Key{frametextsep}{3pt}{\def\lst@frametextsep{#1}} | |
1757 \lst@Key{framerulecolor}{}{\lstKV@OptArg[]{#1}% | |
1758 {\ifx\@empty##2\@empty | |
1759 \let\lst@rulecolor\@empty | |
1760 \else | |
1761 \ifx\@empty##1\@empty | |
1762 \def\lst@rulecolor{\color{##2}}% | |
1763 \else | |
1764 \def\lst@rulecolor{\color[##1]{##2}}% | |
1765 \fi | |
1766 \fi}} | |
1767 \lst@Key{backgroundcolor}{}{\lstKV@OptArg[]{#1}% | |
1768 {\ifx\@empty##2\@empty | |
1769 \let\lst@bkgcolor\@empty | |
1770 \else | |
1771 \ifx\@empty##1\@empty | |
1772 \def\lst@bkgcolor{\color{##2}}% | |
1773 \else | |
1774 \def\lst@bkgcolor{\color[##1]{##2}}% | |
1775 \fi | |
1776 \fi}} | |
1777 \lst@Key{framespread}{\z@}{\def\lst@framespread{#1}} | |
1778 \lst@AddToHook{PreInit} | |
1779 {\@tempdima\lst@framespread\relax \divide\@tempdima\tw@ | |
1780 \edef\lst@framextopmargin{\the\@tempdima}% | |
1781 \let\lst@framexrightmargin\lst@framextopmargin | |
1782 \let\lst@framexbottommargin\lst@framextopmargin | |
1783 \advance\@tempdima\lst@xleftmargin\relax | |
1784 \edef\lst@framexleftmargin{\the\@tempdima}} | |
1785 \newdimen\lst@innerspread \newdimen\lst@outerspread | |
1786 \lst@Key{spread}{\z@,\z@}{\lstKV@CSTwoArg{#1}% | |
1787 {\lst@innerspread##1\relax | |
1788 \ifx\@empty##2\@empty | |
1789 \divide\lst@innerspread\tw@\relax | |
1790 \lst@outerspread\lst@innerspread | |
1791 \else | |
1792 \lst@outerspread##2\relax | |
1793 \fi}} | |
1794 \lst@AddToHook{BoxUnsafe}{\lst@outerspread\z@ \lst@innerspread\z@} | |
1795 \lst@Key{wholeline}{false}[t]{\lstKV@SetIf{#1}\lst@ifresetmargins} | |
1796 \lst@Key{indent}{\z@}{\def\lst@xleftmargin{#1}} | |
1797 \lst@AddToHook{PreInit} | |
1798 {\lst@innerspread=-\lst@innerspread | |
1799 \lst@outerspread=-\lst@outerspread | |
1800 \ifodd\c@page \advance\lst@innerspread\lst@xleftmargin | |
1801 \else \advance\lst@outerspread\lst@xleftmargin \fi | |
1802 \ifodd\c@page | |
1803 \edef\lst@xleftmargin{\the\lst@innerspread}% | |
1804 \edef\lst@xrightmargin{\the\lst@outerspread}% | |
1805 \else | |
1806 \edef\lst@xleftmargin{\the\lst@outerspread}% | |
1807 \edef\lst@xrightmargin{\the\lst@innerspread}% | |
1808 \fi} | |
1809 \lst@Key{defaultclass}\relax{\def\lst@classoffset{#1}} | |
1810 \lst@Key{stringtest}\relax{}% dummy | |
1811 \lst@Key{outputpos}\relax{\lst@outputpos#1\relax\relax} | |
1812 \lst@Key{stringspaces}\relax[t]{\lstKV@SetIf{#1}\lst@ifshowstringspaces} | |
1813 \lst@Key{visisblespaces}\relax[t]{\lstKV@SetIf{#1}\lst@ifshowspaces} | |
1814 \lst@Key{visibletabs}\relax[t]{\lstKV@SetIf{#1}\lst@ifshowtabs} | |
1815 \lst@EndAspect | |
1816 \lst@BeginAspect{fancyvrb} | |
1817 \@ifundefined{FancyVerbFormatLine} | |
1818 {\typeout{^^J% | |
1819 ***^^J% | |
1820 *** `listings.sty' needs `fancyvrb.sty' right now.^^J% | |
1821 *** Please ensure its availability and try again.^^J% | |
1822 ***^^J}% | |
1823 \batchmode \@@end}{} | |
1824 \gdef\lstFV@fancyvrb{% | |
1825 \lst@iffancyvrb | |
1826 \ifx\FancyVerbFormatLine\lstFV@FancyVerbFormatLine\else | |
1827 \let\lstFV@FVFL\FancyVerbFormatLine | |
1828 \let\FancyVerbFormatLine\lstFV@FancyVerbFormatLine | |
1829 \fi | |
1830 \else | |
1831 \ifx\lstFV@FVFL\@undefined\else | |
1832 \let\FancyVerbFormatLine\lstFV@FVFL | |
1833 \let\lstFV@FVFL\@undefined | |
1834 \fi | |
1835 \fi} | |
1836 \gdef\lstFV@VerbatimBegin{% | |
1837 \ifx\FancyVerbFormatLine\lstFV@FancyVerbFormatLine | |
1838 \lsthk@TextStyle \lsthk@BoxUnsafe | |
1839 \lsthk@PreSet | |
1840 \lst@activecharsfalse | |
1841 \let\normalbaselines\relax | |
1842 \xdef\lstFV@RestoreData{\noexpand\linewidth\the\linewidth\relax}% | |
1843 \lst@Init\relax | |
1844 \lst@ifresetmargins \advance\linewidth-\@totalleftmargin \fi | |
1845 \lstFV@RestoreData | |
1846 \everypar{}\global\lst@newlines\z@ | |
1847 \lst@mode\lst@nomode \let\lst@entermodes\@empty | |
1848 \lst@InterruptModes | |
1849 %% D.G. modification begin - Nov. 25, 1998 | |
1850 \let\@noligs\relax | |
1851 %% D.G. modification end | |
1852 \fi} | |
1853 \gdef\lstFV@VerbatimEnd{% | |
1854 \ifx\FancyVerbFormatLine\lstFV@FancyVerbFormatLine | |
1855 \global\setbox\lstFV@gtempboxa\box\@tempboxa | |
1856 \global\let\@gtempa\FV@ProcessLine | |
1857 \lst@mode\lst@Pmode | |
1858 \lst@DeInit | |
1859 \let\FV@ProcessLine\@gtempa | |
1860 \setbox\@tempboxa\box\lstFV@gtempboxa | |
1861 \par | |
1862 \fi} | |
1863 \newbox\lstFV@gtempboxa | |
1864 \lst@AddTo\FV@VerbatimBegin\lstFV@VerbatimBegin | |
1865 \lst@AddToAtTop\FV@VerbatimEnd\lstFV@VerbatimEnd | |
1866 \lst@AddTo\FV@LVerbatimBegin\lstFV@VerbatimBegin | |
1867 \lst@AddToAtTop\FV@LVerbatimEnd\lstFV@VerbatimEnd | |
1868 \lst@AddTo\FV@BVerbatimBegin\lstFV@VerbatimBegin | |
1869 \lst@AddToAtTop\FV@BVerbatimEnd\lstFV@VerbatimEnd | |
1870 \gdef\lstFV@FancyVerbFormatLine#1{% | |
1871 \let\lst@arg\@empty \lst@FVConvert#1\@nil | |
1872 \global\lst@newlines\z@ | |
1873 \vtop{\noindent\lst@parshape | |
1874 \lst@ReenterModes | |
1875 \lst@arg \lst@PrintToken\lst@EOLUpdate\lsthk@InitVarsBOL | |
1876 \lst@InterruptModes}} | |
1877 \lst@Key{fvcmdparams}% | |
1878 {\overlay\@ne}% | |
1879 {\def\lst@FVcmdparams{,#1}} | |
1880 \lst@Key{morefvcmdparams}\relax{\lst@lAddTo\lst@FVcmdparams{,#1}} | |
1881 \gdef\lst@FVConvert{\@tempcnta\z@ \lst@FVConvertO@}% | |
1882 \gdef\lst@FVConvertO@{% | |
1883 \ifcase\@tempcnta | |
1884 \expandafter\futurelet\expandafter\@let@token | |
1885 \expandafter\lst@FVConvert@@ | |
1886 \else | |
1887 \expandafter\lst@FVConvertO@a | |
1888 \fi} | |
1889 \gdef\lst@FVConvertO@a#1{% | |
1890 \lst@lAddTo\lst@arg{{#1}}\advance\@tempcnta\m@ne | |
1891 \lst@FVConvertO@}% | |
1892 \gdef\lst@FVConvert@@{% | |
1893 \ifcat\noexpand\@let@token\bgroup \expandafter\lst@FVConvertArg | |
1894 \else \expandafter\lst@FVConvert@ \fi} | |
1895 \gdef\lst@FVConvertArg#1{% | |
1896 {\let\lst@arg\@empty | |
1897 \lst@FVConvert#1\@nil | |
1898 \global\let\@gtempa\lst@arg}% | |
1899 \lst@lExtend\lst@arg{\expandafter{\@gtempa\lst@PrintToken}}% | |
1900 \lst@FVConvert} | |
1901 \gdef\lst@FVConvert@#1{% | |
1902 \ifx \@nil#1\else | |
1903 \if\relax\noexpand#1% | |
1904 \lst@lAddTo\lst@arg{\lst@OutputLostSpace\lst@PrintToken#1}% | |
1905 \else | |
1906 \lccode`\~=`#1\lowercase{\lst@lAddTo\lst@arg~}% | |
1907 \fi | |
1908 \expandafter\lst@FVConvert | |
1909 \fi} | |
1910 \gdef\lst@FVConvert@#1{% | |
1911 \ifx \@nil#1\else | |
1912 \if\relax\noexpand#1% | |
1913 \lst@lAddTo\lst@arg{\lst@OutputLostSpace\lst@PrintToken#1}% | |
1914 \def\lst@temp##1,#1##2,##3##4\relax{% | |
1915 \ifx##3\@empty \else \@tempcnta##2\relax \fi}% | |
1916 \expandafter\lst@temp\lst@FVcmdparams,#1\z@,\@empty\relax | |
1917 \else | |
1918 \lccode`\~=`#1\lowercase{\lst@lAddTo\lst@arg~}% | |
1919 \fi | |
1920 \expandafter\lst@FVConvertO@ | |
1921 \fi} | |
1922 \lst@EndAspect | |
1923 \lst@BeginAspect[keywords,comments,strings,language]{lgrind} | |
1924 \gdef\lst@LGGetNames#1:#2\relax{% | |
1925 \lst@NormedDef\lstlang@{#1}\lst@ReplaceInArg\lstlang@{|,}% | |
1926 \def\lst@arg{:#2}} | |
1927 \gdef\lst@LGGetValue#1{% | |
1928 \lst@false | |
1929 \def\lst@temp##1:#1##2##3\relax{% | |
1930 \ifx\@empty##2\else \lst@LGGetValue@{#1}\fi} | |
1931 \expandafter\lst@temp\lst@arg:#1\@empty\relax} | |
1932 \gdef\lst@LGGetValue@#1{% | |
1933 \lst@true | |
1934 \def\lst@temp##1:#1##2:##3\relax{% | |
1935 \@ifnextchar=\lst@LGGetValue@@{\lst@LGGetValue@@=}##2\relax | |
1936 \def\lst@arg{##1:##3}}% | |
1937 \expandafter\lst@temp\lst@arg\relax} | |
1938 \gdef\lst@LGGetValue@@=#1\relax{\def\lst@LGvalue{#1}} | |
1939 \gdef\lst@LGGetComment#1#2{% | |
1940 \let#2\@empty | |
1941 \lst@LGGetValue{#1b}% | |
1942 \lst@if | |
1943 \let#2\lst@LGvalue | |
1944 \lst@LGGetValue{#1e}% | |
1945 \ifx\lst@LGvalue\lst@LGEOL | |
1946 \edef\lstlang@{\lstlang@,commentline={#2}}% | |
1947 \let#2\@empty | |
1948 \else | |
1949 \edef#2{{#2}{\lst@LGvalue}}% | |
1950 \fi | |
1951 \fi} | |
1952 \gdef\lst@LGGetString#1#2{% | |
1953 \lst@LGGetValue{#1b}% | |
1954 \lst@if | |
1955 \let#2\lst@LGvalue | |
1956 \lst@LGGetValue{#1e}% | |
1957 \ifx\lst@LGvalue\lst@LGEOL | |
1958 \edef\lstlang@{\lstlang@,morestringizer=[l]{#2}}% | |
1959 \else | |
1960 \ifx #2\lst@LGvalue | |
1961 \edef\lstlang@{\lstlang@,morestringizer=[d]{#2}}% | |
1962 \else | |
1963 \edef\lst@temp{\lst@LGe#2}% | |
1964 \ifx \lst@temp\lst@LGvalue | |
1965 \edef\lstlang@{\lstlang@,morestringizer=[b]{#2}}% | |
1966 \else | |
1967 \PackageWarning{Listings}% | |
1968 {String #2...\lst@LGvalue\space not supported}% | |
1969 \fi | |
1970 \fi | |
1971 \fi | |
1972 \fi} | |
1973 \gdef\lst@LGDefLang{% | |
1974 \lst@LGReplace | |
1975 \let\lstlang@\empty | |
1976 \lst@LGGetValue{kw}% | |
1977 \lst@if | |
1978 \lst@ReplaceInArg\lst@LGvalue{{ },}% | |
1979 \edef\lstlang@{\lstlang@,keywords={\lst@LGvalue}}% | |
1980 \fi | |
1981 \lst@LGGetValue{oc}% | |
1982 \lst@if | |
1983 \edef\lstlang@{\lstlang@,sensitive=f}% | |
1984 \fi | |
1985 \lst@LGGetValue{id}% | |
1986 \lst@if | |
1987 \edef\lstlang@{\lstlang@,alsoletter=\lst@LGvalue}% | |
1988 \fi | |
1989 \lst@LGGetComment a\lst@LGa | |
1990 \lst@LGGetComment c\lst@LGc | |
1991 \ifx\lst@LGa\@empty | |
1992 \ifx\lst@LGc\@empty\else | |
1993 \edef\lstlang@{\lstlang@,singlecomment=\lst@LGc}% | |
1994 \fi | |
1995 \else | |
1996 \ifx\lst@LGc\@empty | |
1997 \edef\lstlang@{\lstlang@,singlecomment=\lst@LGa}% | |
1998 \else | |
1999 \edef\lstlang@{\lstlang@,doublecomment=\lst@LGc\lst@LGa}% | |
2000 \fi | |
2001 \fi | |
2002 \lst@LGGetString s\lst@LGa | |
2003 \lst@LGGetString l\lst@LGa | |
2004 \lst@LGGetValue{tc}% | |
2005 \lst@if | |
2006 \edef\lstlang@{\lstlang@,lgrindef=\lst@LGvalue}% | |
2007 \fi | |
2008 \expandafter\xdef\csname\@lst LGlang@\lst@language@\endcsname | |
2009 {\noexpand\lstset{\lstlang@}}% | |
2010 \lst@ReplaceInArg\lst@arg{{: :}:}\let\lst@LGvalue\@empty | |
2011 \expandafter\lst@LGDroppedCaps\lst@arg\relax\relax | |
2012 \ifx\lst@LGvalue\@empty\else | |
2013 \PackageWarningNoLine{Listings}{Ignored capabilities for | |
2014 \space `\lst@language@' are\MessageBreak\lst@LGvalue}% | |
2015 \fi} | |
2016 \gdef\lst@LGDroppedCaps#1:#2#3{% | |
2017 \ifx#2\relax | |
2018 \lst@RemoveCommas\lst@LGvalue | |
2019 \else | |
2020 \edef\lst@LGvalue{\lst@LGvalue,#2#3}% | |
2021 \expandafter\lst@LGDroppedCaps | |
2022 \fi} | |
2023 \begingroup | |
2024 \catcode`\/=0 | |
2025 \lccode`\z=`\:\lccode`\y=`\^\lccode`\x=`\$\lccode`\v=`\| | |
2026 \catcode`\\=12\relax | |
2027 /lowercase{% | |
2028 /gdef/lst@LGReplace{/lst@ReplaceInArg/lst@arg | |
2029 {{\:}{z }{\^}{y}{\$}{x}{\|}{v}{ \ }{ }{:\ :}{:}{\ }{ }{\(}({\)})}} | |
2030 /gdef/lst@LGe{\e} | |
2031 } | |
2032 /endgroup | |
2033 \gdef\lst@LGRead#1\par{% | |
2034 \lst@LGGetNames#1:\relax | |
2035 \def\lst@temp{endoflanguagedefinitions}% | |
2036 \ifx\lstlang@\lst@temp | |
2037 \let\lst@next\endinput | |
2038 \else | |
2039 \expandafter\lst@IfOneOf\lst@language@\relax\lstlang@ | |
2040 {\lst@LGDefLang \let\lst@next\endinput}% | |
2041 {\let\lst@next\lst@LGRead}% | |
2042 \fi | |
2043 \lst@next} | |
2044 \lst@Key{lgrindef}\relax{% | |
2045 \lst@NormedDef\lst@language@{#1}% | |
2046 \begingroup | |
2047 \@ifundefined{lstLGlang@\lst@language@}% | |
2048 {\everypar{\lst@LGRead}% | |
2049 \catcode`\\=12\catcode`\{=12\catcode`\}=12\catcode`\%=12% | |
2050 \catcode`\#=14\catcode`\$=12\catcode`\^=12\catcode`\_=12\relax | |
2051 \input{\lstlgrindeffile}% | |
2052 }{}% | |
2053 \endgroup | |
2054 \@ifundefined{lstLGlang@\lst@language@}% | |
2055 {\PackageError{Listings}% | |
2056 {LGrind language \lst@language@\space undefined}% | |
2057 {The language is not loadable. \@ehc}}% | |
2058 {\lsthk@SetLanguage | |
2059 \csname\@lst LGlang@\lst@language@\endcsname}} | |
2060 \@ifundefined{lstlgrindeffile} | |
2061 {\lst@UserCommand\lstlgrindeffile{lgrindef.}}{} | |
2062 \lst@EndAspect | |
2063 \lst@BeginAspect[keywords]{hyper} | |
2064 \lst@Key{hyperanchor}\hyper@@anchor{\let\lst@hyperanchor#1} | |
2065 \lst@Key{hyperlink}\hyperlink{\let\lst@hyperlink#1} | |
2066 \lst@InstallKeywords{h}{hyperref}{}\relax{} | |
2067 {\begingroup | |
2068 \let\lst@UM\@empty \xdef\@gtempa{\the\lst@token}% | |
2069 \endgroup | |
2070 \lst@GetFreeMacro{lstHR@\@gtempa}% | |
2071 \global\expandafter\let\lst@freemacro\@empty | |
2072 \@tempcntb\@tempcnta \advance\@tempcntb\m@ne | |
2073 \edef\lst@alloverstyle##1{% | |
2074 \let\noexpand\lst@alloverstyle\noexpand\@empty | |
2075 \noexpand\smash{\raise\baselineskip\hbox | |
2076 {\noexpand\lst@hyperanchor{lst.\@gtempa\the\@tempcnta}% | |
2077 {\relax}}}% | |
2078 \ifnum\@tempcnta=\z@ ##1\else | |
2079 \noexpand\lst@hyperlink{lst.\@gtempa\the\@tempcntb}{##1}% | |
2080 \fi}% | |
2081 } | |
2082 od | |
2083 \lst@EndAspect | |
2084 \endinput | |
2085 %% | |
2086 %% End of file `lstmisc.sty'. |