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