source: doc/LaTeXmacros/listings/lstmisc.sty @ acb89ed

ADTaaron-thesisarm-ehast-experimentalcleanup-dtorsdeferred_resndemanglerenumforall-pointer-decayjacob/cs343-translationjenkins-sandboxnew-astnew-ast-unique-exprnew-envno_listpersistent-indexerpthread-emulationqualifiedEnumresolv-newwith_gc
Last change on this file since acb89ed was 9724df0, checked in by Peter A. Buhr <pabuhr@…>, 8 years ago

update latex macros, and user and refrat manuals

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