listings.sty 56 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546
  1. %%
  2. %% This is file `listings.sty',
  3. %% generated with the docstrip utility.
  4. %%
  5. %% The original source files were:
  6. %%
  7. %% listings.dtx (with options: `kernel')
  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. \NeedsTeXFormat{LaTeX2e}
  38. \ProvidesPackage{listings}[2000/08/23 v0.21 (Carsten Heinz)]
  39. \def\lst@version{0.21}
  40. \def\lst@InputCatcodes{%
  41. \makeatletter \catcode`\"12%
  42. \catcode`\^^@\active
  43. \catcode`\^^I9%
  44. \catcode`\^^L9%
  45. \catcode`\^^M9%
  46. \catcode`\%14%
  47. \catcode`\~\active}
  48. \def\lst@RestoreCatcodes#1{%
  49. \ifx\relax#1\else
  50. \noexpand\catcode`\noexpand#1\the\catcode`#1\relax
  51. \expandafter\lst@RestoreCatcodes
  52. \fi}
  53. \edef\lst@RestoreCatcodes{%
  54. \lst@RestoreCatcodes\"\^^I\^^M\~\^^@\relax}
  55. \lst@InputCatcodes
  56. \AtEndOfPackage{\lst@RestoreCatcodes}
  57. \def\@lst{lst}
  58. \def\lst@IfSubstring#1#2{%
  59. \def\lst@temp##1#1##2##3\relax{%
  60. \ifx \@empty##2\expandafter\@secondoftwo
  61. \else \expandafter\@firstoftwo \fi}%
  62. \expandafter\lst@temp#2#1\@empty\relax}
  63. \def\lst@IfOneOf#1\relax#2{%
  64. \def\lst@temp##1,#1,##2##3\relax{%
  65. \ifx \@empty##2\expandafter\@secondoftwo
  66. \else \expandafter\@firstoftwo \fi}%
  67. \expandafter\lst@temp\expandafter,#2,#1,\@empty\relax}
  68. \def\lst@DeleteKeysIn#1#2{%
  69. \expandafter\lst@DeleteKeysIn@\expandafter#1#2,\relax,}
  70. \def\lst@DeleteKeysIn@#1#2,{%
  71. \ifx\relax#2\@empty
  72. \expandafter\@firstoftwo\expandafter\lst@RemoveCommas
  73. \else
  74. \ifx\@empty#2\@empty\else
  75. \def\lst@temp##1,#2,##2{%
  76. ##1%
  77. \ifx\@empty##2\@empty\else
  78. \expandafter\lst@temp\expandafter,%
  79. \fi ##2}%
  80. \edef#1{\expandafter\lst@temp\expandafter,#1,#2,\@empty}%
  81. \fi
  82. \fi
  83. \lst@DeleteKeysIn@#1}
  84. \def\lst@RemoveCommas#1{\edef#1{\expandafter\lst@RC@#1\@empty}}
  85. \def\lst@RC@#1{\ifx,#1\expandafter\lst@RC@ \else #1\fi}
  86. \def\lst@ReplaceIn#1#2{%
  87. \expandafter\lst@ReplaceIn@\expandafter#1#2\@empty\@empty}
  88. \def\lst@ReplaceInArg#1#2{\lst@ReplaceIn@#1#2\@empty\@empty}
  89. \def\lst@ReplaceIn@#1#2#3{%
  90. \ifx\@empty#3\relax\else
  91. \def\lst@temp##1#2##2{%
  92. \ifx\@empty##2%
  93. \lst@lAddTo#1{##1}%
  94. \else
  95. \lst@lAddTo#1{##1#3}\expandafter\lst@temp
  96. \fi ##2}%
  97. \let\@tempa#1\let#1\@empty
  98. \expandafter\lst@temp\@tempa#2\@empty
  99. \expandafter\lst@ReplaceIn@\expandafter#1%
  100. \fi}
  101. \providecommand*\@gobblethree[3]{}
  102. \def\lst@Swap#1#2{#2#1}
  103. \def\lst@true{\let\lst@if\iftrue}
  104. \def\lst@false{\let\lst@if\iffalse}
  105. \lst@false
  106. \def\lst@IfNextCharsArg#1{%
  107. \def\lst@tofind{#1}\lst@IfNextChars\lst@tofind}
  108. \def\lst@IfNextChars#1#2#3{%
  109. \let\lst@tofind#1\def\@tempa{#2}\def\@tempb{#3}%
  110. \let\lst@eaten\@empty \lst@IfNextChars@}
  111. \def\lst@IfNextChars@{\expandafter\lst@IfNextChars@@\lst@tofind\relax}
  112. \def\lst@IfNextChars@@#1#2\relax#3{%
  113. \def\lst@tofind{#2}\lst@lAddTo\lst@eaten{#3}%
  114. \ifx#1#3%
  115. \ifx\lst@tofind\@empty
  116. \let\lst@next\@tempa
  117. \else
  118. \let\lst@next\lst@IfNextChars@
  119. \fi
  120. \expandafter\lst@next
  121. \else
  122. \expandafter\@tempb
  123. \fi}
  124. \def\lst@IfNextCharActive#1#2#3{%
  125. \begingroup \lccode`\~=`#3\lowercase{\endgroup
  126. \ifx~}#3%
  127. \def\lst@next{#1}%
  128. \else
  129. \def\lst@next{#2}%
  130. \fi \lst@next #3}
  131. \def\lst@for#1\do#2{%
  132. \def\lst@forbody##1{#2}%
  133. \@for\lst@forvar:=#1\do
  134. {\expandafter\lst@forbody\expandafter{\lst@forvar}}}
  135. \def\lst@MakeActive#1{%
  136. \let\lst@temp\@empty \lst@MakeActive@#1%
  137. \relax\relax\relax\relax\relax\relax\relax\relax\relax}
  138. \begingroup
  139. \catcode`\^^@=\active \catcode`\^^A=\active \catcode`\^^B=\active
  140. \catcode`\^^C=\active \catcode`\^^D=\active \catcode`\^^E=\active
  141. \catcode`\^^F=\active \catcode`\^^G=\active \catcode`\^^H=\active
  142. \gdef\lst@MakeActive@#1#2#3#4#5#6#7#8#9{\let\lst@next\relax
  143. \ifx#1\relax
  144. \else \lccode`\^^@=`#1%
  145. \ifx#2\relax
  146. \lowercase{\lst@lAddTo\lst@temp{^^@}}%
  147. \else \lccode`\^^A=`#2%
  148. \ifx#3\relax
  149. \lowercase{\lst@lAddTo\lst@temp{^^@^^A}}%
  150. \else \lccode`\^^B=`#3%
  151. \ifx#4\relax
  152. \lowercase{\lst@lAddTo\lst@temp{^^@^^A^^B}}%
  153. \else \lccode`\^^C=`#4%
  154. \ifx#5\relax
  155. \lowercase{\lst@lAddTo\lst@temp{^^@^^A^^B^^C}}%
  156. \else \lccode`\^^D=`#5%
  157. \ifx#6\relax
  158. \lowercase{\lst@lAddTo\lst@temp{^^@^^A^^B^^C^^D}}%
  159. \else \lccode`\^^E=`#6%
  160. \ifx#7\relax
  161. \lowercase{\lst@lAddTo\lst@temp{^^@^^A^^B^^C^^D^^E}}%
  162. \else \lccode`\^^F=`#7%
  163. \ifx#8\relax
  164. \lowercase{\lst@lAddTo\lst@temp{^^@^^A^^B^^C^^D^^E^^F}}%
  165. \else \lccode`\^^G=`#8%
  166. \ifx#9\relax
  167. \lowercase{\lst@lAddTo\lst@temp{^^@^^A^^B^^C^^D^^E^^F^^G}}%
  168. \else \lccode`\^^H=`#9%
  169. \lowercase{\lst@lAddTo\lst@temp{^^@^^A^^B^^C^^D^^E^^F^^G^^H}}%
  170. \let\lst@next\lst@MakeActive@
  171. \fi \fi \fi \fi \fi \fi \fi \fi \fi
  172. \lst@next}
  173. \endgroup
  174. \def\lst@DefActive#1#2{\lst@MakeActive{#2}\let#1\lst@temp}
  175. \def\lst@DefOther#1#2{%
  176. \begingroup \def#1{#2}\escapechar\m@ne \expandafter\endgroup
  177. \expandafter\lst@DefOther@\meaning#1\relax#1}
  178. \def\lst@DefOther@#1->#2\relax#3{\edef#3{\zap@space#2 \@empty}}
  179. \def\lst@InsideConvert#1{\lst@InsideConvert@#1 \@empty}
  180. \begingroup \lccode`\~=`\ \relax \lowercase{%
  181. \gdef\lst@InsideConvert@#1 #2{%
  182. \lst@MakeActive{#1}%
  183. \ifx\@empty#2%
  184. \lst@lExtend\lst@arg{\lst@temp}%
  185. \else
  186. \lst@lExtend\lst@arg{\lst@temp~}%
  187. \expandafter\lst@InsideConvert@
  188. \fi #2}
  189. }\endgroup
  190. \gdef\lst@FVConvert{\futurelet\@let@token\lst@FVConvert@@}
  191. \gdef\lst@FVConvert@@{%
  192. \ifcat\noexpand\@let@token\bgroup \expandafter\lst@FVConvertArg
  193. \else \expandafter\lst@FVConvert@ \fi}
  194. \gdef\lst@FVConvertArg#1{%
  195. {\let\lst@arg\@empty
  196. \lst@FVConvert#1\@nil
  197. \global\let\@gtempa\lst@arg}%
  198. \lst@if
  199. \lst@lExtend\lst@arg{\expandafter{\@gtempa\lst@PrintToken}}%
  200. \else
  201. \lst@lExtend\lst@arg{\expandafter{\@gtempa}}%
  202. \fi
  203. \lst@FVConvert}
  204. \gdef\lst@FVConvert@#1{%
  205. \ifx \@nil#1\else
  206. \lst@if
  207. \if\relax\noexpand#1%
  208. \lst@lAddTo\lst@arg{\lst@UseLostSpace\lst@PrintToken#1}%
  209. \else
  210. \lccode`\~=`#1\lowercase{\lst@lAddTo\lst@arg~}%
  211. \fi
  212. \else
  213. \lccode`\~=`#1\lowercase{\lst@lAddTo\lst@arg~}%
  214. \fi
  215. \expandafter\lst@FVConvert
  216. \fi}
  217. \def\lst@Require#1#2#3#4#5{%
  218. \begingroup
  219. \aftergroup\lst@true
  220. \ifx\@empty#3\@empty\else
  221. \def\lst@prefix{#2}\let\lst@require\@empty
  222. \edef\lst@temp{\expandafter\zap@space#3 \@empty}%
  223. \lst@for\lst@temp\do{%
  224. \ifx\@empty##1\@empty\else \lstKV@OptArg[]{##1}{%
  225. #4[####1]{####2}%
  226. \@ifundefined{\@lst\lst@prefix @\lst@malias $\lst@oalias}%
  227. {\edef\lst@require{\lst@require,\lst@malias $\lst@oalias}}%
  228. {}}%
  229. \fi}%
  230. \global\let\lst@loadaspects\@empty
  231. \lst@InputCatcodes
  232. \ifx\lst@require\@empty\else
  233. \lst@for{#5}\do{%
  234. \ifx\lst@require\@empty\else
  235. \InputIfFileExists{##1}{}{}%
  236. \fi}%
  237. \fi
  238. \ifx\lst@require\@empty\else
  239. \PackageError{Listings}{Couldn't load requested #1}%
  240. {The following #1s weren't loadable:^^J\@spaces
  241. \lst@require^^JThis may cause errors in the sequel.}%
  242. \aftergroup\lst@false
  243. \fi
  244. \ifx\lst@loadaspects\@empty\else
  245. \lst@RequireAspects\lst@loadaspects
  246. \fi
  247. \fi
  248. \endgroup}
  249. \def\lst@IfRequired[#1]#2{%
  250. \lst@NormedDef\lst@temp{[#1]#2}%
  251. \expandafter\lst@IfRequired@\lst@temp\relax}
  252. \def\lst@IfRequired@[#1]#2\relax#3{%
  253. \lst@IfOneOf #2$#1\relax\lst@require
  254. {\lst@DeleteKeysIn@\lst@require#2$#1,\relax,%
  255. \global\expandafter\let
  256. \csname\@lst\lst@prefix @#2$#1\endcsname\@empty
  257. #3}}
  258. \let\lst@require\@empty
  259. \def\lst@NoAlias[#1]#2{%
  260. \lst@NormedDef\lst@oalias{#1}\lst@NormedDef\lst@malias{#2}}
  261. \gdef\lst@LAS#1#2#3#4#5#6#7{%
  262. \lst@Require{#1}{#2}{#3}#4#5%
  263. #4#3%
  264. \@ifundefined{lst#2@\lst@malias$\lst@oalias}%
  265. {\PackageError{Listings}%
  266. {#1 \ifx\@empty\lst@oalias\else \lst@oalias\space of \fi
  267. \lst@malias\space undefined}%
  268. {The #1 is not loadable or just mispellt.^^J%
  269. Type <RETURN> to proceed without changing the #1.}}%
  270. {#6\csname lst#2@\lst@malias $\lst@oalias\endcsname #7}}
  271. \def\lst@RequireAspects#1{%
  272. \lst@Require{aspect}{asp}{#1}\lst@NoAlias\lstaspectfiles}
  273. \let\lstloadaspects\lst@RequireAspects
  274. \@ifundefined{lstaspectfiles}
  275. {\newcommand\lstaspectfiles{lstmisc0.sty,lstmisc.sty}}{}
  276. \gdef\lst@DefDriver#1#2#3#4{%
  277. \@ifnextchar[{\lst@DefDriver@{#1}{#2}#3#4}%
  278. {\lst@DefDriver@{#1}{#2}#3#4[]}}
  279. \gdef\lst@DefDriver@#1#2#3#4[#5]#6{%
  280. \def\lst@name{#1}\let\lst@if#4%
  281. \lst@NormedDef\lst@driver{\@lst#2@#6$#5}%
  282. \lst@IfRequired[#5]{#6}{\begingroup \lst@true}%
  283. {\begingroup}%
  284. \lst@setcatcodes
  285. \@ifnextchar[{\lst@XDefDriver{#1}#3}{\lst@DefDriver@@#3}}
  286. \gdef\lst@DefDriver@@#1#2{%
  287. \lst@if
  288. \global\@namedef{\lst@driver}{#1{#2}}%
  289. \fi
  290. \endgroup
  291. \@ifnextchar[\lst@XXDefDriver\@empty}
  292. \gdef\lst@XXDefDriver[#1]{%
  293. \ifx\@empty#1\@empty\else
  294. \lst@if
  295. \lstloadaspects{#1}%
  296. \else
  297. \@ifundefined{\lst@driver}{}%
  298. {\xdef\lst@loadaspects{\lst@loadaspects,#1}}%
  299. \fi
  300. \fi}
  301. \gdef\lst@XDefDriver#1#2[#3]#4#5{\lst@DefDriver@@#2{also#1=[#3]#4,#5}}
  302. \let\lst@UserCommand\gdef
  303. \newcommand*\lst@BeginAspect[2][]{%
  304. \def\lst@curraspect{#2}%
  305. \ifx \lst@curraspect\@empty
  306. \expandafter\lst@GobbleAspect
  307. \else
  308. \let\lst@next\@empty
  309. \lst@IfRequired[]{#2}%
  310. {\lst@RequireAspects{#1}%
  311. \lst@if\else \let\lst@next\lst@GobbleAspect \fi}%
  312. {\let\lst@next\lst@GobbleAspect}%
  313. \expandafter\lst@next
  314. \fi}
  315. \def\lst@EndAspect{%
  316. \csname\@lst patch@\lst@curraspect\endcsname
  317. \let\lst@curraspect\@empty}
  318. \long\def\lst@GobbleAspect#1\lst@EndAspect{\let\lst@curraspect\@empty}
  319. \def\lst@Key#1#2{%
  320. \@ifnextchar[{\lstKV@def{#1}{#2}}%
  321. {\def\lst@temp{\lst@Key@{#1}{#2}}
  322. \afterassignment\lst@temp
  323. \global\@namedef{KV@\@lst @#1}####1}}
  324. \def\lstKV@def#1#2[#3]{%
  325. \global\@namedef{KV@\@lst @#1@default\expandafter}\expandafter
  326. {\csname KV@\@lst @#1\endcsname{#3}}%
  327. \def\lst@temp{\lst@Key@{#1}{#2}}\afterassignment\lst@temp
  328. \global\@namedef{KV@\@lst @#1}##1}
  329. \def\lst@Key@#1#2{%
  330. \ifx\relax#2\@empty\else
  331. \begingroup \globaldefs\@ne
  332. \csname KV@\@lst @#1\endcsname{#2}%
  333. \endgroup
  334. \fi}
  335. \def\lst@UseHook#1{\csname\@lst hk@#1\endcsname}
  336. \def\lst@AddToHook{\lst@ATH@\iffalse\lst@AddTo}
  337. \def\lst@AddToHookExe{\lst@ATH@\iftrue\lst@AddTo}
  338. \def\lst@AddToHookAtTop{\lst@ATH@\iffalse\lst@AddToAtTop}
  339. \long\def\lst@ATH@#1#2#3#4{%
  340. \@ifundefined{\@lst hk@#3}{%
  341. \expandafter\gdef\csname\@lst hk@#3\endcsname{}}{}%
  342. \expandafter#2\csname\@lst hk@#3\endcsname{#4}%
  343. \def\lst@temp{#4}%
  344. #1% \iftrue|false
  345. \begingroup \globaldefs\@ne \lst@temp \endgroup
  346. \fi}
  347. \long\def\lst@AddTo#1#2{%
  348. \expandafter\gdef\expandafter#1\expandafter{#1#2}}
  349. \def\lst@AddToAtTop#1#2{\def\lst@temp{#2}%
  350. \expandafter\expandafter\expandafter\gdef
  351. \expandafter\expandafter\expandafter#1%
  352. \expandafter\expandafter\expandafter{\expandafter\lst@temp#1}}
  353. \def\lst@lAddTo#1#2{\expandafter\def\expandafter#1\expandafter{#1#2}}
  354. \def\lst@Extend#1#2{%
  355. \expandafter\lst@AddTo\expandafter#1\expandafter{#2}}
  356. \def\lst@lExtend#1#2{%
  357. \expandafter\lst@lAddTo\expandafter#1\expandafter{#2}}
  358. \RequirePackage{keyval}[1997/11/10]
  359. \def\lstKV@TwoArg#1#2{\gdef\@gtempa##1##2{#2}\@gtempa#1{}{}}
  360. \def\lstKV@ThreeArg#1#2{\gdef\@gtempa##1##2##3{#2}\@gtempa#1{}{}{}}
  361. \def\lstKV@FourArg#1#2{\gdef\@gtempa##1##2##3##4{#2}\@gtempa#1{}{}{}{}}
  362. \def\lstKV@OptArg[#1]#2#3{%
  363. \gdef\@gtempa[##1]##2{#3}\lstKV@OptArg@{#1}#2\@}
  364. \def\lstKV@OptArg@#1{\@ifnextchar[\lstKV@OptArg@@{\lstKV@OptArg@@[#1]}}
  365. \def\lstKV@OptArg@@[#1]#2\@{\@gtempa[#1]{#2}}
  366. \def\lstKV@XOptArg[#1]#2#3{%
  367. \global\let\@gtempa#3\lstKV@OptArg@{#1}#2\@}
  368. \def\lstKV@CSTwoArg#1#2{%
  369. \gdef\@gtempa##1,##2,##3\relax{#2}%
  370. \@gtempa#1,,\relax}
  371. \def\lstKV@SetIf#1{\lstKV@SetIf@#1\relax}
  372. \def\lstKV@SetIf@#1#2\relax#3{\lowercase{%
  373. \expandafter\let\expandafter#3%
  374. \csname if\ifx #1t}true\else false\fi\endcsname}
  375. \lst@UserCommand\lstset{\begingroup \lst@setcatcodes \lstset@}
  376. \def\lstset@#1{\endgroup \ifx\@empty#1\@empty\else\setkeys{lst}{#1}\fi}
  377. \def\lst@setcatcodes{\makeatletter \catcode`\"=12\relax}
  378. \def\lst@NewMode#1{%
  379. \ifx\@undefined#1%
  380. \lst@mode\lst@newmode\relax \advance\lst@mode\@ne
  381. \xdef\lst@newmode{\the\lst@mode}%
  382. \global\chardef#1=\lst@mode
  383. \lst@mode\lst@nomode
  384. \fi}
  385. \newcount\lst@mode
  386. \def\lst@newmode{\m@ne}% init
  387. \lst@NewMode\lst@nomode % init (of \lst@mode :-)
  388. \def\lst@UseDynamicMode{%
  389. \@tempcnta\lst@dynamicmode\relax \advance\@tempcnta\@ne
  390. \edef\lst@dynamicmode{\the\@tempcnta}%
  391. \expandafter\lst@Swap\expandafter{\expandafter{\lst@dynamicmode}}}
  392. \lst@AddToHook{InitVars}{\let\lst@dynamicmode\lst@newmode}
  393. \def\lst@modetrue{\let\lst@ifmode\iftrue \lsthk@ModeTrue}
  394. \let\lst@ifmode\iffalse % init
  395. \lst@AddToHook{ModeTrue}{}% init
  396. \def\lst@EnterMode#1#2{%
  397. \bgroup \lst@mode=#1\relax #2%
  398. \lst@iffontadjust \lsthk@FontAdjust \fi
  399. \lst@lAddTo\lst@entermodes{\lst@EnterMode{#1}{#2}}}
  400. \lst@AddToHook{InitVars}{\let\lst@entermodes\@empty}
  401. \def\lst@LeaveMode{%
  402. \ifnum\lst@mode=\lst@nomode\else
  403. \egroup \expandafter\lsthk@EndGroup
  404. \fi}
  405. \lst@AddToHook{EndGroup}{}% init
  406. \def\lst@InterruptModes{%
  407. \lst@Extend\lst@modestack{\expandafter{\lst@entermodes}}%
  408. \lst@LeaveAllModes}
  409. \lst@AddToHook{InitVars}{\global\let\lst@modestack\@empty}
  410. \def\lst@ReenterModes{%
  411. \ifx\lst@modestack\@empty\else
  412. \lst@LeaveAllModes
  413. \global\let\@gtempa\lst@modestack
  414. \global\let\lst@modestack\@empty
  415. \expandafter\lst@ReenterModes@\@gtempa\relax
  416. \fi}
  417. \def\lst@ReenterModes@#1#2{%
  418. \ifx\relax#2\@empty
  419. \gdef\@gtempa##1{#1}%
  420. \expandafter\@gtempa
  421. \else
  422. \lst@AddTo\lst@modestack{{#1}}%
  423. \expandafter\lst@ReenterModes@
  424. \fi
  425. {#2}}
  426. \def\lst@LeaveAllModes{%
  427. \ifnum\lst@mode=\lst@nomode
  428. \expandafter\lsthk@EndGroup
  429. \else
  430. \expandafter\egroup\expandafter\lst@LeaveAllModes
  431. \fi}
  432. \lst@AddToHook{ExitVars}{\lst@LeaveAllModes}
  433. \lst@NewMode\lst@Pmode
  434. \lst@NewMode\lst@GPmode
  435. \def\lst@NormedDef#1#2{\lowercase{\edef#1{\zap@space#2 \@empty}}}
  436. \def\lst@NormedNameDef#1#2{%
  437. \lowercase{\edef\lst@temp{\zap@space#1 \@empty}%
  438. \expandafter\xdef\csname\lst@temp\endcsname{\zap@space#2 \@empty}}}
  439. \def\lst@GetFreeMacro#1{%
  440. \@tempcnta\z@ \def\lst@freemacro{#1\the\@tempcnta}%
  441. \lst@GFM@}
  442. \def\lst@GFM@{%
  443. \expandafter\ifx \csname\lst@freemacro\endcsname \relax
  444. \edef\lst@freemacro{\csname\lst@freemacro\endcsname}%
  445. \else
  446. \advance\@tempcnta\@ne
  447. \expandafter\lst@GFM@
  448. \fi}
  449. \lst@AddToAtTop{\try@load@fontshape}{\def\space{ }}
  450. \newtoks\lst@token \newcount\lst@length
  451. \lst@AddToHook{InitVarsBOL}{\lst@token{}\lst@length\z@}
  452. \lst@AddToHook{EndGroup}{\lst@token{}\lst@length\z@}
  453. \lst@AddToHook{InitVarsBOL}{\let\lst@lastother\@empty}
  454. \def\lst@Append#1{\advance\lst@length\@ne
  455. \expandafter\lst@token\expandafter{\the\lst@token#1}}
  456. \def\lst@AppendOther{\futurelet\lst@lastother\lst@Append}
  457. \def\lst@lettertrue{\let\lst@ifletter\iftrue}
  458. \def\lst@letterfalse{\let\lst@ifletter\iffalse}
  459. \lst@AddToHook{InitVars}{\lst@letterfalse}
  460. \def\lst@PrintToken{%
  461. \lst@ifletter
  462. \lst@Output\lst@letterfalse
  463. \else
  464. \lst@OutputOther \let\lst@lastother\@empty
  465. \fi}
  466. \def\lst@whitespacetrue{\global\let\lst@ifwhitespace\iftrue}
  467. \def\lst@whitespacefalse{\global\let\lst@ifwhitespace\iffalse}
  468. \lst@AddToHook{InitVarsBOL}{\lst@whitespacetrue}
  469. \def\lst@ProcessLetter{%
  470. \lst@ifletter\else \lst@OutputOther\lst@lettertrue \fi
  471. \lst@whitespacefalse \lst@Append}
  472. \def\lst@ProcessOther{%
  473. \lst@ifletter \lst@Output\lst@letterfalse \fi
  474. \lst@whitespacefalse \lst@AppendOther}
  475. \def\lst@ProcessDigit{%
  476. \lst@whitespacefalse
  477. \lst@ifletter \expandafter\lst@Append
  478. \else \expandafter\lst@AppendOther\fi}
  479. \lst@Key{tabsize}{8}
  480. {\ifnum#1>\z@ \def\lst@tabsize{#1}\else
  481. \PackageError{Listings}{Strict positive integer expected}%
  482. {You can't use `#1' as tabulator size.^^J%
  483. Type <RETURN> to forget it and to proceed.}%
  484. \fi}
  485. \def\lst@ProcessTabulator{%
  486. \lst@PrintToken \lst@letterfalse
  487. \global\advance\lst@column -\lst@pos
  488. \@whilenum \lst@pos<\@ne \do
  489. {\global\advance\lst@pos\lst@tabsize}%
  490. \lst@length\lst@pos
  491. \lst@whitespacetrue
  492. \lst@PreGotoTabStop}
  493. \def\lst@PreGotoTabStop{%
  494. \lst@ifvisibletabs
  495. \lst@TrackNewLines
  496. \setbox\@tempboxa\hbox to\lst@length\lst@width
  497. {{\lst@currstyle{\hss\lst@tab}}}%
  498. \lst@CalcLostSpaceAndOutput
  499. \else
  500. \lst@ifkeepspaces
  501. \@tempcnta\lst@length \lst@length\z@
  502. \@whilenum \@tempcnta>\z@ \do
  503. {\lst@AppendOther\lst@outputspace
  504. \advance\@tempcnta\m@ne}%
  505. \lst@OutputOther
  506. \else
  507. \lst@GotoTabStop
  508. \fi
  509. \fi
  510. \lst@length\z@ \global\lst@pos\z@}
  511. \lst@Key{visibletabs}f[t]{\lstKV@SetIf{#1}\lst@ifvisibletabs}
  512. \lst@Key{tab}{\kern.06em\hbox{\vrule\@height.3ex}%
  513. \hrulefill\hbox{\vrule\@height.3ex}}
  514. {\def\lst@tab{#1}}
  515. \def\lst@outputspace{\ }
  516. \def\lst@visiblespace{\lst@ttfamily{\char32}\textvisiblespace}
  517. \lst@Key{visiblespaces}{false}[t]{\lstKV@SetIf{#1}\lst@ifvisiblespaces}
  518. \lst@Key{keepspaces}{false}[t]{\lstKV@SetIf{#1}\lst@ifkeepspaces}
  519. \lst@AddToHook{Init}
  520. {\lst@ifvisiblespaces
  521. \let\lst@outputspace\lst@visiblespace
  522. \lst@keepspacestrue
  523. \fi}
  524. \def\lst@keepspacestrue{\let\lst@ifkeepspaces\iftrue}
  525. \def\lst@ProcessSpace{%
  526. \lst@ifletter
  527. \lst@Output\lst@letterfalse
  528. \lst@AppendOther\lst@outputspace
  529. \else \lst@ifkeepspaces
  530. \lst@AppendOther\lst@outputspace
  531. \else \ifx\lst@newlines\@empty
  532. \lst@AppendSpecialSpace
  533. \else \ifnum\lst@length=\z@
  534. \global\advance\lst@lostspace\lst@width
  535. \global\advance\lst@pos\m@ne
  536. \else
  537. \lst@AppendSpecialSpace
  538. \fi
  539. \fi \fi \fi
  540. \lst@whitespacetrue}
  541. \def\lst@AppendSpecialSpace{%
  542. \lst@ifwhitespace
  543. \lst@OutputOther
  544. \global\advance\lst@lostspace\lst@width
  545. \global\advance\lst@pos\m@ne
  546. \else
  547. \lst@AppendOther\lst@outputspace
  548. \fi}
  549. \lst@Key{formfeed}{\bigbreak}{\def\lst@formfeed{#1}}
  550. \def\lst@ProcessFormFeed{%
  551. \lst@PrintToken
  552. \ifx\lst@newlines\@empty
  553. \lst@EOLUpdate \lst@formfeed
  554. \else
  555. \lst@lAddTo\lst@newlines{\lst@EOLUpdate \lst@formfeed}%
  556. \fi
  557. \lst@whitespacetrue}
  558. \def\lst@Def#1{\lccode`\~=#1\lowercase{\def~}}
  559. \def\lst@Let#1{\lccode`\~=#1\lowercase{\let~}}
  560. \def\lst@SaveDef#1#2{%
  561. \begingroup \lccode`\~=#1\relax \lowercase{\endgroup\let#2~}}
  562. \def\lst@DefSaveDef#1#2{%
  563. \begingroup \lccode`\~=#1\relax \lowercase{\endgroup\let#2~\def~}}
  564. \def\lst@LetSaveDef#1#2{%
  565. \begingroup \lccode`\~=#1\relax \lowercase{\endgroup\let#2~\let~}}
  566. \def\lst@SelectStdCharTable{%
  567. \lst@Let{9}\lst@ProcessTabulator
  568. \lst@Let{12}\lst@ProcessFormFeed
  569. \lst@Let{32}\lst@ProcessSpace}
  570. \def\lst@CCUse#1#2{%
  571. \ifnum#2=\z@
  572. \expandafter\@gobbletwo
  573. \else
  574. \lccode`\~=#2\lccode`\/=#2\lowercase{\lst@CCUse@~{#1/}}%
  575. \fi
  576. \lst@CCUse#1}
  577. \def\lst@CCUse@#1#2{\lst@lAddTo\lst@SelectStdCharTable{\def#1{#2}}}
  578. \lst@CCUse \lst@ProcessOther
  579. {"21}{"22}{"27}{"28}{"29}{"2B}{"2C}{"2E}{"2F}
  580. {"3A}{"3B}{"3D}{"3F}{"5B}{"5D}{"60}
  581. \z@
  582. \lst@CCUse \lst@ProcessDigit
  583. {"30}{"31}{"32}{"33}{"34}{"35}{"36}{"37}{"38}{"39}
  584. \z@
  585. \lst@CCUse \lst@ProcessLetter
  586. {"40}{"41}{"42}{"43}{"44}{"45}{"46}{"47}
  587. {"48}{"49}{"4A}{"4B}{"4C}{"4D}{"4E}{"4F}
  588. {"50}{"51}{"52}{"53}{"54}{"55}{"56}{"57}
  589. {"58}{"59}{"5A}
  590. {"61}{"62}{"63}{"64}{"65}{"66}{"67}
  591. {"68}{"69}{"6A}{"6B}{"6C}{"6D}{"6E}{"6F}
  592. {"70}{"71}{"72}{"73}{"74}{"75}{"76}{"77}
  593. {"78}{"79}{"7A}
  594. \z@
  595. \def\lst@CCUseMacro#1#2#3{%
  596. \ifnum#2=\z@ \else
  597. \begingroup\lccode`\~=#2\relax \lccode`\/=#2\relax
  598. \lowercase{\endgroup\expandafter\lst@CCUseMacro@
  599. \csname lstum@/\expandafter\endcsname
  600. \csname lstum@/@\endcsname /~}#1{#3}%
  601. \expandafter\lst@CCUseMacro
  602. \fi}
  603. \def\lst@CCUseMacro@#1#2#3#4#5#6{%
  604. \lst@lAddTo\lst@SelectStdCharTable{\def#4{#5#1}}%
  605. \def#1{\lst@UM#3}%
  606. \def#2{#6}}
  607. \def\lst@UM#1{\csname lstum@#1@\endcsname}
  608. \lst@CCUseMacro
  609. \lst@ProcessOther {"23}\#
  610. \lst@ProcessLetter{"24}\textdollar
  611. \lst@ProcessOther {"25}\%
  612. \lst@ProcessOther {"26}\&
  613. \lst@ProcessOther {"2A}{\lst@ttfamily*\textasteriskcentered}
  614. \lst@ProcessOther {"2D}{\lst@ttfamily{-{}}{$-$}}
  615. \lst@ProcessOther {"3C}{\lst@ttfamily<\textless}
  616. \lst@ProcessOther {"3E}{\lst@ttfamily>\textgreater}
  617. \lst@ProcessOther {"5C}{\lst@ttfamily{\char92}\textbackslash}
  618. \lst@ProcessOther {"5E}\textasciicircum
  619. \lst@ProcessLetter{"5F}{\lst@ttfamily{\char95}\textunderscore}
  620. \lst@ProcessOther {"7B}{\lst@ttfamily{\char123}\textbraceleft}
  621. \lst@ProcessOther {"7C}{\lst@ttfamily|\textbar}
  622. \lst@ProcessOther {"7D}{\lst@ttfamily{\char125}\textbraceright}
  623. \lst@ProcessOther {"7E}\textasciitilde
  624. \lst@ProcessOther {"7F}-
  625. \@empty\z@\@empty
  626. \def\lst@ttfamily#1#2{\ifx\f@family\ttdefault#1\relax\else#2\fi}
  627. \lst@AddToHook{Init}{\edef\ttdefault{\ttdefault}}
  628. \def\lst@SaveOutputDef#1#2{%
  629. \begingroup \lccode`\~=#1\relax \lowercase{%
  630. \def\lst@temp##1\def~##2##3\relax}{%
  631. \global\expandafter\let\expandafter#2\@gobble##2\relax}%
  632. \expandafter\lst@temp\lst@SelectStdCharTable\relax
  633. \endgroup}
  634. \lst@SaveOutputDef{"5C}\lstum@backslash
  635. \def\lst@activecharstrue{\let\lst@ifactivechars\iftrue}
  636. \def\lst@activecharsfalse{\let\lst@ifactivechars\iffalse}
  637. \lst@activecharstrue
  638. \def\lst@SelectCharTable{%
  639. \lst@SelectStdCharTable
  640. \lst@ifec \lst@DefEC \fi
  641. \lst@ifactivechars
  642. \catcode9\active \catcode12\active \catcode13\active
  643. \@tempcnta=32\relax
  644. \@whilenum\@tempcnta<128\do
  645. {\catcode\@tempcnta\active\advance\@tempcnta\@ne}%
  646. \fi
  647. \lsthk@SelectCharTable
  648. \lst@DeveloperSCT
  649. \ifx\lst@Backslash\relax\else
  650. \lst@LetSaveDef{"5C}\lsts@backslash\lst@Backslash
  651. \fi}
  652. \lst@Key{SelectCharTable}{}{\def\lst@DeveloperSCT{#1}}
  653. \lst@Key{MoreSelectCharTable}\relax{\lst@lAddTo\lst@DeveloperSCT{#1}}
  654. \lst@AddToHook{SetLanguage}{\let\lst@DeveloperSCT\@empty}
  655. \lst@AddToHook{Init}
  656. {\let\lsts@nfss@catcodes\nfss@catcodes
  657. \let\nfss@catcodes\lst@nfss@catcodes}
  658. \def\lst@nfss@catcodes{%
  659. \lst@makeletter
  660. ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\relax
  661. \@makeother 0\@makeother 1\@makeother 2\@makeother 3\@makeother 4%
  662. \@makeother 5\@makeother 6\@makeother 7\@makeother 8\@makeother 9%
  663. \lsts@nfss@catcodes}
  664. \def\lst@makeletter#1{%
  665. \ifx\relax#1\else\catcode`#111\relax \expandafter\lst@makeletter\fi}
  666. \lst@AddToHook{Init}
  667. {\edef\lst@OldOutput{\the\output}%
  668. \output{\begingroup \lsts@nfss@catcodes
  669. \let\lst@ProcessLetter\@empty
  670. \let\lst@ProcessOther\@empty
  671. \let\lst@ProcessDigit\@empty
  672. \lst@OldOutput
  673. \endgroup}}
  674. \lst@Key{alsoletter}\relax{\lst@DefOther\lst@arg{#1}%
  675. \expandafter\lstalso@\lst@also \lst@arg\@empty\@empty}
  676. \lst@Key{alsodigit}\relax{\lst@DefOther\lst@arg{#1}%
  677. \expandafter\lstalso@\lst@also \@empty\lst@arg\@empty}
  678. \lst@Key{alsoother}\relax{\lst@DefOther\lst@arg{#1}%
  679. \expandafter\lstalso@\lst@also \@empty\@empty\lst@arg}
  680. \def\lstalso@#1#2#3#4#5#6{%
  681. \ifx#4\@empty \ifx#5\@empty \ifx#6\@empty \else
  682. \edef\lst@also{{#1}{#2}{#6}}%
  683. \fi\else
  684. \edef\lst@also{{#1}{#5}{#3}}%
  685. \fi\else
  686. \edef\lst@also{{#4}{#2}{#3}}%
  687. \fi}
  688. \lst@AddToHook{SetLanguage}{\def\lst@also{{}{}{}}}
  689. \def\lst@UseBasicClasses{\expandafter\lst@UBC@\lst@also}
  690. \def\lst@UBC@#1#2#3#4#5#6{\def\lst@also{{#1#4}{#2#5}{#3#6}}}
  691. \lst@AddToHook{SelectCharTable}
  692. {\expandafter\lst@ChangeBasicClasses\lst@also}
  693. \def\lst@ChangeBasicClasses#1#2#3{%
  694. \lst@CBC@\lst@ProcessOther#3\relax
  695. \lst@CBC@\lst@ProcessDigit#2\relax
  696. \lst@CBC@\lst@ProcessLetter#1\relax}
  697. \def\lst@CBC@#1#2{%
  698. \ifx\relax#2\expandafter\@gobbletwo \else
  699. \lccode`\~=`#2\lowercase
  700. {\edef~{\noexpand#1\expandafter\lst@CBC@@~}}%
  701. \fi
  702. \lst@CBC@#1}
  703. \def\lst@CBC@@#1#2{\noexpand#2}
  704. \lst@Key{extendedchars}{false}[t]{\lstKV@SetIf{#1}\lst@ifec}
  705. \def\lst@DefEC{%
  706. \lst@CCECUse \lst@ProcessLetter
  707. ^^80^^81^^82^^83^^84^^85^^86^^87^^88^^89^^8a^^8b^^8c^^8d^^8e^^8f%
  708. ^^90^^91^^92^^93^^94^^95^^96^^97^^98^^99^^9a^^9b^^9c^^9d^^9e^^9f%
  709. ^^a0^^a1^^a2^^a3^^a4^^a5^^a6^^a7^^a8^^a9^^aa^^ab^^ac^^ad^^ae^^af%
  710. ^^b0^^b1^^b2^^b3^^b4^^b5^^b6^^b7^^b8^^b9^^ba^^bb^^bc^^bd^^be^^bf%
  711. ^^c0^^c1^^c2^^c3^^c4^^c5^^c6^^c7^^c8^^c9^^ca^^cb^^cc^^cd^^ce^^cf%
  712. ^^d0^^d1^^d2^^d3^^d4^^d5^^d6^^d7^^d8^^d9^^da^^db^^dc^^dd^^de^^df%
  713. ^^e0^^e1^^e2^^e3^^e4^^e5^^e6^^e7^^e8^^e9^^ea^^eb^^ec^^ed^^ee^^ef%
  714. ^^f0^^f1^^f2^^f3^^f4^^f5^^f6^^f7^^f8^^f9^^fa^^fb^^fc^^fd^^fe^^ff%
  715. ^^00}
  716. \def\lst@CCECUse#1#2{%
  717. \ifnum`#2=\z@
  718. \expandafter\@gobbletwo
  719. \else
  720. \ifnum\catcode`#2=\active
  721. \lccode`\~=`#2\lccode`\/=`#2\lowercase{\lst@CCECUse@#1~/}%
  722. \else
  723. \lst@ifactivechars \catcode`#2=\active \fi
  724. \lccode`\~=`#2\lccode`\/=`#2\lowercase{\def~{#1/}}%
  725. \fi
  726. \fi
  727. \lst@CCECUse#1}
  728. \def\lst@CCECUse@#1#2#3{%
  729. \expandafter\def\csname lst@EC#3\endcsname{\lst@UM#3}%
  730. \expandafter\let\csname lstum@#3@\endcsname #2%
  731. \edef#2{\noexpand#1\expandafter\noexpand\csname lst@EC#3\endcsname}}
  732. \def\lst@SAC[#1]#2#3#4#5#6#7#8#9{%
  733. \ifx #9\@empty \let#7\@empty \fi
  734. \ifx\@empty#2\@empty\else
  735. \lst@IfOneOf#1\relax#5%
  736. {\lst@IfOneOf#1\relax#6%
  737. {\@ifundefined{\@lst @#3@#1}%
  738. {\lst@lExtend#7{\expandafter\lst@UseDynamicMode
  739. \csname\@lst @#3DM@#1\endcsname}}%
  740. {\lst@lExtend#7{\csname\@lst @#3@#1\endcsname}}}%
  741. {\lst@lExtend#7{\expandafter\lst@DefineSAC
  742. \csname\@lst @Process#3@#1\endcsname #4}}%
  743. \lst@false \let\lst@arg\@empty
  744. \@ifnextchar[\lst@SAC@ #8%
  745. #2\@nil
  746. \lst@lExtend#7{\lst@arg\@empty}}%
  747. {\PackageError{Listings}{Illegal type `#1'}{#3 types are #5.}}%
  748. \fi}
  749. \def\lst@SAC@[#1]#2{\def\lst@arg{[#1]}\reserved@b}
  750. \def\lst@SACDelete[#1]#2#3#4#5#6#7{%
  751. \lst@IfOneOf#1\relax#6%
  752. {\@ifundefined{\@lst @#3@#1}%
  753. {\edef\lst@temp{\noexpand\lst@UseDynamicMode\expandafter
  754. \noexpand\csname\@lst @#3DM@#1\endcsname}}%
  755. {\edef\lst@temp{\expandafter
  756. \noexpand\csname\@lst @#3@#1\endcsname}}}%
  757. {\edef\lst@temp{\noexpand\lst@DefineSAC\expandafter\noexpand
  758. \csname\@lst @Process#3@#1\endcsname #4}}%
  759. \expandafter\lst@SACDelete@\lst@temp\relax#7}
  760. \def\lst@SACDelete@#1\relax#2{%
  761. \def\lst@temp##1#1##2\@empty##3{%
  762. \lst@lAddTo#2{##1}%
  763. \ifx\relax##3\else
  764. \expandafter\lst@temp
  765. \fi ##3}
  766. \let\@tempa#2\let#2\@empty
  767. \expandafter\lst@temp\@tempa#1{}\@empty\relax}
  768. \def\lst@DefineSAC#1#2#3{%
  769. \ifx\@empty#3%
  770. \expandafter\@gobblethree
  771. \else
  772. \lccode`\~=`#3\lccode`\/=`#3\lowercase{%
  773. \expandafter\let\csname\@lst s@#2/\endcsname~%
  774. \def~{#1/}}%
  775. \fi
  776. \lst@DefineSAC#1{#2}}
  777. \def\lst@CArgX#1#2\relax{%
  778. \lst@DefActive\lst@arg{#1#2}%
  779. \expandafter\lst@CArg\lst@arg\relax}
  780. \def\lst@CArg#1#2\relax{%
  781. \lccode`\/=`#1\lowercase{\def\lst@temp{/}}%
  782. \lst@GetFreeMacro{lst@c\lst@temp d}%
  783. \expandafter\lst@CArg@\lst@freemacro#1#2\@empty\@empty\relax}
  784. \def\lst@CArg@#1#2#3#4\@empty#5\relax#6{#6#2#3{#4}#1}
  785. \def\lst@CDef#1#2#3#4#5#6#7{%
  786. \let#4#1%
  787. \ifx\@empty#2\@empty
  788. \def#1{#5\def\lst@next{#6#4#7}\lst@next}%
  789. \else \ifx\@empty#3\@empty
  790. \def#1##1{%
  791. #5%
  792. \ifx##1#2\def\lst@next{#6#4#2#7}\else
  793. \def\lst@next{#4##1}\fi
  794. \lst@next}%
  795. \else
  796. \def#1{%
  797. #5%
  798. \lst@IfNextCharsArg{#2#3}{#6#4#2#3#7}%
  799. {\expandafter#4\lst@eaten}}%
  800. \fi \fi}
  801. \def\lst@CDefX#1#2#3#4#5#6#7{%
  802. \let#4#1%
  803. \ifx\@empty#2\@empty
  804. \def#1{#5\def\lst@next{#6#7}\lst@next}%
  805. \else \ifx\@empty#3\@empty
  806. \def#1##1{%
  807. #5%
  808. \ifx##1#2\def\lst@next{#6#7}\else
  809. \def\lst@next{#4##1}\fi
  810. \lst@next}%
  811. \else
  812. \def#1{%
  813. #5%
  814. \lst@IfNextCharsArg{#2#3}{#6#7}%
  815. {\expandafter#4\lst@eaten}}%
  816. \fi \fi}
  817. \def\lst@CArgEmpty#1\@empty{#1}
  818. \lst@Key{excludedelims}\relax
  819. {\lsthk@ExcludeDelims \lst@NormedDef\lst@temp{#1}%
  820. \expandafter\lst@for\lst@temp\do
  821. {\expandafter\let\csname\@lst @ifex##1\endcsname\iftrue}}
  822. \def\lst@ReplaceInput#1{\lst@CArgX #1\relax\lst@CDefX{}{}}
  823. \lst@Key{literate}{}{\def\lst@literate{#1}}
  824. \lst@AddToHook{SelectCharTable}
  825. {\ifx\lst@literate\@empty\else
  826. \expandafter\lst@Literate\lst@literate{}\relax\z@
  827. \fi}
  828. \def\lst@Literate#1#2#3{%
  829. \ifx\relax#2\@empty\else
  830. \lst@ReplaceInput{#1}%
  831. {\lst@PrintToken \lst@letterfalse
  832. \lst@token{#2}\lst@length#3\relax\lst@PrintToken}%
  833. \expandafter\lst@Literate
  834. \fi}
  835. \def\lst@BeginDropInput#1{%
  836. \lst@EnterMode{#1}%
  837. {\lst@modetrue
  838. \let\lst@ProcessLetter\@gobble
  839. \let\lst@ProcessDigit\@gobble
  840. \let\lst@ProcessOther\@gobble
  841. \let\lst@ProcessSpace\@empty
  842. \let\lst@ProcessTabulator\@empty
  843. \let\lst@ProcessFormFeed\@empty}}
  844. \lst@Key{identifierstyle}{}{\def\lst@identifierstyle{#1}}
  845. \lst@AddToHook{EmptyStyle}{\let\lst@identifierstyle\@empty}
  846. \lst@Key{flexiblecolumns}{false}[t]{\lstKV@SetIf{#1}\lst@ifflexible}
  847. \def\lst@flexibletrue{\let\lst@ifflexible\iftrue}
  848. \def\lst@flexiblefalse{\let\lst@ifflexible\iffalse}
  849. \lst@Key{columns}{fixed}{\def\lst@arg{#1}%
  850. \def\lst@temp{fixed}%
  851. \ifx\lst@arg\lst@temp
  852. \lst@flexibletrue
  853. \else
  854. \def\lst@temp{flexible}%
  855. \ifx\lst@arg\lst@temp
  856. \lst@flexiblefalse
  857. \else
  858. \PackageWarning{Listings}{Unknown column format `#1'}%
  859. \fi
  860. \fi}
  861. \newdimen\lst@width
  862. \lst@Key{basewidth}{0.6em,0.45em}{\lstKV@CSTwoArg{#1}%
  863. {\def\lst@widthfixed{##1}\def\lst@widthflexible{##2}%
  864. \ifx\lst@widthflexible\@empty
  865. \let\lst@widthflexible\lst@widthfixed
  866. \fi
  867. \gdef\lst@error{\PackageError{Listings}%
  868. {Nonnegative value(s) treated as zero}%
  869. {Type <RETURN> to proceed.}}%
  870. \global\let\@gtempa\relax
  871. \ifdim \lst@widthfixed<\z@
  872. \global\let\@gtempa\lst@error \let\lst@widthfixed\z@
  873. \fi
  874. \ifdim \lst@widthflexible<\z@
  875. \global\let\@gtempa\lst@error \let\lst@widthflexible\z@
  876. \fi
  877. \@gtempa}}
  878. \lst@AddToHook{FontAdjust}
  879. {\lst@width=\lst@ifflexible\lst@widthflexible
  880. \else\lst@widthfixed\fi \relax}
  881. \lst@Key{fontadjust}{false}[t]{\lstKV@SetIf{#1}\lst@iffontadjust}
  882. \lst@AddToHook{InitVars}{\lsthk@FontAdjust}
  883. \def\lst@FontAdjustPre{%
  884. \lst@iffontadjust
  885. \setbox\@tempboxa\hbox{{\lst@thestyle{\lsthk@FontAdjust
  886. \xdef\@gtempa{\noexpand\lst@width\the\lst@width\relax}}}}%
  887. \@gtempa
  888. \fi}
  889. \def\lst@FontAdjustPost{\lst@iffontadjust \lsthk@FontAdjust \fi}
  890. \newdimen\lst@currlwidth % \global
  891. \newcount\lst@column \newcount\lst@pos % \global
  892. \lst@AddToHook{InitVarsBOL}
  893. {\global\lst@currlwidth\z@ \global\lst@pos\z@ \global\lst@column\z@}
  894. \def\lst@CalcLineLength{%
  895. \@tempcnta\lst@column
  896. \advance\@tempcnta\lst@length
  897. \advance\@tempcnta-\lst@pos}
  898. \newdimen\lst@lostspace % \global
  899. \lst@AddToHook{InitVarsBOL}{\global\lst@lostspace\z@}
  900. \def\lst@UseLostSpace{\ifdim\lst@lostspace>\z@ \lst@InsertLostSpace \fi}
  901. \def\lst@InsertLostSpace{%
  902. \lst@Kern\lst@lostspace \global\lst@lostspace\z@}
  903. \def\lst@InsertHalfLostSpace{%
  904. \global\[email protected]\lst@lostspace \lst@Kern\lst@lostspace}
  905. \def\lstoutputpos@#1#2\relax{%
  906. \ifx #1l%
  907. \let\lst@lefthss\@empty \let\lst@righthss\hss
  908. \let\lst@leftinsert\@empty
  909. \else\ifx #1c%
  910. \let\lst@lefthss\hss \let\lst@righthss\hss
  911. \let\lst@leftinsert\lst@InsertHalfLostSpace
  912. \else
  913. \let\lst@lefthss\hss \let\lst@righthss\@empty
  914. \let\lst@leftinsert\lst@InsertLostSpace
  915. \ifx #1r\else \PackageWarning{Listings}%
  916. {Unknown positioning for output boxes}%
  917. \fi
  918. \fi\fi}
  919. \lst@Key{outputpos}{c}{\lstoutputpos@#1\relax\relax}
  920. \def\lst@OutputBox#1{\lst@alloverstyle{\box#1}\lsthk@PostOutput}
  921. \let\lst@alloverstyle\@empty % init
  922. \lst@AddToHook{PostOutput}{}% init
  923. \def\lst@Kern#1{%
  924. \setbox\z@\hbox{{\lst@currstyle{\kern#1}}}%
  925. \global\advance\lst@currlwidth \wd\z@
  926. \lst@OutputBox\z@}
  927. \def\lst@CalcLostSpaceAndOutput{%
  928. \global\advance\lst@lostspace \lst@length\lst@width
  929. \global\advance\lst@lostspace-\wd\@tempboxa
  930. \global\advance\lst@currlwidth \wd\@tempboxa
  931. \global\advance\lst@pos -\lst@length
  932. \ifdim\lst@lostspace>\z@ \lst@leftinsert \fi
  933. \lst@OutputBox\@tempboxa}
  934. \def\lst@OutputToken{%
  935. \lst@TrackNewLines \lst@UseLostSpace
  936. \lst@FontAdjustPre
  937. \setbox\@tempboxa\lst@hbox
  938. {\lsthk@OutputBox
  939. {\lst@lefthss
  940. \lst@thestyle
  941. {\expandafter\lst@FillOutputBox\the\lst@token\@empty}%
  942. \lst@righthss}}%
  943. \lst@CalcLostSpaceAndOutput
  944. \lst@FontAdjustPost
  945. \lst@token{}\lst@length\z@}
  946. \lst@AddToHook{OutputBox}{}% init
  947. \def\lst@FillOutputBox#1{#1\lst@FillOutputBox@}
  948. \def\lst@FillOutputBox@#1{%
  949. \ifx\@empty#1\else \hss#1\expandafter\lst@FillOutputBox@ \fi}
  950. \def\lst@hbox{\hbox to\lst@length\lst@width}% init
  951. \def\lst@OutputOther{%
  952. \ifnum\lst@length=\z@\else
  953. \let\lst@thestyle\lst@currstyle
  954. \lsthk@OutputOther
  955. \lst@OutputToken
  956. \fi}
  957. \lst@AddToHook{OutputOther}{}% init
  958. \let\lst@currstyle\relax % init
  959. \def\lst@Output{%
  960. \ifnum\lst@length=\z@\else
  961. \ifx\lst@currstyle\relax
  962. \let\lst@thestyle\lst@identifierstyle
  963. \else
  964. \let\lst@thestyle\lst@currstyle
  965. \fi
  966. \lsthk@Output
  967. \lst@OutputToken
  968. \fi
  969. \let\lst@lastother\relax}
  970. \lst@AddToHook{Output}{}% init
  971. \def\lst@GotoTabStop{%
  972. \ifx\lst@newlines\@empty
  973. \setbox\@tempboxa\hbox{\lst@outputspace}%
  974. \setbox\@tempboxa\hbox to\wd\@tempboxa{{\lst@currstyle{\hss}}}%
  975. \lst@CalcLostSpaceAndOutput
  976. \else
  977. \global\advance\lst@lostspace \lst@length\lst@width
  978. \global\advance\lst@column\lst@length \lst@length\z@
  979. \fi}
  980. \lst@AddToHook{Init}
  981. {\lst@ifflexible
  982. \let\lst@FillOutputBox\@empty
  983. \let\lst@lefthss\@empty
  984. \let\lst@righthss\@empty
  985. \let\lst@hbox\hbox
  986. \fi}
  987. \def\lst@NewLine{%
  988. \ifx\lst@OutputBox\@gobble\else
  989. \par\noindent \hbox{}%
  990. \fi \lst@newlinetrue}
  991. \lst@AddToHook{InitVars}{\global\let\lst@newlines\@empty}
  992. \lst@AddToHook{InitVarsBOL}{\lst@AddTo\lst@newlines\lst@NewLine}
  993. \def\lst@TrackNewLines{%
  994. \ifx\lst@newlines\@empty\else
  995. \lsthk@OnNewLine
  996. \lst@newlines
  997. \global\let\lst@newlines\@empty
  998. \fi}
  999. \lst@AddToHook{OnNewLine}{}% init
  1000. \def\lst@newlinetrue{\global\let\lst@ifnewline\iftrue}
  1001. \lst@AddToHook{PostOutput}{\global\let\lst@ifnewline\iffalse}
  1002. \global\let\lst@ifnewline\iffalse
  1003. \def\lst@RemoveNewLine{%
  1004. \def\lst@temp##1\lst@NewLine##2\@empty{%
  1005. \ifx\@empty##2\@empty \expandafter\@gobble \else
  1006. \expandafter\lst@RNL@\lst@newlines\@empty
  1007. \fi}%
  1008. \expandafter\lst@temp\lst@newlines\lst@NewLine\@empty}
  1009. \def\lst@RNL@#1\lst@NewLine#2\@empty#3{%
  1010. \gdef\lst@newlines{#1#2}#3}
  1011. \def\lst@BeginDropOutput#1{%
  1012. \global\let\lst@BDOnewlines\lst@newlines
  1013. \lst@EnterMode{#1}%
  1014. {\lst@modetrue
  1015. \let\lst@OutputBox\@gobble
  1016. \aftergroup\lst@BDORestore}}
  1017. \def\lst@BDORestore{\global\let\lst@newlines\lst@BDOnewlines}
  1018. \lst@Key{basicstyle}\relax{\def\lst@basicstyle{#1}}
  1019. \lst@AddToHook{Init}{\lst@basicstyle}
  1020. \lst@AddToHookExe{EmptyStyle}{\let\lst@basicstyle\@empty}
  1021. \def\lst@parshape{\parshape\@ne \z@ \linewidth}
  1022. \lst@AddToHookAtTop{EveryLine}{\lst@parshape}
  1023. \lst@AddToHookAtTop{EndGroup}{\lst@parshape}
  1024. \newcount\lst@lineno % \global
  1025. \lst@AddToHook{InitVars}{\global\lst@lineno\@ne}
  1026. \lst@Key{print}{true}[t]{\lstKV@SetIf{#1}\lst@ifprint}
  1027. \lst@Key{first}\relax{\def\lst@firstline{#1\relax}}
  1028. \lst@Key{last}\relax{\def\lst@lastline{#1\relax}}
  1029. \lst@AddToHook{PreSet}
  1030. {\let\lst@firstline\@ne \def\lst@lastline{9999999\relax}}
  1031. \lst@Key{continue}\relax[t]{\lstKV@SetIf{#1}\lst@ifcontinue}
  1032. \def\lst@continuetrue{\let\lst@ifcontinue\iftrue}
  1033. \def\lst@continuefalse{\let\lst@ifcontinue\iffalse}
  1034. \lst@AddToHook{PreSet}{\let\lst@ifcontinue\@undefined}
  1035. \lst@AddToHook{PreInit}
  1036. {\ifx\lst@ifcontinue\@undefined \lst@continuefalse \fi}
  1037. \lst@Key{captionpos}{t}{\def\lst@captionpos{#1}}
  1038. \lst@Key{abovecaptionskip}\smallskipamount{\def\lst@abovecaption{#1}}
  1039. \lst@Key{belowcaptionskip}\smallskipamount{\def\lst@belowcaption{#1}}
  1040. \lst@Key{label}\relax{\def\lst@label{#1}}
  1041. \lst@Key{title}\relax{\def\lst@title{#1}\let\lst@caption\relax}
  1042. \lst@Key{caption}\relax{\lstKV@OptArg[{#1}]{#1}%
  1043. {\def\lst@caption{##2}\def\lst@@caption{##1}}%
  1044. \let\lst@title\@empty}
  1045. \lst@AddToHook{PreSet}
  1046. {\let\lst@caption\@empty \let\lst@@caption\@empty
  1047. \let\lst@title\@empty \let\lst@label\@empty}
  1048. \lst@AddToHook{TextStyle}
  1049. {\let\lst@caption\@empty \let\lst@@caption\@empty
  1050. \let\lst@title\@empty \let\lst@label\@empty}
  1051. \@ifundefined{thechapter}
  1052. {\newcounter{lstlisting}
  1053. \renewcommand\thelstlisting{\@arabic\c@lstlisting}}
  1054. {\newcounter{lstlisting}[chapter]
  1055. \renewcommand\thelstlisting
  1056. {\ifnum \c@chapter>\z@ \thechapter.\fi \@arabic\c@lstlisting}}
  1057. \lst@UserCommand\lstlistingname{Listing}
  1058. \def\lst@MakeCaption#1{%
  1059. \ifx #1t%
  1060. \ifx\lst@@caption\@empty\expandafter\lst@HRefStepCounter \else
  1061. \expandafter\refstepcounter
  1062. \fi {lstlisting}%
  1063. \ifx\lst@label\@empty\else \label{\lst@label}\fi
  1064. \fi
  1065. \ifx\lst@caption\@empty\else
  1066. \lst@IfSubstring #1\lst@captionpos
  1067. {\par\normalsize\normalfont
  1068. \ifx\lst@title\@empty
  1069. \expandafter\@makecaption
  1070. \else
  1071. \expandafter\lst@maketitle
  1072. \fi
  1073. {\noindent\lstlistingname
  1074. \ifx\lst@@caption\@empty\else~\thelstlisting\fi}%
  1075. \lst@caption}{}%
  1076. \fi}
  1077. \def\lst@maketitle#1#2{%
  1078. \vskip\abovecaptionskip
  1079. \sbox\@tempboxa{\lst@title}%
  1080. \ifdim \wd\@tempboxa >\hsize
  1081. \lst@title\par
  1082. \else
  1083. \global \@minipagefalse
  1084. \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
  1085. \fi
  1086. \vskip\belowcaptionskip}
  1087. \AtBeginDocument{\@ifundefined{as@makecaption}{}{%
  1088. \def\lst@maketitle#1#2{%
  1089. \vskip\abovecaptionskip
  1090. \setlength{\as@captionwidth}{\linewidth}%
  1091. \setlength{\leftskip}{\captionmargin}%
  1092. \setlength{\rightskip}{\captionmargin}%
  1093. \addtolength{\as@captionwidth}{-2\captionmargin}%
  1094. \captionfont
  1095. \sbox{\as@captionbox}{\lst@title}%
  1096. \ifdim \wd\as@captionbox >\as@captionwidth
  1097. \as@caption\ignorespaces\lst@title
  1098. \else
  1099. \as@shortcaption\ignorespaces\lst@title
  1100. \fi
  1101. \vskip\belowcaptionskip}%
  1102. }%
  1103. \@ifundefined{caption@make}{}{%
  1104. \def\lst@maketitle#1#2{%
  1105. \begingroup
  1106. \captionstyle{lsttitle}\@makecaption{}\lst@title
  1107. \endgroup}
  1108. \newcaptionstyle{lsttitle}{\caption@make{lsttitle}}%
  1109. \def\caption@@@lsttitle{\captiontext\par}%
  1110. }}
  1111. \def\lst@HRefStepCounter#1{%
  1112. \c@lstlisting\lst@neglisting
  1113. \advance\c@lstlisting\m@ne \xdef\lst@neglisting{\the\c@lstlisting}%
  1114. \ifx\hyper@refstepcounter\@undefined\else
  1115. \hyper@refstepcounter{#1}%
  1116. \fi}
  1117. \gdef\lst@neglisting{\z@}% init
  1118. \lst@Key{boxpos}{c}{\def\lst@boxpos{#1}}
  1119. \def\lst@boxtrue{\let\lst@ifbox\iftrue}
  1120. \let\lst@ifbox\iffalse
  1121. \lst@Key{float}\relax[\lst@floatplacement]{\edef\lst@float{#1}}
  1122. \lst@Key{floatplacement}{tbp}{\def\lst@floatplacement{#1}}
  1123. \lst@AddToHook{PreSet}{\let\lst@float\relax}
  1124. \lst@AddToHook{TextStyle}{\let\lst@float\relax}
  1125. \AtBeginDocument{%
  1126. \@ifundefined{c@float@type}%
  1127. {\edef\ftype@lstlisting{\ifx\c@figure\@undefined 1\else 4\fi}}
  1128. {\edef\ftype@lstlisting{\the\c@float@type}%
  1129. \addtocounter{float@type}{\value{float@type}}}%
  1130. }
  1131. \lst@Key{aboveskip}\medskipamount{\def\lst@aboveskip{#1}}
  1132. \lst@Key{belowskip}\medskipamount{\def\lst@belowskip{#1}}
  1133. \lst@AddToHook{TextStyle}
  1134. {\let\lst@aboveskip\z@ \let\lst@belowskip\z@}
  1135. \def\lst@Init#1{%
  1136. \begingroup
  1137. \ifx\lst@float\relax\else
  1138. \edef\@tempa{\noexpand\@float{lstlisting}[\lst@float]}%
  1139. \expandafter\@tempa
  1140. \fi
  1141. \ifhmode\ifinner \lst@boxtrue \fi\fi
  1142. \lst@ifbox
  1143. \lsthk@BoxUnsafe
  1144. \hbox to\z@\bgroup
  1145. $\if t\lst@boxpos \vtop
  1146. \else \if b\lst@boxpos \vbox
  1147. \else \vcenter \fi\fi
  1148. \bgroup
  1149. \else
  1150. \par\penalty-50\relax
  1151. \vspace\lst@aboveskip
  1152. \fi
  1153. \normalbaselines
  1154. \abovecaptionskip\lst@abovecaption\relax
  1155. \belowcaptionskip\lst@belowcaption\relax
  1156. \lst@MakeCaption t%
  1157. \lsthk@PreInit \lsthk@Init
  1158. \everypar{\lsthk@EveryLine\lsthk@EveryPar}%
  1159. \lsthk@InitVars \lsthk@InitVarsBOL
  1160. \lst@Let{13}\lst@MProcessListing
  1161. \let\lst@Backslash#1%
  1162. \lst@EnterMode{\lst@Pmode}{\lst@SelectCharTable}}
  1163. \lst@AddToHook{InitVars}
  1164. {\rightskip\z@ \leftskip\z@ \parfillskip=\z@ plus 1fil
  1165. \let\par\@@par}
  1166. \lst@AddToHook{EveryLine}{}% init
  1167. \lst@AddToHook{EveryPar}{}% init
  1168. \lst@Key{showlines}f[t]{\lstKV@SetIf{#1}\lst@ifshowlines}
  1169. \def\lst@DeInit{%
  1170. \lst@PrintToken \lst@EOLUpdate
  1171. \lst@RemoveNewLine\@empty
  1172. \lst@RemoveNewLine{%
  1173. \lst@ifshowlines
  1174. \lst@TrackNewLines
  1175. \else
  1176. \setbox\@tempboxa\vbox{\lst@TrackNewLines}%
  1177. \fi}%
  1178. \par\removelastskip
  1179. \everypar{}\lsthk@ExitVars \lsthk@DeInit
  1180. \lst@MakeCaption b%
  1181. \lst@ifbox
  1182. \egroup $\hss \egroup
  1183. \vrule\@width\lst@maxwidth\@height\z@\@depth\z@
  1184. \else
  1185. \par\penalty-50\vspace\lst@belowskip
  1186. \fi
  1187. \ifx\lst@float\relax\else
  1188. \expandafter\end@float
  1189. \fi
  1190. \endgroup}
  1191. \newdimen\lst@maxwidth % \global
  1192. \lst@AddToHook{InitVars}{\global\lst@maxwidth\z@}
  1193. \lst@AddToHook{InitVarsEOL}
  1194. {\ifdim\lst@currlwidth>\lst@maxwidth
  1195. \global\lst@maxwidth\lst@currlwidth
  1196. \fi}
  1197. \def\lst@EOLUpdate{\lsthk@EOL \lsthk@InitVarsEOL \lsthk@InitVarsBOL}
  1198. \def\lst@MProcessListing{%
  1199. \lst@PrintToken \lst@EOLUpdate \global\advance\lst@lineno\@ne
  1200. \ifnum \lst@lineno>\lst@lastline
  1201. \expandafter\lst@EndProcessListing
  1202. \else
  1203. \expandafter\lst@BOLGobble
  1204. \fi}
  1205. \let\lst@EndProcessListing\endinput
  1206. \lst@Key{gobble}{0}{\def\lst@gobble{#1}}
  1207. \def\lst@BOLGobble{%
  1208. \ifnum\lst@gobble>\z@
  1209. \@tempcnta\lst@gobble\relax
  1210. \expandafter\lst@BOLGobble@
  1211. \fi}
  1212. \def\lst@BOLGobble@@{%
  1213. \ifnum\@tempcnta>\z@
  1214. \expandafter\lst@BOLGobble@
  1215. \fi}
  1216. \def\lstenv@BOLGobble@@{%
  1217. \lst@IfNextChars\lstenv@endstring{\lstenv@End}%
  1218. {\advance\@tempcnta\m@ne \expandafter\lst@BOLGobble@@\lst@eaten}}
  1219. \def\lst@BOLGobble@#1{%
  1220. \let\lst@next#1%
  1221. \ifx \lst@next\relax\else
  1222. \ifx \lst@next\lst@MProcessListing\else
  1223. \ifx \lst@next\lst@ProcessFormFeed\else
  1224. \ifx \lst@next\lstenv@backslash
  1225. \let\lst@next\lstenv@BOLGobble@@
  1226. \else
  1227. \let\lst@next\lst@BOLGobble@@
  1228. \ifx #1\lst@ProcessTabulator
  1229. \advance\@tempcnta-\lst@tabsize\relax
  1230. \ifnum\@tempcnta<\z@
  1231. \lst@length-\@tempcnta \lst@PreGotoTabStop
  1232. \fi
  1233. \else
  1234. \advance\@tempcnta\m@ne
  1235. \fi
  1236. \fi \fi \fi \fi
  1237. \lst@next}
  1238. \lst@AddToHookExe{PreSet}{\global\let\lst@intname\@empty}
  1239. \lst@AddToHook{PreInit}{%
  1240. \let\lst@arg\lst@intname \lst@ReplaceIn\lst@arg\lst@filenamerpl
  1241. \global\let\lst@name\lst@arg}
  1242. \def\lst@filenamerpl{_\textunderscore $\textdollar -\textendash}
  1243. \def\l@lstlisting#1#2{\@dottedtocline{1}{1.5em}{2.3em}{#1}{#2}}
  1244. \lst@AddToHook{Init}
  1245. {\ifx\lst@@caption\@empty
  1246. \ifx\lst@caption\@empty
  1247. \lst@ifcontinue\else
  1248. \ifx\lst@intname\@empty \else \def\lst@temp{ }%
  1249. \ifx\lst@intname\lst@temp \else
  1250. \addcontentsline{lol}{lstlisting}\lst@name
  1251. \fi\fi
  1252. \fi
  1253. \fi
  1254. \else
  1255. \addcontentsline{lol}{lstlisting}%
  1256. {\protect\numberline{\thelstlisting}\lst@@caption}%
  1257. \fi}
  1258. \lst@UserCommand\lstlistlistingname{Listings}
  1259. \lst@UserCommand\lstlistoflistings{\bgroup
  1260. \let\contentsname\lstlistlistingname
  1261. \let\lst@temp\@starttoc \def\@starttoc##1{\lst@temp{lol}}%
  1262. \tableofcontents \egroup}
  1263. \newcommand\lstinline[1][]{%
  1264. \leavevmode\hbox\bgroup
  1265. \def\lst@boxpos{b}\let\lst@ifflexible\iftrue
  1266. \lsthk@PreSet\lstset{#1}%
  1267. \lsthk@TextStyle \lst@Init\relax
  1268. \everypar{}\let\lsthk@Endgroup\@empty
  1269. \lstinline@}
  1270. \def\lstinline@#1{\lst@IfNextCharActive{\lst@InlineM#1}{\lst@InlineJ#1}}
  1271. \lst@AddToHook{TextStyle}{}% init
  1272. \lst@AddToHook{SelectCharTable}{\lst@inlinechars}
  1273. \global\let\lst@inlinechars\@empty
  1274. \def\lst@InlineM#1{\gdef\lst@inlinechars{%
  1275. \lst@Def{`#1}{\lst@DeInit\egroup \global\let\lst@inlinechars\@empty}%
  1276. \lst@Def{13}{\lst@DeInit\egroup \global\let\lst@inlinechars\@empty
  1277. \PackageError{Listings}{lstinline ended by EOL}\@ehc}}%
  1278. \lst@inlinechars}
  1279. \def\lst@InlineJ#1{%
  1280. \def\lst@temp##1#1{%
  1281. \let\lst@arg\@empty \lst@InsideConvert{##1}\lst@arg
  1282. \lst@DeInit\egroup}%
  1283. \lst@temp}
  1284. \newcommand\lstinputlisting[2][]{%
  1285. \def\lst@set{#1}%
  1286. \IfFileExists{#2}%
  1287. {\lst@InputListing{#2}}%
  1288. {\filename@parse{#2}%
  1289. \edef\reserved@a{\noexpand\lst@MissingFileError
  1290. {\filename@area\filename@base}%
  1291. {\ifx\filename@ext\relax tex\else\filename@ext\fi}}%
  1292. \reserved@a}%
  1293. \@doendpe \@newlistfalse \ignorespaces}
  1294. \def\lst@MissingFileError#1#2{%
  1295. \typeout{^^J! Package Listings Error: File `#1.#2' not found.^^J^^J%
  1296. Type X to quit or <RETURN> to proceed,^^J%
  1297. or enter new name. (Default extension: #2)^^J}%
  1298. \message{Enter file name: }%
  1299. {\endlinechar\m@ne \global\read\m@ne to\@gtempa}%
  1300. \ifx\@gtempa\@empty \else %
  1301. \def\reserved@a{x}\ifx\reserved@a\@gtempa\batchmode\@@end\fi
  1302. \def\reserved@a{X}\ifx\reserved@a\@gtempa\batchmode\@@end\fi
  1303. \filename@parse\@gtempa %
  1304. \edef\filename@ext{%
  1305. \ifx\filename@ext\relax#2\else\filename@ext\fi}%
  1306. \edef\reserved@a{\noexpand\IfFileExists %
  1307. {\filename@area\filename@base.\filename@ext}%
  1308. {\noexpand\lst@InputListing %
  1309. {\filename@area\filename@base.\filename@ext}}%
  1310. {\noexpand\lst@MissingFileError
  1311. {\filename@area\filename@base}{\filename@ext}}}%
  1312. \expandafter\reserved@a %
  1313. \fi}
  1314. \def\lst@InputListing#1{%
  1315. \begingroup
  1316. \lsthk@PreSet \gdef\lst@intname{#1}%
  1317. \expandafter\lstset\expandafter{\lst@set}%
  1318. \lst@ifprint
  1319. \lst@Init\relax \let\lst@gobble\z@
  1320. \lst@SkipToFirst \input{#1}\lst@DeInit
  1321. \else
  1322. \begin{center}%
  1323. \footnotesize --- Listing of #1 has been skipped. ---
  1324. \end{center}%
  1325. \fi
  1326. \endgroup}
  1327. \def\lst@SkipToFirst{%
  1328. \ifnum \lst@lineno<\lst@firstline
  1329. \lst@BeginDropInput\lst@Pmode
  1330. \lst@Let{13}\lst@MSkipToFirst
  1331. \lst@Let{10}\lst@MSkipToFirst
  1332. \else
  1333. \expandafter\lst@BOLGobble
  1334. \fi}
  1335. \def\lst@MSkipToFirst{%
  1336. \global\advance\lst@lineno\@ne
  1337. \ifnum \lst@lineno=\lst@firstline
  1338. \lst@LeaveMode \global\let\lst@newlines\@empty
  1339. \lsthk@InitVarsBOL
  1340. \expandafter\lst@BOLGobble
  1341. \fi}
  1342. \def\lstenv@DroppedWarning{%
  1343. \ifx\lst@dropped\@undefined\else
  1344. \PackageWarning{Listings}{Text dropped after begin of listing}%
  1345. \fi}
  1346. \let\lst@dropped\@undefined % init
  1347. \begingroup \lccode`\~=`\^^M\lowercase{%
  1348. \gdef\lstenv@Process#1{%
  1349. \ifx~#1%
  1350. \lstenv@DroppedWarning \let\lst@next\lst@SkipToFirst
  1351. \else\ifx^^J#1%
  1352. \lstenv@DroppedWarning \let\lst@next\lstenv@ProcessJ
  1353. \else
  1354. \let\lst@dropped#1\let\lst@next\lstenv@Process
  1355. \fi \fi
  1356. \lst@next}
  1357. }\endgroup
  1358. \def\lstenv@ProcessJ{%
  1359. \let\lst@arg\@empty
  1360. \ifx\@currenvir\lstenv@name
  1361. \expandafter\lstenv@ProcessJEnv
  1362. \else
  1363. \expandafter\def\expandafter\lst@temp\expandafter##1%
  1364. \csname end\lstenv@name\endcsname
  1365. {\lst@InsideConvert{##1}\lstenv@ProcessJ@}%
  1366. \expandafter\lst@temp
  1367. \fi}
  1368. \begingroup \lccode`\~=`\\\lowercase{%
  1369. \gdef\lstenv@ProcessJ@{%
  1370. \lst@lExtend\lst@arg
  1371. {\expandafter\ \expandafter~\lstenv@endstring}%
  1372. \catcode10=\active \lst@Let{10}\lst@MProcessListing
  1373. \lst@SkipToFirst \lst@arg}
  1374. }\endgroup
  1375. \def\lstenv@ProcessJEnv#1\end#2{\def\lst@temp{#2}%
  1376. \ifx\lstenv@name\lst@temp
  1377. \lst@InsideConvert{#1}%
  1378. \expandafter\lstenv@ProcessJ@
  1379. \else
  1380. \lst@InsideConvert{#1\\end\{#2\}}%
  1381. \expandafter\lstenv@ProcessJEnv
  1382. \fi}
  1383. \def\lstenv@backslash{%
  1384. \lst@IfNextChars\lstenv@endstring
  1385. {\lstenv@End}%
  1386. {\expandafter\lsts@backslash \lst@eaten}}%
  1387. \def\lstenv@End{%
  1388. \ifx\@currenvir\lstenv@name
  1389. \edef\lst@next{\noexpand\end{\lstenv@name}}%
  1390. \else
  1391. \def\lst@next{\csname end\lstenv@name\endcsname}%
  1392. \fi
  1393. \lst@next}
  1394. \lst@UserCommand\lstnewenvironment#1#2#{%
  1395. \@ifundefined{#1}%
  1396. {\lst@false \let\lst@arg\@empty
  1397. \lst@FVConvert{#1}\@nil
  1398. \expandafter\lstnewenvironment@\lst@arg{#1}{#2}}%
  1399. {\PackageError{Listings}{Environment `#1' already defined}\@eha
  1400. \@gobbletwo}}
  1401. \def\@tempa#1#2#3{%
  1402. \gdef\lstnewenvironment@##1##2##3##4##5{%
  1403. \global\@namedef{end##2}{\lstenv@Error{##2}}%
  1404. \global\@namedef{##2}{\def\lstenv@name{##2}%
  1405. \begingroup \catcode\active=\active \csname##2@\endcsname}%
  1406. \let\l@ngrel@x\global
  1407. \expandafter\new@command\csname##2@\endcsname##3%
  1408. {\lsthk@PreSet ##4%
  1409. \ifx\@currenvir\lstenv@name
  1410. \def\lstenv@endstring{#1#2##1#3}%
  1411. \else
  1412. \def\lstenv@endstring{#1##1}%
  1413. \fi
  1414. \@namedef{end##2}{\lst@DeInit ##5\endgroup
  1415. \@doendpe \@ignoretrue}%
  1416. \lst@Init\lstenv@backslash
  1417. \let\lst@EndProcessListing\lstenv@SkipToEnd
  1418. \lst@ifprint
  1419. \expandafter\lstenv@Process
  1420. \else
  1421. \expandafter\lstenv@SkipToEnd
  1422. \fi}}%
  1423. }
  1424. \let\lst@arg\@empty \lst@false \lst@FVConvert{end}\{\}\@nil
  1425. \expandafter\@tempa\lst@arg
  1426. \begingroup \lccode`\~=`\\\lowercase{%
  1427. \gdef\lstenv@SkipToEnd{%
  1428. \long\expandafter\def\expandafter\lst@temp\expandafter##\expandafter
  1429. 1\expandafter~\lstenv@endstring{\lstenv@End}%
  1430. \lst@temp}
  1431. }\endgroup
  1432. \def\lstenv@Error#1{\PackageError{Listings}{Extra \string\end#1}%
  1433. {I'm ignoring this, since I wasn't doing a \csname#1\endcsname.}}
  1434. \begingroup \lccode`\~=`\^^M\lowercase{%
  1435. \gdef\lst@TestEOLChar#1{%
  1436. \ifx ~#1\@empty \lst@EOLCharError \else
  1437. \ifx^^J#1\@empty \lst@EOLCharError \else
  1438. \gdef\lst@intname{#1}%
  1439. \fi \fi}
  1440. }\endgroup
  1441. \def\lst@EOLCharError{%
  1442. \PackageError{Listings}%
  1443. {Oops! It seems you've forgotten the argument to\MessageBreak
  1444. a listing environment. Assuming empty argument}%
  1445. {Type <RETURN> to proceed.}}
  1446. \lstnewenvironment{lstlisting}[2][]
  1447. {\lst@TestEOLChar{#2}%
  1448. \lstset{#1}%
  1449. \csname lst@SetFirstLabel\endcsname}
  1450. {\csname lst@SaveFirstLabel\endcsname}
  1451. \lst@Key{fancyvrb}\relax[t]{%
  1452. \lstKV@SetIf{#1}\lst@iffancyvrb
  1453. \lstFV@fancyvrb}
  1454. \ifx\lstFV@fancyvrb\@undefined
  1455. \gdef\lstFV@fancyvrb{\lst@RequireAspects{fancyvrb}\lstFV@fancyvrb}
  1456. \fi
  1457. \@ifundefined{ocp}{}
  1458. {\lst@AddToHook{OutputBox}{\lsthk@OmegaOutputBox}
  1459. \lst@AddToHook{OmegaOutputBox}{}}
  1460. \lst@AddToHook{OmegaOutputBox}
  1461. {\let\lst@ProcessLetter\@firstofone
  1462. \let\lst@ProcessDigit\@firstofone
  1463. \let\lst@ProcessOther\@firstofone
  1464. \let\lst@ProcessString@b\@firstofone
  1465. \let\lst@ProcessString@d\@firstofone
  1466. \let\lst@ProcessString@m\@firstofone
  1467. \let\lst@ProcessString@bd\@firstofone
  1468. \let\lst@ProcessString@db\@firstofone}
  1469. \DeclareOption*{\expandafter\lst@ProcessOption\CurrentOption\relax}
  1470. \def\lst@ProcessOption#1#2\relax{%
  1471. \ifx #1!%
  1472. \lst@DeleteKeysIn\lst@loadaspects{#2}%
  1473. \else
  1474. \lst@lAddTo\lst@loadaspects{,#1#2}%
  1475. \fi}
  1476. \ifx\lst@loadaspects\@undefined
  1477. \def\lst@loadaspects{strings,comments,escape,style,language,%
  1478. keywords,labels,lineshape,frames,emph,breaklines,index}%
  1479. \fi
  1480. \lst@AddToHook{DeInit}{\everypar{}}
  1481. \def\lst@DefineSAC#1#2#3{%
  1482. \ifx\@empty#3%
  1483. \expandafter\@gobblethree
  1484. \else
  1485. \lccode`\~=`#3\lccode`\/=`#3\lowercase{\def\lst@temp{#1/}}%
  1486. \lowercase{\ifx~}\lst@temp\else % not defined yet
  1487. \lowercase{\expandafter\let\csname\@lst s@#2/\endcsname~%
  1488. \let~}\lst@temp
  1489. \fi
  1490. \fi
  1491. \lst@DefineSAC#1{#2}}
  1492. \lst@AddToHook{Init}{\lst@ifactivechars \catcode13\active \fi}
  1493. \def\lst@MakeCaption#1{%
  1494. \ifx #1t%
  1495. \ifx\lst@@caption\@empty\expandafter\lst@HRefStepCounter \else
  1496. \expandafter\refstepcounter
  1497. \fi {lstlisting}%
  1498. \ifx\lst@label\@empty\else \label{\lst@label}\fi
  1499. \fi
  1500. \ifx\lst@caption\@empty\else
  1501. \lst@IfSubstring #1\lst@captionpos
  1502. {\lst@Let{13}\space
  1503. \protected@edef\lst@caption{\lst@caption}%
  1504. \protected@edef\lst@@caption{\lst@@caption}%
  1505. \par\normalsize\normalfont
  1506. \ifx\lst@title\@empty
  1507. \expandafter\@makecaption
  1508. \else
  1509. \expandafter\lst@maketitle
  1510. \fi
  1511. {\noindent\lstlistingname
  1512. \ifx\lst@@caption\@empty\else~\thelstlisting\fi}%
  1513. \lst@caption}{}%
  1514. \fi}
  1515. \lst@NewMode\lst@commentmode
  1516. \gdef\lst@BeginCDATA#1\@empty{%
  1517. \lst@TrackNewLines \lst@PrintToken
  1518. \lst@EnterMode\lst@GPmode{}\let\lst@ifmode\iffalse
  1519. \lst@mode\lst@insidemode #1\lst@mode\lst@GPmode\relax\lst@modetrue}
  1520. \IfFileExists{lstpatch.sty}
  1521. {\def\lst@topatch{0.19}\input{lstpatch.sty}%
  1522. \let\lst@next\relax
  1523. \ifx\lstlanguage@\@undefined\else \let\lst@next\@empty \fi
  1524. \ifx\lst@version\lst@topatch\else \let\lst@next\@empty \fi
  1525. \ifx\lst@next\relax\else
  1526. \typeout{^^J%
  1527. ***^^J%
  1528. *** Patch file `lstpatch.sty' for version \lst@topatch^^J%
  1529. *** is not suitable for `listings.sty' version \lst@version.^^J%
  1530. *** Please delete old patch files and try again.^^J%
  1531. ***^^J}%
  1532. \batchmode \@@end
  1533. \fi}{}
  1534. \let\lst@ifsavemem\iffalse
  1535. \DeclareOption{savemem}{\let\lst@ifsavemem\iftrue}
  1536. \DeclareOption{noaspects}{\let\lst@loadaspects\@empty}
  1537. \ProcessOptions
  1538. \lst@RequireAspects\lst@loadaspects
  1539. \let\lst@loadaspects\@empty
  1540. \lst@UseHook{SetStyle}\lst@UseHook{EmptyStyle}
  1541. \lst@UseHook{SetLanguage}\lst@UseHook{EmptyLanguage}
  1542. \InputIfFileExists{listings.cfg}{}{}
  1543. \InputIfFileExists{lstlocal.cfg}{}{}
  1544. \endinput
  1545. %%
  1546. %% End of file `listings.sty'.