listings.sty 65 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311321331341351361371381391401411421431441451461471481491501511521531541551561571581591601611621631641651661671681691701711721731741751761771781791801811821831841851861871881891901911921931941951961971981992002012022032042052062072082092102112122132142152162172182192202212222232242252262272282292302312322332342352362372382392402412422432442452462472482492502512522532542552562572582592602612622632642652662672682692702712722732742752762772782792802812822832842852862872882892902912922932942952962972982993003013023033043053063073083093103113123133143153163173183193203213223233243253263273283293303313323333343353363373383393403413423433443453463473483493503513523533543553563573583593603613623633643653663673683693703713723733743753763773783793803813823833843853863873883893903913923933943953963973983994004014024034044054064074084094104114124134144154164174184194204214224234244254264274284294304314324334344354364374384394404414424434444454464474484494504514524534544554564574584594604614624634644654664674684694704714724734744754764774784794804814824834844854864874884894904914924934944954964974984995005015025035045055065075085095105115125135145155165175185195205215225235245255265275285295305315325335345355365375385395405415425435445455465475485495505515525535545555565575585595605615625635645655665675685695705715725735745755765775785795805815825835845855865875885895905915925935945955965975985996006016026036046056066076086096106116126136146156166176186196206216226236246256266276286296306316326336346356366376386396406416426436446456466476486496506516526536546556566576586596606616626636646656666676686696706716726736746756766776786796806816826836846856866876886896906916926936946956966976986997007017027037047057067077087097107117127137147157167177187197207217227237247257267277287297307317327337347357367377387397407417427437447457467477487497507517527537547557567577587597607617627637647657667677687697707717727737747757767777787797807817827837847857867877887897907917927937947957967977987998008018028038048058068078088098108118128138148158168178188198208218228238248258268278288298308318328338348358368378388398408418428438448458468478488498508518528538548558568578588598608618628638648658668678688698708718728738748758768778788798808818828838848858868878888898908918928938948958968978988999009019029039049059069079089099109119129139149159169179189199209219229239249259269279289299309319329339349359369379389399409419429439449459469479489499509519529539549559569579589599609619629639649659669679689699709719729739749759769779789799809819829839849859869879889899909919929939949959969979989991000100110021003100410051006100710081009101010111012101310141015101610171018101910201021102210231024102510261027102810291030103110321033103410351036103710381039104010411042104310441045104610471048104910501051105210531054105510561057105810591060106110621063106410651066106710681069107010711072107310741075107610771078107910801081108210831084108510861087108810891090109110921093109410951096109710981099110011011102110311041105110611071108110911101111111211131114111511161117111811191120112111221123112411251126112711281129113011311132113311341135113611371138113911401141114211431144114511461147114811491150115111521153115411551156115711581159116011611162116311641165116611671168116911701171117211731174117511761177117811791180118111821183118411851186118711881189119011911192119311941195119611971198119912001201120212031204120512061207120812091210121112121213121412151216121712181219122012211222122312241225122612271228122912301231123212331234123512361237123812391240124112421243124412451246124712481249125012511252125312541255125612571258125912601261126212631264126512661267126812691270127112721273127412751276127712781279128012811282128312841285128612871288128912901291129212931294129512961297129812991300130113021303130413051306130713081309131013111312131313141315131613171318131913201321132213231324132513261327132813291330133113321333133413351336133713381339134013411342134313441345134613471348134913501351135213531354135513561357135813591360136113621363136413651366136713681369137013711372137313741375137613771378137913801381138213831384138513861387138813891390139113921393139413951396139713981399140014011402140314041405140614071408140914101411141214131414141514161417141814191420142114221423142414251426142714281429143014311432143314341435143614371438143914401441144214431444144514461447144814491450145114521453145414551456145714581459146014611462146314641465146614671468146914701471147214731474147514761477147814791480148114821483148414851486148714881489149014911492149314941495149614971498149915001501150215031504150515061507150815091510151115121513151415151516151715181519152015211522152315241525152615271528152915301531153215331534153515361537153815391540154115421543154415451546154715481549155015511552155315541555155615571558155915601561156215631564156515661567156815691570157115721573157415751576157715781579158015811582158315841585158615871588158915901591159215931594159515961597159815991600160116021603160416051606160716081609161016111612161316141615161616171618161916201621162216231624162516261627162816291630163116321633163416351636163716381639164016411642164316441645164616471648164916501651165216531654165516561657165816591660166116621663166416651666166716681669167016711672167316741675167616771678167916801681168216831684168516861687168816891690169116921693169416951696169716981699170017011702170317041705170617071708170917101711171217131714171517161717171817191720172117221723172417251726172717281729173017311732173317341735173617371738173917401741174217431744174517461747174817491750175117521753175417551756175717581759176017611762176317641765176617671768176917701771177217731774177517761777177817791780178117821783178417851786178717881789179017911792179317941795179617971798179918001801180218031804180518061807180818091810181118121813181418151816181718181819182018211822182318241825182618271828
  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 -- 2002 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. %% Permission is granted to modify the listings package as well as
  19. %% lstdrvrs.dtx. You are not allowed to distribute a modified version
  20. %% of the package or lstdrvrs.dtx unless you change the file names and
  21. %% provide the original files. In any case it is better to contact the
  22. %% address below; other users will welcome removed bugs, new features,
  23. %% and additional programming languages.
  24. %%
  25. %% The listings package is free software.
  26. %%
  27. %% However, if you distribute the package as part of a commercial
  28. %% product or if you use the package to prepare a commercial document
  29. %% (books, journals, and so on), I'd like to encourage you to make a
  30. %% donation to the LaTeX3 fund. The size of this `license fee' should
  31. %% depend on the value of the package for your product. For more
  32. %% information about LaTeX see http://www.latex-project.org
  33. %%
  34. %% No matter whether you use the package for a commercial or
  35. %% non-commercial document, please send me a copy of the document (.dvi,
  36. %% .ps, .pdf, hardcopy, etc.) to support further development---it is
  37. %% easier to introduce new features or simplify things if I see how the
  38. %% package is used by other people.
  39. %%
  40. %% Send comments and ideas on the package, error reports and additional
  41. %% programming languages to <[email protected]>.
  42. %%
  43. \def\filedate{2002/04/01}
  44. \def\fileversion{1.0}
  45. \NeedsTeXFormat{LaTeX2e}
  46. \ProvidesPackage{listings}
  47. [\filedate\space\fileversion\space(Carsten Heinz)]
  48. \def\lst@CheckVersion#1{\edef\reserved@a{#1}%
  49. \ifx\lst@version\reserved@a \expandafter\@gobble
  50. \else \expandafter\@firstofone \fi}
  51. \let\lst@version\fileversion
  52. \def\lst@InputCatcodes{%
  53. \makeatletter \catcode`\"12%
  54. \catcode`\^^@\active
  55. \catcode`\^^I9%
  56. \catcode`\^^L9%
  57. \catcode`\^^M9%
  58. \catcode`\%14%
  59. \catcode`\~\active}
  60. \def\lst@RestoreCatcodes#1{%
  61. \ifx\relax#1\else
  62. \noexpand\catcode`\noexpand#1\the\catcode`#1\relax
  63. \expandafter\lst@RestoreCatcodes
  64. \fi}
  65. \edef\lst@RestoreCatcodes{%
  66. \noexpand\lccode`\noexpand\/`\noexpand\/%
  67. \lst@RestoreCatcodes\"\^^I\^^M\~\^^@\relax}
  68. \lst@InputCatcodes
  69. \AtEndOfPackage{\lst@RestoreCatcodes}
  70. \def\@lst{lst}
  71. \def\lst@IfSubstring#1#2{%
  72. \def\lst@temp##1#1##2##3\relax{%
  73. \ifx \@empty##2\expandafter\@secondoftwo
  74. \else \expandafter\@firstoftwo \fi}%
  75. \expandafter\lst@temp#2#1\@empty\relax}
  76. \def\lst@IfOneOf#1\relax#2{%
  77. \def\lst@temp##1,#1,##2##3\relax{%
  78. \ifx \@empty##2\expandafter\@secondoftwo
  79. \else \expandafter\@firstoftwo \fi}%
  80. \expandafter\lst@temp\expandafter,#2,#1,\@empty\relax}
  81. \def\lst@DeleteKeysIn#1#2{%
  82. \expandafter\lst@DeleteKeysIn@\expandafter#1#2,\relax,}
  83. \def\lst@DeleteKeysIn@#1#2,{%
  84. \ifx\relax#2\@empty
  85. \expandafter\@firstoftwo\expandafter\lst@RemoveCommas
  86. \else
  87. \ifx\@empty#2\@empty\else
  88. \def\lst@temp##1,#2,##2{%
  89. ##1%
  90. \ifx\@empty##2\@empty\else
  91. \expandafter\lst@temp\expandafter,%
  92. \fi ##2}%
  93. \edef#1{\expandafter\lst@temp\expandafter,#1,#2,\@empty}%
  94. \fi
  95. \fi
  96. \lst@DeleteKeysIn@#1}
  97. \def\lst@RemoveCommas#1{\edef#1{\expandafter\lst@RC@#1\@empty}}
  98. \def\lst@RC@#1{\ifx,#1\expandafter\lst@RC@ \else #1\fi}
  99. \def\lst@ReplaceIn#1#2{%
  100. \expandafter\lst@ReplaceIn@\expandafter#1#2\@empty\@empty}
  101. \def\lst@ReplaceInArg#1#2{\lst@ReplaceIn@#1#2\@empty\@empty}
  102. \def\lst@ReplaceIn@#1#2#3{%
  103. \ifx\@empty#3\relax\else
  104. \def\lst@temp##1#2##2{%
  105. \ifx\@empty##2%
  106. \lst@lAddTo#1{##1}%
  107. \else
  108. \lst@lAddTo#1{##1#3}\expandafter\lst@temp
  109. \fi ##2}%
  110. \let\@tempa#1\let#1\@empty
  111. \expandafter\lst@temp\@tempa#2\@empty
  112. \expandafter\lst@ReplaceIn@\expandafter#1%
  113. \fi}
  114. \providecommand*\@gobblethree[3]{}
  115. \def\lst@GobbleNil#1\@nil{}
  116. \def\lst@Swap#1#2{#2#1}
  117. \def\lst@true{\let\lst@if\iftrue}
  118. \def\lst@false{\let\lst@if\iffalse}
  119. \lst@false
  120. \def\lst@IfNextCharsArg#1{%
  121. \def\lst@tofind{#1}\lst@IfNextChars\lst@tofind}
  122. \def\lst@IfNextChars#1#2#3{%
  123. \let\lst@tofind#1\def\@tempa{#2}\def\@tempb{#3}%
  124. \let\lst@eaten\@empty \lst@IfNextChars@}
  125. \def\lst@IfNextChars@{\expandafter\lst@IfNextChars@@\lst@tofind\relax}
  126. \def\lst@IfNextChars@@#1#2\relax#3{%
  127. \def\lst@tofind{#2}\lst@lAddTo\lst@eaten{#3}%
  128. \ifx#1#3%
  129. \ifx\lst@tofind\@empty
  130. \let\lst@next\@tempa
  131. \else
  132. \let\lst@next\lst@IfNextChars@
  133. \fi
  134. \expandafter\lst@next
  135. \else
  136. \expandafter\@tempb
  137. \fi}
  138. \def\lst@IfNextCharActive#1#2#3{%
  139. \begingroup \lccode`\~=`#3\lowercase{\endgroup
  140. \ifx~}#3%
  141. \def\lst@next{#1}%
  142. \else
  143. \def\lst@next{#2}%
  144. \fi \lst@next #3}
  145. \def\lst@for#1\do#2{%
  146. \def\lst@forbody##1{#2}%
  147. \@for\lst@forvar:=#1\do
  148. {\expandafter\lst@forbody\expandafter{\lst@forvar}}}
  149. \def\lst@MakeActive#1{%
  150. \let\lst@temp\@empty \lst@MakeActive@#1%
  151. \relax\relax\relax\relax\relax\relax\relax\relax\relax}
  152. \begingroup
  153. \catcode`\^^@=\active \catcode`\^^A=\active \catcode`\^^B=\active
  154. \catcode`\^^C=\active \catcode`\^^D=\active \catcode`\^^E=\active
  155. \catcode`\^^F=\active \catcode`\^^G=\active \catcode`\^^H=\active
  156. \gdef\lst@MakeActive@#1#2#3#4#5#6#7#8#9{\let\lst@next\relax
  157. \ifx#1\relax
  158. \else \lccode`\^^@=`#1%
  159. \ifx#2\relax
  160. \lowercase{\lst@lAddTo\lst@temp{^^@}}%
  161. \else \lccode`\^^A=`#2%
  162. \ifx#3\relax
  163. \lowercase{\lst@lAddTo\lst@temp{^^@^^A}}%
  164. \else \lccode`\^^B=`#3%
  165. \ifx#4\relax
  166. \lowercase{\lst@lAddTo\lst@temp{^^@^^A^^B}}%
  167. \else \lccode`\^^C=`#4%
  168. \ifx#5\relax
  169. \lowercase{\lst@lAddTo\lst@temp{^^@^^A^^B^^C}}%
  170. \else \lccode`\^^D=`#5%
  171. \ifx#6\relax
  172. \lowercase{\lst@lAddTo\lst@temp{^^@^^A^^B^^C^^D}}%
  173. \else \lccode`\^^E=`#6%
  174. \ifx#7\relax
  175. \lowercase{\lst@lAddTo\lst@temp{^^@^^A^^B^^C^^D^^E}}%
  176. \else \lccode`\^^F=`#7%
  177. \ifx#8\relax
  178. \lowercase{\lst@lAddTo\lst@temp{^^@^^A^^B^^C^^D^^E^^F}}%
  179. \else \lccode`\^^G=`#8%
  180. \ifx#9\relax
  181. \lowercase{\lst@lAddTo\lst@temp{^^@^^A^^B^^C^^D^^E^^F^^G}}%
  182. \else \lccode`\^^H=`#9%
  183. \lowercase{\lst@lAddTo\lst@temp{^^@^^A^^B^^C^^D^^E^^F^^G^^H}}%
  184. \let\lst@next\lst@MakeActive@
  185. \fi \fi \fi \fi \fi \fi \fi \fi \fi
  186. \lst@next}
  187. \endgroup
  188. \def\lst@DefActive#1#2{\lst@MakeActive{#2}\let#1\lst@temp}
  189. \def\lst@DefOther#1#2{%
  190. \begingroup \def#1{#2}\escapechar\m@ne \expandafter\endgroup
  191. \expandafter\lst@DefOther@\meaning#1\relax#1}
  192. \def\lst@DefOther@#1>#2\relax#3{\edef#3{\zap@space#2 \@empty}}
  193. \def\lst@InsideConvert#1{\lst@InsideConvert@#1 \@empty}
  194. \begingroup \lccode`\~=`\ \relax \lowercase{%
  195. \gdef\lst@InsideConvert@#1 #2{%
  196. \lst@MakeActive{#1}%
  197. \ifx\@empty#2%
  198. \lst@lExtend\lst@arg{\lst@temp}%
  199. \else
  200. \lst@lExtend\lst@arg{\lst@temp~}%
  201. \expandafter\lst@InsideConvert@
  202. \fi #2}
  203. }\endgroup
  204. \def\lst@XConvert{\@ifnextchar\bgroup \lst@XConvertArg\lst@XConvert@}
  205. \def\lst@XConvertArg#1{%
  206. {\lst@false \let\lst@arg\@empty
  207. \lst@XConvert#1\@nil
  208. \global\let\@gtempa\lst@arg}%
  209. \lst@lExtend\lst@arg{\expandafter{\@gtempa}}%
  210. \lst@XConvertNext}
  211. \def\lst@XConvert@#1{%
  212. \ifx\@nil#1\else
  213. \begingroup\lccode`\~=`#1\lowercase{\endgroup
  214. \lst@lAddTo\lst@arg~}%
  215. \expandafter\lst@XConvertNext
  216. \fi}
  217. \def\lst@XConvertNext{%
  218. \lst@if \expandafter\lst@XConvertX
  219. \else \expandafter\lst@XConvert \fi}
  220. \def\lst@XConvertX#1{%
  221. \ifx\@nil#1\else
  222. \lst@XConvertX@#1\relax
  223. \expandafter\lst@XConvert
  224. \fi}
  225. \def\lst@XConvertX@#1#2\relax{%
  226. \begingroup\lccode`\~=`#1\lowercase{\endgroup
  227. \lst@XCConvertX@@~}{#2}}
  228. \def\lst@XCConvertX@@#1#2{\lst@lAddTo\lst@arg{{#1#2}}}
  229. \def\lst@Require#1#2#3#4#5{%
  230. \begingroup
  231. \aftergroup\lst@true
  232. \ifx\@empty#3\@empty\else
  233. \def\lst@prefix{#2}\let\lst@require\@empty
  234. \edef\lst@temp{\expandafter\zap@space#3 \@empty}%
  235. \lst@for\lst@temp\do{%
  236. \ifx\@empty##1\@empty\else \lstKV@OptArg[]{##1}{%
  237. #4[####1]{####2}%
  238. \@ifundefined{\@lst\lst@prefix @\lst@malias $\lst@oalias}%
  239. {\edef\lst@require{\lst@require,\lst@malias $\lst@oalias}}%
  240. {}}%
  241. \fi}%
  242. \global\let\lst@loadaspects\@empty
  243. \lst@InputCatcodes
  244. \ifx\lst@require\@empty\else
  245. \lst@for{#5}\do{%
  246. \ifx\lst@require\@empty\else
  247. \InputIfFileExists{##1}{}{}%
  248. \fi}%
  249. \fi
  250. \ifx\lst@require\@empty\else
  251. \PackageError{Listings}{Couldn't load requested #1}%
  252. {The following #1s weren't loadable:^^J\@spaces
  253. \lst@require^^JThis may cause errors in the sequel.}%
  254. \aftergroup\lst@false
  255. \fi
  256. \ifx\lst@loadaspects\@empty\else
  257. \lst@RequireAspects\lst@loadaspects
  258. \fi
  259. \fi
  260. \endgroup}
  261. \def\lst@IfRequired[#1]#2{%
  262. \lst@NormedDef\lst@temp{[#1]#2}%
  263. \expandafter\lst@IfRequired@\lst@temp\relax}
  264. \def\lst@IfRequired@[#1]#2\relax#3{%
  265. \lst@IfOneOf #2$#1\relax\lst@require
  266. {\lst@DeleteKeysIn@\lst@require#2$#1,\relax,%
  267. \global\expandafter\let
  268. \csname\@lst\lst@prefix @#2$#1\endcsname\@empty
  269. #3}}
  270. \let\lst@require\@empty
  271. \def\lst@NoAlias[#1]#2{%
  272. \lst@NormedDef\lst@oalias{#1}\lst@NormedDef\lst@malias{#2}}
  273. \gdef\lst@LAS#1#2#3#4#5#6#7{%
  274. \lst@Require{#1}{#2}{#3}#4#5%
  275. #4#3%
  276. \@ifundefined{lst#2@\lst@malias$\lst@oalias}%
  277. {\PackageError{Listings}%
  278. {#1 \ifx\@empty\lst@oalias\else \lst@oalias\space of \fi
  279. \lst@malias\space undefined}%
  280. {The #1 is not loadable. \@ehc}}%
  281. {#6\csname\@lst#2@\lst@malias $\lst@oalias\endcsname #7}}
  282. \def\lst@RequireAspects#1{%
  283. \lst@Require{aspect}{asp}{#1}\lst@NoAlias\lstaspectfiles}
  284. \let\lstloadaspects\lst@RequireAspects
  285. \@ifundefined{lstaspectfiles}
  286. {\newcommand\lstaspectfiles{lstmisc0.sty,lstmisc.sty}}{}
  287. \gdef\lst@DefDriver#1#2#3#4{%
  288. \@ifnextchar[{\lst@DefDriver@{#1}{#2}#3#4}%
  289. {\lst@DefDriver@{#1}{#2}#3#4[]}}
  290. \gdef\lst@DefDriver@#1#2#3#4[#5]#6{%
  291. \def\lst@name{#1}\let\lst@if#4%
  292. \lst@NormedDef\lst@driver{\@lst#2@#6$#5}%
  293. \lst@IfRequired[#5]{#6}{\begingroup \lst@true}%
  294. {\begingroup}%
  295. \lst@setcatcodes
  296. \@ifnextchar[{\lst@XDefDriver{#1}#3}{\lst@DefDriver@@#3}}
  297. \gdef\lst@DefDriver@@#1#2{%
  298. \lst@if
  299. \global\@namedef{\lst@driver}{#1{#2}}%
  300. \fi
  301. \endgroup
  302. \@ifnextchar[\lst@XXDefDriver\@empty}
  303. \gdef\lst@XXDefDriver[#1]{%
  304. \ifx\@empty#1\@empty\else
  305. \lst@if
  306. \lstloadaspects{#1}%
  307. \else
  308. \@ifundefined{\lst@driver}{}%
  309. {\xdef\lst@loadaspects{\lst@loadaspects,#1}}%
  310. \fi
  311. \fi}
  312. \gdef\lst@XDefDriver#1#2[#3]#4#5{\lst@DefDriver@@#2{also#1=[#3]#4,#5}}
  313. \let\lst@UserCommand\gdef
  314. \newcommand*\lst@BeginAspect[2][]{%
  315. \def\lst@curraspect{#2}%
  316. \ifx \lst@curraspect\@empty
  317. \expandafter\lst@GobbleAspect
  318. \else
  319. \let\lst@next\@empty
  320. \lst@IfRequired[]{#2}%
  321. {\lst@RequireAspects{#1}%
  322. \lst@if\else \let\lst@next\lst@GobbleAspect \fi}%
  323. {\let\lst@next\lst@GobbleAspect}%
  324. \expandafter\lst@next
  325. \fi}
  326. \def\lst@EndAspect{%
  327. \csname\@lst patch@\lst@curraspect\endcsname
  328. \let\lst@curraspect\@empty}
  329. \long\def\lst@GobbleAspect#1\lst@EndAspect{\let\lst@curraspect\@empty}
  330. \def\lst@Key#1#2{%
  331. \@ifnextchar[{\lstKV@def{#1}{#2}}%
  332. {\def\lst@temp{\lst@Key@{#1}{#2}}
  333. \afterassignment\lst@temp
  334. \global\@namedef{KV@\@lst @#1}####1}}
  335. \def\lstKV@def#1#2[#3]{%
  336. \global\@namedef{KV@\@lst @#1@default\expandafter}\expandafter
  337. {\csname KV@\@lst @#1\endcsname{#3}}%
  338. \def\lst@temp{\lst@Key@{#1}{#2}}\afterassignment\lst@temp
  339. \global\@namedef{KV@\@lst @#1}##1}
  340. \def\lst@Key@#1#2{%
  341. \ifx\relax#2\@empty\else
  342. \begingroup \globaldefs\@ne
  343. \csname KV@\@lst @#1\endcsname{#2}%
  344. \endgroup
  345. \fi}
  346. \def\lst@UseHook#1{\csname\@lst hk@#1\endcsname}
  347. \def\lst@AddToHook{\lst@ATH@\iffalse\lst@AddTo}
  348. \def\lst@AddToHookExe{\lst@ATH@\iftrue\lst@AddTo}
  349. \def\lst@AddToHookAtTop{\lst@ATH@\iffalse\lst@AddToAtTop}
  350. \long\def\lst@ATH@#1#2#3#4{%
  351. \@ifundefined{\@lst hk@#3}{%
  352. \expandafter\gdef\csname\@lst hk@#3\endcsname{}}{}%
  353. \expandafter#2\csname\@lst hk@#3\endcsname{#4}%
  354. \def\lst@temp{#4}%
  355. #1% \iftrue|false
  356. \begingroup \globaldefs\@ne \lst@temp \endgroup
  357. \fi}
  358. \long\def\lst@AddTo#1#2{%
  359. \expandafter\gdef\expandafter#1\expandafter{#1#2}}
  360. \def\lst@AddToAtTop#1#2{\def\lst@temp{#2}%
  361. \expandafter\expandafter\expandafter\gdef
  362. \expandafter\expandafter\expandafter#1%
  363. \expandafter\expandafter\expandafter{\expandafter\lst@temp#1}}
  364. \def\lst@lAddTo#1#2{\expandafter\def\expandafter#1\expandafter{#1#2}}
  365. \def\lst@Extend#1#2{%
  366. \expandafter\lst@AddTo\expandafter#1\expandafter{#2}}
  367. \def\lst@lExtend#1#2{%
  368. \expandafter\lst@lAddTo\expandafter#1\expandafter{#2}}
  369. \RequirePackage{keyval}[1997/11/10]
  370. \def\lstKV@TwoArg#1#2{\gdef\@gtempa##1##2{#2}\@gtempa#1{}{}}
  371. \def\lstKV@ThreeArg#1#2{\gdef\@gtempa##1##2##3{#2}\@gtempa#1{}{}{}}
  372. \def\lstKV@FourArg#1#2{\gdef\@gtempa##1##2##3##4{#2}\@gtempa#1{}{}{}{}}
  373. \def\lstKV@OptArg[#1]#2#3{%
  374. \gdef\@gtempa[##1]##2{#3}\lstKV@OptArg@{#1}#2\@}
  375. \def\lstKV@OptArg@#1{\@ifnextchar[\lstKV@OptArg@@{\lstKV@OptArg@@[#1]}}
  376. \def\lstKV@OptArg@@[#1]#2\@{\@gtempa[#1]{#2}}
  377. \def\lstKV@XOptArg[#1]#2#3{%
  378. \global\let\@gtempa#3\lstKV@OptArg@{#1}#2\@}
  379. \def\lstKV@CSTwoArg#1#2{%
  380. \gdef\@gtempa##1,##2,##3\relax{#2}%
  381. \@gtempa#1,,\relax}
  382. \def\lstKV@SetIf#1{\lstKV@SetIf@#1\relax}
  383. \def\lstKV@SetIf@#1#2\relax#3{\lowercase{%
  384. \expandafter\let\expandafter#3%
  385. \csname if\ifx #1t}true\else false\fi\endcsname}
  386. \def\lstKV@SwitchCases#1#2#3{%
  387. \def\lst@temp##1\\#1&##2\\##3##4\@nil{%
  388. \ifx\@empty##3%
  389. #3%
  390. \else
  391. ##2%
  392. \fi
  393. }%
  394. \lst@temp\\#2\\#1&\\\@empty\@nil}
  395. \lst@UserCommand\lstset{\begingroup \lst@setcatcodes \lstset@}
  396. \def\lstset@#1{\endgroup \ifx\@empty#1\@empty\else\setkeys{lst}{#1}\fi}
  397. \def\lst@setcatcodes{\makeatletter \catcode`\"=12\relax}
  398. \def\lst@NewMode#1{%
  399. \ifx\@undefined#1%
  400. \lst@mode\lst@newmode\relax \advance\lst@mode\@ne
  401. \xdef\lst@newmode{\the\lst@mode}%
  402. \global\chardef#1=\lst@mode
  403. \lst@mode\lst@nomode
  404. \fi}
  405. \newcount\lst@mode
  406. \def\lst@newmode{\m@ne}% init
  407. \lst@NewMode\lst@nomode % init (of \lst@mode :-)
  408. \def\lst@UseDynamicMode{%
  409. \@tempcnta\lst@dynamicmode\relax \advance\@tempcnta\@ne
  410. \edef\lst@dynamicmode{\the\@tempcnta}%
  411. \expandafter\lst@Swap\expandafter{\expandafter{\lst@dynamicmode}}}
  412. \lst@AddToHook{InitVars}{\let\lst@dynamicmode\lst@newmode}
  413. \def\lst@EnterMode#1#2{%
  414. \bgroup \lst@mode=#1\relax #2%
  415. \lst@FontAdjust
  416. \lst@lAddTo\lst@entermodes{\lst@EnterMode{#1}{#2}}}
  417. \lst@AddToHook{InitVars}{\let\lst@entermodes\@empty}
  418. \def\lst@LeaveMode{%
  419. \ifnum\lst@mode=\lst@nomode\else
  420. \egroup \expandafter\lsthk@EndGroup
  421. \fi}
  422. \lst@AddToHook{EndGroup}{}% init
  423. \def\lst@InterruptModes{%
  424. \lst@Extend\lst@modestack{\expandafter{\lst@entermodes}}%
  425. \lst@LeaveAllModes}
  426. \lst@AddToHook{InitVars}{\global\let\lst@modestack\@empty}
  427. \def\lst@ReenterModes{%
  428. \ifx\lst@modestack\@empty\else
  429. \lst@LeaveAllModes
  430. \global\let\@gtempa\lst@modestack
  431. \global\let\lst@modestack\@empty
  432. \expandafter\lst@ReenterModes@\@gtempa\relax
  433. \fi}
  434. \def\lst@ReenterModes@#1#2{%
  435. \ifx\relax#2\@empty
  436. \gdef\@gtempa##1{#1}%
  437. \expandafter\@gtempa
  438. \else
  439. \lst@AddTo\lst@modestack{{#1}}%
  440. \expandafter\lst@ReenterModes@
  441. \fi
  442. {#2}}
  443. \def\lst@LeaveAllModes{%
  444. \ifnum\lst@mode=\lst@nomode
  445. \expandafter\lsthk@EndGroup
  446. \else
  447. \expandafter\egroup\expandafter\lst@LeaveAllModes
  448. \fi}
  449. \lst@AddToHook{ExitVars}{\lst@LeaveAllModes}
  450. \lst@NewMode\lst@Pmode
  451. \lst@NewMode\lst@GPmode
  452. \def\lst@modetrue{\let\lst@ifmode\iftrue \lsthk@ModeTrue}
  453. \let\lst@ifmode\iffalse % init
  454. \lst@AddToHook{ModeTrue}{}% init
  455. \def\lst@Lmodetrue{\let\lst@ifLmode\iftrue}
  456. \let\lst@ifLmode\iffalse % init
  457. \lst@AddToHook{EOL}{\@whilesw \lst@ifLmode\fi \lst@LeaveMode}
  458. \def\lst@NormedDef#1#2{\lowercase{\edef#1{\zap@space#2 \@empty}}}
  459. \def\lst@NormedNameDef#1#2{%
  460. \lowercase{\edef\lst@temp{\zap@space#1 \@empty}%
  461. \expandafter\xdef\csname\lst@temp\endcsname{\zap@space#2 \@empty}}}
  462. \def\lst@GetFreeMacro#1{%
  463. \@tempcnta\z@ \def\lst@freemacro{#1\the\@tempcnta}%
  464. \lst@GFM@}
  465. \def\lst@GFM@{%
  466. \expandafter\ifx \csname\lst@freemacro\endcsname \relax
  467. \edef\lst@freemacro{\csname\lst@freemacro\endcsname}%
  468. \else
  469. \advance\@tempcnta\@ne
  470. \expandafter\lst@GFM@
  471. \fi}
  472. \newbox\lst@gtempboxa
  473. \newtoks\lst@token \newcount\lst@length
  474. \def\lst@ResetToken{\lst@token{}\lst@length\z@}
  475. \lst@AddToHook{InitVarsBOL}{\lst@ResetToken \let\lst@lastother\@empty}
  476. \lst@AddToHook{EndGroup}{\lst@ResetToken \let\lst@lastother\@empty}
  477. \def\lst@lettertrue{\let\lst@ifletter\iftrue}
  478. \def\lst@letterfalse{\let\lst@ifletter\iffalse}
  479. \lst@AddToHook{InitVars}{\lst@letterfalse}
  480. \def\lst@Append#1{\advance\lst@length\@ne
  481. \lst@token=\expandafter{\the\lst@token#1}}
  482. \def\lst@AppendOther{%
  483. \lst@ifletter \lst@Output\lst@letterfalse \fi
  484. \futurelet\lst@lastother\lst@Append}
  485. \def\lst@AppendLetter{%
  486. \lst@ifletter\else \lst@OutputOther\lst@lettertrue \fi
  487. \lst@Append}
  488. \def\lst@SaveToken{%
  489. \global\let\lst@gthestyle\lst@thestyle
  490. \xdef\lst@RestoreToken{\noexpand\lst@token{\the\lst@token}%
  491. \noexpand\lst@length\the\lst@length\relax
  492. \noexpand\let\noexpand\lst@thestyle
  493. \noexpand\lst@gthestyle}}
  494. \newdimen\lst@currlwidth % \global
  495. \newcount\lst@column \newcount\lst@pos % \global
  496. \lst@AddToHook{InitVarsBOL}
  497. {\global\lst@currlwidth\z@ \global\lst@pos\z@ \global\lst@column\z@}
  498. \def\lst@CalcColumn{%
  499. \@tempcnta\lst@column
  500. \advance\@tempcnta\lst@length
  501. \advance\@tempcnta-\lst@pos}
  502. \newdimen\lst@lostspace % \global
  503. \lst@AddToHook{InitVarsBOL}{\global\lst@lostspace\z@}
  504. \def\lst@UseLostSpace{\ifdim\lst@lostspace>\z@ \lst@InsertLostSpace \fi}
  505. \def\lst@InsertLostSpace{%
  506. \lst@Kern\lst@lostspace \global\lst@lostspace\z@}
  507. \def\lst@InsertHalfLostSpace{%
  508. \global\[email protected]\lst@lostspace \lst@Kern\lst@lostspace}
  509. \newdimen\lst@width
  510. \lst@Key{basewidth}{0.6em,0.45em}{\lstKV@CSTwoArg{#1}%
  511. {\def\lst@widthfixed{##1}\def\lst@widthflexible{##2}%
  512. \ifx\lst@widthflexible\@empty
  513. \let\lst@widthflexible\lst@widthfixed
  514. \fi
  515. \def\lst@temp{\PackageError{Listings}%
  516. {Negative value(s) treated as zero}%
  517. \@ehc}%
  518. \let\lst@error\@empty
  519. \ifdim \lst@widthfixed<\z@
  520. \let\lst@error\lst@temp \let\lst@widthfixed\z@
  521. \fi
  522. \ifdim \lst@widthflexible<\z@
  523. \let\lst@error\lst@temp \let\lst@widthflexible\z@
  524. \fi
  525. \lst@error}}
  526. \lst@AddToHook{FontAdjust}
  527. {\lst@width=\lst@ifflexible\lst@widthflexible
  528. \else\lst@widthfixed\fi \relax}
  529. \lst@Key{fontadjust}{false}[t]{\lstKV@SetIf{#1}\lst@iffontadjust}
  530. \def\lst@FontAdjust{\lst@iffontadjust \lsthk@FontAdjust \fi}
  531. \lst@AddToHook{InitVars}{\lsthk@FontAdjust}
  532. \def\lst@OutputBox#1{\lst@alloverstyle{\box#1}}
  533. \def\lst@alloverstyle#1{#1}% init
  534. \def\lst@Kern#1{%
  535. \setbox\z@\hbox{{\lst@currstyle{\kern#1}}}%
  536. \global\advance\lst@currlwidth \wd\z@
  537. \lst@OutputBox\z@}
  538. \def\lst@CalcLostSpaceAndOutput{%
  539. \global\advance\lst@lostspace \lst@length\lst@width
  540. \global\advance\lst@lostspace-\wd\@tempboxa
  541. \global\advance\lst@currlwidth \wd\@tempboxa
  542. \global\advance\lst@pos -\lst@length
  543. \setbox\@tempboxa\hbox{\let\lst@OutputBox\box
  544. \ifdim\lst@lostspace>\z@ \lst@leftinsert \fi
  545. \box\@tempboxa
  546. \ifdim\lst@lostspace>\z@ \lst@rightinsert \fi}%
  547. \lst@OutputBox\@tempboxa \lsthk@PostOutput}
  548. \lst@AddToHook{PostOutput}{}% init
  549. \def\lst@OutputToken{%
  550. \lst@TrackNewLines \lst@OutputLostSpace
  551. \lst@CheckMerge
  552. {\lst@thestyle{\lst@FontAdjust
  553. \setbox\@tempboxa\lst@hbox
  554. {\lsthk@OutputBox
  555. \lst@lefthss
  556. \expandafter\lst@FillOutputBox\the\lst@token\@empty
  557. \lst@righthss}%
  558. \lst@CalcLostSpaceAndOutput}}%
  559. \lst@ResetToken}
  560. \lst@AddToHook{OutputBox}{}% init
  561. \def\lst@Delay#1{%
  562. \lst@CheckDelay
  563. #1%
  564. \lst@GetOutputMacro\lst@delayedoutput
  565. \edef\lst@delayed{\the\lst@token}%
  566. \edef\lst@delayedlength{\the\lst@length}%
  567. \lst@ResetToken}
  568. \def\lst@Merge#1{%
  569. \lst@CheckMerge
  570. #1%
  571. \edef\lst@merged{\the\lst@token}%
  572. \edef\lst@mergedlength{\the\lst@length}%
  573. \lst@ResetToken}
  574. \def\lst@MergeToken#1#2{%
  575. \advance\lst@length#2%
  576. \lst@lExtend#1{\the\lst@token}%
  577. \expandafter\lst@token\expandafter{#1}%
  578. \let#1\@empty}
  579. \def\lst@CheckDelay{%
  580. \ifx\lst@delayed\@empty\else
  581. \lst@GetOutputMacro\@gtempa
  582. \ifx\lst@delayedoutput\@gtempa
  583. \lst@MergeToken\lst@delayed\lst@delayedlength
  584. \else
  585. {\lst@ResetToken
  586. \lst@MergeToken\lst@delayed\lst@delayedlength
  587. \lst@delayedoutput}%
  588. \let\lst@delayed\@empty
  589. \fi
  590. \fi}
  591. \def\lst@CheckMerge{%
  592. \ifx\lst@merged\@empty\else
  593. \lst@MergeToken\lst@merged\lst@mergedlength
  594. \fi}
  595. \let\lst@delayed\@empty % init
  596. \let\lst@merged\@empty % init
  597. \def\lst@column@fixed{%
  598. \lst@flexiblefalse
  599. \lst@width\lst@widthfixed\relax
  600. \let\lst@OutputLostSpace\lst@UseLostSpace
  601. \let\lst@FillOutputBox\lst@FillFixed
  602. \let\lst@hss\hss
  603. \def\lst@hbox{\hbox to\lst@length\lst@width}}
  604. \def\lst@FillFixed#1{#1\lst@FillFixed@}
  605. \def\lst@FillFixed@#1{%
  606. \ifx\@empty#1\else \lst@hss#1\expandafter\lst@FillFixed@ \fi}
  607. \def\lst@column@flexible{%
  608. \lst@flexibletrue
  609. \lst@width\lst@widthflexible\relax
  610. \let\lst@OutputLostSpace\lst@UseLostSpace
  611. \let\lst@FillOutputBox\@empty
  612. \let\lst@hss\@empty
  613. \let\lst@hbox\hbox}
  614. \def\lst@column@fullflexible{%
  615. \lst@column@flexible
  616. \def\lst@OutputLostSpace{\lst@ifnewline \lst@UseLostSpace\fi}%
  617. \let\lst@leftinsert\@empty
  618. \let\lst@rightinsert\@empty}
  619. \def\lst@outputpos#1#2\relax{%
  620. \def\lst@lefthss{\lst@hss}\let\lst@righthss\lst@lefthss
  621. \let\lst@rightinsert\lst@InsertLostSpace
  622. \ifx #1c%
  623. \let\lst@leftinsert\lst@InsertHalfLostSpace
  624. \else\ifx #1r%
  625. \let\lst@righthss\@empty
  626. \let\lst@leftinsert\lst@InsertLostSpace
  627. \let\lst@rightinsert\@empty
  628. \else
  629. \let\lst@lefthss\@empty
  630. \let\lst@leftinsert\@empty
  631. \ifx #1l\else \PackageWarning{Listings}%
  632. {Unknown positioning for output boxes}%
  633. \fi
  634. \fi\fi}
  635. \def\lst@flexibletrue{\let\lst@ifflexible\iftrue}
  636. \def\lst@flexiblefalse{\let\lst@ifflexible\iffalse}
  637. \lst@Key{columns}{[c]fixed}{\lstKV@OptArg[]{#1}{%
  638. \ifx\@empty##1\@empty\else \lst@outputpos##1\relax\relax \fi
  639. \expandafter\let\expandafter\lst@arg
  640. \csname\@lst @column@##2\endcsname
  641. \lst@arg
  642. \ifx\lst@arg\relax
  643. \PackageWarning{Listings}{Unknown column format `##2'}%
  644. \else
  645. \lst@ifflexible
  646. \let\lst@columnsflexible\lst@arg
  647. \else
  648. \let\lst@columnsfixed\lst@arg
  649. \fi
  650. \fi}}
  651. \let\lst@columnsfixed\lst@column@fixed % init
  652. \let\lst@columnsflexible\lst@column@flexible % init
  653. \lst@Key{flexiblecolumns}\relax[t]{%
  654. \lstKV@SetIf{#1}\lst@ifflexible
  655. \lst@ifflexible \lst@columnsflexible
  656. \else \lst@columnsfixed \fi}
  657. \newcount\lst@newlines
  658. \lst@AddToHook{InitVars}{\global\lst@newlines\z@}
  659. \lst@AddToHook{InitVarsBOL}{\global\advance\lst@newlines\@ne}
  660. \def\lst@NewLine{%
  661. \ifx\lst@OutputBox\@gobble\else
  662. \par\noindent \hbox{}%
  663. \fi
  664. \global\advance\lst@newlines\m@ne
  665. \lst@newlinetrue}
  666. \def\lst@newlinetrue{\global\let\lst@ifnewline\iftrue}
  667. \lst@AddToHookExe{PostOutput}{\global\let\lst@ifnewline\iffalse}% init
  668. \def\lst@TrackNewLines{%
  669. \ifnum\lst@newlines>\z@
  670. \lsthk@OnNewLine
  671. \lst@DoNewLines
  672. \fi}
  673. \lst@AddToHook{OnNewLine}{}% init
  674. \lst@Key{emptylines}\maxdimen{%
  675. \@ifstar{\lst@true\@tempcnta\@gobble#1\relax\lst@GobbleNil}%
  676. {\lst@false\@tempcnta#1\relax\lst@GobbleNil}#1\@nil
  677. \advance\@tempcnta\@ne
  678. \edef\lst@maxempty{\the\@tempcnta\relax}%
  679. \let\lst@ifpreservenumber\lst@if}
  680. \def\lst@DoNewLines{
  681. \@whilenum\lst@newlines>\lst@maxempty \do
  682. {\lst@ifpreservenumber
  683. \lsthk@OnEmptyLine
  684. \global\advance\c@lstnumber\lst@advancelstnum
  685. \fi
  686. \global\advance\lst@newlines\m@ne}%
  687. \@whilenum \lst@newlines>\@ne \do
  688. {\lsthk@OnEmptyLine \lst@NewLine}%
  689. \ifnum\lst@newlines>\z@ \lst@NewLine \fi}
  690. \lst@AddToHook{OnEmptyLine}{}% init
  691. \lst@Key{identifierstyle}{}{\def\lst@identifierstyle{#1}}
  692. \lst@AddToHook{EmptyStyle}{\let\lst@identifierstyle\@empty}
  693. \def\lst@GotoTabStop{%
  694. \ifnum\lst@newlines=\z@
  695. \setbox\@tempboxa\hbox{\lst@outputspace}%
  696. \setbox\@tempboxa\hbox to\wd\@tempboxa{{\lst@currstyle{\hss}}}%
  697. \lst@CalcLostSpaceAndOutput
  698. \else
  699. \global\advance\lst@lostspace \lst@length\lst@width
  700. \global\advance\lst@column\lst@length \lst@length\z@
  701. \fi}
  702. \def\lst@OutputOther{%
  703. \lst@CheckDelay
  704. \ifnum\lst@length=\z@\else
  705. \let\lst@thestyle\lst@currstyle
  706. \lsthk@OutputOther
  707. \lst@OutputToken
  708. \fi}
  709. \lst@AddToHook{OutputOther}{}% init
  710. \let\lst@currstyle\relax % init
  711. \def\lst@Output{%
  712. \lst@CheckDelay
  713. \ifnum\lst@length=\z@\else
  714. \ifx\lst@currstyle\relax
  715. \let\lst@thestyle\lst@identifierstyle
  716. \else
  717. \let\lst@thestyle\lst@currstyle
  718. \fi
  719. \lsthk@Output
  720. \lst@OutputToken
  721. \fi
  722. \let\lst@lastother\relax}
  723. \lst@AddToHook{Output}{}% init
  724. \def\lst@GetOutputMacro#1{%
  725. \lst@ifletter \global\let#1\lst@Output
  726. \else \global\let#1\lst@OutputOther\fi}
  727. \def\lst@PrintToken{%
  728. \lst@ifletter \lst@Output \lst@letterfalse
  729. \else \lst@OutputOther \let\lst@lastother\@empty \fi}
  730. \def\lst@XPrintToken{%
  731. \lst@PrintToken \lst@CheckMerge
  732. \ifnum\lst@length=\z@\else \lst@PrintToken \fi}
  733. \def\lst@BeginDropOutput#1{%
  734. \xdef\lst@BDOnewlines{\the\lst@newlines}%
  735. \global\let\lst@BDOifnewline\lst@ifnewline
  736. \lst@EnterMode{#1}%
  737. {\lst@modetrue
  738. \let\lst@OutputBox\@gobble
  739. \aftergroup\lst@BDORestore}}
  740. \def\lst@BDORestore{%
  741. \global\lst@newlines\lst@BDOnewlines
  742. \global\let\lst@ifnewline\lst@BDOifnewline}
  743. \let\lst@EndDropOutput\lst@LeaveMode
  744. \def\lst@ProcessLetter{\lst@whitespacefalse \lst@AppendLetter}
  745. \def\lst@ProcessOther{\lst@whitespacefalse \lst@AppendOther}
  746. \def\lst@ProcessDigit{%
  747. \lst@whitespacefalse
  748. \lst@ifletter \expandafter\lst@AppendLetter
  749. \else \expandafter\lst@AppendOther\fi}
  750. \def\lst@whitespacetrue{\global\let\lst@ifwhitespace\iftrue}
  751. \def\lst@whitespacefalse{\global\let\lst@ifwhitespace\iffalse}
  752. \lst@AddToHook{InitVarsBOL}{\lst@whitespacetrue}
  753. \lst@Key{tabsize}{8}
  754. {\ifnum#1>\z@ \def\lst@tabsize{#1}\else
  755. \PackageError{Listings}{Strict positive integer expected}%
  756. {You can't use `#1' as tabsize. \@ehc}%
  757. \fi}
  758. \lst@Key{showtabs}f[t]{\lstKV@SetIf{#1}\lst@ifshowtabs}
  759. \lst@Key{tab}{\kern.06em\hbox{\vrule\@height.3ex}%
  760. \hrulefill\hbox{\vrule\@height.3ex}}
  761. {\def\lst@tab{#1}}
  762. \def\lst@ProcessTabulator{%
  763. \lst@XPrintToken \lst@whitespacetrue
  764. \global\advance\lst@column -\lst@pos
  765. \@whilenum \lst@pos<\@ne \do
  766. {\global\advance\lst@pos\lst@tabsize}%
  767. \lst@length\lst@pos
  768. \lst@PreGotoTabStop}
  769. \def\lst@PreGotoTabStop{%
  770. \lst@ifshowtabs
  771. \lst@TrackNewLines
  772. \setbox\@tempboxa\hbox to\lst@length\lst@width
  773. {{\lst@currstyle{\hss\lst@tab}}}%
  774. \lst@CalcLostSpaceAndOutput
  775. \else
  776. \lst@ifkeepspaces
  777. \@tempcnta\lst@length \lst@length\z@
  778. \@whilenum \@tempcnta>\z@ \do
  779. {\lst@AppendOther\lst@outputspace
  780. \advance\@tempcnta\m@ne}%
  781. \lst@OutputOther
  782. \else
  783. \lst@GotoTabStop
  784. \fi
  785. \fi
  786. \lst@length\z@ \global\lst@pos\z@}
  787. \def\lst@outputspace{\ }
  788. \def\lst@visiblespace{\lst@ttfamily{\char32}\textvisiblespace}
  789. \lst@Key{showspaces}{false}[t]{\lstKV@SetIf{#1}\lst@ifshowspaces}
  790. \lst@Key{keepspaces}{false}[t]{\lstKV@SetIf{#1}\lst@ifkeepspaces}
  791. \lst@AddToHook{Init}
  792. {\lst@ifshowspaces
  793. \let\lst@outputspace\lst@visiblespace
  794. \lst@keepspacestrue
  795. \fi}
  796. \def\lst@keepspacestrue{\let\lst@ifkeepspaces\iftrue}
  797. \def\lst@ProcessSpace{%
  798. \lst@ifkeepspaces
  799. \lst@AppendOther\lst@outputspace
  800. \else \ifnum\lst@newlines=\z@
  801. \lst@AppendSpecialSpace
  802. \else \ifnum\lst@length=\z@
  803. \global\advance\lst@lostspace\lst@width
  804. \global\advance\lst@pos\m@ne
  805. \else
  806. \lst@AppendSpecialSpace
  807. \fi
  808. \fi \fi
  809. \lst@whitespacetrue}
  810. \def\lst@AppendSpecialSpace{%
  811. \lst@ifwhitespace
  812. \lst@PrintToken
  813. \global\advance\lst@lostspace\lst@width
  814. \global\advance\lst@pos\m@ne
  815. \else
  816. \lst@AppendOther\lst@outputspace
  817. \fi}
  818. \lst@Key{formfeed}{\bigbreak}{\def\lst@formfeed{#1}}
  819. \def\lst@ProcessFormFeed{%
  820. \lst@XPrintToken
  821. \ifnum\lst@newlines=\z@
  822. \lst@EOLUpdate \lsthk@InitVarsBOL
  823. \fi
  824. \lst@formfeed
  825. \lst@whitespacetrue}
  826. \def\lst@Def#1{\lccode`\~=#1\lowercase{\def~}}
  827. \def\lst@Let#1{\lccode`\~=#1\lowercase{\let~}}
  828. \lst@AddToAtTop{\try@load@fontshape}{\def\space{ }}
  829. \def\lst@SelectStdCharTable{%
  830. \lst@Def{9}{\lst@ProcessTabulator}%
  831. \lst@Def{12}{\lst@ProcessFormFeed}%
  832. \lst@Def{32}{\lst@ProcessSpace}}
  833. \def\lst@CCPut#1#2{%
  834. \ifnum#2=\z@
  835. \expandafter\@gobbletwo
  836. \else
  837. \lccode`\~=#2\lccode`\/=#2\lowercase{\lst@CCPut@~{#1/}}%
  838. \fi
  839. \lst@CCPut#1}
  840. \def\lst@CCPut@#1#2{\lst@lAddTo\lst@SelectStdCharTable{\def#1{#2}}}
  841. \lst@CCPut \lst@ProcessOther
  842. {"21}{"22}{"27}{"28}{"29}{"2B}{"2C}{"2E}{"2F}
  843. {"3A}{"3B}{"3D}{"3F}{"5B}{"5D}{"60}
  844. \z@
  845. \lst@CCPut \lst@ProcessDigit
  846. {"30}{"31}{"32}{"33}{"34}{"35}{"36}{"37}{"38}{"39}
  847. \z@
  848. \lst@CCPut \lst@ProcessLetter
  849. {"40}{"41}{"42}{"43}{"44}{"45}{"46}{"47}
  850. {"48}{"49}{"4A}{"4B}{"4C}{"4D}{"4E}{"4F}
  851. {"50}{"51}{"52}{"53}{"54}{"55}{"56}{"57}
  852. {"58}{"59}{"5A}
  853. {"61}{"62}{"63}{"64}{"65}{"66}{"67}
  854. {"68}{"69}{"6A}{"6B}{"6C}{"6D}{"6E}{"6F}
  855. {"70}{"71}{"72}{"73}{"74}{"75}{"76}{"77}
  856. {"78}{"79}{"7A}
  857. \z@
  858. \def\lst@CCPutMacro#1#2#3{%
  859. \ifnum#2=\z@ \else
  860. \begingroup\lccode`\~=#2\relax \lccode`\/=#2\relax
  861. \lowercase{\endgroup\expandafter\lst@CCPutMacro@
  862. \csname\@lst @um/\expandafter\endcsname
  863. \csname\@lst @um/@\endcsname /~}#1{#3}%
  864. \expandafter\lst@CCPutMacro
  865. \fi}
  866. \def\lst@CCPutMacro@#1#2#3#4#5#6{%
  867. \lst@lAddTo\lst@SelectStdCharTable{\def#4{#5#1}}%
  868. \def#1{\lst@UM#3}%
  869. \def#2{#6}}
  870. \def\lst@UM#1{\csname\@lst @um#1@\endcsname}
  871. \lst@CCPutMacro
  872. \lst@ProcessOther {"23}\#
  873. \lst@ProcessLetter{"24}\textdollar
  874. \lst@ProcessOther {"25}\%
  875. \lst@ProcessOther {"26}\&
  876. \lst@ProcessOther {"2A}{\lst@ttfamily*\textasteriskcentered}
  877. \lst@ProcessOther {"2D}{\lst@ttfamily{-{}}{$-$}}
  878. \lst@ProcessOther {"3C}{\lst@ttfamily<\textless}
  879. \lst@ProcessOther {"3E}{\lst@ttfamily>\textgreater}
  880. \lst@ProcessOther {"5C}{\lst@ttfamily{\char92}\textbackslash}
  881. \lst@ProcessOther {"5E}\textasciicircum
  882. \lst@ProcessLetter{"5F}{\lst@ttfamily{\char95}\textunderscore}
  883. \lst@ProcessOther {"7B}{\lst@ttfamily{\char123}\textbraceleft}
  884. \lst@ProcessOther {"7C}{\lst@ttfamily|\textbar}
  885. \lst@ProcessOther {"7D}{\lst@ttfamily{\char125}\textbraceright}
  886. \lst@ProcessOther {"7E}\textasciitilde
  887. \lst@ProcessOther {"7F}-
  888. \@empty\z@\@empty
  889. \def\lst@ttfamily#1#2{\ifx\f@family\ttdefault#1\relax\else#2\fi}
  890. \lst@AddToHook{Init}{\edef\ttdefault{\ttdefault}}
  891. \def\lst@activecharstrue{\let\lst@ifactivechars\iftrue}
  892. \def\lst@activecharsfalse{\let\lst@ifactivechars\iffalse}
  893. \lst@activecharstrue
  894. \def\lst@SelectCharTable{%
  895. \lst@SelectStdCharTable
  896. \lst@ifactivechars
  897. \catcode9\active \catcode12\active \catcode13\active
  898. \@tempcnta=32\relax
  899. \@whilenum\@tempcnta<128\do
  900. {\catcode\@tempcnta\active\advance\@tempcnta\@ne}%
  901. \fi
  902. \lst@ifec \lst@DefEC \fi
  903. \let\do@noligs\lst@do@noligs \verbatim@nolig@list
  904. \lsthk@SelectCharTable
  905. \lst@DeveloperSCT
  906. \ifx\lst@Backslash\relax\else
  907. \lst@LetSaveDef{"5C}\lsts@backslash\lst@Backslash
  908. \fi}
  909. \lst@Key{SelectCharTable}{}{\def\lst@DeveloperSCT{#1}}
  910. \lst@Key{MoreSelectCharTable}\relax{\lst@lAddTo\lst@DeveloperSCT{#1}}
  911. \lst@AddToHook{SetLanguage}{\let\lst@DeveloperSCT\@empty}
  912. \def\lst@do@noligs#1{%
  913. \begingroup \lccode`\~=`#1\lowercase{\endgroup
  914. \lst@do@noligs@~}}
  915. \def\lst@do@noligs#1#2{%
  916. \expandafter\expandafter\expandafter\def
  917. \expandafter\expandafter\expandafter#1%
  918. \expandafter\expandafter\expandafter{\expandafter\lst@NoLig#1}}
  919. \def\lst@NoLig{\advance\lst@length\m@ne \lst@Append\lst@nolig}
  920. \def\lst@nolig{\lst@UM\@empty}%
  921. \@namedef{\@lst @um@}{\leavevmode\kern\z@}
  922. \def\lst@SaveOutputDef#1#2{%
  923. \begingroup \lccode`\~=#1\relax \lowercase{\endgroup
  924. \def\lst@temp##1\def~##2##3\relax}{%
  925. \global\expandafter\let\expandafter#2\@gobble##2\relax}%
  926. \expandafter\lst@temp\lst@SelectStdCharTable\relax}
  927. \lst@SaveOutputDef{"5C}\lstum@backslash
  928. \lst@Key{extendedchars}{false}[t]{\lstKV@SetIf{#1}\lst@ifec}
  929. \def\lst@DefEC{%
  930. \lst@CCECUse \lst@ProcessLetter
  931. ^^80^^81^^82^^83^^84^^85^^86^^87^^88^^89^^8a^^8b^^8c^^8d^^8e^^8f%
  932. ^^90^^91^^92^^93^^94^^95^^96^^97^^98^^99^^9a^^9b^^9c^^9d^^9e^^9f%
  933. ^^a0^^a1^^a2^^a3^^a4^^a5^^a6^^a7^^a8^^a9^^aa^^ab^^ac^^ad^^ae^^af%
  934. ^^b0^^b1^^b2^^b3^^b4^^b5^^b6^^b7^^b8^^b9^^ba^^bb^^bc^^bd^^be^^bf%
  935. ^^c0^^c1^^c2^^c3^^c4^^c5^^c6^^c7^^c8^^c9^^ca^^cb^^cc^^cd^^ce^^cf%
  936. ^^d0^^d1^^d2^^d3^^d4^^d5^^d6^^d7^^d8^^d9^^da^^db^^dc^^dd^^de^^df%
  937. ^^e0^^e1^^e2^^e3^^e4^^e5^^e6^^e7^^e8^^e9^^ea^^eb^^ec^^ed^^ee^^ef%
  938. ^^f0^^f1^^f2^^f3^^f4^^f5^^f6^^f7^^f8^^f9^^fa^^fb^^fc^^fd^^fe^^ff%
  939. ^^00}
  940. \def\lst@CCECUse#1#2{%
  941. \ifnum`#2=\z@
  942. \expandafter\@gobbletwo
  943. \else
  944. \ifnum\catcode`#2=\active
  945. \lccode`\~=`#2\lccode`\/=`#2\lowercase{\lst@CCECUse@#1~/}%
  946. \else
  947. \lst@ifactivechars \catcode`#2=\active \fi
  948. \lccode`\~=`#2\lccode`\/=`#2\lowercase{\def~{#1/}}%
  949. \fi
  950. \fi
  951. \lst@CCECUse#1}
  952. \def\lst@CCECUse@#1#2#3{%
  953. \expandafter\def\csname\@lst @EC#3\endcsname{\lst@UM#3}%
  954. \expandafter\let\csname\@lst @um#3@\endcsname #2%
  955. \edef#2{\noexpand#1%
  956. \expandafter\noexpand\csname\@lst @EC#3\endcsname}}
  957. \lst@AddToHook{Init}
  958. {\let\lsts@nfss@catcodes\nfss@catcodes
  959. \let\nfss@catcodes\lst@nfss@catcodes}
  960. \def\lst@nfss@catcodes{%
  961. \lst@makeletter
  962. ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz\relax
  963. \@makeother 0\@makeother 1\@makeother 2\@makeother 3\@makeother 4%
  964. \@makeother 5\@makeother 6\@makeother 7\@makeother 8\@makeother 9%
  965. \@makeother =\lsts@nfss@catcodes}
  966. \def\lst@makeletter#1{%
  967. \ifx\relax#1\else\catcode`#111\relax \expandafter\lst@makeletter\fi}
  968. \lst@AddToHook{Init}
  969. {\edef\lst@OrgOutput{\the\output}%
  970. \output{\global\setbox\lst@gtempboxa\box\@cclv
  971. \expandafter\egroup
  972. \lst@SaveToken
  973. \lst@InterruptModes
  974. \setbox\@cclv\box\lst@gtempboxa
  975. \bgroup\lst@OrgOutput\egroup
  976. \bgroup
  977. \aftergroup\pagegoal\aftergroup\vsize
  978. \aftergroup\lst@ReenterModes\aftergroup\lst@RestoreToken}}
  979. \lst@Key{alsoletter}\relax{%
  980. \lst@DoAlso{#1}\lst@alsoletter\lst@ProcessLetter}
  981. \lst@Key{alsodigit}\relax{%
  982. \lst@DoAlso{#1}\lst@alsodigit\lst@ProcessDigit}
  983. \lst@Key{alsoother}\relax{%
  984. \lst@DoAlso{#1}\lst@alsoother\lst@ProcessOther}
  985. \lst@AddToHook{SelectCharTable}
  986. {\lst@alsoother \lst@alsodigit \lst@alsoletter}
  987. \lst@AddToHookExe{SetLanguage}% init
  988. {\let\lst@alsoletter\@empty
  989. \let\lst@alsodigit\@empty
  990. \let\lst@alsoother\@empty}
  991. \def\lst@DoAlso#1#2#3{%
  992. \lst@DefOther\lst@arg{#1}\let#2\@empty
  993. \expandafter\lst@DoAlso@\expandafter#2\expandafter#3\lst@arg\relax}
  994. \def\lst@DoAlso@#1#2#3{%
  995. \ifx\relax#3\expandafter\@gobblethree \else
  996. \begingroup \lccode`\~=`#3\relax \lowercase{\endgroup
  997. \def\lst@temp##1\def~##2##3\relax{%
  998. \edef\lst@arg{\def\noexpand~{\noexpand#2\expandafter
  999. \noexpand\@gobble##2}}}}%
  1000. \expandafter\lst@temp\lst@SelectStdCharTable\relax
  1001. \lst@lExtend#1{\lst@arg}%
  1002. \fi
  1003. \lst@DoAlso@#1#2}
  1004. \def\lst@SaveDef#1#2{%
  1005. \begingroup \lccode`\~=#1\relax \lowercase{\endgroup\let#2~}}
  1006. \def\lst@DefSaveDef#1#2{%
  1007. \begingroup \lccode`\~=#1\relax \lowercase{\endgroup\let#2~\def~}}
  1008. \def\lst@LetSaveDef#1#2{%
  1009. \begingroup \lccode`\~=#1\relax \lowercase{\endgroup\let#2~\let~}}
  1010. \def\lst@CDef#1{\lst@CDef@#1}
  1011. \def\lst@CDef@#1#2#3#4{\lst@CDefIt#1{#2}{#3}{#4#2#3}#4}
  1012. \def\lst@CDefX#1{\lst@CDefX@#1}
  1013. \def\lst@CDefX@#1#2#3{\lst@CDefIt#1{#2}{#3}{}}
  1014. \def\lst@CDefIt#1#2#3#4#5#6#7#8{%
  1015. \ifx\@empty#2\@empty
  1016. \def#1{#6\def\lst@next{#7#4#8}\lst@next}%
  1017. \else \ifx\@empty#3\@empty
  1018. \def#1##1{%
  1019. #6%
  1020. \ifx##1#2\def\lst@next{#7#4#8}\else
  1021. \def\lst@next{#5##1}\fi
  1022. \lst@next}%
  1023. \else
  1024. \def#1{%
  1025. #6%
  1026. \lst@IfNextCharsArg{#2#3}{#7#4#8}%
  1027. {\expandafter#5\lst@eaten}}%
  1028. \fi \fi}
  1029. \def\lst@CArgX#1#2\relax{%
  1030. \lst@DefActive\lst@arg{#1#2}%
  1031. \expandafter\lst@CArg\lst@arg\relax}
  1032. \def\lst@CArg#1#2\relax{%
  1033. \lccode`\/=`#1\lowercase{\def\lst@temp{/}}%
  1034. \lst@GetFreeMacro{lst@c\lst@temp}%
  1035. \expandafter\lst@CArg@\lst@freemacro#1#2\@empty\@empty\relax}
  1036. \def\lst@CArg@#1#2#3#4\@empty#5\relax#6{%
  1037. \let#1#2%
  1038. \ifx\@empty#3\@empty
  1039. \def\lst@next{#6{#2{}{}}}%
  1040. \else
  1041. \def\lst@next{#6{#2#3{#4}}}%
  1042. \fi
  1043. \lst@next #1}
  1044. \def\lst@CArgEmpty#1\@empty{#1}
  1045. \lst@Key{excludedelims}\relax
  1046. {\lsthk@ExcludeDelims \lst@NormedDef\lst@temp{#1}%
  1047. \expandafter\lst@for\lst@temp\do
  1048. {\expandafter\let\csname\@lst @ifex##1\endcsname\iftrue}}
  1049. \def\lst@DelimPrint#1#2{%
  1050. #1%
  1051. \begingroup
  1052. \lst@mode\lst@nomode \lst@modetrue
  1053. #2\lst@XPrintToken
  1054. \endgroup
  1055. \lst@ResetToken
  1056. \fi}
  1057. \def\lst@DelimOpen#1#2#3#4#5#6\@empty{%
  1058. \lst@TrackNewLines \lst@XPrintToken
  1059. \lst@DelimPrint#1{#6}%
  1060. \lst@EnterMode{#4}{\def\lst@currstyle#5}%
  1061. \lst@DelimPrint{#1#2}{#6}%
  1062. #3}
  1063. \def\lst@DelimClose#1#2#3\@empty{%
  1064. \lst@TrackNewLines \lst@XPrintToken
  1065. \lst@DelimPrint{#1#2}{#3}%
  1066. \lst@LeaveMode
  1067. \lst@DelimPrint{#1}{#3}}
  1068. \def\lst@BeginDelim{\lst@DelimOpen\iffalse\else{}}
  1069. \def\lst@EndDelim{\lst@DelimClose\iffalse\else}
  1070. \def\lst@BeginIDelim{\lst@DelimOpen\iffalse{}{}}
  1071. \def\lst@EndIDelim{\lst@DelimClose\iffalse{}}
  1072. \lst@AddToHook{SelectCharTable}{\lst@DefDelims}
  1073. \lst@AddToHookExe{SetLanguage}{\let\lst@DefDelims\@empty}
  1074. \def\lst@Delim#1{%
  1075. \lst@false \let\lst@cumulative\@empty \let\lst@arg\@empty
  1076. \@ifstar{\@ifstar{\lst@Delim@{#1}}%
  1077. {\let\lst@cumulative\relax
  1078. \lst@Delim@{#1}}}%
  1079. {\lst@true\lst@Delim@{#1}}}
  1080. \def\lst@Delim@#1[#2]{%
  1081. \gdef\lst@delimtype{#2}%
  1082. \@ifnextchar[\lst@Delim@sty
  1083. {\lst@Delim@sty[#1]}}
  1084. \def\lst@Delim@sty[#1]{%
  1085. \def\lst@delimstyle{#1}%
  1086. \ifx\@empty#1\@empty\else
  1087. \lst@Delim@sty@ #1\@nil
  1088. \fi
  1089. \@ifnextchar[\lst@Delim@option
  1090. \lst@Delim@delim}
  1091. \def\lst@Delim@option[#1]{\def\lst@arg{#1}\lst@Delim@delim}
  1092. \def\lst@Delim@sty@#1#2\@nil{%
  1093. \if\relax\noexpand#1\else
  1094. \edef\lst@delimstyle{\expandafter\noexpand
  1095. \csname\@lst @\lst@delimstyle\endcsname}%
  1096. \fi}
  1097. \def\lst@Delim@delim#1\relax#2#3#4#5#6#7#8{%
  1098. \ifx #4\@empty \lst@Delim@delall{#2}\fi
  1099. \ifx\@empty#1\@empty
  1100. \ifx #4\@nil
  1101. \@ifundefined{\@lst @#2DM@\lst@delimtype}%
  1102. {\lst@Delim@delall{#2@\lst@delimtype}}%
  1103. {\lst@Delim@delall{#2DM@\lst@delimtype}}%
  1104. \fi
  1105. \else
  1106. \expandafter\lst@Delim@args\expandafter
  1107. {\lst@delimtype}{#1}{#5}#6{#7}{#8}#4%
  1108. \let\lst@delim\@empty
  1109. \expandafter\lst@IfOneOf\lst@delimtype\relax#3%
  1110. {\@ifundefined{\@lst @#2DM@\lst@delimtype}%
  1111. {\lst@lExtend\lst@delim{\csname\@lst @#2@\lst@delimtype
  1112. \expandafter\endcsname\lst@arg}}%
  1113. {\lst@lExtend\lst@delim{\expandafter\lst@UseDynamicMode
  1114. \csname\@lst @#2DM@\lst@delimtype
  1115. \expandafter\endcsname\lst@arg}}%
  1116. \ifx #4\@nil
  1117. \let\lst@temp\lst@DefDelims \let\lst@DefDelims\@empty
  1118. \expandafter\lst@Delim@del\lst@temp\@empty\@nil\@nil\@nil
  1119. \else
  1120. \lst@lExtend\lst@DefDelims\lst@delim
  1121. \fi}%
  1122. {\PackageError{Listings}{Illegal type `\lst@delimtype'}%
  1123. {#2 types are #3.}}%
  1124. \fi}
  1125. \def\lst@Delim@args#1#2#3#4#5#6#7{%
  1126. \begingroup
  1127. \lst@false \let\lst@next\lst@XConvert
  1128. \@ifnextchar #4{\xdef\lst@delimtype{\expandafter\@gobble
  1129. \lst@delimtype}%
  1130. #5\lst@next#2\@nil
  1131. \lst@lAddTo\lst@arg{\@empty#6}%
  1132. \lst@GobbleNil}%
  1133. {\lst@next#2\@nil
  1134. \lst@lAddTo\lst@arg{\@empty#3}%
  1135. \lst@GobbleNil}%
  1136. #1\@nil
  1137. \global\let\@gtempa\lst@arg
  1138. \endgroup
  1139. \let\lst@arg\@gtempa
  1140. \ifx #7\@nil\else
  1141. \expandafter\lst@Delim@args@\expandafter{\lst@delimstyle}%
  1142. \fi}
  1143. \def\lst@Delim@args@#1{%
  1144. \lst@if
  1145. \lst@lAddTo\lst@arg{{{#1}\lst@modetrue}}%
  1146. \else
  1147. \ifx\lst@cumulative\@empty
  1148. \lst@lAddTo\lst@arg{{{}#1}}%
  1149. \else
  1150. \lst@lAddTo\lst@arg{{{#1}}}%
  1151. \fi
  1152. \fi}
  1153. \def\lst@Delim@del#1\@empty#2#3#4{%
  1154. \ifx #2\@nil\else
  1155. \def\lst@temp{#1\@empty#2#3}%
  1156. \ifx\lst@temp\lst@delim\else
  1157. \lst@lAddTo\lst@DefDelims{#1\@empty#2#3{#4}}%
  1158. \fi
  1159. \expandafter\lst@Delim@del
  1160. \fi}
  1161. \def\lst@Delim@delall#1{%
  1162. \begingroup
  1163. \edef\lst@delim{\expandafter\string\csname\@lst @#1\endcsname}%
  1164. \lst@false \global\let\@gtempa\@empty
  1165. \expandafter\lst@Delim@delall@\lst@DefDelims\@empty
  1166. \endgroup
  1167. \let\lst@DefDelims\@gtempa}
  1168. \def\lst@Delim@delall@#1{%
  1169. \ifx #1\@empty\else
  1170. \ifx #1\lst@UseDynamicMode
  1171. \lst@true
  1172. \let\lst@next\lst@Delim@delall@do
  1173. \else
  1174. \def\lst@next{\lst@Delim@delall@do#1}%
  1175. \fi
  1176. \expandafter\lst@next
  1177. \fi}
  1178. \def\lst@Delim@delall@do#1#2\@empty#3#4#5{%
  1179. \expandafter\lst@IfSubstring\expandafter{\lst@delim}{\string#1}%
  1180. {}%
  1181. {\lst@if \lst@AddTo\@gtempa\lst@UseDynamicMode \fi
  1182. \lst@AddTo\@gtempa{#1#2\@empty#3#4{#5}}}%
  1183. \lst@false \lst@Delim@delall@}
  1184. \gdef\lst@DefDelimB#1#2#3#4#5#6#7#8{%
  1185. \lst@CDef{#1}#2%
  1186. {#3}%
  1187. {\let\lst@bnext\lst@CArgEmpty
  1188. \lst@ifmode #4\else
  1189. #5%
  1190. \def\lst@bnext{#6{#7}{#8}}%
  1191. \fi
  1192. \lst@bnext}%
  1193. \@empty}
  1194. \gdef\lst@DefDelimE#1#2#3#4#5#6#7{%
  1195. \lst@CDef{#1}#2%
  1196. {#3}%
  1197. {\let\lst@enext\lst@CArgEmpty
  1198. \ifnum #7=\lst@mode%
  1199. #4%
  1200. \let\lst@enext#6%
  1201. \else
  1202. #5%
  1203. \fi
  1204. \lst@enext}%
  1205. \@empty}
  1206. \lst@AddToHook{Init}{\let\lst@bnext\relax \let\lst@enext\relax}
  1207. \gdef\lst@DefDelimBE#1#2#3#4#5#6#7#8#9{%
  1208. \lst@CDef{#1}#2%
  1209. {#3}%
  1210. {\let\lst@bnext\lst@CArgEmpty
  1211. \ifnum #7=\lst@mode
  1212. #4%
  1213. \let\lst@bnext#9%
  1214. \else
  1215. \lst@ifmode\else
  1216. #5%
  1217. \def\lst@bnext{#6{#7}{#8}}%
  1218. \fi
  1219. \fi
  1220. \lst@bnext}%
  1221. \@empty}
  1222. \gdef\lst@delimtypes{s,l}
  1223. \gdef\lst@DelimKey#1#2{%
  1224. \lst@Delim{}#2\relax
  1225. {Delim}\lst@delimtypes #1%
  1226. {\lst@BeginDelim\lst@EndDelim}
  1227. i\@empty{\lst@BeginIDelim\lst@EndIDelim}}
  1228. \lst@Key{delim}\relax{\lst@DelimKey\@empty{#1}}
  1229. \lst@Key{moredelim}\relax{\lst@DelimKey\relax{#1}}
  1230. \lst@Key{deletedelim}\relax{\lst@DelimKey\@nil{#1}}
  1231. \gdef\lst@DelimDM@l#1#2\@empty#3#4#5{%
  1232. \lst@CArg #2\relax\lst@DefDelimB{}{}{}#3{#1}{#5\lst@Lmodetrue}}
  1233. \gdef\lst@DelimDM@s#1#2#3\@empty#4#5#6{%
  1234. \lst@CArg #2\relax\lst@DefDelimB{}{}{}#4{#1}{#6}%
  1235. \lst@CArg #3\relax\lst@DefDelimE{}{}{}#5{#1}}
  1236. \def\lst@ReplaceInput#1{\lst@CArgX #1\relax\lst@CDefX{}{}}
  1237. \lst@Key{literate}{}{\def\lst@literate{#1}}
  1238. \lst@AddToHook{SelectCharTable}
  1239. {\ifx\lst@literate\@empty\else
  1240. \expandafter\lst@Literate\lst@literate{}\relax\z@
  1241. \fi}
  1242. \def\lst@Literate#1#2#3{%
  1243. \ifx\relax#2\@empty\else
  1244. \lst@ReplaceInput{#1}%
  1245. {\lst@XPrintToken \lst@letterfalse
  1246. \lst@token{#2}\lst@length#3\relax
  1247. \lst@XPrintToken}%
  1248. \expandafter\lst@Literate
  1249. \fi}
  1250. \def\lst@BeginDropInput#1{%
  1251. \lst@EnterMode{#1}%
  1252. {\lst@modetrue
  1253. \let\lst@ifdropinput\iftrue
  1254. \let\lst@ProcessLetter\@gobble
  1255. \let\lst@ProcessDigit\@gobble
  1256. \let\lst@ProcessOther\@gobble
  1257. \let\lst@ProcessSpace\@empty
  1258. \let\lst@ProcessTabulator\@empty
  1259. \let\lst@ProcessFormFeed\@empty}}
  1260. \let\lst@ifdropinput\iffalse % init
  1261. \lst@Key{basicstyle}\relax{\def\lst@basicstyle{#1}}
  1262. \lst@Key{inputencoding}\relax{\def\lst@inputenc{#1}}
  1263. \lst@AddToHook{Init}
  1264. {\lst@basicstyle
  1265. \ifx\lst@inputenc\@empty\else
  1266. \@ifundefined{inputencoding}{}%
  1267. {\inputencoding\lst@inputenc}%
  1268. \fi}
  1269. \lst@AddToHookExe{EmptyStyle}
  1270. {\let\lst@basicstyle\@empty
  1271. \let\lst@inputenc\@empty}
  1272. \def\lst@parshape{\parshape\@ne \z@ \linewidth}
  1273. \lst@AddToHookAtTop{EveryLine}{\lst@parshape}
  1274. \lst@AddToHookAtTop{EndGroup}{\lst@parshape}
  1275. \newcount\lst@lineno % \global
  1276. \lst@AddToHook{InitVars}{\global\lst@lineno\@ne}
  1277. \lst@Key{print}{true}[t]{\lstKV@SetIf{#1}\lst@ifprint}
  1278. \lst@Key{firstline}\relax{\def\lst@firstline{#1\relax}}
  1279. \lst@Key{lastline}\relax{\def\lst@lastline{#1\relax}}
  1280. \lst@AddToHook{PreSet}
  1281. {\let\lst@firstline\@ne \def\lst@lastline{9999999\relax}}
  1282. \lst@Key{nolol}{false}[t]{\lstKV@SetIf{#1}\lst@ifnolol}
  1283. \def\lst@nololtrue{\let\lst@ifnolol\iftrue}
  1284. \let\lst@ifnolol\iffalse % init
  1285. \lst@Key{captionpos}{t}{\def\lst@captionpos{#1}}
  1286. \lst@Key{abovecaptionskip}\smallskipamount{\def\lst@abovecaption{#1}}
  1287. \lst@Key{belowcaptionskip}\smallskipamount{\def\lst@belowcaption{#1}}
  1288. \lst@Key{label}\relax{\def\lst@label{#1}}
  1289. \lst@Key{title}\relax{\def\lst@title{#1}\let\lst@caption\relax}
  1290. \lst@Key{caption}\relax{\lstKV@OptArg[{#1}]{#1}%
  1291. {\def\lst@caption{##2}\def\lst@@caption{##1}}%
  1292. \let\lst@title\@empty}
  1293. \lst@AddToHookExe{TextStyle}
  1294. {\let\lst@caption\@empty \let\lst@@caption\@empty
  1295. \let\lst@title\@empty \let\lst@label\@empty}
  1296. \@ifundefined{thechapter}
  1297. {\newcounter{lstlisting}
  1298. \renewcommand\thelstlisting{\@arabic\c@lstlisting}}
  1299. {\newcounter{lstlisting}[chapter]
  1300. \renewcommand\thelstlisting
  1301. {\ifnum \c@chapter>\z@ \thechapter.\fi \@arabic\c@lstlisting}}
  1302. \lst@UserCommand\lstlistingname{Listing}
  1303. \@ifundefined{abovecaptionskip}
  1304. {\newskip\abovecaptionskip
  1305. \newskip\belowcaptionskip
  1306. \long\def\@makecaption#1#2{%
  1307. \vskip\abovecaptionskip
  1308. \sbox\@tempboxa{#1: #2}%
  1309. \ifdim \wd\@tempboxa >\hsize
  1310. #1: #2\par
  1311. \else
  1312. \global \@minipagefalse
  1313. \hb@xt@\hsize{\hfil\box\@tempboxa\hfil}%
  1314. \fi
  1315. \vskip\belowcaptionskip}%
  1316. }{}
  1317. \def\lst@MakeCaption#1{%
  1318. \ifx #1t%
  1319. \ifx\lst@@caption\@empty\expandafter\lst@HRefStepCounter \else
  1320. \expandafter\refstepcounter
  1321. \fi {lstlisting}%
  1322. \ifx\lst@label\@empty\else \label{\lst@label}\fi
  1323. \fi
  1324. \ifx\lst@caption\@empty\else
  1325. \lst@IfSubstring #1\lst@captionpos
  1326. {\begingroup \let\@@vskip\vskip
  1327. \def\vskip{\afterassignment\lst@vskip \@tempskipa}%
  1328. \def\lst@vskip{\nobreak\@@vskip\@tempskipa\nobreak}%
  1329. \par\normalsize\normalfont
  1330. \ifx #1t\allowbreak \fi
  1331. \ifx\lst@title\@empty
  1332. \expandafter\@makecaption
  1333. \else
  1334. \expandafter\lst@maketitle
  1335. \fi
  1336. {\noindent\lstlistingname
  1337. \ifx\lst@@caption\@empty\else~\thelstlisting\fi}%
  1338. \lst@caption
  1339. \ifx #1b\allowbreak \fi
  1340. \endgroup}{}%
  1341. \fi}
  1342. \def\lst@maketitle#1#2{\@makecaption\lst@title@dropdelim\lst@title}
  1343. \def\lst@title@dropdelim#1{\ignorespaces}
  1344. \AtBeginDocument{%
  1345. \@ifundefined{caption@make}{}{%
  1346. \def\lst@maketitle#1#2{%
  1347. \begingroup
  1348. \captionstyle{lsttitle}\@makecaption{}\lst@title
  1349. \endgroup}
  1350. \newcaptionstyle{lsttitle}{\caption@make{lsttitle}}%
  1351. \def\caption@@@lsttitle{\captiontext\par}%
  1352. }}
  1353. \def\lst@HRefStepCounter#1{%
  1354. \begingroup
  1355. \c@lstlisting\lst@neglisting
  1356. \advance\c@lstlisting\m@ne \xdef\lst@neglisting{\the\c@lstlisting}%
  1357. \ifx\hyper@refstepcounter\@undefined\else
  1358. \hyper@refstepcounter{#1}%
  1359. \fi
  1360. \endgroup}
  1361. \gdef\lst@neglisting{\z@}% init
  1362. \lst@Key{boxpos}{c}{\def\lst@boxpos{#1}}
  1363. \def\lst@boxtrue{\let\lst@ifbox\iftrue}
  1364. \let\lst@ifbox\iffalse
  1365. \lst@Key{float}\relax[\lst@floatplacement]{%
  1366. \def\lst@next{\@ifstar{\let\lst@beginfloat\@dblfloat
  1367. \let\lst@endfloat\end@dblfloat
  1368. \lst@KFloat}%
  1369. {\let\lst@beginfloat\@float
  1370. \let\lst@endfloat\end@float
  1371. \lst@KFloat}}
  1372. \edef\lst@float{#1}%
  1373. \expandafter\lst@next\lst@float\relax}
  1374. \def\lst@KFloat#1\relax{%
  1375. \ifx\@empty#1\@empty
  1376. \let\lst@float\lst@floatplacement
  1377. \else
  1378. \def\lst@float{#1}%
  1379. \fi}
  1380. \lst@Key{floatplacement}{tbp}{\def\lst@floatplacement{#1}}
  1381. \lst@AddToHook{PreSet}{\let\lst@float\relax}
  1382. \lst@AddToHook{TextStyle}{\let\lst@float\relax}
  1383. \AtBeginDocument{%
  1384. \@ifundefined{c@float@type}%
  1385. {\edef\ftype@lstlisting{\ifx\c@figure\@undefined 1\else 4\fi}}
  1386. {\edef\ftype@lstlisting{\the\c@float@type}%
  1387. \addtocounter{float@type}{\value{float@type}}}%
  1388. }
  1389. \lst@Key{aboveskip}\medskipamount{\def\lst@aboveskip{#1}}
  1390. \lst@Key{belowskip}\medskipamount{\def\lst@belowskip{#1}}
  1391. \lst@AddToHook{TextStyle}
  1392. {\let\lst@aboveskip\z@ \let\lst@belowskip\z@}
  1393. \lst@Key{everydisplay}{}{\def\lst@EveryDisplay{#1}}
  1394. \lst@AddToHook{TextStyle}{\let\lst@ifdisplaystyle\iffalse}
  1395. \lst@AddToHook{DisplayStyle}{\let\lst@ifdisplaystyle\iftrue}
  1396. \let\lst@ifdisplaystyle\iffalse
  1397. \def\lst@Init#1{%
  1398. \begingroup
  1399. \ifx\lst@float\relax\else
  1400. \edef\@tempa{\noexpand\lst@beginfloat{lstlisting}[\lst@float]}%
  1401. \expandafter\@tempa
  1402. \fi
  1403. \ifhmode\ifinner \lst@boxtrue \fi\fi
  1404. \lst@ifbox
  1405. \lsthk@BoxUnsafe
  1406. \hbox to\z@\bgroup
  1407. $\if t\lst@boxpos \vtop
  1408. \else \if b\lst@boxpos \vbox
  1409. \else \vcenter \fi\fi
  1410. \bgroup \par\noindent
  1411. \else
  1412. \lst@ifdisplaystyle
  1413. \lst@EveryDisplay
  1414. \par\penalty-50\relax
  1415. \vspace\lst@aboveskip
  1416. \fi
  1417. \fi
  1418. \normalbaselines
  1419. \abovecaptionskip\lst@abovecaption\relax
  1420. \belowcaptionskip\lst@belowcaption\relax
  1421. \lst@MakeCaption t%
  1422. \lsthk@PreInit \lsthk@Init
  1423. \lst@ifdisplaystyle
  1424. \global\let\lst@ltxlabel\@empty
  1425. \if@inlabel
  1426. \lst@ifresetmargins
  1427. \leavevmode
  1428. \else
  1429. \xdef\lst@ltxlabel{\the\everypar}%
  1430. \lst@AddTo\lst@ltxlabel{%
  1431. \global\let\lst@ltxlabel\@empty
  1432. \everypar{\lsthk@EveryLine\lsthk@EveryPar}}%
  1433. \fi
  1434. \fi
  1435. \everypar\expandafter{\lst@ltxlabel
  1436. \lsthk@EveryLine\lsthk@EveryPar}%
  1437. \else
  1438. \everypar{}\let\lst@NewLine\@empty
  1439. \fi
  1440. \lsthk@InitVars \lsthk@InitVarsBOL
  1441. \lst@Let{13}\lst@MProcessListing
  1442. \let\lst@Backslash#1%
  1443. \lst@EnterMode{\lst@Pmode}{\lst@SelectCharTable}}
  1444. \lst@AddToHook{InitVars}
  1445. {\rightskip\z@ \leftskip\z@ \parfillskip=\z@ plus 1fil
  1446. \let\par\@@par}
  1447. \lst@AddToHook{EveryLine}{}% init
  1448. \lst@AddToHook{EveryPar}{}% init
  1449. \lst@Key{showlines}f[t]{\lstKV@SetIf{#1}\lst@ifshowlines}
  1450. \def\lst@DeInit{%
  1451. \lst@XPrintToken \lst@EOLUpdate
  1452. \global\advance\lst@newlines\m@ne
  1453. \lst@ifshowlines
  1454. \lst@DoNewLines
  1455. \else
  1456. \setbox\@tempboxa\vbox{\lst@DoNewLines}%
  1457. \fi
  1458. \lst@ifdisplaystyle \par\removelastskip \fi
  1459. \everypar{}\lsthk@ExitVars \lsthk@DeInit
  1460. \lst@MakeCaption b%
  1461. \lst@ifbox
  1462. \egroup $\hss \egroup
  1463. \vrule\@width\lst@maxwidth\@height\z@\@depth\z@
  1464. \else
  1465. \lst@ifdisplaystyle
  1466. \par\penalty-50\vspace\lst@belowskip
  1467. \fi
  1468. \fi
  1469. \ifx\lst@float\relax\else
  1470. \expandafter\lst@endfloat
  1471. \fi
  1472. \endgroup}
  1473. \newdimen\lst@maxwidth % \global
  1474. \lst@AddToHook{InitVars}{\global\lst@maxwidth\z@}
  1475. \lst@AddToHook{InitVarsEOL}
  1476. {\ifdim\lst@currlwidth>\lst@maxwidth
  1477. \global\lst@maxwidth\lst@currlwidth
  1478. \fi}
  1479. \def\lst@EOLUpdate{\lsthk@EOL \lsthk@InitVarsEOL}
  1480. \def\lst@MProcessListing{%
  1481. \lst@XPrintToken \lst@EOLUpdate \lsthk@InitVarsBOL
  1482. \global\advance\lst@lineno\@ne
  1483. \ifnum \lst@lineno>\lst@lastline
  1484. \expandafter\lst@EndProcessListing
  1485. \else
  1486. \expandafter\lst@BOLGobble
  1487. \fi}
  1488. \let\lst@EndProcessListing\endinput
  1489. \lst@Key{gobble}{0}{\def\lst@gobble{#1}}
  1490. \def\lst@BOLGobble{%
  1491. \ifnum\lst@gobble>\z@
  1492. \@tempcnta\lst@gobble\relax
  1493. \expandafter\lst@BOLGobble@
  1494. \fi}
  1495. \def\lst@BOLGobble@@{%
  1496. \ifnum\@tempcnta>\z@
  1497. \expandafter\lst@BOLGobble@
  1498. \fi}
  1499. \def\lstenv@BOLGobble@@{%
  1500. \lst@IfNextChars\lstenv@endstring{\lstenv@End}%
  1501. {\advance\@tempcnta\m@ne \expandafter\lst@BOLGobble@@\lst@eaten}}
  1502. \def\lst@BOLGobble@#1{%
  1503. \let\lst@next#1%
  1504. \ifx \lst@next\relax\else
  1505. \ifx \lst@next\lst@MProcessListing\else
  1506. \ifx \lst@next\lst@ProcessFormFeed\else
  1507. \ifx \lst@next\lstenv@backslash
  1508. \let\lst@next\lstenv@BOLGobble@@
  1509. \else
  1510. \let\lst@next\lst@BOLGobble@@
  1511. \ifx #1\lst@ProcessTabulator
  1512. \advance\@tempcnta-\lst@tabsize\relax
  1513. \ifnum\@tempcnta<\z@
  1514. \lst@length-\@tempcnta \lst@PreGotoTabStop
  1515. \fi
  1516. \else
  1517. \advance\@tempcnta\m@ne
  1518. \fi
  1519. \fi \fi \fi \fi
  1520. \lst@next}
  1521. \lst@Key{name}\relax{\def\lst@intname{#1}}
  1522. \lst@AddToHookExe{PreSet}{\global\let\lst@intname\@empty}
  1523. \lst@AddToHook{PreInit}{%
  1524. \let\lst@arg\lst@intname \lst@ReplaceIn\lst@arg\lst@filenamerpl
  1525. \global\let\lst@name\lst@arg \global\let\lstname\lst@name}
  1526. \def\lst@filenamerpl{_\textunderscore $\textdollar -\textendash}
  1527. \def\l@lstlisting#1#2{\@dottedtocline{1}{1.5em}{2.3em}{#1}{#2}}
  1528. \lst@AddToHook{Init}
  1529. {\lst@ifnolol\else
  1530. \ifx\lst@@caption\@empty
  1531. \ifx\lst@caption\@empty
  1532. \ifx\lst@intname\@empty \else \def\lst@temp{ }%
  1533. \ifx\lst@intname\lst@temp \else
  1534. \addcontentsline{lol}{lstlisting}\lst@name
  1535. \fi\fi
  1536. \fi
  1537. \else
  1538. \addcontentsline{lol}{lstlisting}%
  1539. {\protect\numberline{\thelstlisting}\lst@@caption}%
  1540. \fi
  1541. \fi}
  1542. \lst@UserCommand\lstlistlistingname{Listings}
  1543. \lst@UserCommand\lstlistoflistings{\bgroup
  1544. \let\contentsname\lstlistlistingname
  1545. \let\lst@temp\@starttoc \def\@starttoc##1{\lst@temp{lol}}%
  1546. \tableofcontents \egroup}
  1547. \newcommand\lstinline[1][]{%
  1548. \leavevmode\bgroup % \hbox\bgroup --> \bgroup
  1549. \def\lst@boxpos{b}%
  1550. \lsthk@PreSet\lstset{flexiblecolumns,#1}%
  1551. \lsthk@TextStyle
  1552. \@ifnextchar\bgroup{\afterassignment\lst@InlineG \let\@let@token}%
  1553. \lstinline@}
  1554. \def\lstinline@#1{%
  1555. \lst@Init\relax
  1556. \lst@IfNextCharActive{\lst@InlineM#1}{\lst@InlineJ#1}}
  1557. \lst@AddToHook{TextStyle}{}% init
  1558. \lst@AddToHook{SelectCharTable}{\lst@inlinechars}
  1559. \global\let\lst@inlinechars\@empty
  1560. \def\lst@InlineM#1{\gdef\lst@inlinechars{%
  1561. \lst@Def{`#1}{\lst@DeInit\egroup\global\let\lst@inlinechars\@empty}%
  1562. \lst@Def{13}{\lst@DeInit\egroup \global\let\lst@inlinechars\@empty
  1563. \PackageError{Listings}{lstinline ended by EOL}\@ehc}}%
  1564. \lst@inlinechars}
  1565. \def\lst@InlineJ#1{%
  1566. \def\lst@temp##1#1{%
  1567. \let\lst@arg\@empty \lst@InsideConvert{##1}\lst@arg
  1568. \lst@DeInit\egroup}%
  1569. \lst@temp}
  1570. \def\lst@InlineG{%
  1571. \lst@Init\relax
  1572. \lst@IfNextCharActive{\lst@InlineM\}}%
  1573. {\let\lst@arg\@empty \lst@InlineGJ}}
  1574. \def\lst@InlineGJ{\futurelet\@let@token\lst@InlineGJTest}
  1575. \def\lst@InlineGJTest{%
  1576. \ifx\@let@token\egroup
  1577. \afterassignment\lst@InlineGJEnd
  1578. \expandafter\let\expandafter\@let@token
  1579. \else
  1580. \ifx\@let@token\@sptoken
  1581. \let\lst@next\lst@InlineGJReadSp
  1582. \else
  1583. \let\lst@next\lst@InlineGJRead
  1584. \fi
  1585. \expandafter\lst@next
  1586. \fi}
  1587. \def\lst@InlineGJEnd{\lst@arg\lst@DeInit\egroup}
  1588. \def\lst@InlineGJRead#1{%
  1589. \lccode`\~=`#1\lowercase{\lst@lAddTo\lst@arg~}%
  1590. \lst@InlineGJ}
  1591. \def\lst@InlineGJReadSp#1{%
  1592. \lccode`\~=`\ \lowercase{\lst@lAddTo\lst@arg~}%
  1593. \lst@InlineGJ#1}
  1594. \newcommand\lstinputlisting[2][]{%
  1595. \def\lst@set{#1}%
  1596. \IfFileExists{#2}%
  1597. {\lst@InputListing{#2}}%
  1598. {\filename@parse{#2}%
  1599. \edef\reserved@a{\noexpand\lst@MissingFileError
  1600. {\filename@area\filename@base}%
  1601. {\ifx\filename@ext\relax tex\else\filename@ext\fi}}%
  1602. \reserved@a}%
  1603. \@doendpe \@newlistfalse \ignorespaces}
  1604. \def\lst@MissingFileError#1#2{%
  1605. \typeout{^^J! Package Listings Error: File `#1.#2' not found.^^J^^J%
  1606. Type X to quit or <RETURN> to proceed,^^J%
  1607. or enter new name. (Default extension: #2)^^J}%
  1608. \message{Enter file name: }%
  1609. {\endlinechar\m@ne \global\read\m@ne to\@gtempa}%
  1610. \ifx\@gtempa\@empty \else
  1611. \def\reserved@a{x}\ifx\reserved@a\@gtempa\batchmode\@@end\fi
  1612. \def\reserved@a{X}\ifx\reserved@a\@gtempa\batchmode\@@end\fi
  1613. \filename@parse\@gtempa
  1614. \edef\filename@ext{%
  1615. \ifx\filename@ext\relax#2\else\filename@ext\fi}%
  1616. \edef\reserved@a{\noexpand\IfFileExists %
  1617. {\filename@area\filename@base.\filename@ext}%
  1618. {\noexpand\lst@InputListing %
  1619. {\filename@area\filename@base.\filename@ext}}%
  1620. {\noexpand\lst@MissingFileError
  1621. {\filename@area\filename@base}{\filename@ext}}}%
  1622. \expandafter\reserved@a %
  1623. \fi}
  1624. \let\lst@ifdraft\iffalse
  1625. \DeclareOption{draft}{\let\lst@ifdraft\iftrue}
  1626. \lst@AddToHook{PreSet}
  1627. {\lst@ifdraft
  1628. \let\lst@ifprint\iffalse
  1629. \@gobbletwo\fi\fi
  1630. \fi}
  1631. \def\lst@InputListing#1{%
  1632. \begingroup
  1633. \lsthk@PreSet \gdef\lst@intname{#1}%
  1634. \expandafter\lstset\expandafter{\lst@set}%
  1635. \lsthk@DisplayStyle
  1636. \lst@Init\relax \let\lst@gobble\z@
  1637. \lst@SkipToFirst
  1638. \lst@ifprint \def\lst@next{\input{#1}}%
  1639. \else \let\lst@next\@empty \fi
  1640. \lst@next
  1641. \lst@DeInit
  1642. \endgroup}
  1643. \def\lst@SkipToFirst{%
  1644. \ifnum \lst@lineno<\lst@firstline
  1645. \lst@BeginDropInput\lst@Pmode
  1646. \lst@Let{13}\lst@MSkipToFirst
  1647. \lst@Let{10}\lst@MSkipToFirst
  1648. \else
  1649. \expandafter\lst@BOLGobble
  1650. \fi}
  1651. \def\lst@MSkipToFirst{%
  1652. \global\advance\lst@lineno\@ne
  1653. \ifnum \lst@lineno=\lst@firstline
  1654. \lst@LeaveMode \global\lst@newlines\z@
  1655. \lsthk@InitVarsBOL
  1656. \expandafter\lst@BOLGobble
  1657. \fi}
  1658. \def\lstenv@DroppedWarning{%
  1659. \ifx\lst@dropped\@undefined\else
  1660. \PackageWarning{Listings}{Text dropped after begin of listing}%
  1661. \fi}
  1662. \let\lst@dropped\@undefined % init
  1663. \begingroup \lccode`\~=`\^^M\lowercase{%
  1664. \gdef\lstenv@Process#1{%
  1665. \ifx~#1%
  1666. \lstenv@DroppedWarning \let\lst@next\lst@SkipToFirst
  1667. \else\ifx^^J#1%
  1668. \lstenv@DroppedWarning \let\lst@next\lstenv@ProcessJ
  1669. \else
  1670. \let\lst@dropped#1\let\lst@next\lstenv@Process
  1671. \fi \fi
  1672. \lst@next}
  1673. }\endgroup
  1674. \def\lstenv@ProcessJ{%
  1675. \let\lst@arg\@empty
  1676. \ifx\@currenvir\lstenv@name
  1677. \expandafter\lstenv@ProcessJEnv
  1678. \else
  1679. \expandafter\def\expandafter\lst@temp\expandafter##1%
  1680. \csname end\lstenv@name\endcsname
  1681. {\lst@InsideConvert{##1}\lstenv@ProcessJ@}%
  1682. \expandafter\lst@temp
  1683. \fi}
  1684. \begingroup \lccode`\~=`\\\lowercase{%
  1685. \gdef\lstenv@ProcessJ@{%
  1686. \lst@lExtend\lst@arg
  1687. {\expandafter\ \expandafter~\lstenv@endstring}%
  1688. \catcode10=\active \lst@Let{10}\lst@MProcessListing
  1689. \lst@SkipToFirst \lst@arg}
  1690. }\endgroup
  1691. \def\lstenv@ProcessJEnv#1\end#2{\def\lst@temp{#2}%
  1692. \ifx\lstenv@name\lst@temp
  1693. \lst@InsideConvert{#1}%
  1694. \expandafter\lstenv@ProcessJ@
  1695. \else
  1696. \lst@InsideConvert{#1\\end\{#2\}}%
  1697. \expandafter\lstenv@ProcessJEnv
  1698. \fi}
  1699. \def\lstenv@backslash{%
  1700. \lst@IfNextChars\lstenv@endstring
  1701. {\lstenv@End}%
  1702. {\expandafter\lsts@backslash \lst@eaten}}%
  1703. \def\lstenv@End{%
  1704. \ifx\@currenvir\lstenv@name
  1705. \edef\lst@next{\noexpand\end{\lstenv@name}}%
  1706. \else
  1707. \def\lst@next{\csname end\lstenv@name\endcsname}%
  1708. \fi
  1709. \lst@next}
  1710. \lst@UserCommand\lstnewenvironment#1#2#{%
  1711. \@ifundefined{#1}%
  1712. {\let\lst@arg\@empty
  1713. \lst@XConvert{#1}\@nil
  1714. \expandafter\lstnewenvironment@\lst@arg{#1}{#2}}%
  1715. {\PackageError{Listings}{Environment `#1' already defined}\@eha
  1716. \@gobbletwo}}
  1717. \def\@tempa#1#2#3{%
  1718. \gdef\lstnewenvironment@##1##2##3##4##5{%
  1719. \begingroup
  1720. \global\@namedef{end##2}{\lstenv@Error{##2}}%
  1721. \global\@namedef{##2}{\def\lstenv@name{##2}%
  1722. \begingroup \catcode\active=\active \csname##2@\endcsname}%
  1723. \let\l@ngrel@x\global
  1724. \let\@xargdef\lstenv@xargdef
  1725. \expandafter\new@command\csname##2@\endcsname##3%
  1726. {\lsthk@PreSet ##4%
  1727. \ifx\@currenvir\lstenv@name
  1728. \def\lstenv@endstring{#1#2##1#3}%
  1729. \else
  1730. \def\lstenv@endstring{#1##1}%
  1731. \fi
  1732. \@namedef{end##2}{\lst@DeInit ##5\endgroup
  1733. \@doendpe \@ignoretrue}%
  1734. \lsthk@DisplayStyle
  1735. \lst@Init\lstenv@backslash
  1736. \let\lst@EndProcessListing\lstenv@SkipToEnd
  1737. \lst@ifprint
  1738. \expandafter\expandafter\expandafter\lstenv@Process
  1739. \else
  1740. \expandafter\lstenv@SkipToEnd
  1741. \fi
  1742. \lst@insertargs}%
  1743. \endgroup}%
  1744. }
  1745. \let\lst@arg\@empty \lst@XConvert{end}\{\}\@nil
  1746. \expandafter\@tempa\lst@arg
  1747. \let\lst@insertargs\@empty
  1748. \def\lstenv@xargdef#1{
  1749. \expandafter\lstenv@xargdef@\csname\string#1\endcsname#1}
  1750. \def\lstenv@xargdef@#1#2[#3][#4]#5{%
  1751. \@ifdefinable#2{%
  1752. \gdef#2{%
  1753. \ifx\protect\@typeset@protect
  1754. \expandafter\lstenv@testopt
  1755. \else
  1756. \@x@protect#2%
  1757. \fi
  1758. #1%
  1759. {#4}}%
  1760. \@yargdef
  1761. #1%
  1762. \tw@
  1763. {#3}%
  1764. {#5}}}
  1765. \long\def\lstenv@testopt#1#2{%
  1766. \@ifnextchar[{\catcode\active5\relax \lstenv@testopt@#1}%
  1767. {#1[{#2}]}}
  1768. \def\lstenv@testopt@#1[#2]{%
  1769. \catcode\active\active
  1770. #1[#2]}
  1771. \begingroup \lccode`\~=`\\\lowercase{%
  1772. \gdef\lstenv@SkipToEnd{%
  1773. \long\expandafter\def\expandafter\lst@temp\expandafter##\expandafter
  1774. 1\expandafter~\lstenv@endstring{\lstenv@End}%
  1775. \lst@temp}
  1776. }\endgroup
  1777. \def\lstenv@Error#1{\PackageError{Listings}{Extra \string\end#1}%
  1778. {I'm ignoring this, since I wasn't doing a \csname#1\endcsname.}}
  1779. \begingroup \lccode`\~=`\^^M\lowercase{%
  1780. \gdef\lst@TestEOLChar#1{%
  1781. \def\lst@insertargs{#1}%
  1782. \ifx ~#1\@empty \else
  1783. \ifx^^J#1\@empty \else
  1784. \global\let\lst@intname\lst@insertargs
  1785. \let\lst@insertargs\@empty
  1786. \fi \fi}
  1787. }\endgroup
  1788. \lstnewenvironment{lstlisting}[2][]
  1789. {\lst@TestEOLChar{#2}%
  1790. \lstset{#1}%
  1791. \csname\@lst @SetFirstNumber\endcsname}
  1792. {\csname\@lst @SaveFirstNumber\endcsname}
  1793. \lst@Key{fancyvrb}\relax[t]{%
  1794. \lstKV@SetIf{#1}\lst@iffancyvrb
  1795. \lstFV@fancyvrb}
  1796. \ifx\lstFV@fancyvrb\@undefined
  1797. \gdef\lstFV@fancyvrb{\lst@RequireAspects{fancyvrb}\lstFV@fancyvrb}
  1798. \fi
  1799. \@ifundefined{ocp}{}
  1800. {\lst@AddToHook{OutputBox}%
  1801. {\let\lst@ProcessLetter\@firstofone
  1802. \let\lst@ProcessDigit\@firstofone
  1803. \let\lst@ProcessOther\@firstofone}}
  1804. \DeclareOption*{\expandafter\lst@ProcessOption\CurrentOption\relax}
  1805. \def\lst@ProcessOption#1#2\relax{%
  1806. \ifx #1!%
  1807. \lst@DeleteKeysIn\lst@loadaspects{#2}%
  1808. \else
  1809. \lst@lAddTo\lst@loadaspects{,#1#2}%
  1810. \fi}
  1811. \@ifundefined{lst@loadaspects}
  1812. {\def\lst@loadaspects{strings,comments,escape,style,language,%
  1813. keywords,labels,lineshape,frames,emph,index}%
  1814. }{}
  1815. \InputIfFileExists{lstpatch.sty}{}{}
  1816. \let\lst@ifsavemem\iffalse
  1817. \DeclareOption{savemem}{\let\lst@ifsavemem\iftrue}
  1818. \DeclareOption{noaspects}{\let\lst@loadaspects\@empty}
  1819. \ProcessOptions
  1820. \lst@RequireAspects\lst@loadaspects
  1821. \let\lst@loadaspects\@empty
  1822. \lst@UseHook{SetStyle}\lst@UseHook{EmptyStyle}
  1823. \lst@UseHook{SetLanguage}\lst@UseHook{EmptyLanguage}
  1824. \InputIfFileExists{listings.cfg}{}{}
  1825. \InputIfFileExists{lstlocal.cfg}{}{}
  1826. \endinput
  1827. %%
  1828. %% End of file `listings.sty'.