lstmisc.sty 69 KB

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